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

Atmega16 i PCF8574a: Klawiatura 16 przycisków nie działa poprawnie w Bascomie

kasia1502 01 Maj 2007 20:25 1791 3
REKLAMA
  • #1 3839504
    kasia1502
    Poziom 10  
    Posty: 7
    Witam
    Piszę program na Atmega16 w bascomie. Chciałam uruchomić klawiature 16 przycisków na 1 układzie pcf8574a, tak żeby każde naciśnięcie przycisku wyświetlało mi wartość na LCD.Znalazłam gdzieś rozwiązanie, niestety nie mogę sobie z tym poradzic ,robiąc symulacje w bascomie na wyświetlaczu wyświetla mi tylko 0, i nic się nie zmienia gdy naciskam przyciski, może ktoś zerknie na kod i mi coś podpowie lub podpowie mi jak inaczej rozwiązać ten problem.
    wielkie dzięki za pomoc


    '####################### Program configuration
    $regfile = "m16def.dat"
    $crystal = 8000000
    Config Sda = Portb.7
    Config Scl = Portb.1
    Config Lcd = 20 * 2
    Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.4 , Db6 = Portb.5 , Db7 = Portb.6 , E = Portb.2 , Rs = Portb.0
    Config Adc = Single , Prescaler = Auto
    Cls : Cursor Off
    Dim Keyvalue As Byte
    Declare Sub Klawiatura
    Do
    Keyvalue = 255
    I2csend 112 , &B11111110
    I2creceive 112 , Keyvalue
    Select Case Keyvalue
    Case 126 : Keyvalue = 0
    Case 190 : Keyvalue = 10
    Case 222 : Keyvalue = 11
    Case 238 : Keyvalue = 12
    End Select
    Cls
    Lcd "DEC:" ; Keyvalue
    Wait 1
    'End Select
    ' End If
    If Keyvalue > 15 Then

    I2csend 112 , &B11111101
    I2creceive 112 , Keyvalue
    Select Case Keyvalue
    Case 125 : Keyvalue = 1
    Case 189 : Keyvalue = 2
    Case 221 : Keyvalue = 3
    Case 237 : Keyvalue = 13
    Cls
    Lcd "DEC:" ; Keyvalue
    Wait 1
    End Select
    End If
    If Keyvalue > 15 Then

    I2csend 112 , &B11111011
    I2creceive 112 , Keyvalue
    Select Case Keyvalue
    Case 123 : Keyvalue = 4
    Case 187 : Keyvalue = 5
    Case 219 : Keyvalue = 6
    Case 235 : Keyvalue = 14
    Cls
    Lcd "DEC:" ; Keyvalue
    Wait 1
    End Select
    End If
    If Keyvalue > 15 Then

    I2csend 112 , &B11110111
    I2creceive 112 , Keyvalue
    Select Case Keyvalue
    Case 119 : Keyvalue = 7
    Case 183 : Keyvalue = 8
    Case 215 : Keyvalue = 9
    Case 231 : Keyvalue = 15
    Cls
    Lcd "DEC:" ; Keyvalue
    Wait 1
    End Select
    End If
    Loop
  • REKLAMA
  • #2 3840106
    Andy74
    Poziom 25  
    Posty: 525
    Pomógł: 103
    Ocena: 24
    Witam.

    kasia1502 napisał:
    robiąc symulacje w bascomie na wyświetlaczu wyświetla mi tylko 0, i nic się nie zmienia gdy naciskam przyciski

    Hmmm... Pewnie czegoś nie wiem, lub nie zrozumiałem, ale jak symulujesz pracę PCF8574?

    Co do Twojego problemu, to jest gotowe rozwiązanie w postaci biblioteki do Bascoma o nazwie "Key_i2c.lib". Korzysta ona właśnie z PCF8574, a wszystko co potrzebne znajdziesz pod tym adresem.

    Pozdrawiam i powodzenia!
    Andy
  • REKLAMA
  • #3 3842827
    kasia1502
    Poziom 10  
    Posty: 7
    Witam.
    Bardzo dziękuję za materiały, jednak mam pewne pytanie, ponieważ dopiero zaczynam zabawę z Atmegą
    1. w bascomie jest symulator klawiatury, czy jeśli mam klawiaturę podłączoną pod pcf8574A to też ją mogę testować w ten sposób?
    2. biblioteka "Key_i2c.lib" korzysta z pcf8574 ja mam pcf8574A, wiem że różnią się one adresami, czy mogę w jakiś sposób skorzystać z tej biblioteki?

    pozdrawiam
  • #4 3844301
    Andy74
    Poziom 25  
    Posty: 525
    Pomógł: 103
    Ocena: 24
    1. Nie. Ta klawiatura w symulatorze służy do emulowania matrycy klawiszy podłączonej bezpośrednio do portu procesora (polecenie GETKBD())

    2. Tak, oczywiście.

    Przy okazji: W przykładzie z pliku "i2c to keyboard interface.pdf" jest (według mnie) błąd. W trzeciej linijce od góry zamiast
    Const Pcf8574_lcd = &H42

    powinno być:
    Const Pcf8574_kbd = &H42

    Wartość &H42 (66 dziesiętnie) to właśnie adres podstawowy PCF-a - wystarczy go zmienić w programie na twój - 112, czyli &H70

    Pozdrawiam
    Andy
REKLAMA