Witam
Problem polega na tym po nacisnięciu klawisza (pcf8574), atmega32 czyta kilka razy stan portu. Za pierwszym razem podaje dobra wartość a za ostatnim odczytem zawsze 255. Odczytuje port 2 lub 3 razy, chodź klawisz byl tylko raz naciśnięty. Kombinowałem juz z pętlami, zmiana czasu, nic nie dało zawsze za ostatnim odpytaniem port jest 255.
kod
Dodam ze linia INT0 jest podciągnięta do + przez rezystor 3,3 Kohma.
Problem polega na tym po nacisnięciu klawisza (pcf8574), atmega32 czyta kilka razy stan portu. Za pierwszym razem podaje dobra wartość a za ostatnim odczytem zawsze 255. Odczytuje port 2 lub 3 razy, chodź klawisz byl tylko raz naciśnięty. Kombinowałem juz z pętlami, zmiana czasu, nic nie dało zawsze za ostatnim odpytaniem port jest 255.
kod
'--------------------------------------------------------------
' (c) 1999-2007 MCS Electronics
'--------------------------------------------------------------
' file: INT0.BAS
' demo: ON INT0 .. , RETURN
'--------------------------------------------------------------
$crystal = 8000000
$baud = 19200
$regfile = "m32def.dat"
Config Scl = Portc.0
Config Sda = Portc.1
Config I2cdelay = 5
Config Pind.2 = Input
Const Pcf8574_lcd = &H40
Config Lcd = 20 * 4
$lib "Lcd_i2c.lib"
$lib "Key_i2c.lib"
Dim V1 As Integer
Dim A As Byte
Dim _lcd_e As Byte
Dim Tastry As Byte
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
Config Int0 = Falling
On Int0 Klawisze
_lcd_e = 128
Enable Interrupts
Enable Int0
I2cinit
Cls
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Petla glówna >>>>>>>>>>>>>>>>>>>>>>>>>>>>
Do
V1 = V1 + 1
Print "petla glówna " ; V1
Locate 1 , 1
Lcd "Petla Glowna"
Locate 2 , 1
Lcd "klawisze " ; Tastry
Waitms 200
Loop
End
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Koniec Petli glównej >>>>>>>>>>>>>>>>>>>>>
Klawisze:
'odczyt klawiszy z I2c PCF8574 aderes &H42
Print "Funkcjia"
Disable Int0
Waitms 100
Print "pierwszy odczyt"
I2csend &H42 , 255
I2creceive &H43 , Tastry
Print "Klawisze " ; Tastry
If Tastry < 255 Then
Print "drugi odczyt"
I2csend &H42 , 255
I2creceive &H43 , Tastry
Print "Klawisze " ; Tastry
End If
Enable Int0
Print "wyjscie"
Return
Dodam ze linia INT0 jest podciągnięta do + przez rezystor 3,3 Kohma.