INT és Gombkezelés (gombmátrix)

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
atideath
Biztosítékgyilkos
Hozzászólások: 57
Csatlakozott: 2011. július 3. vasárnap, 6:00

Hozzászólás Szerző: atideath »

Elakadtam egy picit a billentyűzetkezelésnél.

Valamiért amíg nem történik egy megszakítás jól működik. Utána meg folyamatosan ismétli a megszakítást. Már átsakkoztam mindent de sehogy nem jó.

Kód: Egész kijelölése

$regfile = "m644Pdef.dat"
$crystal = 8000000

Config Lcd = 20 * 4
Config Lcdpin = Pin , Rs = Pina.5 , E = Pina.6 , Db4 = Pina.7 , Db5 = Pinc.1 , Db6 = Pinc.0 , Db7 = Pind.7

' KONSTANSOK
Const Debouncetime = 10
' VÁLTOZÓK
Dim Keycoderow As Byte
Dim Keycodecol As Byte
Dim Keycode As Byte
Dim Keychar As String * 1
' ALIASOK
Keyszakit Alias Pind.2

' PORT BEÁLLÍTÁSOK
Config Keyszakit = Input
Config Int0 = Falling

Enable Interrupts


On Int0 Button2
' KI/BE menet
Ddrb = &B00000111

'Config Pinb.0 = Output
'Config Pinb.1 = Output
'Config Pinb.2 = Output

' Fesz szint állítás
Portb = &B01111000
'Portb.0 = 0
'Portb.1 = 0
'Portb.2 = 0

'Portb.3 = 1
'Portb.4 = 1
'Portb.5 = 1
'Portb.6 = 1



Cls
Cursor Off
Locate 1 , 1
Lcd "Toxical Alarm System"
Enable Int0

Do
   'Locate 3 , 1
   'Lcd "          "
   'Locate 2 , 1
   'Lcd "          "

   'Lcd Pinc.0
   'Cls
   'Porta.0 = 1
   'Waitms 10
   'Lcd "Riaszto"
   'Porta.0 = 0
   'Waitms 10
   'Gosub Button
Loop
End

Button2:
   Porta.0 = 1
   Keycoderow = Pinb
   Waitms Debouncetime
   Ddrb = &B01111000
   Portb = &B00000111
   Waitms 1
   Keycodecol = Pinb
   Ddrb = &B00000111
   Portb = &B01111000
   Waitms Debouncetime
   Porta.0 = 0
   Locate 2 , 1
   Lcd Keycoderow
   Locate 3 , 1
   Lcd Keycodecol
Return
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Szerintem a felhúzóellenállás nem jó a INT0-n

- Prellegés újabb INTet okoz
- INTben NINCS hosszú várakozás (pl. LCDkezelés)
demonstrációra jó, éles prg-ben nem....



Kérdés:
A DDRB helyett miért nem jó az áttekinthető Config portb.x=input/output?
Avatar
atideath
Biztosítékgyilkos
Hozzászólások: 57
Csatlakozott: 2011. július 3. vasárnap, 6:00

Hozzászólás Szerző: atideath »

Robert írta:Szerintem a felhúzóellenállás nem jó a INT0-n

- Prellegés újabb INTet okoz
- INTben NINCS hosszú várakozás (pl. LCDkezelés)
demonstrációra jó, éles prg-ben nem....



Kérdés:
A DDRB helyett miért nem jó az áttekinthető Config portb.x=input/output?
Először úgy csináltam Config-al. Azért módosítottam erre mert ez volt itt a könyvben. Már kb 10 féle képpen kipróbáltam. Hogy érted hogy az INT0-án nem jó a felhúzó ellenálás? Túl nagy vagy kicsi?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Bocsi! De az egész INT rutinod túl hosszú!
Esetleg itt találsz példát a problémádra:
http://avr.tavir.hu/modules.php?name=Fo ... key+matrix

:arrow:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

INT0-n ne a belsőt használd, hanem külső max. 10k / min. 1k legyen!

A belső értéke 30...100k között (ahogy a gyártósoron sikerül:) ). Így zavaréárzékeny a láb. Szerintem nincs a belső bekapcsolva...
Válasz küldése