"Zaehlen:" hat keinen return ?
Hallo,
wie schon in einem anderen Beitrag weiter unten erwähnt möchte ich gerne mit einem CNY70 die Drehzahl einer Welle erfassen und diese auf einem LCD ausgeben.
Dazu habe ich jetzt folgendes Programm geschrieben:
Ich möchte also mit dem Timer1 die Impulse pro Sekunde zählen. Statt dem CNY70 verwende ich zum testen nur einen Taster der Pb.0 (int0) auf 0V zieht.Code:$regfile = "m8def.dat" $crystal = 3686400 Dim Zaehlerstand As Byte Dim A As Integer Dim Drehzahl As Integer Const Timervorgabe = 61936 Config Timer1 = Timer , Prescale = 1024 Enable Interrupts Config Int0 = Falling Enable Int0 On Int0 Zaehlen On Timer1 Mytimer Timer1 = Timervorgabe Enable Timer1 Do Config Lcd = 16 * 2 Cls Lcd Drehzahl End Loop Zaehlen: Zaehlerstand = Zaehlerstand + 1 Mytimer: A = Zaehlerstand Drehzahl = A * 60 Print Drehzahl Timer1 = Timervorgabe Zaehlerstand = 0 Return End
Allerdings scheint sich in den Code noch irgendein Fehler eingeschlichen zu haben, weil sich auf dem Display nichts tut.
Ich würde mich freuen wenn jemand den Code überfliegen könnte.
Florian
"Zaehlen:" hat keinen return ?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
das hab ich doch glatt übersehen. War aber scheinbar nicht der einzige Fehler, es tut sich genauso wenig.
Am Display liegt es sicher nicht, die Ansteuerung funktioniert soweit.
Trotzdem Danke für den Hinweis
edit: Habe jetzt selbst noch einen kleinen Fehler gefunden, der aber scheinbar immer noch nicht der letzte war. Das End mitten in der Do Loop Schleife war natürlich fehl am Platze.
könnte es sein, dass mit der Reihenfolge am Anfanf des Programms etwas nicht stimmt? Muss ich den int0 (pb.0) als Eingang definieren?
Ich hab keine Ahnung mehr was sonst noch falsch sein könnte.
mfg
Florian
Wenn ich nicht irre, fehlt
START TIMER1
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
also mein Code sieht jetzt so aus:
Aber funktionieren tut das ganze noch nicht.Code:$regfile = "m8def.dat" $crystal = 3686400 Dim Zaehlerstand As Byte Dim A As Integer Dim Drehzahl As Integer Const Timervorgabe = 61936 Config Timer1 = Timer , Prescale = 1024 Enable Interrupts Config Int0 = Falling Enable Int0 On Int0 Zaehlen On Timer1 Mytimer Timer1 = Timervorgabe Enable Timer1 Start Timer1 Do Config Lcd = 16 * 2 Cls Lcd Drehzahl Waitms 100 Loop Zaehlen: Zaehlerstand = Zaehlerstand + 1 Return Mytimer: A = Zaehlerstand Drehzahl = A * 60 Print Drehzahl Timer1 = Timervorgabe Zaehlerstand = 0 Return End
Hat noch jemand eine Idee?
Ehm, du meinst, der Timer1 springt nicht an oder zählt er nix ?
In der DO-Schleife solltest du nicht config LCD machen (einmal vorher reicht.
der Print bei mytimer sollte doch zu Terminal ? Hat der eine Baud-angabe ? ( $BAUD=nnnn )
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
das Print in mytimer war überflüssig. Ich habs rausgemacht. Config lcd hab ich vor die Do Loop Schleife gemacht.
Ich weiss nicht ob der Timer nicht anspringt oder es am Zählen liegt. Wenn ich das Programm simuliere und auf int0 klicke, diesen also auslöse, sehe ich an den ganze Variablen keine Änderung. Ich habe ja den int0 auf die fallenden Flanken angesetzt. Kann es sein, dass das Simulieren deshalb nicht funktioniert?
Na ja, um das zu wissen, mach den LCD Drehzahl in die Timer-Routine.
Zählt er nicht, müßt er ja wenigstens "Drehzahl=0" sagen
Dann mach umgekehrt in die INT0-Routine einen LCD "aua".
So läßt sich rauskriegen, geht und was NICHT.
Ich sag ehrlich, ich kann am Programm so nix böses sehen
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Noch eine Frage: Die Timereinstellungen: welche Zeit willst du haben ?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Lesezeichen