Hallo, ich bin seit ein paar Tagen dabei ein Programm in AVR Studio 4 zu
schreiben um anhand eines atmega16 eine IR Diode anzusteuern.
Nun hab ich das Problem dass die Diode permanent sendet, obwohl sie das
nicht darf (soll ca. nur 200ms lang senden). Im debug Modus des AVR
Studio bin ich auf Fehlersuche gegangen und auf etwas seltsames
gestoßen. Zuerst ein Teil des codes:
1
CLR temp ;Timer Register laden
2
OUT TCNT0, temp
3
LDI temp, 0x9D ;Output Compare Reg. laden
4
OUT OCR0, temp
5
6
LDI temp, 0b00011001 ;Counter starten. Ein Burst von 30
7
OUT TCCR0, temp ;Impulsen gibt Startsignal
8
9
;RCALL W5s
10
;RCALL W5s
11
12
loop: CPI c, 0x01
13
BRNE loop
Also, ich habe einen Timer mit compare match interrupt definiert, der
funktioniert in einem ähnlichen Programm tadellos. Aber hier beim
debuggen, springt der PC sofort nach dem ersten compare match (während
er sich in der Schleife befindet) automatisch ein paar Befehle zurück
auf die Zeile "LDI temp, 0b00011001" und löscht das global interrupt
flag (?????). Dadurch kommt das Programm ins Stocken und es geschieht
kein interrupt. Ich habe keine Ahnung an was das liegen könnte.
Ich bin am Verzweifeln und bitte dringend um Hilfe!
mfg
Max
Hi
Nachtrag: Solche Fehler lassen sich leicht vermeiden, in dem du statt
der Adresse die Konstanten aus der ''m16def.inc' benutzt
-> .org OC0addr
MfG Spess
Ahhh danke! Denke das liegt daran dass ich im Datenblatt des mega32
nachgeschaut habe weil ich fest überzeugt war dass beide uc gleich sind
abgesehen von den Speicherkapazitäten.
Nochmals vielen Dank.
mfg
Max