Atmega8 macht Reset anstatt ISR(TIMER_OVF_vect)

Nov 14, 2011 4 Replies

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


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

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

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

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

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required