Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

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

09 Gru 2014 21:19 1326 18
  • #1 09 Gru 2014 21:19
    2443453
    Użytkownik usunął konto  
  • #2 10 Gru 2014 00:00
    piotrva
    Moderator na urlopie...

    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.

    0
  • #3 10 Gru 2014 16:33
    2443453
    Użytkownik usunął konto  
  • #4 10 Gru 2014 16:40
    excray
    Poziom 39  

    Po co ta kombinacja z INT0? Skoro watchdog wybudza Ci procesor?

    0
  • #5 10 Gru 2014 16:40
    dondu
    Moderator Mikrokontrolery Projektowanie

    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.

    0
  • #6 10 Gru 2014 20:07
    2443453
    Użytkownik usunął konto  
  • #7 10 Gru 2014 20:36
    dondu
    Moderator Mikrokontrolery Projektowanie

    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).

    0
  • #8 10 Gru 2014 20:54
    2443453
    Użytkownik usunął konto  
  • #9 10 Gru 2014 21:04
    dondu
    Moderator Mikrokontrolery Projektowanie

    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.

    0
  • #10 10 Gru 2014 21:49
    2443453
    Użytkownik usunął konto  
  • #11 15 Gru 2014 16:53
    Karaczan
    Poziom 39  

    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!

    0
  • #13 15 Gru 2014 18:10
    dondu
    Moderator Mikrokontrolery Projektowanie

    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 :)

    0
  • #14 15 Gru 2014 21:52
    Karaczan
    Poziom 39  

    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ę.

    0
  • #15 15 Gru 2014 22:02
    dondu
    Moderator Mikrokontrolery Projektowanie

    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.

    0
  • #16 15 Gru 2014 23:15
    Karaczan
    Poziom 39  

    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.

    0
  • #17 15 Gru 2014 23:31
    dondu
    Moderator Mikrokontrolery Projektowanie

    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 :)

    0
  • #18 21 Gru 2014 13:35
    2443453
    Użytkownik usunął konto  
  • #19 21 Gru 2014 23:36
    dondu
    Moderator Mikrokontrolery Projektowanie

    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.

    0