Atmega8 macht Reset anstatt ISR(TIMER_OVF_vect)

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 #include #include #include

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

int main(void) { // Prescaler auf 64 -> clk=250kHz 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_CPU=16000000UL

-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 won't work as designed" avr-gcc -mmcu=atmega8 -I. -gstabs -DF_CPU=16000000UL -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" \ --change-section-lma .eeprom=0 -O ihex main.elf main.eep avr-objcopy: --change-section-lma .eeprom=0x0000000000000000 never used

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

Reply to
Andreas Weber
Loading thread data ...

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
Reply to
Gernot Fink

Als Tipp: Guck dir bei solch "seltsamen" Problemen mit Interrupt und Reset auch immer den fertigen Assemblercode mit "avr-objdump" an. Danach sieht man meistens klarer, ob alle Vektoren dahin zeigen wohin sie sollen.

Mit freundlichem Gruß

Jan

Reply to
Jan Kandziora

Hallo Gernot, danke für deine Antwort.

#grep -n -C1 TIMER0 /usr/lib/avr/include/avr/iom8.h

200-/* Timer/Counter0 Overflow */ 201:#define TIMER0_OVF_vect _VECTOR(9) 202-#define SIG_OVERFLOW0 _VECTOR(9)

Das habe ich recht früh geprüft auch wenn ich dann ein "warning: ?xyz? appears to be a misspelled signal handler" erwarten würde.

Gruß Andy

Reply to
Andreas Weber

Hallo an alle.

Ich habe den Atmega8 in TQFP abgelötet, die Zwischenräume der Pads sauber gekratzt, einen neuen drauf gelötet und nochmals alles kontrolliert.

Nun läuft alles wie es soll... Ich kann nur spekulieren, daß einer der 3 GNDs Pins keinen Kontakt hatte. (Sind die nicht intern verbunden)?

Danke, Gruß von Andy

Reply to
Andreas Weber

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.