ATtiny sztuki i sztuczki

Czyli wszystko co potrzebne prawdziwemu DIY'owi;) Porady, pytania i opisy używanego przez nas sprzętu.
Awatar użytkownika
ElSor
Site Admin
Posty: 5041
Rejestracja: niedziela 13 wrz 2009, 12:52
Lokalizacja: Ozimek

Post 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.
MichalKob
Posty: 7
Rejestracja: piątek 21 wrz 2012, 09:20
Lokalizacja: Kraków

Post 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!
Awatar użytkownika
pier
Posty: 1467
Rejestracja: poniedziałek 21 lut 2011, 09:02
Lokalizacja: Biłgoraj-Sól

Post 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:
Awatar użytkownika
Pyra
Site Admin
Posty: 8527
Rejestracja: niedziela 02 sie 2009, 20:35
Lokalizacja: Gądki

Post 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
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Awatar użytkownika
pier
Posty: 1467
Rejestracja: poniedziałek 21 lut 2011, 09:02
Lokalizacja: Biłgoraj-Sól

Post autor: pier »

Tylko że procesor nie reaguje na zbocze i nie wiem dlaczego tak jest.
Awatar użytkownika
Pyra
Site Admin
Posty: 8527
Rejestracja: niedziela 02 sie 2009, 20:35
Lokalizacja: Gądki

Post autor: Pyra »

Witam
A podciągnąłeś wejście do plusa?

Pozdrawiam
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Awatar użytkownika
pier
Posty: 1467
Rejestracja: poniedziałek 21 lut 2011, 09:02
Lokalizacja: Biłgoraj-Sól

Post autor: pier »

Tak
Awatar użytkownika
ElSor
Site Admin
Posty: 5041
Rejestracja: niedziela 13 wrz 2009, 12:52
Lokalizacja: Ozimek

Post autor: ElSor »

Przecież w nocie producent napisał, że wybudzić zboczem nie można tylko poziomem.
Awatar użytkownika
Pyra
Site Admin
Posty: 8527
Rejestracja: niedziela 02 sie 2009, 20:35
Lokalizacja: Gądki

Post 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
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Awatar użytkownika
pier
Posty: 1467
Rejestracja: poniedziałek 21 lut 2011, 09:02
Lokalizacja: Biłgoraj-Sól

Post 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ć.
Awatar użytkownika
Pyra
Site Admin
Posty: 8527
Rejestracja: niedziela 02 sie 2009, 20:35
Lokalizacja: Gądki

Post 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
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Awatar użytkownika
pier
Posty: 1467
Rejestracja: poniedziałek 21 lut 2011, 09:02
Lokalizacja: Biłgoraj-Sól

Post 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.
Awatar użytkownika
Pyra
Site Admin
Posty: 8527
Rejestracja: niedziela 02 sie 2009, 20:35
Lokalizacja: Gądki

Post 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
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Awatar użytkownika
greg
Posty: 3535
Rejestracja: środa 08 paź 2008, 00:16
Lokalizacja: Wrocław
Kontakt:

Post 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.
Sterownik extended v3.5 HE <klik>
Instrukcje sterowników w PDF <klik>

kontakt: info(at)krypton(dot)pl
(podstawić @ i . w stosowne miejsca)
Awatar użytkownika
ElSor
Site Admin
Posty: 5041
Rejestracja: niedziela 13 wrz 2009, 12:52
Lokalizacja: Ozimek

Post 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 ;)
ODPOWIEDZ