Hi, mein Programm resettet sich bei externem Interrupt (INT1, PD3, Pin 5). Ich habe mir den Code im Disassembler angeschaut, und die Interruptvektoren stehen falsch. Ich benutze AVRStudio 4.13 build 557 mit WinAVR 20070525. Quellcode: ISR(INT1_vect) { TCCR1B = 0; //stop counter } int main(void) { cli(); //erstmal interrupts aus OSCCAL = 0xAB; TCCR1A = 0; TCCR1B = 1; //no prescaler; 2=pre/8 TCNT1 counter-register MCUCR = (1<<ISC10); GICR = (1<<INT1); sei(); while(true) //endlosschleife über das if if( zaehler == 30 ) { ... } } Dis-ASM: +00000000: C012 RJMP PC+0x0013 Relative jump +00000001: C02C RJMP PC+0x002D Relative jump +00000002: C02C RJMP PC+0x002D Relative jump +00000003: C02A RJMP PC+0x002B Relative jump +00000004: C029 RJMP PC+0x002A Relative jump +00000005: C028 RJMP PC+0x0029 Relative jump ... +0000002E: CFD1 RJMP PC-0x002E Relative jump @0000002F: __vector_2 ... wenn ein Interrupt auftritt (ich also PIND Bit3 im Simulator anklicken) springt der Prozessor an Adresse 0x04 (TIMER2 OVF laut Datenblatt) ?!? Wenn ich den Interruptvektor auf TIMER2_OVF_vect ändere, läuft das Programm wie erwartet.
Dann hast Du möglicherweise einen falschen Controller für die Simulation angegeben. Überprüf mal Deine Einstellungen. Das sieht so aus, als ob da ein AVR mit mehr als 8 KiB Flash eingestellt ist...
Dachte ich auch schon, aber eingestellt ist der korrekte "atmega8".
Sorry für den Doppelpost: hier die compilerausgabe: avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -DF_CPU=4000000UL -Os -fsigned-char -MD -MP -MT testprojekt.o -MF dep/testprojekt.o.d -c ../testprojekt.c avr-gcc.exe -mmcu=atmega8 testprojekt.o -o testprojekt.elf avr-objcopy -O ihex -R .eeprom testprojekt.elf testprojekt.hex avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex testprojekt.elf testprojekt.eep || exit 0 d:\WinAVR-20070525\bin\avr-objcopy.exe: there are no sections to be copied! AVR Memory Usage ---------------- Device: atmega8 Program: 514 bytes (6.3% Full) (.text + .data + .bootloader) Data: 94 bytes (9.2% Full) (.data + .bss + .noinit) Build succeeded with 0 Warnings...
Sorry für den Dreifachpost: Natürlich, im Simulator war der Mega16 eingestellt :( Man muss natürlich wissen, das Projekt und Simulator nicht dieselbe Konfiguration verwenden (müssen). Jetzt geht es in jedem Fall. Vielen Dank für die Hilfe!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.