2 Displays (a 8 Stellen mit max7219) aus Fernost betreiben

    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!

    • 2 Displays (a 8 Stellen mit max7219) aus Fernost betreiben

      Hallo Bascom Freunde!


      Anbei Beispiel 2 Displays (a 8 Stellen mit max7219) aus Fernost zu betreiben.

      Es funktioniert aber Code hat noch viel Spielraum um verbessert zu werden.


      Angezeigt werden U, I, P und AH.
      wobei die Amperestunden über 9,999 auf 10,00 (also 2 Komma) springen.
      bei größer als 65 Ah wird wieder bei 0 begonnen (Word), das gehört noch verbessert.
      Mit Reset wird auf Null gestellt.

      U und I sind auf meinem Prototypen mit Trimmer dargestellt,
      bei Anwendung sind natürlich Eingangsspannungsteiler bzw. Stromverstärkung (OP)
      entsprechend herzustellen.

      (zur Ergänzung MC = atm8 mit int 8mhz)

      Ich möchte mich bei dieser Gelegenheit bei Meister Hora bzw. Meister Tschoeatsch herzlich bedanken,
      da ich in seinen Beiträgen reichlich Inspirationen gefunden habe und natürlich auch einiges abgegugt habe.


      mfg. Peter



      bascomforum.de/index.php?attac…1cc25ec876b1bb0dcefa1896e


      BASCOM-Quellcode

      1. 'U, I, P, Ah über ADC 1+2
      2. 'Max7219 Anzeige
      3. '2 x 7-Segment Display
      4. '4 Stellen VDC +
      5. '4 Stellen Amp +
      6. '4 Stellen Leistung +
      7. '4 Stellen AH
      8. '1901018
      9. 'geht
      10. $regfile = "m8def.dat"
      11. $crystal = 8000000
      12. $hwstack = 20
      13. $swstack = 20
      14. $framesize = 20
      15. Config Portd.5 = Output
      16. Config Portd.6 = Output
      17. Config Portd.7 = Output
      18. Clk Alias Portd.5
      19. Cs Alias Portd.6
      20. Din Alias Portd.7
      21. Const A = 16 'Anzahl_displays
      22. Dim D_st(a) As Word 'Anzeige Stelle als Nr (Einer = 1)
      23. Dim D_nr As Byte 'Anzeige Nr (Einer = 1)
      24. Dim D_da As Byte 'Anzeige Daten
      25. Dim H As Byte 'Hilfsvariable
      26. Dim S As Byte 'Hilfsvariable
      27. Dim Z1 As Word 'ADC-Wert
      28. Dim I1 As Word 'Schleifenzähler
      29. Dim V1 As Single 'Zwischenwert
      30. Dim N1 As Word 'Zwischenwert
      31. Dim Z2 As Word 'ADC-Wert
      32. Dim I2 As Word 'Schleifenzähler
      33. Dim V2 As Single 'Zwischenwert
      34. Dim N2 As Word 'Zwischenwert
      35. Dim P1 As Single 'errechnete Leistung
      36. Dim P2 As Word 'errechnete Leistung
      37. Dim Ah1 As Word 'errechnete Amperestunden
      38. Dim Ah2 As Single 'errechnete Amperestunden
      39. Dim Ah3 As Word 'errechnete Amperestunden
      40. Dim Hell As Word
      41. '**************************** Grundeinstellungen
      42. Hell = 0
      43. Ah1 = 0
      44. Ah2 = 0
      45. Cs = 1
      46. Gosub Setup1
      47. Config Adc = Single , Prescaler = Auto , Reference = Avcc
      48. Start Adc 'AD-Wandler Einschalten
      49. '************************************************
      50. Do
      51. '********** Spannungsberechnung ADC 1
      52. V1 = 0
      53. For I1 = 1 To 400
      54. Z1 = Getadc(2)
      55. V1 = Z1 + V1
      56. Next I
      57. N1 = V1 / 100
      58. D_st(8) = N1 / 10000
      59. D_st(8) = N1 Mod 10000
      60. D_st(8) = D_st(8) / 1000
      61. D_st(7) = N1 Mod 1000
      62. D_st(7) = D_st(7) / 100
      63. D_st(6) = N1 Mod 100
      64. D_st(6) = D_st(6) / 10
      65. D_st(5) = N1 Mod 10
      66. 'Vornullenunterdrückung
      67. If D_st(8) = 0 Then D_st(8) = 15 Else Goto Nach1
      68. Nach1:
      69. D_st(7) = D_st(7) + 128 'Komma = + 128
      70. '********** Stromberechnung ADC 2
      71. V2 = 0
      72. For I2 = 1 To 400
      73. Z2 = Getadc(1)
      74. V2 = Z2 + V2
      75. Next I2
      76. N2 = V2 / 400
      77. D_st(4) = N2 / 10000
      78. D_st(4) = N2 Mod 10000
      79. D_st(4) = D_st(4) / 1000
      80. D_st(3) = N2 Mod 1000
      81. D_st(3) = D_st(3) / 100
      82. D_st(2) = N2 Mod 100
      83. D_st(2) = D_st(2) / 10
      84. D_st(1) = N2 Mod 10
      85. 'Vornullenunterdrückung
      86. If D_st(4) = 0 Then D_st(4) = 15 Else Goto Nach2
      87. Nach2:
      88. D_st(3) = D_st(3) + 128 'Komma = + 128
      89. '********** Leistungsberechnung
      90. P1 = N1 * N2
      91. P2 = P1 / 1000
      92. D_st(12) = P2 / 10000
      93. D_st(12) = P2 Mod 10000
      94. D_st(12) = D_st(12) / 1000
      95. D_st(11) = P2 Mod 1000
      96. D_st(11) = D_st(11) / 100
      97. D_st(10) = P2 Mod 100
      98. D_st(10) = D_st(10) / 10
      99. D_st(9) = P2 Mod 10
      100. 'Vornullenunterdrückung
      101. If D_st(12) = 0 Then D_st(12) = 15 Else Goto Nach3
      102. If D_st(11) = 0 Then D_st(11) = 15
      103. Nach3:
      104. D_st(10) = D_st(10) + 128 'Komma = + 128
      105. '********** Berechnung Amperestunden
      106. Ah1 = V2 / 400
      107. Ah2 = Ah2 + Ah1
      108. Ah3 = Ah2 / 1000
      109. If Ah3 > 9999 Then Goto Nach4 'umschalten auf 2 Stellen
      110. D_st(16) = Ah3 / 10000
      111. D_st(16) = Ah3 Mod 10000
      112. D_st(16) = D_st(16) / 1000
      113. D_st(15) = Ah3 Mod 1000
      114. D_st(15) = D_st(15) / 100
      115. D_st(14) = Ah3 Mod 100
      116. D_st(14) = D_st(14) / 10
      117. D_st(13) = Ah3 Mod 10
      118. D_st(16) = D_st(16) + 128 'Komma = + 128
      119. Goto Nach5
      120. Nach4:
      121. Ah3 = Ah3 / 10
      122. D_st(16) = Ah3 / 10000
      123. D_st(16) = Ah3 Mod 10000
      124. D_st(16) = D_st(16) / 1000
      125. D_st(15) = Ah3 Mod 1000
      126. D_st(15) = D_st(15) / 100
      127. D_st(14) = Ah3 Mod 100
      128. D_st(14) = D_st(14) / 10
      129. D_st(13) = Ah3 Mod 10
      130. D_st(15) = D_st(15) + 128 'Komma = + 128
      131. Nach5:
      132. Gosub Anzeigen
      133. Waitms 145 'genaue Einstellung AH (10 Amp/1 Min = 0,166)
      134. Loop
      135. End
      136. '************************************************
      137. Anzeigen:
      138. For H = 1 To 8
      139. Cs = 0
      140. D_nr = H
      141. D_da = D_st(h)
      142. Shiftout Din , Clk , D_nr , 1
      143. Shiftout Din , Clk , D_da , 1
      144. H = H + 8
      145. D_da = D_st(h)
      146. Shiftout Din , Clk , D_nr , 1
      147. Shiftout Din , Clk , D_da , 1
      148. Cs = 1
      149. H = H - 8
      150. Next H
      151. Return
      152. '************************************************
      153. Helligkeit:
      154. 'Hell = Getadc(0)
      155. 'Hell = Hell / 70
      156. Hell = 4 'kein Trimmer dran
      157. Gosub Setup1
      158. Return
      159. '************************************************
      160. Setup1: ' Setup max7219
      161. D_nr = &H09 : D_da = 255 ' BCD - Modus
      162. Gosub Setup2
      163. D_nr = &H0A : D_da = 4 ' Helligkeit 0-15
      164. Gosub Setup2
      165. D_nr = &H0B : D_da = 7 'Stellen
      166. Gosub Setup2
      167. D_nr = &H0F : D_da = 0 ' Test aus
      168. Gosub Setup2
      169. D_nr = &H0C : D_da = 1 ' Shutdown aus
      170. Gosub Setup2
      171. Return
      172. Setup2:
      173. Cs = 0
      174. For S = 1 To 2 'Anzahl 7219
      175. Shiftout Din , Clk , D_nr , 1
      176. Shiftout Din , Clk , D_da , 1
      177. Next S
      178. Cs = 1
      179. Return
      180. '************************************************
      Alles anzeigen