ATmega 1284P Timer0 Frage

Gast #3391114
Lesenswert?
• ▲
▼
Hallo,

nach folgendem Code (M1284P) habe ich erwartet, auf dem Logicanalyzer 
ein Signal von 25 ms zu sehen. Mein Ziel war es eigentlich einen 
Interrupt alle 25 ms zu bekommen, aber der Timer springt nicht in die 
Interrupt-Routine. Beim M16 hat es bei mir immer geklappt, was habe ich 
Übersehen im Datenblatt?
1
#include <avr/io.h>
2
#include <stdlib.h>
3
#include <inttypes.h>
4
#include <avr/interrupt.h>
5

6
int main(void)
7
  {
8
  DDRB = 255;
9
  PORTB = 255;
10

11
  TIMSK0 = (1<<OCIE0A);  // Interrupt Timer 0 einschalten Match A
12
  TCCR0A = (1<<WGM01);  // Mode 2 = CTC
13
  TCCR0B = (1<<CS02);  // Prescaler 256, 8Mhz / 256 = 31250
14
  OCR0A = 124;    // 31250 / 125 = 250 
15
  
16
  sei();
17
  
18
  while(1)
19
    {
20
    }
21

22
  }
23
  
24
ISR(TIMER0_COMPA_vect)  // Overflow Interrupt Vector
25
  {
26
  PORTB = PORTB ^ 255;  // Port B toggeln
27
  }
Vielen Dank für einen Tip. Mfg Sven
Angehängte Dateien:
Gast #3391185
Lesenswert?
• ▲
▼
Ok, stimmt es sind 4 ms. Mein Problem ist das die Interrupt-Routine 
überhaupt nicht angesprungen wird. Mit dem M1284P arbteite ich erst 
einige Tage, mit den ATMega16 / 32 habe ich seit Jahren kein Problem 
damit. Entweder habe ich im Datenblatt etwas überlesen oder machen einen 
Denkfehler.
Gast #3391235
Lesenswert?
• ▲
▼
Ich arbeite mit WinAvr. Im "Makefile" ist der uC richtig konfiguriert, 
die F_CPU ebenfalls - der Compiler meldet auch keine "Warnings" oder 
"Errors". Im Datenblatt (Seite 61) gibt es auch den "TIMER0_COMPA" 
Vector.
Gast #3391251
Lesenswert?
• ▲
▼
>Ich arbeite mit WinAvr. Im "Makefile" ist der uC richtig konfiguriert,
>die F_CPU ebenfalls - der Compiler meldet auch keine "Warnings" oder
>"Errors". Im Datenblatt (Seite 61) gibt es auch den "TIMER0_COMPA"
>Vector.

Alles schön und gut, aber:
Beim flashen hast du auch die richtige HEX Datei ausgewählt?
Gast #3391266
Lesenswert?
• ▲
▼
@ holger: Ich hoffe doch schon, im Makefile steht bei mir wie immer: # 
Output format. (can be srec, ihex, binary) FORMAT = ihex. In einem 
komplexeren Programm benutzte ich beide UART's des ATmegas1284P und das 
läuft alles ohne Probleme. Was mit den Timern leider nicht der Fall ist, 
das bekomme ich auf diesem uC nicht hin.
Gast #3391371
Lesenswert?
• ▲
▼
Sven schrieb:

> In einem
> komplexeren Programm benutzte ich beide UART's des ATmegas1284P und das
> läuft alles ohne Probleme. Was mit den Timern leider nicht der Fall ist,
> das bekomme ich auf diesem uC nicht hin.

Ich hatte mal ein ähnliches Problem mit dem 1284P @20MHz. Da wollte 
Timer3 um's verrecken nicht laufen, ansonsten schien sich aber alles 
normal zu verhalten. Testweiser Betrieb mit einem 16MHz-Quarz brachte 
auch den Timer3 zum laufen. Damit war klar, daß es irgendwie mit dem 
Takt zusammenhängen mußte.

Nähere Untersuchung zeigte: die Ursache war instabiler Takt (Amplitude 
an XTAL1 lag mit dem 20MHz-Quarz bei nur ca. 1Vpp). Umfusen auf 
"FullSwing"-Oszillator löste das Problem. Die Amplitude lag dann bei 
4Vpp und der Timer3 lief plötzlich auch bei 20MHz wie ein Bienchen.

Eigentliche Ursache waren aber falsch gewählte Bürde-Kapazitäten für den 
Quarz. 12p statt 22p und es funktionierte auch mit dem stromsparenden 
Oszillator, die Amplitude lag dann bei gut 2,5Vpp.

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.