www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Clock einstellen komisch


Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

: Verschoben durch Moderator
Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Controller? verwendeter Timer? Initialisierung?

Autor: Sauger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Frank schrieb:
> Was sehe ich hier falsch?

was Du siehst wissen wir nicht, wir sehen Garnichts, bemühe die SuFu 
dieses Forums oder poste deinen Quelltext/Projekt.

MfG

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TCCR0A=0x02;
TCCR0B=0x04;
TCNT0=0x00;
OCR0A = 0x37;   //Interrupt je msec
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?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Überschrift dieser Forumrubrik lautet:

Forum: Codesammlung
Wenn ihr eigene Programme oder Anleitungen geschrieben habt könnt ihr 
sie hier posten. Fragen werden gelöscht!


Was ist daran unklar?


Peter

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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:

#define F_CPU 14.7456e6

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



Peter

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.