logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

atmega 328p - MCU Clock Frequency a programowe dzielenie częstotliwości

09 Gru 2014 21:19 1842 18
  • #1 14207613
    Konto nie istnieje
    Konto nie istnieje  
  • #2 14208198
    piotrva
    VIP Zasłużony dla elektroda
    Posty: 6409
    Pomógł: 625
    Ocena: 735
    To zależy od tego co robisz w programie, jak wykorzystujesz F_CPU w obliczeniach (np. baudrate itp.).

    Pokaż program lub ideę działania oraz pokaż konieczność zmiany częstotliwości.

    Jak zabezpieczyć się bez bod - stosując sprzętowy BOD lub mierząc napięcie na pinie za pomocą ADC i z odpowiednim marginesem błędu wyłączyć procesor.
  • #3 14209682
    Konto nie istnieje
    Konto nie istnieje  
  • #4 14209719
    excray
    Poziom 41  
    Posty: 5500
    Pomógł: 739
    Ocena: 656
    Po co ta kombinacja z INT0? Skoro watchdog wybudza Ci procesor?
  • #5 14209722
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    goldcap napisał:
    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.
  • #6 14210488
    Konto nie istnieje
    Konto nie istnieje  
  • #7 14210635
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    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).
  • #8 14210743
    Konto nie istnieje
    Konto nie istnieje  
  • #9 14210789
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    Zmniejszenie częstotliwości taktowania mikrokontrolera zmniejsza zużycie prądu: http://mikrokontrolery.blogspot.com/2011/01/b...t.com/2011/03/avr-fusebity-zmiana-zegara.html
    Stąd odpowiedź na Twoje pytanie jest oczywiście twierdząca.

    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.
  • #10 14210988
    Konto nie istnieje
    Konto nie istnieje  
  • #11 14225409
    Karaczan
    Poziom 42  
    Posty: 6733
    Pomógł: 868
    Ocena: 1120
    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!
  • #12 14225625
    piotrva
    VIP Zasłużony dla elektroda
    Posty: 6409
    Pomógł: 625
    Ocena: 735
    I jaki dzielnik napięcia?
  • #13 14225646
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    Karaczan napisał:
    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.

    http://mikrokontrolery.blogspot.com/2011/01/bateria-zasila-mikrokontroler-czesc-1.html
    http://mikrokontrolery.blogspot.com/2011/04/S...PIP-elektroniczny-dreczyciel-spis-tresci.html

    Powtórzę więc: Ziarnko do ziarnka i ... konkurencja zostaje w tyle :)
  • #14 14226492
    Karaczan
    Poziom 42  
    Posty: 6733
    Pomógł: 868
    Ocena: 1120
    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ę.
  • #15 14226547
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    Karaczan napisał:
    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.
  • #16 14226807
    Karaczan
    Poziom 42  
    Posty: 6733
    Pomógł: 868
    Ocena: 1120
    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.
  • #17 14226849
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    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.

    Ok, temat wyczerpany pod tym kątem :)
  • #18 14242404
    Konto nie istnieje
    Konto nie istnieje  
  • #19 14244592
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    goldcap napisał:
    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.

Podsumowanie tematu

✨ 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.
REKLAMA