Strona 5 z 7

: czwartek 24 sty 2013, 16:11
autor: ElSor
Spróbuj może ręcznie wyczyścić INTF0 w GIFR. Ja miałem przeboje z watchdogiem i flagą resetu od watchdoga (działanie niemal identyczne jak u Ciebie).
INTF0: External Interrupt Flag 0
When an edge or logic change on the INT0 pin triggers an interrupt request, INTF0 becomes set
(one). If the I-bit in SREG and the INT0 bit in GIMSK are set (one), the MCU will jump to the corresponding
Interrupt Vector. The flag is cleared when the interrupt routine is executed.
Alternatively, the flag can be cleared by writing a logical one to it. This flag is always cleared
when INT0 is configured as a level interrupt.

: piątek 25 sty 2013, 01:27
autor: MichalKob
Jeśli masz pobór prądu 180uA w trybie powerdown, to.. dużo! W AVRkach jest sporo peryferiów, które warto powyłączać przed uśpieniem rdzenia.
Największe efekty daje wyłączenie ADC i komparatora analogowego. Można też wyłączyć bufory wejściowe, pull-up'y, brown-out detector no i timer watchdoga (to akurat chyba nie u ciebie). Ostatnio w urządzeniu zasilanym z 3V dzięki temu uzyskałem na Atmedze8V 0.15uA, a nadal można ją było wybudzić mikroswitchem na INT0. Inne urządzonko na Attiny85 z pracującym watchdogiem pobierało 35uA, ale ciężko mi powiedzieć czy nie miał w tym sporego udziału prąd upływu zasilającego je superkondensatora. Także jeszcze sporo można wycisnąć, na pewno pobór wyjdzie mniejszy niż samorozładowanie jakiejkolwiek baterii!

: sobota 26 sty 2013, 20:49
autor: pier
Znalazłem babola w moim programie :lol:
Kiedy program wyłącza latarkę i usypia procesor, przerwanie INT0 jest już aktywne a jeśli w tym czasie jeszcze nie zwolnię przycisku to zaraz po powerdown wykonuje się przerwanie i program idzie w krzaki.
Jeśli od razu po wyłączeniu puszczę przycisk to wszystko jest ok.
Jutro modyfikacja programu :lol:

: sobota 26 sty 2013, 21:08
autor: Pyra
Witam
Dlatego zaleca się wybudzać program zboczem, bo wtedy nie zareaguje na trzymany przycisk, a tylko na wciśnięcie. Dopiero później możesz ewentualnie sprawdzać czas trzymania przycisku i ponownie uśpić procek lub wejść w pętlę główną.

Pozdrawiam

: sobota 26 sty 2013, 22:11
autor: pier
Tylko że procesor nie reaguje na zbocze i nie wiem dlaczego tak jest.

: sobota 26 sty 2013, 22:19
autor: Pyra
Witam
A podciągnąłeś wejście do plusa?

Pozdrawiam

: sobota 26 sty 2013, 23:18
autor: pier
Tak

: sobota 26 sty 2013, 23:27
autor: ElSor
Przecież w nocie producent napisał, że wybudzić zboczem nie można tylko poziomem.

: niedziela 27 sty 2013, 00:41
autor: Pyra
Witam
No fakt, przy tabelce jest taki odnośnik, ale już w opisie pkt. 7.1.3
an external level interrupt on
INT0 or a pin change interrupt can wake up the MCU
a już w pkt. 9.2.1
A low level interrupt on INT0 is detected asynchronously. This implies that this interrupt can be
used for waking the part also from sleep modes other than Idle mode. The I/O clock is halted in
all sleep modes except Idle mode.
Jednak muszę uważniej czytać... :oops:
W takim razie musisz wykryć puszczenie przycisku, i dopiero wtedy wprowadzić procka w uśpienie.

Pozdrawiam

: niedziela 27 sty 2013, 09:07
autor: pier
Pyra pisze:Witam
No fakt, przy tabelce jest taki odnośnik, ale już w opisie pkt. 7.1.3
an external level interrupt on
INT0 or a pin change interrupt can wake up the MCU
a już w pkt. 9.2.1
A low level interrupt on INT0 is detected asynchronously. This implies that this interrupt can be
used for waking the part also from sleep modes other than Idle mode. The I/O clock is halted in
all sleep modes except Idle mode.
Jednak muszę uważniej czytać... :oops:
W takim razie musisz wykryć puszczenie przycisku, i dopiero wtedy wprowadzić procka w uśpienie.

Pozdrawiam
To trudne nie będzie. W procedurze wyłączenia dam przed "enable INT0" "bitwait switch , set" i dopóki nie zwolnię przycisku to przerwanie się nie uaktywni i procek nie pójdzie spać.

: wtorek 29 sty 2013, 20:53
autor: Pyra
Witam
pier pisze:Powerdown występuje po podłączeniu zasilania bo pobierany prąd wynosi wtedy jakieś 180uA.
Właśnie z ciekawości pomierzyłem prąd w trybie Power Down dla ATtiny13 i pomiar wykazał 0,2µA, więc oś u Ciebie jeszcze pracuje i pobiera prąd.

Pozdrawiam

: wtorek 29 sty 2013, 21:12
autor: pier
Na razie nie drąże tematu bo robię USBASP z optoizolacją.
Swoją drogą pomiar tak małych prądów może być obarczony sporym błędem, zależy też od sprzętu pomiarowego.

: środa 27 lut 2013, 22:48
autor: Pyra
Witam
Wydaje mi się, ze udało mi się uruchomić odczyt temperatury z wewnętrznego czujnika w ATtiny25.
W dokumentacji jest napisane, że należy ustawić Vref 1,1V, oraz, że czujnik temperatury jest podpięty pod wejście ADC4. Potem w tekście doczytałem, że należy zmienić bity 0-3 w rejestrze ADMUX na "1111". Cały numer polega na tym, że po wpisaniu odpowiedniego stanu do rejestru ADMUX i potem wywołaniu Getadc (4) bity zmieniały się natychmiast na "0100".
W związku z tym, że bity MUX0-3 określają numer wejścia ADC, tak więc wpisałem:
Getadc(15) i działa.
Pomiar nie jest dokładny, katalog określa na ±10°C, ale do pewnych zastosowań wystarczy.

Pozdrawiam

: środa 27 lut 2013, 23:06
autor: greg
Pyra, znajdź chwilę i przesiądź się na C, dobrze Ci radzę z całego serca :) Wtedy możnaby pokonwersować o oprogramowaniu, coś podpowiedzieć itp. Jak widzę komendę "Getadc(15)" to w zasadzie "wybałuszam gały" ;)

Termometr wewnętrzny działa bez problemu, nawet jest w miarę dokładny w punkcie kalibracji. Oczywiście nie w całym zakresie temperatur, to wymaga minimum kalibracji skrajnej 2 punktowej.

: środa 27 lut 2013, 23:18
autor: ElSor
No w bascomie jest Getadc(15) i rzeczywiście działa, też to kiedyś sprawdzałem. Odczyt mogłeś robić z rejestrów a nie przez Getadc skoro i resztę ustawiałeś rejestrami. Od tego już jest tylko krok do C ;)