www.mikrocontroller.net

Forum: Compiler & IDEs AVR mega8 - Timer1 CTC Problem


Autor: Jannes K. (jk_gcc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
N'abend!
Ich bin relativ neu im Thema gcc und bringe es mir grade selber bei!

Mein aktuelles Ziel ist es eine Routine zu schreiben, die mir aus einer 
übergebenen Zeit (in ms) den Prescaler, sowie den Wert fürs CTC 
berechnet und den 16bit Timer startet. Allerdings will mir das nicht 
wirklich gelingen und ich finde den Fehler einfach nicht ( trotz 
Forensuche und Google^^ ).
Um den Timer1 zu testen hab ich mir in die ISR einfach das Toggeln 
zweier LED geschrieben. Diese blinken zwar auch hübsch, allerdings immer 
im 9,1sec Takt, ich vermute also der Timer1 zählt immer bis 65.535 bei 
einem Prescaler von 1024 und einem Systemtakt von 7,3728MHz.
Und ich kann ihm das einfach nicht abgewöhnen...^^

Code:
void init_16bitTimer1(uint16_t ms)
{

uint8_t  i = 0;
uint16_t prescaler[5] = {1,8,64,256,1024};
uint32_t zwischenOCR1A = 65536;
uint16_t f_cpu = 7372;

TCCR1A = 0x00;        // no Port operation, kein PWM
TCCR1B = (1<<WGM12);  // CTC1
TIMSK |= (1<<OCIE1A); // Compare Match A Interrupt Enable

  while ( (zwischenOCR1A > 65535) && (i < 5) )
  {
    zwischenOCR1A = ( (ms*f_cpu)/prescaler[i] );
    i++;
  }

  OCR1A = zwischenOCR1A;

  switch (i)
  {
    case 1:      // Prescaler = 1 (no prescaling)
    {
      TCCR1B &= (!(7<<CS10));
      TCCR1B |= (1<<CS10);
    }
    case 2:      // Prescaler = 8
    {
      TCCR1B &= (!(7<<CS10));
      TCCR1B |= (1<<CS11);
    }
    case 3:      // Prescaler = 64
    {
      TCCR1B &= (!(7<<CS10));
      TCCR1B |= (3<<CS10);
    }

    case 4:      // Prescaler = 256
    {
      TCCR1B &= (!(7<<CS10));
      TCCR1B |= (1<<CS12);
    }
    case 5:      // Prescaler = 1024
    {
      TCCR1B &= (!(7<<CS10));
      TCCR1B |= (5<<CS10);
    }
    default:
    {
      ;
    }
  }

  return;
}

Vielleicht seht ihr ja mehr und könnt mir helfen


Danke schonmal, jannes

Autor: Jörg G. (joergderxte)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du willst da bestimmt ein '~' und kein '!' -- tip: schau nach, wo der 
unterschied ist...

Autor: Jannes K. (jk_gcc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da magst du recht haben =/

Danke...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.