www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ich weiß nicht mehr weiter... ATMega128 und Timer0


Autor: Der Techniker (_techniker_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich möchte mit dem Timer0 vom ATMega128 einen 10ms-Interrupt erzeugen
(=100Hz). (Quarzfrequenz 11059200Hz)

Hab den Vorteiler auf 1024 und den Reload-wert auf 148.

Jedoch bekomme ich am Test-Ausgang (Pin PC6) anstatt der erwarteten
Frequenz von 50Hz das 8fache, nämlich 400Hz! :-O

F_CPU wird im Makefile definiert. Auch wenn ich T0_RELOAD fest mit 148
definiere, macht es keinen Unterschied...


Hier der Code:
===================
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <stdlib.h>
#include <string.h>

#define T0_RELOAD (256-((F_CPU/1024)/100))

/* Test-Variablen definieren */
volatile unsigned char test=0;

/* Funktionen deklarieren */
void INIT(void);

/* Hauptfunktion */
int main(void)
{
 INIT(); // Initialisierungsroutine aufrufen

 DDRC=0x40; // Testausgang PC6

 while(1) { }

 return 0;
}


/* Interrupt-Routine Timer0-Überlauf => 10ms */
SIGNAL (SIG_OVERFLOW0)
{
TCNT0 = T0_RELOAD; // Timer0 vorbelegen

 if (test) { PORTC &= 0xbf; test=0; } else { PORTC |= 0x40; test=1; }

}


void INIT(void)
{
 /* Timer0 als 10ms-Taktgeber per Interrupt definieren */
 TCCR0 = (1<<CS00)|(1<<CS02);  // Timer0 => F_CPU / 1024
 TCNT0 = T0_RELOAD;    // Timer0 vorbelegen
 TIMSK |= (1<<TOIE0);    // Interrupt Overflow0 freigeben
 sei();        // Globale Interruptfreigabe
 return;
}

===================

Was kann hier noch faul sein?

Fuse-Bits sollten auch alle passen:
-M103C deaktiviert (andernfalls geht garnix)
-JTAG, OCD, WDTON, BOOTRST deaktiviert
-Takt: Ext XTAL, High frequency
-Keine Lockbits (alle Mode 1)

Wäre über Tipps was ich noch vergessen haben könnte echt dankbar!

MfG
Techniker

Autor: Die Laborratte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim Mega128 musst du für Teiler 1024 CS0, CS1 und CS2 setzen:

TCCR0 = (1<<CS00)|(1<<CS01)|(1<<CS02);  // Timer0 => F_CPU / 1024

Ist anders als bei den kleineren AVRs...

Autor: Irgwer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ganz einfach,

dein Prescaler hast du auf 128 statt 1024 eingestellt:

TCCR0 = (1<<CS00)|(1<<CS02);  // Timer0 => F_CPU / 1024

korrekterweise solltest du auch noch das Bit (1<<CS01) setzen.

Autor: Der Techniker (_techniker_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
megaschäm_und_unten_den_schreibtisch_kriech

Danke!

Wer lesen kann, ist hald klar im Vorteil...  ;)
(Seite 103 im Datenblatt)

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum soll es nur uns so ergehen  *<:-))

Autor: Richard Brose (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mmmhh das verstehe ich nicht.
Muss man die Variablen nicht auch füllen?

   OCR1AL = 0x09;
   OCR1AH = 0x3d;
   TCNT1L = 0xf7;
   TCNT1H = 0xc2;

Wenn nein, wozu sind denn die dann da?

Autor: The Daz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richard,
diese Register sind nur fuer Timer 1 erheblich, oben wurde aber von
Timer 0 gesprochen.

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zudem sind es keine Variablen sondern steuerungs Register.

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.