Witam!
Jak należy ustawić MCU Clock Frequency w eclipse jeżeli w częstotliwość jest np. 4 razy zmieniana za pomocą clock_prescale_set()?
EDIT:
Mam jeszcze pytanie co do układu BOD. Dam załóżmy na vcc i gnd kondensator 1000uF. Napięcie na nim w końcu kiedyś po wyłączeniu zasilania spadnie poniżej 1.8 V i może on nieprawidłowo działać. Jak zabezpieczyć się przed taką sytuacją bez układu BOD?
Idea jest taka:
Obniżam częstotliwość za pomocą ckdivX wlączam watchdoga z przerwaniami co 1s bez resetu, potem tryb power down, robie taki prosty licznik w watchdogu który jeżeli zliczy np. 500 s to ustawia stan wysoki na pinie pb0, który jest podĺaczony do int0 a to wybudza atmege. Jeżeli już atmega jest w. stanie aktywnym to wyłączam ckdiv w celu zwiększenia wydajności. Potem pomiar adc i obliczenia, zapis i spowrotem cykl się powtarza.
Dodano po 3 [minuty]:
Cytat:
wyłączyć procesor.
Nie rozumiem przecież nie ma komendy typu shutdown() i nie widze innego sposobu jak gwałtowny spadek napięcia do 0 przez wyłączenie przyciskiem?
Jak należy ustawić MCU Clock Frequency w eclipse jeżeli w częstotliwość jest np. 4 razy zmieniana za pomocą clock_prescale_set()?
Eclipse wykorzystuje wiedzę z MCU Clock Frequency zapewne tylko do makrt lub funkcji, w których do obliczeń (na etapie przygotowania kodu programu do kompilacji) niezbędna jest znajomość F_CPU, a są nimi opóźnienia z nagłówka delay.h i może jeszcze jakieś.
Niestety na tym etapie nie wiadomo z jaką w danym momencie częstotliwością pracować będzie mikrokontroler skoro przełączasz go w trakcie jego pracy. Dlatego też musisz sam zadbać np. o prawidłowe odmierzanie opóźnień w zależności od aktualnej częstotliwości taktowania mikrokontrolera. Dlatego też praca na różnych częstotliwościach, bardzo często znacząco wpływa na sposób pisania programu.
Jest jednak wyjątek: jest nim sytuacja, w której niestandardowa częstotliwość taktowania jest włączana tylko w sytuacjach, w których nie stosujesz liczonych za pomocą makr opóźnień, itp. W takiej sytuacji w opcjach projektu ustawiasz taką częstotliwość F_CPU z jaką faktycznie będzie pracował mikrokontroler, przy odmierzaniu opóźnień, itp.
@dondu Czyli przykładowo jeżeli F_CPU wynosi 16 MHz i następuje podzielenie częstotliwości 8 razy to wystarczy zamiast _delay_ms(100) dać _delay_ms(100*8)?
Ja to rozwiązuję tak, że definiuję sobie funkcję, którą wklejam zamiast funkcji opóźnień. Funkcja ta ma na wejściu jako parametr ilość milisekund. Funkcja rozpoznaje częstotliwość z jaką pracuje mikrokontroler poprzez sprawdzenie ustawień odpowiednich rejestrów (dla danego projektu) lub jakiejś zmiennej globalnej, która zawiera tę informację (to mniej bezpieczne rozwiązanie).
Następnie znając już częstotliwość zegara z jakim pracuje mikroontroler oraz opóźnienie jakie żądane jest poprzez parametr funkcji wykonuje ona odpowiednie opóźnienie za pomocą timera lub standardowych funkcji delay.h wykorzystując np. pętlę lub switch ... case, lub if else if ... lub po prostu z góry ustalone np. _delay_ms(100) lub _delay_ms(800).
Jednakże może należy (Ty decydujesz) zastanowić się nad uśpieniem mikrokontrolera do odpowiedniego trybu i na określony czas odmierzany jakimś timerem?
Opisz może co właściwie projektujesz i jakie cele chcesz osiągnąć, bo projekty zasilane z baterii wykonuje się znacząco inaczej niż te zasilane z sieci.
Projektuje stacje meteorologiczną ,która ma wysyłać wszystkie pomiary za pomocą modułu wifi( http://botland.com.pl/komunikacja/2972-modul-wifi-esp8266-80211-bgn-24ghz-.html ) do internetu na serwer. Wysyłanie ma być jak najrzadziej żeby za szybko baterie się nie wyładowały(ten moduł WiFi bierze aż 300 mA). Pomiary wykonywane mają być co 30 min a czasie bezczynności mikro kontroler ma być w power down. Zasilanie ma być bateria li-ion z telefonu i stabilizator LDO(zastanawiałem się też nad dzielnikiem napięcia do modułu WiFi(a Atmege bezpośrednio do baterii) ale chyba to 300mA to za dużo). Czujniki mają być cyfrowe ze względu na to ,że ADC zużywa prąd w przypadku czujników analogowych.
ATMegą się aż tak bardzo nie przejmuj.
Zwykłe usypianie wystarczy, takim zaawansowanym przełączaniem częstotliwości nie wiele ugrasz, a możesz rozjechać program
Ustaw ją na sztywno na np 8MHz, lub nawet 1MHz (1 może wystarczy).
Zainteresuj się lepiej jak uśpić moduł WiFi i czujniki.
U mnie ATMega bierze znikome ilości prądu w stosunku do DS18B20 i modułu na nRF24L01, nawet w trybie uśpienia radia.
Po za tym mówisz o ogniwie lit-ion, i o pracy do prawie 1.8v?!
Zabijesz zaraz to ogniwo, ono nie może być tak głęboko rozładowywane!
ATMegą się aż tak bardzo nie przejmuj.
Zwykłe usypianie wystarczy, takim zaawansowanym przełączaniem częstotliwości nie wiele ugrasz, a możesz rozjechać program
Ustaw ją na sztywno na np 8MHz, lub nawet 1MHz (1 może wystarczy).
Zainteresuj się lepiej jak uśpić moduł WiFi i czujniki.
U mnie ATMega bierze znikome ilości prądu w stosunku do DS18B20 i modułu na nRF24L01, nawet w trybie uśpienia radia.
Po za tym mówisz o ogniwie lit-ion, i o pracy do prawie 1.8v?!
Zabijesz zaraz to ogniwo, ono nie może być tak głęboko rozładowywane!
Ziarnko do ziarnka i ...
Tego typu aplikacje należy rozpatrywać pod kątem każdej możliwej oszczędności mocy jak i zmniejszania prądu wszędzie, gdzie tylko się da.
Z reguły oznacza to oprócz usypiania do możliwie najgłębszego snu także spowolnienie zegara do możliwie najmniejszej częstotliwości, zmniejszeniu napięcia zasilania do możliwie najmniejszej wartości.
W przypadku potrzeby zwiększenia napięcia robi się to na chwilę wykorzystując np. odpowiednie przetwornice do zastosowań bateryjnych. W przypadku potrzeby zwiększenia prędkości zegara wykonuje się to tylko na chwilę w której taka czynność jest niezbędna.
Wszelkie zbędne moduły usypia się, a nawet odcina się im zasilanie za pomocą MOSFET-ów.
Dobiera się oczywiście odpowiednie grupy mikrokontrolerów np. XLP Microchipa lub PicoPower Atmela.
Dzięki kumulacji oszczędności aplikacje pracują znacznie dłużej niż konkurencyjne projekty, choć oczywiście wymagają przez to nieco więcej pracy od strony oprogramowania, a czasami nieco więcej elementów na PCB.
Oprócz tego należy tak projektować schemat, by nie było w nim zbędnych elementów biernych, które wprowadzać będą upływność, lub kombinujemy odcinając im masę za pomocą pinu mikrokontrolera ... itd.
No i rodzaj źródła zasilania (baterii) także jest baaaaaardzo istotne.
Ziarnko do ziarnka, owszem.
Jednak najpierw powinno się wyeliminować główne pożeracze energii, czyli zająć się modułem WiFi, i zasilaniem czujników.
Bo co koledze da zejście z paruset uA na procesorze, skoro moduł wireless pobiera 300mA?
Czujniki też nie wiadomo jakie, ale z 1-3mA mogą brać gdy są w trybie czuwania.
O ile z czujnikami i odcinaniem ich zasilania powinno być prosto, o tyle z ponowną inicjalizacją modułów wireless bywają czasem problemy.
Ja tworzę podobny projekt i używam paluszków AA, na 2xAA dochodzę już do ponad 2ch miesięcy działania. Aktualnie testuję wersję z 3xAA bo przy ok 2.6v moje DS18B20 już przestają poprawnie podawać temperaturę, więc 3xAA powinny się głębiej rozładować zanim osiągną poziom 2.6V.
Autor musi musi nauczyć się usypiać moduł WiFi, lub najlepiej całkowicie go wyłączać w czasie między odczytami. Bo z takim poborem to bateria na ile mu wystarczy? Na dzień, 2 dni?
Niech dojdzie choć do tygodni, to potem można się zacząć bawić w większą optymalizację.
Ziarnko do ziarnka, owszem.
Jednak najpierw powinno się wyeliminować główne pożeracze energii, ...
...
Niech dojdzie choć do tygodni, to potem można się zacząć bawić w większą optymalizację.
Nie, należy od razu projektować zupełnie inaczej całość i o tym napisałem powyżej.
Karaczan napisał:
Ja tworzę podobny projekt i używam paluszków AA, na 2xAA dochodzę już do ponad 2ch miesięcy działania.
2 miesiące nie są żadnym wyznacznikiem jeśli nie znamy projektu.
Równie dobrze może to być niebywały sukces jak i kompletna porażka.
Ani sukces ani porażka. Projekt początkującego.
DS18B20+DHT11+nRF24L01. Odczyty co ok 30sek, pobór nadawania ok 23mA. Spoczynku miernik pokazuje ok 1mA (nie mam lepszego miernika).
Kiedyś jak skończę pewnie zaprezentuję, ale nie róbmy offtopu.
A co do projektowania od początku, OK.
Ale niech autor nauczy się usypiać/odłączać czujniki jak i moduł WiFi najpierw bo tu jest głównie pies pogrzebany.
Jak i zupełnie nie potrzebny pojemy kondensator który swoją upławność posiada, do tego chęć rozładowywania ogniwa Lit-Ion do poziomu 1.8V. Przynajmniej tak wynika z postów.
Więc przepraszam, też jestem początkującym, ale to są poważne błędy już w samej koncepcji urządzenia.
Z takimi projektami jest jak z konstruowaniem samochodu rajdowego. Można wziąć seryjny i przerabiać, albo projektować od podstaw. Rezultaty obu podejść są oczywiste. Dlatego właśnie ja wskazuję właściwą drogę - projektowanie od razu pod kątem zasilania z baterii, bo to znacząco inne podejście do projektu niż zasilany z nieograniczonego źródła.
Po za tym mówisz o ogniwie lit-ion, i o pracy do prawie 1.8v?!
Zabijesz zaraz to ogniwo, ono nie może być tak głęboko rozładowywane!
Nie. Testowałem jak działa układ bod na zasilaniu 5 V(z USB) z kondensatorem 1000uF. A do li-ion to miałem robić kontrole napięcia przez ADC.
A jeszcze mam pytanie: załóżmy mam rozładowaną baterie li-ion, jak wyłączyć Atmege programowo żeby nie brała ani jednego uA ,żeby się akumulator nie popsuł.
A jeszcze mam pytanie: załóżmy mam rozładowaną baterie li-ion, jak wyłączyć Atmege programowo żeby nie brała ani jednego uA ,żeby się akumulator nie popsuł.
Nie da się - należy odciąć jej zasilanie. Można natomiast uśpić ją do Power Down - jeśli to Ci wystarczy.
Od tego są zewnętrzne układy np. przetwornice do zastosowań bateryjnych, które nota bene także będą nieco pobierać prądu. Można także kombinować z układami samo podtrzymującymi zasilanie na tranzystorach MOSFET.
✨ Dyskusja dotyczy ustawienia częstotliwości zegara mikrokontrolera ATmega 328P w środowisku Eclipse oraz problemów związanych z zasilaniem i oszczędnością energii. Użytkownicy omawiają, jak zmiana częstotliwości za pomocą funkcji clock_prescale_set() wpływa na obliczenia, takie jak opóźnienia. Wskazują na konieczność dostosowania funkcji opóźnień do aktualnej częstotliwości oraz proponują różne metody oszczędzania energii, w tym usypianie mikrokontrolera i odcinanie zasilania modułów. Pojawia się również temat zabezpieczeń przed zbyt niskim napięciem zasilania, w tym wykorzystanie zewnętrznych układów do monitorowania napięcia. Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.