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