Hi,
folgendes gegeben: Durchflusssensor an Heizungsanlage, Open Collektor Ausgang, 96 Impule pro Liter, Pullup 4,7K. Signal an pind.0 eines Atmega8 angeschlossen. Interner RC Oszillator. Ansonsten orginal Fusebits.
Gemessen wird mit Timer1 von Fallender zu Fallender Flanke. Allerdings bekomme ich keine richtigen Werte. Zeit von Fallender bis Fallender Flanke mit Oszi gemessen. 60ms. Ergibt laut Adam Riese 625 Liter pro Stunde. Der AVR zeigt mir aber irgendwas um die 910 Liter an. Habe auchmal einen neuen genommen. Gleiches Ergebnis. Hab ich irgend einen Denkfehler?
Code:$regfile "m8def.dat" $crystal = 2000000 $hwstack = 30 $swstack = 30 $framesize = 30 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.7 , Db6 = Portb.0 , Db7 = Portb.1 , E = Portd.5 , Rs = Portd.4 Config Timer1 = Timer , Prescale = 64 Enable Interrupts Config Portd.3 = Output 'R/W vom Display Config Pind.0 = Input Portd.3 = 0 Dim State As Bit Dim Durchfluss As Word Dim Durchflusstemp As Word Dim Tempword As Word Dim Tempword1 As Word Dim Templong As Long Dim Tempsingle As Single Dim Displaywarten As Byte State = 0 Wait 1 Cls Cursor Off 'Hauptprogramm Do If Pind.0 = 0 And State = 0 Then Tccr1b = &B00000011 State = 1 Waitms 1 Gosub Wait_one Gosub Wait_zero End If If State = 1 Then State = 0 Gosub Auswerten Gosub Wait_one End If Loop Auswerten: Tempword1 = Tcnt1l Tempword = Tcnt1h * 256 Tempword = Tempword + Tempword1 'ca 2031.3 Templong = Tempword * 95 'Zeit für 1 Liter Tempsingle = 31250 / Templong 'Liter pro Sekunde Durchflusstemp = Tempsingle * 3600 'Liter pro Stunde If Durchflusstemp > 200 And Durchflusstemp < 1000 Then Durchfluss = Durchflusstemp End If Timer1 = 0 Incr Displaywarten If Displaywarten = 50 Then Locate 1 , 1 : Lcd "Durchfluss:" Locate 2 , 1 : Lcd Durchfluss ; " L/h " ; Tempword ; " " Displaywarten = 0 End If Return Wait_one: Do If Pind.0 = 0 Then Return End If Loop Return Wait_zero: Do If Pind.0 = 0 Then Tccr1b = &B00000000 Return End If Loop Return







Zitieren

Lesezeichen