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.