-
Hi,
also das Display würd ich maximal alle Sekunde Updaten...
dann hat sich ein kleiner tipp fehler in den kommentaren eingeschlichen.
"gestartet, bei 32,25kHz ist er nach genau einer halben Sekunde bei 15625
Stop Timer1 "
also beim Prescaler von 256 hast 31,25khz und und nicht 32 =) (das mal nur so am rande *g*)
da ich mich mit basecom null auskenne kann ich dir zu den fehlern nicht helfen.
Zum Fehler in Line 38, du versuchst nen String und nen Word zu addieren, das klappt nicht ^^ (ich hoffe mal auch in Basic nicht :o)
Als ich mal in Basecom was getestet hatte musst ich "Enable Timer1" zum starten nutzen ist das mittlerweile anders ?
-
So, hier jetzt meine zweite Version, die sich auch ohne Fehler kompilieren lässt :
Code:
$regfile = "m8def.dat" 'Definieren des Chips
$crystal = 8000000 'Frequenz
Config Adc = Single , Prescaler = Auto , Reference = Off 'ADC konfigurieren mir Aref als Referenzspannung
Start Adc
Config Lcd = 16 * 1 'LCD konfigurieren
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
Config Lcdbus = 4
Cls
Config Timer1 = Timer , Prescale = 256 'Timer1 (16-bit) konfigurieren
Start Timer1 'Mit dem Prescaler ergibt es 31250Hz
Stop Timer1
Dim Strom2 As Single 'Strom 1,5*10^-45 bis 3,4*10^38
Dim Strom As Single 'Strom2 1,5*10^-45 bis 3,4*10^38
Dim Strom_wert As Word 'Strom_wert 0 bis 65.536
Dim Verbraucht As Word 'Verbraucht 0 bis 65.536
Do
Gosub Hauptprogramm ' Verweis auf Subroutine
Loop
End
Hauptprogramm:
Timer1 = 0
Start Timer1 'Timer1 Starten
Strom_wert = Getadc(5) 'ADC an Portc.5 auslesen (Werte 0 bis 1024)
Strom = Strom + Strom_wert 'Gemessener Wert wird in jedem Durchgang addiert
Strom2 = Strom * 100000 'Umrechnung des Wertes in den realen Amperewert (in mAh)
Strom2 = Strom2 / 4096 'Umrechnung des Wertes in den realen Amperewert (in mAh)
Verbraucht = Strom2 / 3600 'Umrechnung wie viel mA in einer halben Sekunde verbraucht werden
If Verbraucht < 10 Then
Locate 1 , 4
End If
If Verbraucht < 100 Then
Locate 1 , 3
End If
If Verbraucht < 1000 Then
Locate 1 , 2
Else
Locate 1 , 1
End If
Lcd Verbraucht ; " mAh" 'die bisher verbrauchten mAh werden angezeigt
Strom2 = Strom_wert * 100 'Aktueller Stromverbrauch (in A) ausrechnen
Strom2 = Strom2 / 4096
If Strom2 < 10 Then
Locate 1 , 14
Else
Locate 1 , 13
End If
Lcd Strom2 'Am Ende des Displays wird der aktuelle Stromverbrauch angezeigt
Locate 1 , 16
Lcd "A"
Gosub Warten 'Jetzt ist der Auswertung fertig und der AVR soll warten bis ne halbe Sekunde rum ist
Return
Warten:
If Timer1 > 31249 Then 'Wir errinnern uns - am anfang wurde der Timer gestartet, bei 32,25kHz ist er nach genau einer halben Sekunde bei 15625
Stop Timer1
Gosub Hauptprogramm 'Dann wird das Hautprogramm wieder gestartet und die Werte werden Aktualisiert
Else
Gosub Warten 'Wenn der Wert noch nicht erreicht ist Wird die Subroutine so lange wiederholt, bis der Wert erricht wird
End If
Return
Ich habe die Updaterate jetzt wieder auf eine Sekunde erhöht..
Werde die Hardware bei Zeiten mal aufbauen und die SOftware testen.. Ich werde dann berichten ;-)