-
ich hab noch ne idee .... wenn der impusl kommt, zündert der interrupt, den leg ich dann lahm und prüfe solange zyklisch den eingang auf high pegel bis der impuls zu ende ist, dann schreib ich die verstrichene zeit in ne variable und schalt den interrupt wieder ein.
theoretisch sollte es gehen denk ich mir mal ... oder kommt da doch wieder der hammer ?
-
du könntest einen timer starten wenn der interrupt kommt; und wenn der pegel wieder high wird den counter stoppen. dann hättest du ne exakte zeitmessung.
-
zwische 2 high flanken liegen leider IMMER 65ms ... ich muss schon die länge des impulses messen, d.h. die zeit zwischen high flanke und dem abfallen des impulses
ich werde aber EVENTUELL I2C benutzen ... aber der umbau iss etwas komplizierter ...
zur ersten lösung, ich hab das modul fertig angeschlossen, mit dem oszi geprüft ... alles bestens, kalibrierung iss auch super ... nun muss ich nurnoch das programm schreiben ... 37ms idle iss aber nich SO toll Q_Q
wenn ich den interrupt für die odometrie aber anlasse müsste das doch in einer verschachtelung enden oder ?
-
dann warte bis high wird, starte den counter, und wenn es wieder low wird machste ihn wieder aus...
-
ja aber wie oben im editierten muss ich leider 37ms das hauptprogramm unterbrechen und nach min. 33ms kommt schon der nächste impuls ... ich seh schon es wird eng mit der rechenzeit XD ... oder ich mache es über ein flag und prüfe das signal im hauptprogramm zyklisch mit
-
hm ich sehe das problem nicht. warte auf eine high-flanke, dann startest du den counter. da dieser im hintergrund läuft, brauchst du dich um nichts zu kümmern und dein programm kann normalen aufgaben folgen. wenn der pin wieder low wird, wird der counter gestoppt. wenn das programm es dann zulässt und nichts anderes zu tun hat, kann der counter ausgelesen und der wert bearbeitet werden.
dazu muss das hauptprogramm eigentlich gar nicht unterbrochen werden.
-
dann muss ich eben im hauptprogramm zyklisch den pegel messen und den counter anhalten wenn low iss ^_^
-
oder du lässt den interrupt auf die stegende flanke reagieren, startest den counter und stellst in der interruptroutine den interrupt so ein dass er bei einer fallenden flanke wieder zündet. und beim zweiten ausführen wird dann der counter weider gestoppt.
-
fallende flanke geht doch net Q_Q wegen der diode und die will ich net opfern Q_Q
-
ja dann musst du wohl mit der einschränkung leben dass du per hand kontrollieren musst wie sich das verändert...