Atmega8 macht Reset anstatt ISR(TIMER_OVF_vect)

14/11/2011 - 20:45 von Andreas Weber | Report spam
Hallo liebe NG,
Kann mir jemand sagen, warum folgender Code nicht tut was er IMHO tun
sollte? Zum debuggen hàngt an PD5 ein Summer (1=beep).

Nach meinem Verstàndnis sollte sollte nach einem Reset
* 1s lang beep
* 0.2s Ruhe
* sehr kurz, wahrscheinlich nicht hörbar beep
* für immer Ruhe
sein.

Stattdessen wird ein Reset durchgeführt, sobald der Timer0 überlàuft.
Also 1s beep, 0.2s Pause, 1s beep usw.

uC ist ein Atmega8, lfuse=0x3f, hfuse=0xd9 ( Brown out trigger 4V,
BODEN, SPIEN, externer 16MHz Quarz)

Ändere ich den Code auf Timer2 (ISR,TCCR2,TIMSK anpassen)
làuft alles. Atmega8 habe ich schon getausch um HW Defekt
auszuschließen. Optimierungen waren ursprünglich auf -O2, testweise -O0

#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

// Aufruf mit F_CPU/64/256Hz -> 1.0240ms
ISR(TIMER0_OVF_vect)
{
PORTD = 0x00;
}


int main(void)
{
// Prescaler auf 64 -> clk%0kHz
TCCR0 = _BV(CS01) | _BV(CS00);
TIMSK = _BV(TOIE0);

DDRD = _BV(PD5);
PORTD = 0xFF;
_delay_ms(1000);
PORTD = 0x00;
_delay_ms(200);
PORTD = 0xFF;

sei();
while(1);
return 0;
}


Compilerlog:
avr-gcc -c -mmcu=atmega8 -I. -gstabs -DF_CPU000000UL
-I../../avr/include -O0 -Wall -Wstrict-prototypes -std=gnu99 main.c -o
main.o
In file included from main.c:57:0:
/usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h:94:3: warning:
#warning "Compiler optimizations disabled; functions from <util/delay.h>
won't work as designed"
avr-gcc -mmcu=atmega8 -I. -gstabs -DF_CPU000000UL -I../../avr/include
-O0 -Wall -Wstrict-prototypes -std=gnu99 main.o --output main.elf -lm
avr-objcopy -O ihex -R .eeprom main.elf main.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
avr-objcopy: --change-section-lma .eeprom=0x0000000000000000 never used

Vielen Dank schonmal, ich seh den Fehler einfach nicht.
Gruß Andy
 

Lesen sie die antworten

#1 g.fink
14/11/2011 - 21:16 | Warnen spam
In article <j9rr58$3fr$,
Andreas Weber writes:

ISR(TIMER0_OVF_vect)
{
PORTD = 0x00;
}



Schau mal nach ob der interrupt in deiner .h wirklich so definiert ist.
#define TIMER0_OVF_vect _VECTOR(9)

Ich hatte da schon Probleme wenn der Interrupt in der Headerdatei anders
benannt war. Das ganze ohne Fehlermeldung.

Default für einen undefinierten Vektor ist normal Reset...

MFG Gernot

Ähnliche fragen