Ansteuerung von zwei HDLG-2416 LED-Displays über zwei HC595

    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!

    • Ansteuerung von zwei HDLG-2416 LED-Displays über zwei HC595

      Ich will euch heute mal meine Ansteuerung vor den HDLG-2416 5x7 LED-Textdisplays vorstellen.
      Die Ansteuerung erfolgt dabei über zwei HC595 Schieberegister.



      Im Anhang findet ihr noch das Datenblatt und den Code.
      Einen Schaltplan reiche ich noch nach.
      Dateien
      • HDLG-2416.pdf

        (348,13 kB, 29 mal heruntergeladen, zuletzt: )
      • HDLG-2416.bas

        (6,13 kB, 19 mal heruntergeladen, zuletzt: )
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Könntest du nicht noch mehr pins sparen? Ser könnte verbunden werden, wenn du mit dem clock (Sdk) die Daten nur in ein Register rein schiebst. Auch Rck müsste man auf einen pin legen können. Also nur 4 pins nötig. Oder?
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Das Problem bei den Anzeigen ist, dass man erst die Control-Pins (welche Stelle und Helligkeit) ansteuern muss und danach erst die Daten über die 7 Bit ausgeben muss.
      Ich habe mich mit den Anzeigen schon etwas länger beschäftigt und auch Versuche mit nur drei Leitungen (SER, SCK und RCK) gemacht aber da kam nur Müll auf dem Display an.
      Was noch gehen würde wäre SER und SCK zusammen schalten und RCK getrennt ansteuern. Dann kann man erst die Control-Register ansteuern und danach die Daten ausgeben.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Ok, ich wusste nicht, das die einen zeitlichen Ablauf brauchen. Mit deiner Beschaltung sollte es auch gehen, es steht dann in jeweils einem Register nur Summs drin, der stört aber nicht, weil er nicht nach draußen kommt.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Schöner wäre es natürlich wenn man über die Daten-Pins alles steuern könnte nur leider haben diese Displays zur Steuerung noch weitere Pins (siehe Datenblatt) über die man erstmal die zu beschreibende Stelle aktivieren muss. Über A0 und A1 legt man die Stelle fest und mit WR schreibt man dann die Daten auf die jeweilige Stelle.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • So hier nun die erweiterte Version von den Displays.



      Als ich diese Version umgebaut habe ist mir ein Fehler im verher gezeigten Schaltplan aufgefallen. Bei dem HC595 für die Daten werden die Ausgänge Q0 - Q6 benutzt und nicht wie angegeben Q1 - Q7. Die richtige Version reiche ich noch nach.

      Bei der jetzigen Anzeige ist lediglich noch ein HC595 für die Control-Pins dazu gekommen.
      Leider lässt sich die Anzahl der Pins nicht verringern. Es bleibt also bei den 7 Pins.
      Dateien
      • HDLG-2416 V2.bas

        (8,03 kB, 10 mal heruntergeladen, zuletzt: )
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Spontan fällt mir eine Anwendung als 'Rentneruhr' ein. Ein countdown bis zum Erreichen der Rentenanwartschaft. Einmal zählen die Restsekunden runter, dreht man die Uhr um, werden Restjahre, -tage, -stunden, -minuten und Restsekunden angezeigt. Erkannt wird die Lage mit einen Beschleunigungssensor. Durch die Punktmatrix kann noch zwischendurch eine Erklärung angezeigt werden.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hier habe ich mal noch ein weiteres Beispiel für die Anzeige.
      Dabei wird jetzt die gesammte Datentabelle wie ein zusammenhängender Text ausgegeben.
      Also an einem Stück :)

      BASCOM-Quellcode

      1. 'HDLG-2415 5x7 Anzeige x 4
      2. 'Gesteuert über drei HC595
      3. $regfile = "m8def.dat"
      4. $crystal = 8000000
      5. $hwstack = 64
      6. $swstack = 64
      7. $framesize = 100
      8. Config Portb.0 = Output 'Serial Data Control
      9. Config Portb.1 = Output 'Reset
      10. Config Portb.2 = Output 'SCK Daten
      11. Config Portb.3 = Output 'RCK Daten
      12. Config Portb.4 = Output 'RCK Control
      13. Config Portb.5 = Output 'Serial Data
      14. Config Portd.7 = Output 'SCK Control
      15. Ser_data Alias Portb.5
      16. Sck_data Alias Portb.2
      17. Rck_data Alias Portb.3
      18. Ser_ctrl Alias Portb.0
      19. Sck_ctrl Alias Portd.7
      20. Rck_ctrl Alias Portb.4
      21. Scl_disp Alias Portb.1
      22. Reset Ser_data
      23. Reset Sck_data
      24. Reset Rck_data
      25. Reset Ser_ctrl
      26. Reset Sck_ctrl
      27. Reset Rck_ctrl
      28. Set Scl_disp
      29. Declare Sub Write_display(byval Stelle As Byte , Byval Zeichen As Byte)
      30. Declare Sub Brightness_display(byval Bright As Byte)
      31. 'Hilfsvariablen für For Next Schleifen
      32. Dim Count As Word , I As Byte , J As Byte , X As Byte , Y As Byte , Z As Byte
      33. 'Textvariablen
      34. Dim B_out As Byte , Char(16) As Byte , Zeichenanzahl As Byte , Text_pause As Bit
      35. Dim Buchstabe As String * 1 , Text As String * 255 , Last_text As String * 16
      36. Dim Temptext As String * 255
      37. 'Displayvariablen
      38. Dim Setup_display As Word , Display_stelle As Word , Brightness As Byte , Di As Byte , Dy As Byte
      39. Const Eintraege = 4
      40. Const Start_db = 0
      41. Buchstabe = ""
      42. X = 15
      43. Count = Start_db
      44. Brightness = 0
      45. Text_pause = 0
      46. Y = 1
      47. Last_text = ""
      48. I = Eintraege - 1
      49. Gosub Clear_display
      50. Wait 1
      51. Do
      52. Temptext = Lookupstr(count , Texte)
      53. Select Case Count
      54. Case 0 : Text = " " + Temptext
      55. Case I : Text = Last_text + " " + Temptext + " "
      56. Case Else Text = Last_text + " " + Temptext
      57. End Select
      58. Zeichenanzahl = Len(text)
      59. If Zeichenanzahl > 16 Then
      60. Zeichenanzahl = Zeichenanzahl - 15
      61. Gosub Scroll_text
      62. Incr Y
      63. If Y = Zeichenanzahl Then
      64. Last_text = Mid(text , Y , 15)
      65. Y = 1
      66. Incr Count
      67. If Count = Eintraege Then Count = Start_db
      68. End If
      69. Else
      70. Gosub Anzeige_text
      71. End If
      72. Waitms 180
      73. Loop
      74. End
      75. Scroll_text:
      76. X = 15
      77. For Z = 0 To 15
      78. J = Y + Z
      79. Buchstabe = Mid(text , J , 1)
      80. Select Case Buchstabe
      81. Case "Ä" : Char(z) = 21
      82. Case "Ö" : Char(z) = 23
      83. Case "Ü" : Char(z) = 25
      84. Case "ä" : Char(z) = 22
      85. Case "ö" : Char(z) = 24
      86. Case "ü" : Char(z) = 26
      87. Case "ß" : Char(z) = 29
      88. Case Else : Char(z) = Asc(buchstabe)
      89. End Select
      90. Next Z
      91. For Z = 0 To 15
      92. B_out = Char(z)
      93. Call Write_display(x , B_out)
      94. If X = 0 Then X = 16
      95. Decr X
      96. Next Z
      97. Return
      98. Anzeige_text:
      99. X = 15
      100. For I = 1 To 16
      101. Buchstabe = Mid(text , I , 1)
      102. Select Case Buchstabe
      103. Case "Ä" : B_out = 21
      104. Case "Ö" : B_out = 23
      105. Case "Ü" : B_out = 25
      106. Case "ä" : B_out = 22
      107. Case "ö" : B_out = 24
      108. Case "ü" : B_out = 26
      109. Case "ß" : B_out = 29
      110. Case Else : B_out = Asc(buchstabe)
      111. End Select
      112. Call Write_display(x , B_out)
      113. If X = 0 Then X = 16
      114. Decr X
      115. Next I
      116. Wait 5
      117. Return
      118. Clear_display:
      119. Reset Scl_disp
      120. Waitus 500
      121. Set Scl_disp
      122. Return
      123. Test_display:
      124. Call Brightness_display(7)
      125. Call Write_display(16 , 255)
      126. Wait 1
      127. Call Brightness_display(6)
      128. Call Write_display(16 , 255)
      129. Wait 1
      130. Call Brightness_display(5)
      131. Call Write_display(16 , 255)
      132. Wait 1
      133. Call Brightness_display(4)
      134. Call Write_display(16 , 255)
      135. Wait 1
      136. Call Brightness_display(3)
      137. Call Write_display(16 , 255)
      138. Wait 1
      139. Call Brightness_display(2)
      140. Call Write_display(16 , 255)
      141. Wait 1
      142. Call Brightness_display(1)
      143. Call Write_display(16 , 255)
      144. Wait 1
      145. Call Brightness_display(0)
      146. Call Write_display(16 , 255)
      147. Wait 2
      148. Gosub Clear_display
      149. Return
      150. Sub Brightness_display(byval Bright As Byte)
      151. Brightness = Lookup(bright , Brightness_data)
      152. Setup_display = Lookup(17 , Display_data)
      153. For Di = 15 To 0 Step -1
      154. Ser_ctrl = Setup_display.di
      155. Sck_ctrl = 1
      156. Sck_ctrl = 0
      157. Next Di
      158. Rck_ctrl = 1
      159. Rck_ctrl = 0
      160. For Di = 7 To 0 Step -1
      161. Ser_data = Brightness.di
      162. Sck_data = 1
      163. Sck_data = 0
      164. Next Di
      165. Rck_data = 1
      166. Rck_data = 0
      167. Display_stelle = Lookup(16 , Display_data)
      168. For Di = 15 To 0 Step -1
      169. Ser_ctrl = Display_stelle.di
      170. Sck_ctrl = 1
      171. Sck_ctrl = 0
      172. Next Di
      173. Rck_ctrl = 1
      174. Rck_ctrl = 0
      175. End Sub
      176. Sub Write_display(byval Stelle As Byte , Byval Zeichen As Byte)
      177. If Stelle = 16 Then
      178. For Dy = 0 To 15 Step 1
      179. Display_stelle = Lookup(dy , Display_data)
      180. For Di = 15 To 0 Step -1
      181. Ser_ctrl = Display_stelle.di
      182. Sck_ctrl = 0
      183. Sck_ctrl = 1
      184. Sck_ctrl = 0
      185. Next Di
      186. Rck_ctrl = 0
      187. Rck_ctrl = 1
      188. Rck_ctrl = 0
      189. For Di = 7 To 0 Step -1
      190. Ser_data = Zeichen.di
      191. Sck_data = 0
      192. Sck_data = 1
      193. Sck_data = 0
      194. Next Di
      195. Rck_data = 0
      196. Rck_data = 1
      197. Rck_data = 0
      198. Next Dy
      199. Else
      200. Display_stelle = Lookup(stelle , Display_data)
      201. For Di = 15 To 0 Step -1
      202. Ser_ctrl = Display_stelle.di
      203. Sck_ctrl = 0
      204. Sck_ctrl = 1
      205. Sck_ctrl = 0
      206. Next Di
      207. Rck_ctrl = 0
      208. Rck_ctrl = 1
      209. Rck_ctrl = 0
      210. Waitus 100
      211. For Di = 7 To 0 Step -1
      212. Ser_data = Zeichen.di
      213. Sck_data = 0
      214. Sck_data = 1
      215. Sck_data = 0
      216. Next Di
      217. Rck_data = 0
      218. Rck_data = 1
      219. Rck_data = 0
      220. End If
      221. Display_stelle = Lookup(16 , Display_data)
      222. For Di = 15 To 0 Step -1
      223. Ser_ctrl = Display_stelle.di
      224. Sck_ctrl = 0
      225. Sck_ctrl = 1
      226. Sck_ctrl = 0
      227. Next Di
      228. Rck_ctrl = 0
      229. Rck_ctrl = 1
      230. Rck_ctrl = 0
      231. Display_stelle = 0
      232. End Sub
      233. Texte:
      234. ' |10 |20 |30 |40 |50 |60 |70 |80 |90 |100 |110 |120 |130 |140 |150 |160 |170 |180 |190 |200 |210 |220 |230 |240 |250 |255
      235. Data "Hallo Bascom-Gemeinde hier mal ein weiteres Beispiel für die Anzeige mit 4 HDLG-2416 Displays. "
      236. Data "Bei dieser Variante wird der neue Text gleich an den vorhergehenden angefügt. "
      237. Data "Also der gesammte Text in der Datentabelle läuft ohne Unterbrechung durch. "
      238. Data "Somit lässt sich gut ein Info-Display aufbauen... "
      239. 'Bit15, Bit14, Bit13, Bit12, Bit11, Bit10, Bit9, Bit8 Bit7 , Bit6 , Bit5 , Bit4 , Bit3 , Bit2 , Bit1 , Bit0
      240. 'CUE , CU1 , WR1 , CU2 , WR2 , A1 , A0 , BL CUE , CU1 , WR1 , CU2 , WR2 , A1 , A0 , BL
      241. Display_data:
      242. ' D4-Stelle1 00 D4-Stelle2 01 D4-Stelle3 02 D4-Stelle4 03
      243. Data &B00101001_01110001% , &B00101001_01110011% , &B00101001_01110101% , &B00101001_01110111%
      244. ' D3-Stelle1 04 D3-Stelle2 05 D3-Stelle3 06 D3-Stelle4 07
      245. Data &B00101001_01011001% , &B00101001_01011011% , &B00101001_01011101% , &B00101001_01011111%
      246. ' D2-Stelle1 08 D2-Stelle2 09 D2-Stelle3 10 D2-Stelle4 11
      247. Data &B01110001_00101001% , &B01110011_00101001% , &B01110101_00101001% , &B01110111_00101001%
      248. ' D1-Stelle1 12 D1-Stelle2 13 D1-Stelle3 14 D1-Stelle4 15
      249. Data &B01011001_00101001% , &B01011011_00101001% , &B01011101_00101001% , &B01011111_00101001%
      250. ' Protect / Data hold Setup-Brightness
      251. Data &B00101001_00101001% , &B00000001_00000001%
      252. Brightness_data:
      253. ' 100% 60% 40% 27% 17% 10% 7% 3%
      254. Data &B00000000 , &B00001000 , &B00010000 , &B00011000 , &B00100000 , &B00101000 , &B00110000 , &B00111000
      255. 'Ende
      Alles anzeigen
      Viel Spass damit
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.

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