hallo,
benute einen ATMega32(L).
Eine Frage zu dem 16bit Timer.
Ich möchte ein Signal am PORT mit 1 kHz abfragen.
Um die 1 kHz zu erzeugen steht mir nur noch der Timer1 ( 16 bit ) zur
verfügung.
Ich dachte ich könnte es so machen ?
den Timer initialisieren:
225 /*
226 Timer1 (16bit)
227 Encoder-Abfrage
228 Output Compare Mode (OCR1A wird ständig mit TCNT1 (Zählerstand)
verglichen
229 bei Gleichheit wird Interrupt SIGNAL(SIG_OUTPUT_COMPARE1A)
aufgerufen,
230 TCNT1 wieder =0; (CTC Mode = clear timer on comapre match)
231 Takt durch CSxx auf clk\1 (no prescaling) = 8 MHz=0.125us
232 */
233 void BobbyCar::initTimer1()
234 {
235 TCCR1B= (0<<CS12)||(0<<CS11)|(1<<CS10)| (1<<WGM12)| (0<<WGM11)|
(0<<WGM10); // CTC- Mode clk/1 (no prescale)
236 OCR1A = 8000; // 8000*0.125us = 1ms
=> 1kHz
237 TIMSK|= (1<<OCIE1A);// // counter Value
matches interrupt
238 }
und dann mit
129 // Timer für Radencoder - Abfrage 1kHz
130 //
131 SIGNAL(SIG_OUTPUT_COMPARE1A)
132 {
133 if((bool)(PINB & (1<<1)) != encLeftOld)
134 {
135 encLeftCount++;
136 encLeftOld = !encLeftOld;
137 }
138 if((bool)(PINB & (1<<2)) != encRightOld)
139 {
140 encRightCount++;
141 encRightOld = !encRightOld;
142 }
143 }
die Pins abfragen, wobei SIGNAL mit 1kHz kommt ?
wie macht man so was normalerweise ?
ich dachte ich lasse den Timer1 mit 8 MHz laufen,
in OCR1A initialisiere ich mit 8000, dh
wenn der Timer den Stand 8000 erreicht hat wird
SIGNAL(SIG_OUTPUT_COMPARE1A) aufgerufen.
nach meiner Rechnung (siehe Kommentar) ist das 1kHz.
Danke für Hilfen
Chris
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.