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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.