Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 lut 2025, o 17:46


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 3 mar 2013, o 14:00 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

Witam

Otóż chciałem przetestować jak picoPower od Atmela sprawdza się w praktyce na przykładzie tiny48.

Wyłączyłem nieużywane moduły wg. datasheet, ustawiłem usypianie procesora. No i zonk. Mikrokontroler pobiera aż 6mA!!! Co jest wartością ogromną ponieważ producent w trybie IDLE deklaruje pobór mocy (przy moim Vcc=5V) na poziomie ~0,02mA.
Obrazek

Więc widocznie ja coś konkretnie chrzanie w programie. A dlaczego IDLE? Ponieważ potrzebuje jednego Timera0.

Kod programu:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Nic nie dało załączenie opcji sleep_enable() w while(1) (jak to robił Mirek w swojej książce) - bo tak de facto ona tylko załącza bit SE w rejestrze SMCR, co i tak robię ręcznie.

Prąd mierze w gałęzi Vcc i AVcc, więc jest to cały prąd jaki spływa to AVR.

Macie może jakiś pomysł?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 mar 2013, o 14:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 lut 2012
Posty: 243
Lokalizacja: wlkp
Pomógł: 2

Nie analizuję na razie całości, ale strzelam, że tutaj może być pierwszy błąd:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jeżeli miałeś na myśli wykasowanie obu bitów, to powinieneś zrobić w ten sposób:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 mar 2013, o 14:59 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Nie usypiasz procesora. Sleep Enable tylko zezwala na uśpienie, które jest wykonywane asemblerową instrukcją sleep, której nie widzę lub odpowiednią funkcją-makrem sleep_cpu(). Można też zamiast sleep_enable() i sleep_cpu() użyć połączenia tego w jedno w postaci sleep_mode(). BOD jest domyślnie wyłączony chyba że przestawisz fusebity i aby go wyłączyć to nie wystarczy ustawić jeden bit jak to ma miejsce przy wyłączeniu innych peryferii. Potrzebna jest sekwencja rozkazów i zaraz po niej (3 cykle zegara) musi zostać uśpiony procesor inaczej BOD pozostanie włączony.
Przykłady są pokazane tutaj. Zarówno z usypianiem układu BOD jak i prostsze złożone ze set_sleep_mode i sleep_mode.
http://nongnu.org/avr-libc/user-manual/ ... sleep.html

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 mar 2013, o 17:38 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

Wyrzuciłem to wyłączenie BOD bo faktycznie w fusach jest wyłączony, oraz obsługę przerwania, żeby nie zaciemniać kodu.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Pobór prądu nic się nie zmienił. To dość ciekawe bo i tak ten procek w trybie Active (bez uśpienia) wg. datasheet powinien pobierać o wiele mniej prądu (~0,1mA) . A na chwile obecną pobiera koło 6mA.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 mar 2013, o 18:39 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Jeśli masz taktowanie 128kHz to prąd jest za duży nawet jak dla stanu aktywnego (0,1mA). Podciągnij wszystkie piny do plusa i odłącz programator na czas pomiaru.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 mar 2013, o 22:52 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

Ustawiłem porty jako wyjścia i wystawiłem im zero. Przy uśpieniu procka i wyłączeniu mu wszystkich modułów z PRR (Power Reduction Register), otrzymałem katalogowe 0,018mA.

Przy uruchomionym Timer0, pobór prądu wzrósł do 0,085mA.

Zastanawia mnie tylko jedno, tak duży pobór prądu był gdy piny były w stanie HiZ. Przecież one są fizycznie odłączone od procka w tym stanie, więc co powodowało generowanie tak dużego obciążenia?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 mar 2013, o 16:30 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Nie są odłączone. Nieustalony stan na wejściach pływających wywołuje ciągłe przełączanie bramki i pobór mocy. To układ CMOS. Dopiero w trybie PowerDown nieużywane wejścia są ściągnięte do masy i zegar jest wyłączony.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO