Clock einstellen komisch

Gast #1817549
Lesenswert?
• ▲
▼
Hallo
im Atmega Datenblatt steht folgende Formel für die 
Timer-Interrupteinstellung:

fOCnA=fCLK/(2*N*(1+OCRnA)

ich habe nach meinem Aufbau folgendes eingestellt:

fOCnA=14745600/(2*256*(1+55))=514

wenn ich diese Werte nun programmiere, erhalte ich aber ca. alle ms 
einen Interrupt (1000 pro Sekunde, statt wie berechnet 514.

Was sehe ich hier falsch? Bzw. wie muss ich den Interrupt richtig 
einstellen, damit ich genau alle ms eine Interruptmeldung erhalte?

DANKE!
Gast #1817677
Lesenswert?
• ▲
▼
Sorry,

es handelt sich um einen Atmega1280 und einem externen Clock von 
14,745600MHz

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 57,600 kHz
// Mode: CTC top=OCR0A
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x02;
TCCR0B=0x04;
TCNT0=0x00;
OCR0A = 0x37;   //Interrupt je msec
OCR0B=0x00;

Danke!
Gast #1817708
Lesenswert?
• ▲
▼
1
TCCR0A=0x02;
2
TCCR0B=0x04;
3
TCNT0=0x00;
4
OCR0A = 0x37;   //Interrupt je msec
5
OCR0B=0x00;

Benutze bitte die Konstanten aus den include files. Sie stimmen im 
wesentlichen mit denen aus dem Datenblatt überein. Verlangst Du 
ernsthaft, das wir an Deiner Stelle aus den Hex-Werten wieder die Bits 
zusammensuchen?
Gast #1818259
Lesenswert?
• ▲
▼
Sorry, ich bin aus Versehen in die falsche Rubrik gerutscht! Kann man 
den Betrag verschieben?

Ich habe den Code aus dem Wizard und übersetze ihn mal mit dem 
Datenblatt:

TCCR0A|= (1<<WGM01);
TCCR0B|= (1<<CS02);
TCNT0=0x00;
OCR0A = 0x37;   //Interrupt je msec
OCR0B=0x00;

Kann mir nur wer helfen?!
#1819016
Lesenswert?
• ▲
▼
Frank schrieb:
> wenn ich diese Werte nun programmiere, erhalte ich aber ca. alle ms
> einen Interrupt (1000 pro Sekunde, statt wie berechnet 514.

Vielleicht interne 8MHz gefust, statt externer HF-Quarz?


Ich bin zu faul, den Reloadwert selber auszurechnen.
Hier mal ein Beispiel, wie ich nen Timer initialisiere:
1
#define F_CPU 14.7456e6
2

3
  TCCR0A = 1<<WGM01;                    // T0 Mode 2: CTC
4
  TCCR0B = 1<<CS02^1<<CS00;             // divide by 1024
5
  OCR0A = F_CPU / 1024.0 * 10e-3 - .5;  // 10ms
6
  TIMSK0 = 1<<OCIE0A;                   // enable T0 interrupt



Peter

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.