Hallo,
in einer Timer Interrupt Service Routine möchte ich etwas an PortD[4..6]
ausgeben. In AVR Studio 4.10 gehe ich im Einzelschrittbetrieb durch den
entsprechenden Bereich und sehe mir das PORTD im I/O-Fenster an.
nach der out-Anweisung in der Sequenz
1
ldi temp1, $F0
2
out PORTD, temp1
3
ldi ZL, LOW( Segment0 )
4
ldi ZH, HIGH( Segment0 )
wird bei PORTD auch 0xF0 angezeigt. Nach dem nächsten "Step Into" steht
PORTD auf 0xD0 und PIND auf 0x70, nach einem weiteren "Step Into"
wechselt PIND nach 0x50.
Mit dem Bit D5 passiert also irgend etwas, was nicht meiner Erwartung
entspricht.
PortD wurde wie folgt "initialisiert":
1
ldi temp, $F0 ;D4...D7 als Ausgabe
2
out DDRD, temp
Kann mir bitte jemand gedanklich auf die Sprünge helfen? Was habe ich
übersehen?
Recht herzlichen Dank im Voraus ;-)
Thomas
Hier scheint es sich doch nur um ein Simulationsproblem im AVRSudio zu
handeln (als ich den Thread eröffnet hatte, funktionierte auch die
dazugehörige Hardware nicht so richtig). Jetzt funzt aber die Hardware
zufriedenstellend. Auf Port B, Bit 2 gibt es einen ähnlichen Effekt.
Hat da noch jemand eine Idee oder Erklärung dazu?
Danke!
moin moin,
bloss mal überflogen und kurz angeregt:
Timer-Serviceroutine => Timer 0 verwendet ?
Vllt. läuft T0 im (für deine Anwendung) falschen Modus.
PD.5 ist Compare A für PWM Anwendungen auf T0, könnte also nen Wechsel
erklären
--> Timer Init am besten mal posten
PortB2 ist lustigerweise Compare B dafür ..... scheint mir also ganz
daran zu liegen.
wenn die Compares null sind, und der timer nen reset kriegt (fürs
zeit-auszählen gibts auch nen ctc mode) gibts je nach config nen wechsel
auf den beiden pins.
In diesem Sinne, Viel Erfolg !
Hallo Abuze,
recht herzlichen Dank für Deine Antwort. Über die alternativen
Pinbelegungen habe ich auch nachgedacht, bin mir aber "keiner Schuld
bewußt" ;-) Und wie gesagt, der Code und die Schaltung tun es ja jetzt.
Habe aber vorsichtshalber den gesammten Code mal kopiert: