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.
ATtiny sztuki i sztuczki
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).
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!
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!
Znalazłem babola w moim programie
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
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
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
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
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Piszmy po polsku, wszak jesteśmy Polakami.
Witam
No fakt, przy tabelce jest taki odnośnik, ale już w opisie pkt. 7.1.3
W takim razie musisz wykryć puszczenie przycisku, i dopiero wtedy wprowadzić procka w uśpienie.
Pozdrawiam
No fakt, przy tabelce jest taki odnośnik, ale już w opisie pkt. 7.1.3
a już w pkt. 9.2.1an external level interrupt on
INT0 or a pin change interrupt can wake up the MCU
Jednak muszę uważniej czytać...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.
W takim razie musisz wykryć puszczenie przycisku, i dopiero wtedy wprowadzić procka w uśpienie.
Pozdrawiam
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Piszmy po polsku, wszak jesteśmy Polakami.
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ć.Pyra pisze:Witam
No fakt, przy tabelce jest taki odnośnik, ale już w opisie pkt. 7.1.3a już w pkt. 9.2.1an external level interrupt on
INT0 or a pin change interrupt can wake up the MCUJednak muszę uważniej czytać...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.
W takim razie musisz wykryć puszczenie przycisku, i dopiero wtedy wprowadzić procka w uśpienie.
Pozdrawiam
Witam
Pozdrawiam
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.pier pisze:Powerdown występuje po podłączeniu zasilania bo pobierany prąd wynosi wtedy jakieś 180uA.
Pozdrawiam
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Piszmy po polsku, wszak jesteśmy Polakami.
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
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
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Piszmy po polsku, wszak jesteśmy Polakami.
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.
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.
Sterownik extended v3.5 HE <klik>
Instrukcje sterowników w PDF <klik>
kontakt: info(at)krypton(dot)pl
(podstawić @ i . w stosowne miejsca)
Instrukcje sterowników w PDF <klik>
kontakt: info(at)krypton(dot)pl
(podstawić @ i . w stosowne miejsca)