Forum: Mikrocontroller und Digitale Elektronik ATMega32 Timer1 1kHz erzeugen


von chris (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.