I2C-LCD

    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!

    • Hallo Forum bin neu und auch kein Profi Programmierer aber für Kleinigkeiten reicht es.

      habe leider auch ein Kleines Problem mit einem 20*4 Display über I2C
      habe die YwRobot_Lcd_i2c.lib geladen.

      funktioniert auch soweit alles über LCD "Text" alles sehen.

      nur wenn ich eine Variable schicke wird das Display Endlos voll geschrieben.

      Bsp. wenn in der variablen eine 1 ist macht das Display 1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
      wenn eine 2 drinne steht macht es 2bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...
      egal ob ich nen atmega oder attiny nutze
      hat evtl jemand eine Idee ?

      muss es mal an einem Arduino testen aber dachte frage mal.

      Gruß Bernd
    • Quellcode

      1. $regfile = "m8adef.dat" 'Atmega8a
      2. $crystal = 8000000 '8 MHz
      3. $lib "YwRobot_Lcd_i2c.lib" 'YwRobot Treiber für LCD
      4. $hwstack = 64
      5. $swstack = 10
      6. $framesize = 40
      7. '**********************************************************
      8. '******************* Deklarationen ************************
      9. Dim Wert As Word
      10. Dim Test As Byte
      11. Test = "54"
      12. Const Pcf8574_lcd = 126 'Adresse des I2C-LCDs
      13. Dim _lcd_e As Byte
      14. _lcd_e = 128
      15. Const Pcf_d4 = 4 'Pinzuordnung PCF8574 -> LCD
      16. Const Pcf_d5 = 5
      17. Const Pcf_d6 = 6
      18. Const Pcf_d7 = 7
      19. Const Pcf_rs = 0
      20. Const Pcf_rw = 1
      21. Const Pcf_e2 = 3 '3./4. Zeile bzw. Backlight
      22. Const Pcf_e1 = 2
      23. Ddrb = &B11111111 'Standardbelegung der DDRs
      24. Ddrd = &B01110000
      25. 'Portd = &B10001111
      26. Config Scl = Portb.7 'Konfigurieren von I2C
      27. Config Sda = Portb.6
      28. Config Lcd = 20 * 4
      29. Config I2cdelay = 15
      30. Cursor Off
      31. Waitms 300
      32. Cls
      33. Locate 1 , 4
      34. Lcd "Feuchte"
      35. Locate 2 , 5
      36. 'Lcd Test
      37. Locate 2 , 12
      38. Lcd "2"
      39. 'Ddrc = &B00000000
      40. Config Timer1 = Timer , Prescale = 64
      41. On Timer1 Anzeigen
      42. Enable Timer1
      43. Enable Interrupts
      44. Config Adc = Single , Prescaler = Auto
      45. Start Adc
      46. Do
      47. Waitms 50
      48. Wert = Getadc(1)
      49. 'Test = Str(getadc(2))
      50. 'Lcd Senden
      51. 'Cls
      52. 'Lcd "jetzt"
      53. 'Waitms 1000
      54. Loop
      55. Anzeigen:
      56. Locate 3 , 5
      57. Lcd Test
      58. 'Print Senden
      59. Return
      60. End
      Alles anzeigen
    • Weichmacher schrieb:

      Dim Test As Byte
      Test = "54"
      Du willst also die Variable Test ausgeben?
      Zum einen ist Test ein Byte und kann keinen String aufnehmen so wie oben.
      Besser so:

      BASCOM-Quellcode

      1. Dim Test As String * 3
      2. Test = "54"
      3. Lcd Test

      oder du wandelst deine Zahl in ein String um

      BASCOM-Quellcode

      1. Dim Test As Byte
      2. Test = 54
      3. Lcd Fusing(Test , "##")
      Du kannst aber auch mal unter Format in der Bascom-Hilfe nachschauen.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Vergiss vorerst mal das Fusing.

      Mach dich vertraut mit den verschiedenen Datentypen.
      Byte und String

      Dim Test As Byte '->reserviert 1 Byte Speicher im numerischen Format
      Test = 46
      Print Test

      sendet die beiden Ascii-Werte 46 (für das Zeichen 4) und 54 (für das Zeichen 6) über die Leitung

      Dim Test As String * 1 '-> reserviert 1 Byte im Textformat
      Test = "X"
      Print Test

      sendet den Ascii Wert 88 (für X)


      P.S.:
      du hast natürlich ein Display ;)
      LCD oder Print ist hier egal, die verhalten sich hier gleich (auch was das Senden der Zeichen anbelangt)
    • also egal wie sobald ich eine variable an das lcd schicke iss run

      der fehler bei fusing war der punkt hat gefehlt aber selbst mit habe auch direkt das Beispiel Format Genommen

      kann es nicht verstehen.

      Denn Bsp

      lcd "54"

      zeigt 54

      aber
      dim xyz as string *3
      xyz = "54"

      und dann
      lcd xyz

      ist der fehler da (obwohl doch eigentlich der Inhalt gleich ist
    • Weichmacher schrieb:

      Denn Bsp

      lcd "54"

      zeigt 54
      ja, klar,
      der Befehl LCD erwartet im Prinzip Text.
      Wenn du ihm Text gibst, dann immer in Gänsefüßen ""
      Lcd "Hallo"
      oder Lcd "54"

      Weichmacher schrieb:

      dim xyz as string *3
      xyz = "54"

      und dann
      lcd xyz

      ist der fehler da
      Hier packst du den Text in eine passende Textvariable, die laut Dim bis zu 3 Zeichen aufnehmen kann.

      Welcher Fehler?
    • kenne die unterschiedlichen Daten typen (zumindest so ziemlich)

      wie gesagt wenn ich

      lcd xyz
      schicke macht er unendlich das erste zeichen des ascii codes
      selbst wenn xyz als 1 definiert ist kommt als Ergebnis

      1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA....

      ich verstehe es einfach nicht
    • Weichmacher schrieb:

      wie gesagt wenn ich

      lcd xyz
      schicke macht er unendlich das erste zeichen des ascii codes
      selbst wenn xyz als 1 definiert ist kommt als Ergebnis

      1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA....

      ich verstehe es einfach nicht
      wie gesagt, dein Programm ist hier nützlich.
      Das aktuelle Programm.

      In Beitrag #5 hattest du z.B. einen Timer konfiguriert und dort das Display bedient.
      Das ist gelinde gesagt, schlecht.
    • BASCOM-Quellcode

      1. $regfile = "m8adef.dat"
      2. '$crystal = 8000000
      3. $lib "YwRobot_Lcd_i2c.lib" 'YwRobot Treiber für LCD
      4. '$hwstack = 64
      5. '$swstack = 10
      6. '$framesize = 40
      7. $crystal = 4000000 ' used crystal frequency
      8. $baud = 19200 ' use baud rate
      9. $hwstack = 32 ' default use 32 for the hardware stack
      10. $swstack = 10 ' default use 10 for the SW stack
      11. $framesize = 40 ' default use 40 for the frame space
      12. '**********************************************************
      13. '******************* Deklarationen ************************
      14. Const Pcf8574_lcd = 126 'Adresse des I2C-LCDs
      15. Dim _lcd_e As Byte
      16. _lcd_e = 128
      17. Const Pcf_d4 = 4 'Pinzuordnung PCF8574 -> LCD
      18. Const Pcf_d5 = 5
      19. Const Pcf_d6 = 6
      20. Const Pcf_d7 = 7
      21. Const Pcf_rs = 0
      22. Const Pcf_rw = 1
      23. Const Pcf_e2 = 3 '3./4. Zeile bzw. Backlight
      24. Const Pcf_e1 = 2
      25. Ddrb = &B11111111 'Standardbelegung der DDRs
      26. Ddrd = &B01110000
      27. 'Portd = &B10001111
      28. Config Scl = Portb.7 'Konfigurieren von I2C
      29. Config Sda = Portb.5
      30. Config Lcd = 20 * 4
      31. Config I2cdelay = 15
      32. Cursor Off
      33. Waitms 300
      34. Dim Test As String * 1
      35. Test = "1"
      36. Cls
      37. Locate 1 , 4
      38. Lcd "Feuchte"
      39. Locate 2 , 5
      40. Lcd Test
      Alles anzeigen
    • hallo erst mal danke
      klar sollte das programm mit end beendet werden aber soweit kommt es ja garnicht.
      stack war oben habe ich dann nur mal runter gesetzt.
      kein quarz , stimmt aber 1mhz sollte auch reichen zumindest gibt er es ja auch aus mit lcd ""
      nur mit variable nicht
      muss auch mal mit einer anderen lib testen
      vermute auch den fehler hier