12864 mit ST7920 über Serial

    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!

    • 12864 mit ST7920 über Serial

      Hätte Jmd zufällig eine passende Lob oder ein Programmbeispiel zur seriellen Ansteuerung eines 12864b?
      Auf dem Layout der Platine sind Pin 1 und 2 mit Stromversorgung belegt, 4 5 Und 6 für den seriellen Bus. Die letzten Pins sind Parallel zu den ersten beiden, für die Hintergrundbeleuchtung. Der Rest ist NC
      Zur Zeit blicke ich nicht ganz durch, welche LIB ich benutzen könnte. Ks108?

      Über einen Schnipsel wäre ich sehr dankbar.
      Gruß Mathias
      Dateien
    • Wie kommst du auf RS, R/W und E?
      Ist doch ein serielles Display also SPI.

      Anschlußbelegung am Display
      PIN 1 = GND
      PIN 2 = VCC
      PIN 3 = CS (Chip Select)
      PIN 4 = Encoder B
      PIN 5 = MOSI (Daten In Master Out Slave In)
      PIN 6 = Encoder A
      PIN 7 = NC
      PIN 8 = Encoder Click
      PIN 9 = SCL (Serial Cklock)
      PIN 10 = Buzzer

      Prüf also noch mal deine Anschlüsse bzw. das Programm.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Display Pin 1 = Vss = GND = 0VDisplay Pin 2 = Vdd = Plus = +5V (4mA)
      Display Pin 3 = NC nicht verwendet/ not connencted
      Display Pin 4 = RS CS(SS) chip select SPI (RS in parallel Mode (RS=0: Instruktion, RS=1: Data)
      Display Pin 5 = R/W = MOSI SPI = (R/W in parallel Mode (R/W=0: write, RS=1: read)
      Display Pin 6 = E SCK = Clock SPI (E enable in parallel Mode)


      Display Pin 7 = brauchen wir nicht DB0 in parallel Mode
      Display Pin 8 = brauchen wir nicht DB1 in parallel Mode
      Display Pin 9 = brauchen wir nicht DB2 in parallel Mode
      Display Pin 10 = brauchen wir nicht DB3 in parallel Mode
      Display Pin 11 = brauchen wir nicht DB4 in parallel Mode
      Display Pin 12 = brauchen wir nicht DB5 in parallel Mode
      Display Pin 13 = brauchen wir nicht DB6 in parallel Mode
      Display Pin 14 = brauchen wir nicht DB7 in parallel Mode


      Display Pin 15 = PSB - parallel serial Selector PSB=0: serial, PSB=1parallel
      Display Pin 16 = nicht verwendet/ not connencted
      Display Pin 17 = Reset RST=0: Display off
      Display Pin 18 = LCD Kontrast Spannung - Poti auf der Platine / LCD contrast - Potentimeter on PCB
      Display Pin 19 = Display LED + (5V = 33mA, 3,3V = 17mA)
      Display Pin 20 = Display LED - = GND = 0V
      Display Pin 1+15+20 können verbunden werden

      Mein Display hat statt dem Pin 15 noch einen Loetjumper. Mit diesem wird pin15 in Richtung GND gezogen.


      Hiermit bekomme ich im Textmodus wenigstens Lebenszeichen, auch wenn der INITvorgang noch nicht perfekt laeuft.

      Quellcode

      1. $regfile = "m328pdef.DAT"
      2. $crystal = 16000000
      3. $hwstack = 100
      4. $framesize = 80
      5. $swstack = 100
      6. Dclock Alias Portc.2
      7. Ddata Alias Portc.3
      8. Lcd_hbl Alias Portc.4
      9. Config Lcd_hbl = Output
      10. Declare Sub Lcda(byval Y1 As Byte , Byval X1 As Byte , Byval Text1 As String * 20)
      11. Declare Sub Lcda_cls
      12. Declare Sub Lcda_init
      13. Declare Sub Hbl(byval Ea As Byte)
      14. Declare Sub Lcds_command(byval Ch As Byte)
      15. Declare Sub Lcds_data(byval Ch As Byte)
      16. Declare Sub Lcds_wdata(byval Ch As Byte)
      17. Dim Text As String * 20 , Texta As String * 20
      18. Dim Text_o(20) As Byte At Text Overlay 'ASCII-Werte der LCD Ausgabe '
      19. Dim Cx As String * 1
      20. Dim Pos As Byte
      21. Dim Zp As Byte
      22. Dim Zlen As Byte
      23. Dim Lcd_zeilen As Byte , Lcd_spalten As Byte
      24. Dim Zl1 As String * 20 , Zl2 As String * 20 , Zl3 As String * 20 , Zl4 As String * 20
      25. Dim Zz As Byte 'Zeichenzähler
      26. Dim Zi As Byte 'Zeichen-Indexzähler
      27. Dim Bl As Byte 'LCD-HintergrundBeLeuchtung
      28. Dim Ch As Byte , Cha As Byte
      29. Dim Lcd_cout As Byte
      30. Dim Lcd_dout As Byte
      31. Const Ein = 1 'HBL Einschalten
      32. Const Aus = 0 'HBL Ausschalten
      33. Lcd_zeilen = 4 'Anzahl LCD-Zeilen
      34. Lcd_spalten = 16 'Anzahl LCD-Zeichen pro Zeile
      35. Dim Tx1 As String * 1 , Tx2 As String * 2
      36. Dim Rc As Byte , Rb As Byte , I As Byte
      37. Dim Tx5 As String * 7
      38. Dim Tx9 As String * 1
      39. Hbl Ein
      40. Do
      41. Wait 1
      42. Lcda_init
      43. Lcda_cls
      44. Lcda 1 , 1 , "test"
      45. Lcda 2 , 1 , "Temperatur: 22.7"
      46. Lcda 3 , 1 , "0123456789012345"
      47. Lcda 4 , 1 , "Test Zeile 4"
      48. Loop
      49. End
      50. Sub Lcda_init
      51. Lcds_command 3 'Init LCD mit Wert 3 als Command (RS=0)
      52. Waitms 2
      53. Lcds_command 3 'Init LCD mit Wert 3 als Command (RS=0)
      54. Waitms 2
      55. Lcds_command 3 'Init LCD mit Wert 3 als Command (RS=0)
      56. Waitms 2
      57. Lcds_command 12 'Display control
      58. Waitms 1
      59. Lcds_command 1 'Dislpay clear
      60. Waitms 1
      61. Lcds_command 6 'Entry mode
      62. Waitms 10
      63. End Sub
      64. '*****************************************************************************
      65. '* Clear Screen Befehl *
      66. '*****************************************************************************
      67. Sub Lcda_cls
      68. Lcds_command 1
      69. Zl1 = Space(20)
      70. Zl2 = Space(20)
      71. Zl3 = Space(20)
      72. Zl4 = Space(20)
      73. Waitms 2
      74. End Sub
      75. '*****************************************************************************
      76. '* Hintergrundbeleuchtung EIN/AUS *
      77. '*****************************************************************************
      78. Sub Hbl(byval Ea As Byte)
      79. Bl = Ea
      80. If Ea = 0 Then Reset Lcd_hbl
      81. If Ea = 1 Then Set Lcd_hbl
      82. End Sub
      83. '*****************************************************************************
      84. '* Anzeige Wert/String Zeile Y1 Position X1 *
      85. '*****************************************************************************
      86. Sub Lcda(byval Y1 As Byte , Byval X1 As Byte , Byval Text1 As String * 20)
      87. If Y1 = 1 Then
      88. Zz = Len(text1)
      89. Mid(zl1 , X1 , Zz) = Text1
      90. Texta = Zl1
      91. Ch = 128 'Cursor-Position Zeile 1, Position 1
      92. End If
      93. If Y1 = 2 Then
      94. Zz = Len(text1)
      95. Mid(zl2 , X1 , Zz) = Text1
      96. Texta = Zl2
      97. Ch = 144
      98. End If
      99. If Y1 = 3 Then
      100. Zz = Len(text1)
      101. Mid(zl3 , X1 , Zz) = Text1
      102. Texta = Zl3
      103. Ch = 136
      104. End If
      105. If Y1 = 4 Then
      106. Zz = Len(text1)
      107. Mid(zl4 , X1 , Zz) = Text1
      108. Texta = Zl4 'Cursor-Position Zeile 4, Position 1
      109. Ch = 152
      110. End If
      111. Lcds_command Ch 'Cursor-Position setzen
      112. For Zi = 1 To Zz
      113. Cx = Mid(texta , Zi , 1)
      114. Ch = Cx
      115. Lcds_data Ch
      116. Next Zi
      117. End Sub
      118. Lcds_out:
      119. Ch = Pos
      120. Set Ch.7 'Setze Bit 7 für Befehl Set DDRAM
      121. Lcds_command Ch 'Cursor-Position setzen
      122. Waitus 100
      123. Zlen = Len(text) 'Länge Anzeigetext ermitteln
      124. For Zp = 1 To Zlen
      125. Ch = Text_o(zp)
      126. Lcds_data Ch
      127. Next Zp
      128. Return
      129. Sub Lcds_command(byval Ch As Byte)
      130. Reset Lcd_cout.1
      131. Lcds_wdata Ch
      132. End Sub
      133. Sub Lcds_data(byval Ch As Byte)
      134. Set Lcd_cout.1
      135. Lcds_wdata Ch
      136. End Sub
      137. Sub Lcds_wdata(byval Ch As Byte)
      138. Lcd_cout.7 = 1 'Sync
      139. Lcd_cout.6 = 1 'Sync
      140. Lcd_cout.5 = 1 'Sync
      141. Lcd_cout.4 = 1 'Sync
      142. Lcd_cout.3 = 1 'Sync
      143. Lcd_cout.2 = 0 'R/W
      144. Lcd_cout.0 = 0 'leer
      145. Shiftout Ddata , Dclock , Lcd_cout , 0 , 8
      146. Lcd_dout = 0
      147. Lcd_dout.7 = Ch.7
      148. Lcd_dout.6 = Ch.6
      149. Lcd_dout.5 = Ch.5
      150. Lcd_dout.4 = Ch.4
      151. Shiftout Ddata , Dclock , Lcd_dout , 0 , 8
      152. Lcd_dout = 0
      153. Lcd_dout.7 = Ch.3
      154. Lcd_dout.6 = Ch.2
      155. Lcd_dout.5 = Ch.1
      156. Lcd_dout.4 = Ch.0
      157. Shiftout Ddata , Dclock , Lcd_dout , 0 , 8
      158. End Sub
      Alles anzeigen
    • Vielleicht dem display nach dem init-Befehl mehr Zeit lassen? Du hast ja keine Rückmeldung vom dispay, ob es für Daten bereit ist, also lieber mehr Warte- (Verarbeitungszeit) zugestehen. Oder gibt es einen busy-pin, den du auswerten könntest?

      Hab's grad gesehen, busy gibt's nicht.
      Wenn die Textdarstellung schon geht, bist du ja bald fertig. Als graphische Sachen brauchst du ja nur line und box. Circle wirst du ja, wenn überhaupt, nur zu Ostern brauchen, wenn du Eier malen willst. Die pixel sind ja leider Rechtecke.
      Raum für Notizen

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

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

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

    • Bei den 7565r displays gibts keine grafikfunktion da das Display über SPI nicht gelesen werden kann, man kann ein bisschen mit eigenen Fonts tricksen. Schau mal in dein Datenblatt ob da was von Write only bei SPI steht.
      Wenn ja entweder mit fonts tricksen oder für das Display einen ram speicher bauen den manipuliren und dann dem ganzen inhalt übertragen. Hat hier schonmal wer für irgendein Display gebastelt gehabt.

      Tobias