Hi,
ich habe ien Problem mit meinem Programm.
Es funktioniert einwandfrei bis der Amperestundenzähler 7mAh anzeigt.
Dann Zeigt das Display nur noch wirre Zeichen.
Irgendwann Zeigt es dann wieder alles richtig zB bei 20 mAh an und dann
fängt er wier mit Datenschrott im Display an. Nach 23 mAh geht die Anzeige auf #Null.
Alles seit dem ich bei Isr_von_timer1: die Amperestundenberechnung habe.
Code:$regfile = "m8def.dat" $crystal = 1000000 $hwstack = 32 ' default use 32 for the hardware stack $swstack = 10 ' default use 10 for the SW stack $framesize = 40 ' default use 40 for the frame space Ddrc = &B11111001 'Pin PC1, PC2 Eingang Config Adc = Single , Prescaler = Auto Start Adc 'schalte den Timer1 ein Config Timer1 = Timer , Prescale = 256 'timer 1 0 bis 65535 Zählen Taktfrequenz durch 256 =1000000/256=3906,25 Hz Enable Timer1 ' 65536 - 3906 = 61630 On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1 Enable Interrupts Timer1 = 61630 'Timer1 soll schon von 61629 wegzählen Dim Ah_zaehler As Word Dim Ah As Single Dim Watt_p As Word Dim Wert As Word , Channel As Byte Dim Volt As Single Dim Adcstrom As Word Dim Shuntspannung As Single Dim Strom As Single Dim Mstrom As Single Dim Prozent As Word '--------------------------------- EEPROM '------------------------------ Config Lcdbus = 4 Config Lcd = 16 * 2 'configure lcd screen Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.5 , Rs = Portb.6 Waitms 100 Initlcd Waitms 100 Display On Cursor Off Noblink Cls Do Channel = 1 Wert = Getadc(channel) 'Spannungsmessung Channel = 2 Adcstrom = Getadc(channel) 'Strommessung Volt = 0.0048875855 * Wert ' 1024 /5 * ADC Wert = Spannung Volt = Volt * 3 ' bei 15 Volt 5V am ADC Shuntspannung = 0.00488 * Adcstrom ' Spannungsabfall Shunt in Volt Strom = Shuntspannung / 3.9 ' Widerstand 3,7 Ohm Mstrom = Strom * 1000 ' mA Umrechnung '----------------------------------------- Amperestundenanzeige Locate 1 , 1 Lcd Fusing(mstrom , "###.#") ; "mA" 'fusing Befehl für Stellenangabe ###.## Locate 2 , 1 Lcd Fusing(volt , "##.##") ; "V " Locate 2 , 8 '----------------------------- Ladesteuerung If Volt < 13.4 Then Portc.5 = 1 Locate 2 , 13 Lcd "lade " End If If Volt > 13.9 Then Portc.5 = 0 Locate 1 , 10 Lcd "voll " End If Waitms 500 Loop '------------------------------- geladene Ampere pro Stunde Isr_von_timer1: 'ISR von Timer1 Timer1 = 61630 'Timer1 soll wieder von 61630 wegzählen Toggle Portc.4 'schaltet Portd.0 im Sekundentakt 'EIN und AUS Ah_zaehler = Ah_zaehler + Adcstrom 'ADC Shunt jede secunde in Ah_zaehler addiert Ah = Ah_zaehler * 0.00488 'Spannung ausrechnen Ah = Ah / 3.9 ' Strom Ausrechnen 3,9 Ohm Ah = Ah / 3600 ' Ah Ausrechnen 1/sec = 3600 Locate 2 , 8 Lcd Fusing(ah , "#.###") ; "Ah" Return End







Zitieren

Lesezeichen