Wybudzanie procesora z trybu powerdown przerwaniem int1.

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Spanner
Użytkownik
Posty: 364
Rejestracja: 18 lip 2010, 18:29
Lokalizacja: Bielsko biała

Wybudzanie procesora z trybu powerdown przerwaniem int1.

Post autor: Spanner » 31 lip 2011, 12:39

Witam. Mam takie pytanie:
buduję prostu układ w celu nauki przerwań. Chodzi mi o to żeby sterować dwoma przyciskami:
Po naciśnięciu pierwszego przycisku układ:
a)Wyłącza timery
b)zeruje porty
c)przechodzi do trybu powerdown
I to wiem jak zrealizować.

Natomiast po naciśnięciu przycisku połączonego z wejściem int i masą układ powinien po prostu przejść do pętli.
I tu mam pytanie:
Wiem że po przerwaniu układ wchodzi do podprogramu. Proszę o poradę co zrobić bo po tym przerwaniu układ wybudził się i zaczął normalnie kręcić się w pętli, aż do ponownego przejścia w tryb powerdown.

Pozdrawiam
spanner

keruseykaryu

Post autor: keruseykaryu » 31 lip 2011, 15:34

Spanner pisze:Wiem że po przerwaniu układ wchodzi do podprogramu. Proszę o poradę co zrobić bo po tym przerwaniu układ wybudził się i zaczął normalnie kręcić się w pętli, aż do ponownego przejścia w tryb powerdown.
Zrób ISR puste.

Spanner
Użytkownik
Posty: 364
Rejestracja: 18 lip 2010, 18:29
Lokalizacja: Bielsko biała

Post autor: Spanner » 31 lip 2011, 16:15

niestety nie mam pojęcia co to jert i na czym polega, czy możesz to wyjasnić?

keruseykaryu

Post autor: keruseykaryu » 31 lip 2011, 18:17

Spanner pisze:niestety nie mam pojęcia co to jert i na czym polega, czy możesz to wyjasnić?
Panie kolego. Podstawy się kałaniają.
ISR - Interrupt Service Routine. Po prostu zrób puste przerwanie. A wcześniej drugie przerwanie zbuduj tak, co by pętla główna robiła to co napisałeś wcześniej i po tym lulu spać.

Spanner
Użytkownik
Posty: 364
Rejestracja: 18 lip 2010, 18:29
Lokalizacja: Bielsko biała

Post autor: Spanner » 31 lip 2011, 19:11

keruseykaryu pisze:
Spanner pisze:niestety nie mam pojęcia co to jert i na czym polega, czy możesz to wyjasnić?
Panie kolego. Podstawy się kałaniają.
Uczę się...


Czyli może być na przykład tak:

Kod: Zaznacz cały

Deklaracje itp.

Enable interrupts

on int1 (i co mam wpisać tutaj?)  [nosave]




Do
If pind.4 = 0 then:
disable timer0
Wyłacznie portów
powerdown

(dalsza część programu)

loop
end



Prosiłbym o jakiś przykład bo uczę się i nie wszystko rozumiem.
pozdrawiam
spanner

Qwertxx
-
Posty: 33
Rejestracja: 21 kwie 2011, 1:19
Lokalizacja: Polska
Kontakt:

Post autor: Qwertxx » 04 sie 2011, 23:52

Nie podałeś o jaki procesor chodzi, a to może być istotne, na przykład z powodu sposobu w jaki INT1 wybudza procesor z trybu Power Down.

Poza tym, zastanów się nad używaniem C i zakupieniem książki, bo to zaoszczędzi Ci czas który tracisz na tak proste problemy. Ja proponuję Ci tę: http://helion.pl/view/5314./jcmikr.htm

Dlaczego C?: Jaki język wybrać?

Awatar użytkownika
RcTomek
Moderator
Posty: 243
Rejestracja: 27 wrz 2007, 21:15
Lokalizacja: Głogów / Wrocław

Post autor: RcTomek » 23 sie 2011, 20:41

Qwertxx pisze:Nie podałeś o jaki procesor chodzi, a to może być istotne, na przykład z powodu sposobu w jaki INT1 wybudza procesor z trybu Power Down.
Patrząc na w/w kod zakładam, że chodzi o procesory AVR.

:arrow: Spanner
AVRy z trybu power down wybudza się nie zmainą stanu a tzw. poziomem na INTx. Pierwsza lepsza karta katalogowa Atmela.

Qwertxx
-
Posty: 33
Rejestracja: 21 kwie 2011, 1:19
Lokalizacja: Polska
Kontakt:

Post autor: Qwertxx » 23 sie 2011, 20:46

Ja wróżyć nie potrafię i pewność mieć wolę, stąd pytanie do autora, na które nie odpowiedział :)
Ale pewnie o AVR chodzi.

Spanner
Użytkownik
Posty: 364
Rejestracja: 18 lip 2010, 18:29
Lokalizacja: Bielsko biała

Post autor: Spanner » 24 sie 2011, 8:07

Problem rozwiązałem trochę inaczej - zamiast przerwania robię po prostu reset.
Procesor attiny2313
Pozdrawiam
spanner

Qwertxx
-
Posty: 33
Rejestracja: 21 kwie 2011, 1:19
Lokalizacja: Polska
Kontakt:

Post autor: Qwertxx » 24 sie 2011, 8:52

Spanner pisze:Problem rozwiązałem trochę inaczej - zamiast przerwania robię po prostu reset.
O matko z córką :)
Toż to typowe rozwiązanie znane z systemy Windows :mrgreen: :mrgreen: :mrgreen:

Awatar użytkownika
RcTomek
Moderator
Posty: 243
Rejestracja: 27 wrz 2007, 21:15
Lokalizacja: Głogów / Wrocław

Post autor: RcTomek » 24 sie 2011, 14:40

Ale z praktycznego punktu widzenia, jeśli ma być wykonywany każdorazowo ten sam program, to chyba najlepsze rozwiązanie.

Qwertxx
-
Posty: 33
Rejestracja: 21 kwie 2011, 1:19
Lokalizacja: Polska
Kontakt:

Post autor: Qwertxx » 24 sie 2011, 14:49

RcTomek pisze:Ale z praktycznego punktu widzenia, jeśli ma być wykonywany każdorazowo ten sam program, to chyba najlepsze rozwiązanie.
Jeżeli układ ma być resetowany po to żeby go zbudzić, to po co go zasilać w czasie snu. Trzeba zrobić funkcję autowyłączania zasilania.

Po to są tryby usypiania, by je wykorzystać, a nie poddawać się, bo nie umie się czegoś zrobić. Oczywiście jeżeli układ działa i spełnia swoją rolę, to każde rozwiązanie jest akceptowalne.

Awatar użytkownika
RcTomek
Moderator
Posty: 243
Rejestracja: 27 wrz 2007, 21:15
Lokalizacja: Głogów / Wrocław

Post autor: RcTomek » 24 sie 2011, 17:45

Pisząc 'najlepsze' miałem na myśli najszybsze/najprostsze rozwiązanie.
Qwertxx pisze:Jeżeli układ ma być resetowany po to żeby go zbudzić, to po co go zasilać w czasie snu. Trzeba zrobić funkcję autowyłączania zasilania.
Pomysł dobry, ale wzrasta nieco stopień skomplikowania układu. Przede wszystkim zależy do czego to ma służyć.
Po to są tryby usypiania, by je wykorzystać, a nie poddawać się, bo nie umie się czegoś zrobić. Oczywiście jeżeli układ działa i spełnia swoją rolę, to każde rozwiązanie jest akceptowalne.
No to fakt, w ten sposób niewiele się wyniesie z tej nauki ;)

Qwertxx
-
Posty: 33
Rejestracja: 21 kwie 2011, 1:19
Lokalizacja: Polska
Kontakt:

Post autor: Qwertxx » 24 sie 2011, 19:04

:wink:

ODPOWIEDZ