'Akkuentlader mit Grafikdisplay 'http://www.team-iwan.de/technik/elektronik/akkuentlader.php 'Michael Kinz $regfile = "m16def.dat" $crystal = 14745600 $baud = 115200 Config Timer1 = Timer , Prescale = 1024 Config Graphlcd = 240 * 64 , Dataport = Portb , Controlport = Portd , Wr = 2 , Rd = 3 , Ce = 4 , Cd = 5 , Reset = 6 , Fs = 7 , Mode = 6 On Timer1 On_timer1 Enable Timer1 Enable Interrupts Cls Graph Cls Text Cursor Off Noblink Config Adc = Single , Prescaler = Auto , Reference = Internal Config Portc.7 = Output Portc.6 = 1 Portc.5 = 1 Portc.4 = 1 Dim Adwertu As Word Dim Adwert1 As Word Dim Iend As Word Dim Tempx As Word Dim Tempup As Word Dim Tempip As Word Dim I(16) As Word Dim U(8) As Word Dim Uend As Word Dim Temp As Byte Start Adc Dim Tempw As Word Dim Tempb As Byte Dim X As Word Dim Wert As Single Dim Rwert As Single Dim Stelle1 As Word 'Tempx = 20 Dim Xs As Word Dim Ys As Word Dim Mah As Word Dim Flag As Byte Dim Flag1 As Bit Dim Zellen As Byte Dim Xo As Byte Dim Xu As Byte Dim Bla As Byte Dim Erwkap As Byte Dim Schrittw As Byte 'Line(2 , 0) -(4 , 0) , 1 'Line(2 , 12) -(4 , 12) , 1 'Line(2 , 25) -(4 , 25) , 1 'Line(2 , 38) -(4 , 38) , 1 'Line(2 , 51) -(4 , 51) , 1 'Line(2 , 63) -(4 , 63) , 1 Dim Var As Byte Dim Espannung As Word Dim Z As Byte Taster1 Alias Pinc.5 Taster2 Alias Pinc.4 Taster3 Alias Pinc.6 X = 0 Portc.7 = 1 Flag = 1 Locate 8 , 32 Lcd "TEAM-IWAN" Do Gosub Adlesen Gosub Anzeige Gosub Taster Gosub Rechnen1 Gosub Anzeige1 If Zellen > 0 Then Tempb = Zellen * 2 Gosub Rechnen: End If Pset X , Ys , 0 Pset X , Uend , 1 Xs = X Ys = Uend Loop Until Taster3 = 0 Espannung = Zellen * 50 Flag = 0 Gosub Printw: '-------------------------------------- Do Portc.7 = 0 'Bitwait Var.7 , Set 'Reset Var.7 Gosub Adlesen Gosub Rechnen If Var.7 = 1 Then Reset Var.7 Line(xs , Ys) -(x , Uend) , 1 Xs = X Ys = Uend Gosub Printw X = X + 1 End If If Flag1 = 1 Then Gosub Printw End If Waitms 200 Gosub Anzeige Gosub Rechnen1 Gosub Filterni Gosub Anzeige1 Loop Until Tempx < Espannung Flag = 1 Portc.7 = 1 Locate 8 , 2 Lcd "Fertig !" End '----------------------------------------------------------------------- On_timer1: Timer1 = 9286 Z = Z + 1 If Z > Schrittw Then Set Var.7 Z = 1 End If If Flag = 0 Then Mah = Mah + 1 Set Flag1 End If Return Adlesen: Adwertu = Getadc(0) Adwert1 = Getadc(1) For Bla = 8 To 1 Step -1 Temp = Bla - 1 If Temp = 0 Then U(1) = Adwertu Else U(bla) = U(temp) End If Next Uend = 0 For Bla = 1 To 8 Uend = Uend + U(bla) Next Uend = Uend / 8 Tempx = Uend Tempup = Uend Return Rechnen: ' Position der Spannung ausrechnen Uend = Uend / Tempb Uend = 63 - Uend Return Rechnen1: ' Strom ausrechnen Adwert1 = Adwert1 * 16 Adwert1 = Adwert1 / 7 Return Filterni: 'Iend = Adwert1 For Bla = 16 To 1 Step -1 Temp = Bla - 1 If Temp = 0 Then I(1) = Adwert1 Else I(bla) = I(temp) End If Next Iend = 0 For Bla = 1 To 16 Iend = Iend + I(bla) Next Iend = Iend / 16 Tempip = Iend Return Anzeige: Wert = Tempx * 1.423 Wert = Wert / 100 Tempw = Wert * 100 Stelle1 = Tempw / 100 Locate 5 , 2 Lcd "U= " ; Stelle1 ; "," ; Stelle1 = Stelle1 * 100 Tempw = Tempw - Stelle1 'If Tempw < 10 Then 'Lcd "0" ; 'End If If Tempw < 10 Then Lcd "0" ; End If If Tempw = 0 Then Lcd "0" ; End If Lcd Tempw ; " V " Locate 2 , 17 Lcd "Zellen = "; If Zellen = 0 Then Lcd "?" Else Lcd Zellen End If Locate 2 , 29 Lcd "C = "; If Erwkap = 0 Then Lcd "?" Else Temp = Erwkap / 10 If Erwkap < 10 Then Lcd "0"; Else Lcd Temp; End If Temp = Erwkap Mod 10 Lcd "," ; Temp ; " Ah" End If Return Anzeige1: Locate 6 , 2 Lcd "I= " ; If Iend < 1000 Then Lcd " "; End If If Iend < 100 Then Lcd " "; End If If Iend < 10 Then Lcd " "; End If Lcd Iend ; " mA " Lcd Adwert1 ; " " Locate 7 , 2 Lcd "C= " ; If Mah < 1000 Then Lcd " "; End If If Mah < 100 Then Lcd " "; End If If Mah < 10 Then Lcd " "; End If Lcd Mah ; " mAh " Return Taster: If Taster1 = 0 Then Waitms 100 If Taster1 = 0 Then Zellen = Zellen + 1 End If End If If Zellen > 8 Then Zellen = 0 End If If Taster2 = 0 Then Waitms 100 If Taster2 = 0 Then Incr Erwkap Incr Erwkap End If End If If Erwkap > 20 Then Erwkap = 0 End If Schrittw = Erwkap / 2 Return Printw: Print X ; "," ; Tempup ; "," ; Tempip Flag1 = 0 Return