So, hab jetz die 1875 gesetzt. Resultierender Durchfluss = 631L/h. Auf dem Display erscheinen nun auch die 1875 für Tempword.
Jetzt beginne ich langsam an der Qualität dieses Forums zu zweifelnDas heißt doch im Klartext: Wenn PIND.0 = 0, dann folgt return - und wenn nicht, dann auch![]()
Sag mir doch bitte mal wie deiner Meinung nach ein Return erfolgen soll wenn pind.0 = 1 ist.
Statt dem Return in der If pind.0 = 0-Bedingung könnte man natürlich auch ein Exit Do einfügen. Kommt aufs gleiche raus. Es wird nur ein Return ausgeführt wenn pind.0 = 0 ist
So, hab jetz die 1875 gesetzt. Resultierender Durchfluss = 631L/h. Auf dem Display erscheinen nun auch die 1875 für Tempword.
Die 95 noch nach 96 tauschen
Boah, jetzt muß man wohl daran, wo Sauerbruch und MagicWSmoke schon rummäkeln. Ehrlich gesagt gefällt mir das auch nicht aber ich versuch mal genauer im einzelnen da durchzusteigen. Auf den ersten Blick könnte es gehen, erzeugt aber doch falsche Werte in Tempword.
Möchte aber noch wissen, was für ein Sensor das ist?
Die Pulse am Oszi waren auch schön ausgeprägt zwische 0 und 5V ?
Sensor Stromversorgung ist die Gleiche wie vom µC?
Gruß
Searcher
Geändert von Searcher (20.10.2012 um 13:09 Uhr)
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Wegzu einigen meiner Konstruktionen
Wie soll´s denn auch anders sein?Auf dem Display steht aber immer nur 31 bzw. 32 egal bei welchem Durchfluss.
Dass etwas angezeigt wird bedeutet doch, dass das Programm bei "Gosub Auswerten" angekommen ist.
Und danach kommt "Gosub Wait_one".
Und in dieser Subroutine bleibt der Controller dank "Do-Loop" hängen - bis zum jüngsten Tag. Die erste Anzeige ist also auch die letzte.
Solange das so ist, sind alle Überlegungen zu Taktfrequenzen, Rechenwegen und allem sonstigen drum & dran müßig![]()
Ich glaube schon, daß er, wenn Pind.0 auf 0 ist, da raus kommt? Im then-zweig steht ein Return.Und danach kommt "Gosub Wait_one".
Und in dieser Subroutine bleibt der Controller dank "Do-Loop" hängen - bis zum jüngsten Tag
Allerdings wird danach entweder wieder "Gosub Wait_one" oder "Gosub Wait_zero" aufgerufen. In beiden Subroutinen wird der Pind.0 auf 0 geprüft, bevor es weiter geht.
Möglicherweise wird hier dasselbe Low auf Pind.0 erkannt. Ich kann nicht erkennen, wo wirklich ein high abgewartet wird. Das könnte auch den viel zu kleinen Wert in Tempword erklären.
PS: Vielleicht geht mehr, wenn in der "Wait_one" Pind.0 statt auf 0 auf 1 geprüft wird.
Gruß
Searcher
Geändert von Searcher (20.10.2012 um 15:01 Uhr)
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Wegzu einigen meiner Konstruktionen
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
*Aufatmen*... läuft es nun bestens.
*nochmal Aufatmen*Im Endstadium werde ich wie bei meiner anderen Anlage auch das ganze über den ICP Pin einlesen![]()
Gruß
Searcher
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Wegzu einigen meiner Konstruktionen
Lesezeichen