-
-
Erfahrener Benutzer
Roboter Experte
Im Code im RN-Wissen wirds so gemacht: der Timer wird mit einer Frequenz x betrieben, womit zB alle 1us ein der Zähler einen Schritt weitergeht. Der Compare Match Register wird so gestellt, dass CMPR*Periode = zB 0,01ms sind, also im unseren Fall wäre CMPR=100. Wenn der Wert im Zähler CMPR erreicht, wird ein Interrupt ausgelöst. Mit verschiedenen Frequenzeinstellungen und CMPR Werten kann man also genau ausrechnen, nach welcher Zeit ein Interrupt aktiviert wird.
In der Interruptroutine werden die Interrupts gezählt, und mit einer Variable verglichen, die die Länge des High-Impulses bestimmt. Willst du 1,2ms, muss dieser Wert 100 sein. Wenn die Zählvariable zwischen 0 u. High-Impuls Länge liegt, wird ein Pin auf High gesetzt, ist es größer als die High-Impuls Länge, wird es auf 0 gesetzt. Willst Du eine Periodendauer von insgesamt 20ms, wird die Zählvariable im Interrupt auf 0 gesetzt, falls es 2000 überschreitet, und das ganze fängt von vorn an.
Wars einigermassen vertsändlich?
Noch etwas, damit ersparst du die floats, du brauchst nur einen uint16, und sonst nur uint8.
MfG
pongi
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen