Wybudzenie Mega8 z trybu PowerDown

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
Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Wybudzenie Mega8 z trybu PowerDown

Post autor: M@ciej » 14 wrz 2009, 12:19

Witam.

Mam problem z wybudzeniem procka Atmega8 z trybu Powerdown. Do usypiania i wybudzania chcę wykorzystać ten sam przycisk (na INT1). Zauważyłem,że obsługa przerwania jest wykonywana najpierw w stosunku do pętli głównej, jednakże uśpienie procka w przerwaniu nie pozwala na jego obudzenie, natomiast obsługa klawisza w petli głównej i tam jego usypianie nie pozwala go uśopić. Napisałem taki oto kod, ale nie działa. Męcze się już z tym drugi dzień, pomocy!

Kod: Zaznacz cały

$regfile = "m8def.dat"
$crystal = 1000000

Config Portd.3 = Input
        Portd.3 = 1
Config Portb.7 = Output
        Portb.7 = 1                                         

Config Int1 = Low Level                                     'konfiguracja przycisku budzenia
On Int1 Wstawaj                                             'wywołanie budzenia procka
Enable Int1                                                 'uruchomienie INT1
Enable Interrupts                                           'uruchomienie globalnego systemu przetwań

stdby_led Alias Portb.7                                     'dioda LED Low Bat 
Pwr_sw Alias Pind.3                                         'przycisk POWER  

Do
Loop
End

Wstawaj:
 If stdby_led = 1 Then
  stdby_led = 0
  Powerdown
 Else
  stdby_led = 1
 End If

  Do : Loop Until Pwr_sw = 1
Return



Awatar użytkownika
Aro
Użytkownik
Posty: 677
Rejestracja: 30 paź 2006, 18:49
Lokalizacja: Świerczyniec | Wrocław
Kontakt:

Post autor: Aro » 15 wrz 2009, 14:09

A na linii przycisku jest jakiś kondensator tłumiący drgania? Spróbuj jeszcze dodać opóźnienie po instrukcji do loop until, powiedzmy 20ms.

alaris
Użytkownik
Posty: 530
Rejestracja: 21 lut 2006, 14:56
Lokalizacja: Gorzow/Poznan

Post autor: alaris » 15 wrz 2009, 14:53

I upewnij sie, ze przerwanie jest zglaszane poziomem niskim, a nie zboczem. Tylko w ten sposob mozna wybudzic procesor z trybu uspienia.

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 15 wrz 2009, 15:01

Przyciskiem steruję od minusa(masy), równolegle jest kondensatorek 100nF. Diodą steruję od plusa, szeregowo jest rezystor 470R. Tak więc przerwanie jest sterowane sygnałem niskim.

Awatar użytkownika
Aro
Użytkownik
Posty: 677
Rejestracja: 30 paź 2006, 18:49
Lokalizacja: Świerczyniec | Wrocław
Kontakt:

Post autor: Aro » 15 wrz 2009, 15:02

Kod: Zaznacz cały

Config Int1 = Low Level 
alaris wystarczy spojrzeć na program :wink:

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 15 wrz 2009, 15:09

Chciałem nawet dać Enable INT1 przed uśpieniem procka i Disable INT1 po jego obudzeniu,ale to także nie dawało rezultatów. Albo mogę go uśpić nie da się wybudzić, albo w ogóle nie daje się uśpić.

alaris
Użytkownik
Posty: 530
Rejestracja: 21 lut 2006, 14:56
Lokalizacja: Gorzow/Poznan

Post autor: alaris » 15 wrz 2009, 15:31

Aro pisze:alaris wystarczy spojrzeć na program :wink:
To nie moj jezyk:D

ODPOWIEDZ