Folientastatur an I2C mit AN_118

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Folientastatur an I2C mit AN_118

      Hallo,

      Ich habe ein Problem.
      Ich möchte eine Folientastatur über einen PCF8574 ansteuern per I2C. Dabei wollte ich die AN_118 von MCS nutzen.
      Beim Kompilieren kamen dann haufenweise Fehlermeldungen hauptsächlich aus der "Key_i2c.lib".
      Woran kann das liegen.

      Ich nutze die Bascom Voll-Version 2.0.8.0 und habe es heute neu auf Laufwerk D: installiert und auf Version 2.0.8.1 updatet, wie im Forum beschrieben.

      Kann mir jemand helfen?
    • ds1074 schrieb:

      Kann mir jemand helfen?
      schon, wenn man es selber nachvollziehen kann. Hast du das Programm unverändert übernommen, oder schon was geändert? Wenn letzteres, dann zeig es mal her.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ports sind richtig eingestellt, habe wie geschrieben nur die Anpassung an meinen Atmega8A durchgeführt, ansonsten das Programm und die Lib. von Kent Andersson unverändert zum Testen übernommen.

      Anbei ein Screenshot von den Fehlermeldungen.
      Ich hoffe, ihr könnt dem was entnehmen. Bin mit
      der Bedienung des Forums noch nicht so vertraut.
      Fehlermeldungen AN118.png
    • @ds1074 Ich hab' die gleichen Fehlermeldungen gehabt, wobei ich die von bascom gelieferten lib verwendet habe. Dann habe ich die gezippten libs verwendet, und es kommen weniger Fehler. Ich finde aber keinen nennenswerten Unterschied in der Key_i2c.lib.

      Error : 369 Line : 1 Duplicate label name used by const or variable [_KEY_SCAN ] , in File : C:\PROGRAM FILES (X86)\MCS ELECTRONICS\BASCOM-AVR\LIB\KEY_I2C.LIB
      Error : 61 Line : 106 Label not found [_KEY_SCAN] , in File : H:\Bascom\verschiedene Tests\loeschen.bas
      Error : 61 Line : 106 Label not found [_KEY_SCAN] , in File : H:\Bascom\verschiedene Tests\loeschen.bas
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ich hab jetzt mal das Beispielprogramm aufgerufen und die Änderungen wie bei dir vorgenommen und es wird ohne Fehlermeldung kompiliert.
      Es gibt also irgend ein anderes Problem bei dir. Vielleicht mal wieder die Rechteverwaltung von Windows.
      Übrigens liegt Bascom bei mir nicht auf Laufwerk C:\ sondern komplett auf Laufwerk D:\.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • djmsc schrieb:

      ch hab jetzt mal das Beispielprogramm aufgerufen und die Änderungen wie bei dir vorgenommen und es wird ohne Fehlermeldung kompiliert.
      Es gibt also irgend ein anderes Problem bei dir. Vielleicht mal wieder die Rechteverwaltung von Windows.
      Welches Beispielprogramm? Ich würde es gerne mal compilieren, weil ich denke, es liegt nicht an der Rechteverwaltung. (Habe Bascom in Programme(x86) installiert)
    • Michael schrieb:

      djmsc schrieb:

      ch hab jetzt mal das Beispielprogramm aufgerufen und die Änderungen wie bei dir vorgenommen und es wird ohne Fehlermeldung kompiliert.
      Es gibt also irgend ein anderes Problem bei dir. Vielleicht mal wieder die Rechteverwaltung von Windows.
      Welches Beispielprogramm? Ich würde es gerne mal compilieren, weil ich denke, es liegt nicht an der Rechteverwaltung. (Habe Bascom in Programme(x86) installiert)
      mcselec.com/index.php?option=c…task=view&id=82&Itemid=57
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch schrieb:

      mcselec.com/index.php?option=c…task=view&id=82&Itemid=57
      Das ist leider veraltet.
      Es fehlen die Stackwerte und der Prozessor.
      Die Variable muss _bkey_scan heißen.
      Das hatten wir doch letztens schon mal erörtert?

      djmsc schrieb:

      Es ist die lcd_i2c_demo.bas direkt im Samples Ordner.
      Diese Datei lässt sich in meiner Bascom-Umgebung (Win10/64 - Bascom 2080 - Installation im Pr..(x86) Verzeichnis als Administrator) fehlerfrei compilieren.

      An der Rechteverwaltung liegt es also nicht.
    • Hallo an alle,

      Erst einmal vielen Dank für Eure schnelle Hilfe.
      Prinzipiell funktioniert das Programm erst mal. Ich stelle es mal ins Forum.
      Es lag zum einen an '_key_scan' funktioniert aber mit '_bkey_scan'.

      Ich habe mal alles rausgenommen was mit dem LCD-Display zu tun hat, da nutze ich lieber die 'YLcd_i2c.lib'
      Das kommt später. Da gibt es auch noch ein Problem, da melde ich mich aber bei einem anderen Thema nochmal, wo ich schon Anfragen bezüglich dieses Themas Anfragen gestellt habe.

      Weiterhin hatte ich die 2 in Kommentar - Linien markierten Befehle erst beim Kopieren aus der Beschreibung(PDF)
      noch übernommen. Ich dachte mit '!rcall _Key_init' würde die Initialisierung aufgerufen.

      Jetzt habe ich noch 2 Probleme
      1. Wie man im Listing sehen kann habe ich in der Schleife ein waitms 150 eingefügt.
      Wenn ich das aus kommentiere, gibt es wieder Fehlermeldungen bezüglich des wait Befehls. Für mich unklar?

      2. Egal wie herum ich die Folientastatur (bei A..n gekauft > China) anschließe, ich kommen nicht auf die Tastenzuordnung
      wie in der PDF zur AN 118 beschrieben. Muss ich mir das selber in Basic anpassen, oder geht das auch in der Lib. (hab da was mit &HF0 bzw. &H0F gefunden, das hat doch sicher mit Spalten und Zeilen zu tun)

      So, das war ne ganze Menge, vielleicht könnt Ihr mir weiterhelfen, Hoffe, das ich das Listing noch einfügen kann.
      War noch in Bascom geöffnet, schicke ich hinterher.
      Im Voraus vielen Dank. DS1074RR Fernbed_1.bas

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ds1074 ()

    • Dann probier mal folgenden Code

      BASCOM-Quellcode

      1. $regfile = "m8adef.dat" 'Atmega8
      2. $crystal = 12000000 '12 Mhz
      3. $baud = 9600 'max. 57600 kBaud
      4. $hwstack = 50 'für interrupts
      5. $swstack = 50 'default use 10 for the SW stack
      6. $framesize = 50 'default use 40 for the frame space
      7. $lib "Key_i2c.lib" 'My i2c Keyboard driver
      8. $external _key_scan 'Enable the routine
      9. $external _waitms
      10. Config I2cdelay = 1
      11. Const Pcf8574_kbd = &H40 'Defines the address of the I/O expander for KBD
      12. I2csend Pcf8574_kbd , &H0F 'Call initialization routine (needed if int. driven)
      13. Config Scl = Portc.5 'Configure i2c SCL
      14. Config Sda = Portc.4 'Configure i2c SDA
      15. Dim _bkey_scan As Byte 'Returned Key from _Key_scan
      16. !rcall _Key_init
      17. Do
      18. !rcall _Key_Scan
      19. Print _bkey_scan
      20. ' Waitms 150 'wenn ich das auskommentiere bzw. weglasse, kommen 2 Fehlermeldungen (Error:61 Label not found [_WAITMS]....KEY_I2C.LIB
      21. Loop
      22. End
      Alles anzeigen
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Hallo,

      Das mit den 'waitms' funktioniert, muss man erst mal darauf kommen.
      Ich gehe davon aus, das Lib's funktionieren. Ist leider oft nicht der Fall.

      Jetzt habe ich immer noch das Problem der Zuordnung Spalten und Zeilen der Folientastatur.
      Bei mir wird folgendes angezeigt:

      Stecker in einer Richtung Stecker um 180° gedreht gesteckt

      gedrückte. Taste 1 2 3 A ( Reihe 1) 1 2 3 A
      Anzeigewert 1 5 9 13 (Reihe 1) 16 15 14 13

      gedrückte. Taste 4 5 6 B ( Reihe 2) 4 5 6 B
      Anzeigewert 2 6 10 14 (Reihe 2) 12 11 10 9

      gedrückte. Taste 7 8 9 C ( Reihe 3) 7 8 9 C
      Anzeigewert 3 7 11 15 (Reihe 3) 8 7 6 5

      gedrückte. Taste * 0 # D ( Reihe 4) * 0 # D
      Anzeigewert 4 8 12 16 (Reihe 4) 4 3 2 1 also Zuordnung genau umgekehrt.

      (die Formatierung des Textes mit Leerzeichen wurde beim Absenden leider verändert.)

      Der rechte Block gefällt mir schon besser, da könnte man mit 'case select' was machen. ich dachte nur das wird schon in der Lib. erzeugt, wie es in der Beschreibung der AN 118 steht, oder sehe ich das falsch.

      Noch 2 Fragen zum Forum selbst.
      Ist irgendwo beschrieben, was die Symbole z.B. der ' * ' oder die blauen Ziffern am Namen 'FORUM' etc. bedeuten?

      Beim Wechsel von eine Kategorie in eine andere werde ich auch öfter abgemeldet, obwohl ich mich dauerhaft angemeldet habe.

      Also kurzgesagt, gibt es eine Hilfedatei zur Bedienung des Forums, und wenn ja, wo finde ich sie.


      Bis dahin nochmal vielen Dank für die Hilfe. DS1074

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ds1074 ()

    • Das Sternla bedeutet der user hat den thread erstellt.
      Die Ziffer bei 'Forum' sind die neuen Beiträge, die du noch nicht betrachtest hast.
      Das hab' ich mir selber zusammen gereimt, sollte aber trotzdem stimmen.

      Das mit dem waitms finde ich sehr sonderbar.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • ds1074 schrieb:

      Problem der Zuordnung Spalten und Zeilen der Folientastatur.
      mit Select Case geht das oder mit Lookup-Tabelle.
      Der Wert, den du bekommst, beschreibt ja, welche Stelle in der Matrix gedrückt wurde, nicht, welche Ziffer gemeint ist.
      Das macht ja dein "Tastaturtreiber", also Select-Case oder Tabelle.


      ds1074 schrieb:

      Beim Wechsel von eine Kategorie in eine andere werde ich auch öfter abgemeldet, obwohl ich mich dauerhaft angemeldet habe.
      Für's Bascom-Forum kannst du getrost Cookies und Javaskript zulassen.
    • Nochmals danke,

      In der PDF sah es so aus, als könne ich die Werte 1 zu 1 übernehmen. mit Lookup und case um die Buchstaben noch auszuwerten funktioniert es.

      Ich hänge mal das fertige Programm an, vielleicht hilft es auch anderen 'Neueinsteigern' über solche Hürden.

      BASCOM-Quellcode

      1. $regfile = "m8adef.dat" 'Atmega8
      2. $crystal = 12000000 '12 Mhz
      3. $baud = 9600 'max. 57600 kBaud
      4. $hwstack = 50 'für interrupts
      5. $swstack = 50 'default use 10 for the SW stack
      6. $framesize = 50 'default use 40 for the frame space
      7. $lib "Key_i2c.lib" 'My i2c Keyboard driver
      8. $external _key_scan 'Enable the routine
      9. $external _waitms 'muss man wissen, siehe unten, wenn das fehlt, dann Fehlermeldungen in Zeile 37
      10. Config I2cdelay = 1
      11. Const Pcf8574_kbd = &H40 'Defines the address of the I/O expander for KBD
      12. I2csend Pcf8574_kbd , &H0F 'Call initialization routine (needed if int. driven)
      13. Config Scl = Portc.5 'Configure i2c SCL
      14. Config Sda = Portc.4 'Configure i2c SDA
      15. Dim _bkey_scan As Byte 'Returned Key from _Key_scan das ' b ' ist wichtig !!!
      16. Dim Taste As Byte
      17. !rcall _Key_init
      18. Do
      19. !rcall _Key_Scan
      20. Taste = Lookup(_bkey_scan , Dta)
      21. Select Case Taste 'Buchstaben extra auswerten
      22. Case 10 : Print "A"
      23. Case 11 : Print "B"
      24. Case 12 : Print "C"
      25. Case 13 : Print "D"
      26. Case 14 : Print "*"
      27. Case 15 : Print "#"
      28. Case 16 : Print " "
      29. Case Else : Print Taste
      30. End Select
      31. 'Print _bkey_scan ; " " ; Taste 'Zum Testen
      32. 'Waitms 150 'kann man einfügen, in der Lib werden aber schon 50ms generiert
      33. Loop
      34. End ' vor Tabellen
      35. '---- Tabelle Matrixumwandlung in Tastaturcode --------------------------------------
      36. Dta:
      37. Data 16 , 13 , 15 , 0 , 14 , 12 , 9 , 8 , 7 , 11 , 6 , 5 , 4 , 10 , 3 , 2 , 1
      Alles anzeigen
    • tschoeatsch schrieb:

      Das Sternla bedeutet der user hat den thread erstellt.
      Die Ziffer bei 'Forum' sind die neuen Beiträge, die du noch nicht betrachtest hast.
      Das hab' ich mir selber zusammen gereimt, sollte aber trotzdem stimmen.

      Das mit dem waitms finde ich sehr sonderbar.
      Woran erkenne ich dann aber die neuen Beiträge? z.B. im Lexikon (2)