Przerwania[Bascom] + atmega8

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
mlody_elfan
-
Posty: 32
Rejestracja: 31 sty 2008, 12:18
Lokalizacja: z internetu

Przerwania[Bascom] + atmega8

Post autor: mlody_elfan » 25 sie 2008, 14:32

Dlaczego poniższy kod nie działa?
Idea jest prosta. Wciskamy przycisk pod portami Pd2(int0) i pd3(int1) i wyświetlamy odpowiedni komunikat.
Dlaczego program cały czas stoi w miejscu i wyświetla "Int0"

Jeżeli ktoś ma to prosiłbym o jakiś przykładowy program do atmegi 8 z obsługą przerwań. Męcze się z tym programem i męcze i nic :)

Na płytce jest wszystko podłączone następująco:
z portu Pd2 i Pd3 podpięte są mikroswitche które jak wciskam to zwierane są do masy. Czy tak może być ?

Kod: Zaznacz cały

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

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.2 , Rs = Portb.3

Config Portd.2 = Input
Config Portd.3 = Input

On Int0 Int0_podprog Nosave
On Int1 Int1_podprog Nosave

Enable Int0
Enable Int1

Enable Interrupts

Do
Cls
Lcd "petla glowna"
Wait 3
Loop



Int0_podprog:
Disable Interrupts
Cls
Lcd "Int0"
Wait 2
Enable Interrupts
Return

Int1_podprog:
Disable Interrupts
Cls
Lcd "Int1"
Wait 2
Enable Interrupts
Return

Awatar użytkownika
grysek67
Użytkownik
Posty: 315
Rejestracja: 27 cze 2007, 6:34
Lokalizacja: Limanowa
Kontakt:

Post autor: grysek67 » 25 sie 2008, 16:03

Witam

Jezeli switche są do masy to dodaj w programie:

Kod: Zaznacz cały

CONFIG INT0 = FALLING
CONFIG INT1 = FALLING
I rezystory podciągające od pinów procka do plusa :wink:

mlody_elfan
-
Posty: 32
Rejestracja: 31 sty 2008, 12:18
Lokalizacja: z internetu

Post autor: mlody_elfan » 25 sie 2008, 16:28

No właśnie z tym był problem :)
Problem polegał na tym, że nie korzystałem z pull-upów, ale włączyłem sobie wewnętrzne podciąganie. Zamiast

Kod: Zaznacz cały

Config Portd.2 = Input
Config Portd.3 = Input 
Dałem

Kod: Zaznacz cały

DDRD.2 = 0
DDRD.3 = 0
PORTD.2 = 1
PORTD.3 =1
I problem rozwiązany, ale jako przestroga post powinien zostać :]

Edit:
To jeszcze nie koniec, niestety :/


No przerwania się wywołują, tylko dlaczego do programu głównego wraca po około 30 sekundach ??

ODPOWIEDZ