Hab jetzt noch ein paar wartezeiten eingefügt zum entprellen eingefügt. Und die Bedingungen der Subroutinen geändert. Nach anpassung der 31250 auf die tatsächliche Taktfrequenz läuft es nun bestens.
Im Endstadium werde ich wie bei meiner anderen Anlage auch das ganze über den ICP Pin einlesen.Code:$regfile "m8def.dat" $crystal = 8000000 $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 = 256 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 Start Timer1 State = 1 'Status 1 Waitms 1 'Entprellen Gosub Wait_one Waitms 1 Gosub Wait_one Waitms 2 Gosub Wait_zero End If If State = 1 Then State = 0 'Status 0 Gosub Auswerten Waitms 1 'Evtl. Entprellen Gosub Wait_one Waitms 1 gosub wait_one End If Loop Auswerten: Tempword1 = Tcnt1l Tempword = Tcnt1h * 256 Tempword = Tempword + Tempword1 Templong = Tempword * 96 'Zeit für 1 Liter Tempsingle = 31600 / Templong 'Liter pro Sekunde Durchflusstemp = Tempsingle * 3600 'Liter pro Stunde Durchfluss = Durchflusstemp Timer1 = 0 Incr Displaywarten If Displaywarten = 30 Then Locate 1 , 1 : Lcd "Durchfluss:" Locate 2 , 1 : Lcd Durchfluss ; " L/h " ; Tempword ; " " Displaywarten = 0 End If Return Wait_one: Do Loop Until Pind.0 = 1 Return Wait_zero: Do Loop Until Pind.0 = 0 Stop Timer1 Return







Zitieren

Lesezeichen