Warum läuft dieser code nicht auf einem Mega16?

Gast #890341
Lesenswert?

Hallo zusammen,

ich habe folgenden code, der zwar auf einem ATmega8 problemlos läuft, 
auf einem Mega16 aber nicht.
1
#include <avr/io.h>
2
#include <stdint.h>
3
#include <stdlib.h>
4
#include <avr/interrupt.h>
5
#include <util/delay.h>
6

7

8
void io_init(void)
9
{
10
  DDRD |= (1<<PD5);                  // ausgang
11
  
12
  PORTD |= (1<<PD5);                 // Pullup
13
}
14

15
  
16
int main(void)
17
{
18
  io_init();
19
  sei();
20

21
  
22
  TCCR1B |= (1<<CS10) | (1<<CS12) | (1<<WGM12);            // Timer1 = Timer , Prescaler = 1024 , clear timer on compare match
23
  TIMSK |= (1<<OCIE1A);                        // interrupt bei compare match
24
  
25
  OCR1A = 40000;
26
  
27
  while(1)
28
  {
29
  
30
  }
31
}
32

33

34
ISR(TIMER1_COMPA_vect)
35
{
36
  PORTD ^= (1<<PD5);
37
}

Der compare match ist bei ca. 5,1 sec erreicht und da sollte PD5 
getoggelt werden (wird er auf nem Mega8 auch).
Kann mir jemand sagen woran das liegen kann? Die Register müssten ja bei 
beiden uCs gleich sein.

mfg Markus
Gast #890374
Lesenswert?

Ja, neu compilert hab ich natürlich.
Läuft nicht heißt: PD5 bleibt auf high (wie in io_init festgelegt) und 
toggelt nicht.
Ja, 40s hab ich gewartet, aber der M16 läuft mit ext. quarz auf 8mhz 
(sollten also ca. 5s sein).
Meine Fusebits sind:

BOOTSZ0 = programmed
BOOTSZ1 = programmed
SUT1 = programmed

rest = unprogrammed
Gast #890410
Lesenswert?

Also irgendwie scheint mein Mega16 hier allgemein was gegen interrupts 
zu haben. Ein Timer1 Overflow Interrupt wird nämlich auch nicht 
ausgeführt.

Der Timer scheint allerdings zu laufen. Wenn ich nämlich die "Toggle pin 
on compare match" Funktion aktiviere (TCCR1A |= (1<<COM1A0);), wird der 
pin OC1A auch getoggelt.
Das bringt mir soweit allerdings noch nicht viel, da ich ja die ISR bei 
einem Compare Match aufgerufen haben möchte.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren