Da irrst Du Dich - die Bascom-Hilfe sagt ganz zum Befehl Pulsein folgendes:dazu fehlt doch dann noch der Timer wenn ich nicht irre...
"No hardware timer is used. A 16 bit counter is used. It will increase in 10 uS units. But this depends on the XTAL. You can change the library routine to adjust the units."
Und selbst wenn man einen Timer bräuchte, wären die ganzen PWM-Statements überflüssig.
Auch das ist korrekt erledigt: Mit der Null in der Zeile "Pulsein X , Pind , 4 , 0" wird definiert, dass eine steigende Flanke ausgewertet wird.Aso... fragst du die Flanke bei anstieg, abfall oder generell bei wechsel ab ?
Mir fallen bislang zwei Fehler in diesem Teil des Codes auf;
Erstens:
Du setzt die Ports D.5 und D.6 nirgendwo auf 0! Oder anders gesagt: Ist X kleiner als 34000, geht Portd.5 auf 1 - aber wenn X dann irgendwann einmal größere Werte als 34000 annimmt, bleibt Portd.5 weiterhin 1! (Gleiches gilt für Portd.6).Code:If X <= 34000 Then Portd.5 = 1 Elseif X > 34000 And X <= 64000 Then Portd.6 = 1
Eine Lösung wäre z.B.
Und zweitens:Code:If X <= 34000 Then Portd.5 = 1 Else Portd.5 = 0 If X > 34000 AND X <= 64000 Then Portd.6 = 1 Else Portd.6 = 0
Die Bascom-Hilfe schreibt, dass der Pulsein-Befehl im Normalfall (d.h. wenn Du nichts an der Lib verändert hast, wovon ich mal ausgehe) den Impuls in 10µS-Schritten ausmisst. Bei 4ms Impulsdauer müsste Pulsein also einen Wert von 400 liefern, und bei 30 ms etwa 3000. Das heißt, Du bist mit Deinen Grenzwerten von 34000 um etwa eine Zehnerpotenz daneben.
Kannst Du Dir die realen Werte von X denn mal anzeigen lassen, mit einem LCD oder so?







Zitieren

Lesezeichen