Timer 2 Problem ATmega640

Gast #2766057
Hallo,

ich versuche schon seit einiger Zeit meinen 2. Timer zum laufen zu 
kriegen, aber irgendwie will er einfach nicht. Das Programm lief vorher 
schon auf dem Atmega64 und ich will es einfach nur so anpassen dass es 
auf dem Atmega640 läuft. Beim starten des Programms hängt es sich jedoch 
einfach auf.
1
void Interrupt_Timer2_Konfig(void)
2
{
3
bit_setzen(TCCR2B,CS22);
4
bit_setzen(TCCR2B,CS21);
5
bit_loeschen(TCCR2B,CS20);
6

7
bit_setzen(TCCR2A,WGM21);
8
bit_loeschen(TCCR2A,WGM20);
9
bit_loeschen(TCCR2B,WGM22);
10

11
bit_setzen(TIMSK2,OCIE2A);
12

13
OCR2A = 62;
14
}
15

16
ISR (TIMER2_COMPA_vect)
17
{
18
.
19
.
20
.
21
}

Infos:
Atmega640
Fclock = 16 MHz
Timer 1 und 3 auch im Einsatz


Schonmal Vielen Dank für Eure Hilfe

Chris
Gast #2766111
Hi

Bist du sicher, das es am Timer liegt? Sieht eigentlich OK aus.

Übrigens wird deine 1ms genauer, wenn du einen Vorteiler von 64 benutzt. 
Jetzt hast du 0,8% Fehler.

MfG Spess
Gast #2766262
Hi

>Ja eigentlich schon, sobald ich das OCIE2A bit nicht setze funktioniert
>alles einwandfrei.

Dann liegt es wohl eher an der Interruptroutine.

MfG Spess
Gast #2766392
spess53 schrieb:
> Hi
>
>>Ja eigentlich schon, sobald ich das OCIE2A bit nicht setze funktioniert
>>alles einwandfrei.
>
> Dann liegt es wohl eher an der Interruptroutine.
>
> MfG Spess

die Idee hatte ich auch schon aber wenn ich die rausnehme klappt es 
trotzdem nicht :/
Gast #2766409
Hi

>die Idee hatte ich auch schon aber wenn ich die rausnehme klappt es
>trotzdem nicht :/

Das passt aber nicht zu deiner Aussage:

>Ja eigentlich schon, sobald ich das OCIE2A bit nicht setze funktioniert
>alles einwandfrei.

Ohne Interruptroutine, aber mit gesetztem OCIE2A-Bit geht natürlich 
nichts. Was machst du denn in deiner Interruptroutine?

MfG Spess
Gast #2766742
>Ohne Interruptroutine, aber mit gesetztem OCIE2A-Bit geht natürlich
>nichts. Was machst du denn in deiner Interruptroutine?

Irgendwie riecht doch alles danach das das Programm für den
falschen Controller übersetzt wurde;)
Moderator Persönliche Seite #2766756
Vielleicht gibst du uns ja compilierfähigen Code.

Die Steuerregister bitweise einzeln zu setzen hat übrigens nicht viel
Sinn.  Sinnvoller ist es dort, sie komplett zu setzen:
1
TCCR2B = _BV(WGM22) | _BV(CS22) | _BV(CS21);
2
TCCR2A = _BV(WGM21) | _BV(WGM20);

Chris schrieb:
> Das Programm lief vorher
> schon auf dem Atmega64 und ich will es einfach nur so anpassen dass es
> auf dem Atmega640 läuft.

Du hast aber dran gedacht, dass der Vorteiler von T/C2 auf dem
ATmega640 andere Einstellungen hat als der des T/C2 auf dem ATmega64,
ja?  (Das hängt damit zusammen, dass T/C2 hier derjenige ist, der
asynchron vom 32-kHz-Quarz betrieben werden kann, das war beim 64er
der T/C0.)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.