Hallo zusammen bei folgendem Programmteil geht offensichtlich der lds (1. Zeile nach Timer1_comp_B:)Befehl nicht. Im Simulator klappt alles, aber die serielle Schnittstelle gibt nur hx00 aus. Wenn ich temp3 mit anderen Werten lade funktioniert alles. Kann es sein dass man den Timer nicht auslesen kann, oder was mache ich denn da verkehrt. Und warum geht das im Simulator?? Der Timer läuft definitif, denn an PORTD,2 bekomme ich ein schönes Signal. Timer1_overflow: //Beginn einer neuen PCM-Periode push temp1 in temp1,sreg push temp1 cbi PORTD,2 ;LED ausschalten(Lebenszeichen) clr temp1 sts TCNT1H,temp1 sts TCNT1L,temp1 ldi temp1,0b00111111 out PORTB,temp1 ;Bits setzen out PORTC,temp1 sbi PORTD,4 sbi PORTD,5 ldi status,0 pop temp1 out sreg,temp1 pop temp1 reti ;******************************************************* Timer1_comp_B: lds temp3,TCNT1H sts udr0,temp3 sbi PORTD,2 ;LED einschalten(Lebenszeichen) reti
probier mal IN yyy,TCNT1H OUT TCNT1H,yyyy bei anderen AVR's mit mehreren Timern ab 3 muss aber der LDS-Befehl genutzt werden....
welcher Atmel Prozessor ? TCNT1H liegt nicht bei einigen AVR im I/O Bereich, dann ist bei LDS Zugriff ein Offset von 0x20 zu addieren. Oder der Compare B Wert ist < 256, dann ist TCNT1H immer 0
Kommentiere mal das Programm etwas besser und fang mit einer CPU-Legende an. Ich bin nicht sicher, aber gibts im Simulator keinen Interruptkonflikt gegenüber der Hardware ?
Mikki M. schrieb: > welcher Atmel Prozessor ? Atmega328 war einer von denen die ich so mitbekommen habe... Hatte das Problem selber mal gehabt und gerade nochmal kurz in paar SW's geschaut finds aber gereade nicht..
haderlump schrieb: > Kann es sein dass man den Timer nicht auslesen kann, oder was mache ich > denn da verkehrt. Und warum geht das im Simulator?? AVR Simulator ist sowieso Sch... Und man soll nicht versuchen erst TCNT1H zu lesen... Versuche es erst mit TCNT1L und dann TCNT1H ;-)
:
Bearbeitet durch User
Ich freu' mich schon auf den ersten Aufruf von Timer1_comp_B, außerhalb der Entwicklungsumgebung.
Sebastian S. schrieb: > Ich freu' mich schon auf den ersten Aufruf von Timer1_comp_B, > außerhalb > der Entwicklungsumgebung. Da passiert nichts, keiner der Befehle verändert SREG. @haderlump, Zitat DB: "Accessing the low byte triggers the 16-bit read or write operation."
Hallo Leute Ich habe den Fehler gefunden. Man muss zuerst das Low-Byte lesen, auch wenn man das nicht braucht. Dan klappt es. Der Simulator berücksichtigt das nicht, sondern gibt einfach das High-Byte zurück. Gruß Fritz
haderlump schrieb: > Hallo Leute > Ich habe den Fehler gefunden. Man muss zuerst das Low-Byte lesen, auch > wenn man das nicht braucht. Dan klappt es. Der Simulator berücksichtigt Wow. Wie bist du nur darauf gekommen ?
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.