logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATmega32 i programownie przerwania PCF8574(jako klawisze)

Rekin73 11 Lip 2010 19:34 1678 2
REKLAMA
  • #1 8282457
    Rekin73
    Poziom 14  
    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
    
    '--------------------------------------------------------------
    '                     (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.
  • REKLAMA
  • #3 8285492
    Rekin73
    Poziom 14  
    Dzięki za pomoc faktycznie flaga w rejestrze GIFR robiła mi tu ten Cyrk. Wpisanie Set Gifr.intf0 pomoglo teraz czyta tylko raz.

    Pozdrawiam kolegi @janbernat i jeszcze raz dzięki za pomoc.
REKLAMA