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
Alles anzeigen
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
- 'U, I, P, Ah über ADC 1+2
- 'Max7219 Anzeige
- '2 x 7-Segment Display
- '4 Stellen VDC +
- '4 Stellen Amp +
- '4 Stellen Leistung +
- '4 Stellen AH
- '1901018
- 'geht
- $regfile = "m8def.dat"
- $crystal = 8000000
- $hwstack = 20
- $swstack = 20
- $framesize = 20
- Config Portd.5 = Output
- Config Portd.6 = Output
- Config Portd.7 = Output
- Clk Alias Portd.5
- Cs Alias Portd.6
- Din Alias Portd.7
- Const A = 16 'Anzahl_displays
- Dim D_st(a) As Word 'Anzeige Stelle als Nr (Einer = 1)
- Dim D_nr As Byte 'Anzeige Nr (Einer = 1)
- Dim D_da As Byte 'Anzeige Daten
- Dim H As Byte 'Hilfsvariable
- Dim S As Byte 'Hilfsvariable
- Dim Z1 As Word 'ADC-Wert
- Dim I1 As Word 'Schleifenzähler
- Dim V1 As Single 'Zwischenwert
- Dim N1 As Word 'Zwischenwert
- Dim Z2 As Word 'ADC-Wert
- Dim I2 As Word 'Schleifenzähler
- Dim V2 As Single 'Zwischenwert
- Dim N2 As Word 'Zwischenwert
- Dim P1 As Single 'errechnete Leistung
- Dim P2 As Word 'errechnete Leistung
- Dim Ah1 As Word 'errechnete Amperestunden
- Dim Ah2 As Single 'errechnete Amperestunden
- Dim Ah3 As Word 'errechnete Amperestunden
- Dim Hell As Word
- '**************************** Grundeinstellungen
- Hell = 0
- Ah1 = 0
- Ah2 = 0
- Cs = 1
- Gosub Setup1
- Config Adc = Single , Prescaler = Auto , Reference = Avcc
- Start Adc 'AD-Wandler Einschalten
- '************************************************
- Do
- '********** Spannungsberechnung ADC 1
- V1 = 0
- For I1 = 1 To 400
- Z1 = Getadc(2)
- V1 = Z1 + V1
- Next I
- N1 = V1 / 100
- D_st(8) = N1 / 10000
- D_st(8) = N1 Mod 10000
- D_st(8) = D_st(8) / 1000
- D_st(7) = N1 Mod 1000
- D_st(7) = D_st(7) / 100
- D_st(6) = N1 Mod 100
- D_st(6) = D_st(6) / 10
- D_st(5) = N1 Mod 10
- 'Vornullenunterdrückung
- If D_st(8) = 0 Then D_st(8) = 15 Else Goto Nach1
- Nach1:
- D_st(7) = D_st(7) + 128 'Komma = + 128
- '********** Stromberechnung ADC 2
- V2 = 0
- For I2 = 1 To 400
- Z2 = Getadc(1)
- V2 = Z2 + V2
- Next I2
- N2 = V2 / 400
- D_st(4) = N2 / 10000
- D_st(4) = N2 Mod 10000
- D_st(4) = D_st(4) / 1000
- D_st(3) = N2 Mod 1000
- D_st(3) = D_st(3) / 100
- D_st(2) = N2 Mod 100
- D_st(2) = D_st(2) / 10
- D_st(1) = N2 Mod 10
- 'Vornullenunterdrückung
- If D_st(4) = 0 Then D_st(4) = 15 Else Goto Nach2
- Nach2:
- D_st(3) = D_st(3) + 128 'Komma = + 128
- '********** Leistungsberechnung
- P1 = N1 * N2
- P2 = P1 / 1000
- D_st(12) = P2 / 10000
- D_st(12) = P2 Mod 10000
- D_st(12) = D_st(12) / 1000
- D_st(11) = P2 Mod 1000
- D_st(11) = D_st(11) / 100
- D_st(10) = P2 Mod 100
- D_st(10) = D_st(10) / 10
- D_st(9) = P2 Mod 10
- 'Vornullenunterdrückung
- If D_st(12) = 0 Then D_st(12) = 15 Else Goto Nach3
- If D_st(11) = 0 Then D_st(11) = 15
- Nach3:
- D_st(10) = D_st(10) + 128 'Komma = + 128
- '********** Berechnung Amperestunden
- Ah1 = V2 / 400
- Ah2 = Ah2 + Ah1
- Ah3 = Ah2 / 1000
- If Ah3 > 9999 Then Goto Nach4 'umschalten auf 2 Stellen
- D_st(16) = Ah3 / 10000
- D_st(16) = Ah3 Mod 10000
- D_st(16) = D_st(16) / 1000
- D_st(15) = Ah3 Mod 1000
- D_st(15) = D_st(15) / 100
- D_st(14) = Ah3 Mod 100
- D_st(14) = D_st(14) / 10
- D_st(13) = Ah3 Mod 10
- D_st(16) = D_st(16) + 128 'Komma = + 128
- Goto Nach5
- Nach4:
- Ah3 = Ah3 / 10
- D_st(16) = Ah3 / 10000
- D_st(16) = Ah3 Mod 10000
- D_st(16) = D_st(16) / 1000
- D_st(15) = Ah3 Mod 1000
- D_st(15) = D_st(15) / 100
- D_st(14) = Ah3 Mod 100
- D_st(14) = D_st(14) / 10
- D_st(13) = Ah3 Mod 10
- D_st(15) = D_st(15) + 128 'Komma = + 128
- Nach5:
- Gosub Anzeigen
- Waitms 145 'genaue Einstellung AH (10 Amp/1 Min = 0,166)
- Loop
- End
- '************************************************
- Anzeigen:
- For H = 1 To 8
- Cs = 0
- D_nr = H
- D_da = D_st(h)
- Shiftout Din , Clk , D_nr , 1
- Shiftout Din , Clk , D_da , 1
- H = H + 8
- D_da = D_st(h)
- Shiftout Din , Clk , D_nr , 1
- Shiftout Din , Clk , D_da , 1
- Cs = 1
- H = H - 8
- Next H
- Return
- '************************************************
- Helligkeit:
- 'Hell = Getadc(0)
- 'Hell = Hell / 70
- Hell = 4 'kein Trimmer dran
- Gosub Setup1
- Return
- '************************************************
- Setup1: ' Setup max7219
- D_nr = &H09 : D_da = 255 ' BCD - Modus
- Gosub Setup2
- D_nr = &H0A : D_da = 4 ' Helligkeit 0-15
- Gosub Setup2
- D_nr = &H0B : D_da = 7 'Stellen
- Gosub Setup2
- D_nr = &H0F : D_da = 0 ' Test aus
- Gosub Setup2
- D_nr = &H0C : D_da = 1 ' Shutdown aus
- Gosub Setup2
- Return
- Setup2:
- Cs = 0
- For S = 1 To 2 'Anzahl 7219
- Shiftout Din , Clk , D_nr , 1
- Shiftout Din , Clk , D_da , 1
- Next S
- Cs = 1
- Return
- '************************************************