ATMEGA8 timer0 interrupt

Gast #7289617
Lesenswert?

ArminD schrieb:
> Wackelt der Pin denn wenn Du Dein Toogle-Konstrukt in die For-Schleife
> setzt und den Interrupt nicht enablest ?

Ja klar.  Als erstes habe ich natürlich getestet ob der Pin reagiert.

Hier ist irgendwas absolut idiotisch:  Wenn ich den Code aus der ISR 
komplett entferne (auskommentiere) also eine leere ISR habe, und direkt 
nach der Port Initialisierung (also ausserhalb der for-Schleife ein 
OUT_PORT ^= 0x01 einsetze, dann bekomme ich ein Signal von 15 Hz, was 
bei laufendem Interrupt ja richtig wäre (8.000,000  1024  256 / 2).

Aber das macht so überhaupt keinen Sinn.
Gast #7289704
Lesenswert?

Georg M. schrieb:
> Läuft wenigstens der Originalcode?

Nee, das ist ja praktisch der "Originalcode".

Ich hatte in früheren Projekten ja auch ähnliche Konstrukte als Ticker 
drin. die alle liefen.  Fuses sind D4, D9, FF

Ich tippe jetzt auf ein HW Problem.
Es kann einfach nicht sein, daß Code ausserhalb der Endlosloop immer 
dann ausgeführt wird, wenn der Interrupt kommt.

Ich habe testweise folgendes gemacht: siehe test.c

Man beachte den leeren Interrupthandler!  Aber, offenbar wird das toggle 
am Programmanfang immer dann ausgeführt wenn der Interrupt kommt. Und 
das togglen erfolgt mit der richtigen Frequenz von ca 16 Hz.
Betriebsspannung ist stabil Brown-out ist disabled.
Gast #7289718
Lesenswert?

Oliver S. schrieb:
> Hast du für den richtigen Prozessor compiliert, und lädst du auch das
> richtige Programm hoch?
>
> Welche Compilerversion, und wird die aufgerufen?

Oh Sch..
Klar, Fehler gefunden.  Asche auf mein Haupt.  Ich habe momentan zwei 
Projekte auf dem Tisch liegen.  Beim Programmer habe ich natürlich einen 
ATMEGA8 eingestellt, aber im Makefile die Zeile für den Prozessor 
vergessen zu ändern.  Das andere Projekt ist ein ATMEGA16.

Vielen Dank für Eure Hilfe.  Ich war lange am Suchen.

> "make.exe" all
------------------------ COMPILE timer.c -------------------------------
avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields 
-fpack-struct -fshort-enums -Wall -W -Wstrict-prototypes 
-Wa,-ahlms=timer.lst timer.c -o timer.o
avr-gcc -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields 
-fpack-struct -fshort-enums -Wall -W -Wstrict-prototypes 
-Wa,-ahlms=timer.o timer.o   --output timer.elf 
-Wl,-Map=timer.map,--cref -lm
avr-objcopy -O ihex -R .eeprom timer.elf timer.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" 
--change-section-lma .eeprom=0 -O ihex timer.elf timer.eep
c:\WinAVR\bin\avr-objcopy.exe: --change-section-lma .eeprom=0x00000000 
never used
avr-objdump -h -S timer.elf > timer.lss
Size after:
   text     data      bss      dec      hex  filename
    114        0        0      114       72  timer.elf

Creating FLASH file "timer.e2p" for atmega8
Errors: none
----------------------------- end --------------------------------------

> Process Exit Code: 0
> Time Taken: 00:00

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren