Forum: Mikrocontroller und Digitale Elektronik Ein- und Ausgänge auf PORTB


von justus (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

Eine eigentlich einfache Aufgabe die ich mir gestellt habe
(Mikrokontroller-Neuling) lässt mich ins Leere laufen:
Ich möchte den Eingangspegel des PINB6 lesen (PullUp enabled) und den
Wert anschliessend an PINB7 ausgeben.
Das angehängte Programm ist nur in AVR-Studio simuliert und noch nicht
in Wirklichkeit. Die Simulation zeigt jedoch, dass bereits beim ersten
Durchlauf das Programm beendet wird, obwohl es das eigentlich erst auf
Tastendruck sollte.
Was habe ich übersehen, bzw. wer kann mir sagen wo ich die nötigen
Infos finde?

Gruss Justus

von Tobi (Gast)


Lesenswert?

loop:
     sbic PINB, 6         ;"skip if bit cleared", nächsten Befehl
überspringen,
                          ;wenn Bit 0 im IO-Register PINB =0 (Taste
gedrückt, da
                          ;Taster gegen Gnd)
     rjmp loop            ;Sprung zu "loop:" -> Endlosschleife

     cbi PORTB, 7         ;Bit 7 im IO-Register PORTB auf 0 setzen ->
LED an

ende:
     rjmp ende            ;Endlosschleife

**
nur beim ersten tastendruck wird die schleife loop aufgerufen wenn der
tastendruck abgehandelt ist gehts weiter beim label ende wo die taste
nicht mehr abgefragt wird. du solltest die endlosschleife (label ende)
auch um die tastenabfrage machen dann klappt es!

von justus (Gast)


Lesenswert?

Danke für den Tipp. Jetzt klappts.
Nun die Folgefrage: PINB6 ist als Eingang konfiguriert. Der Pull-Up
Widerstand enabled. Warum ist der Pin dann bei der Simulation nicht als
high markiert? Wird der Pull-Up nicht simuliert?

Justus

von Andy (Gast)


Lesenswert?

Schau mal bei den I/0-Anzeigen deines Studios unter PORTB. Wenn du die
Pull-Ups einschaltest, dann schaltest du PORTB auf HIGH. Allerdings
sind die Signale die der Controller einließt ja PINB. Das heißt, der
Simulator weiß zwar, dass die Pull-Ups an sind, aber er meint, dass du
momentan alle Tasten drückst.
Um dies richtig zu simulieren brauchst du ja bloß alle Felder von PINB
auf HIGH setzen indem du sie anklickst, dass enstpricht dem loslassen
der Tasten.

Andy

P.S.: Du könntest ja mal versuchen, ob sich beim Ausführen was ändert,
wenn du dem Simulator mitteilst, dass die Tasten zu beginn losgelassen
sind, indem du folgendes hinzufügst:

LDI Temp, 0xFF
OUT PINB, Temp

von justus (Gast)


Lesenswert?

Der Witz am Simulator sollte ja sein, dass er die Wirklichkeit auf dem
Rechner nachbildet. Wenn ich für solche "trivialen" Sachen den
Simulator überlisten muss, dann Gute Nacht für die komplexeren.
Aber trotzdem vielen Dank für den Hinweis.

von Andy (Gast)


Lesenswert?

Hallo Justus,

sei doch nicht so streng mit dem Computer, ich finde den Simulator echt
toll.
Ich würde das auch nicht überlisten nenne, wenn der Computer als
Standart Low-Werte annimmt und du ihm nun einfach sagst, dass es doch
zu beginn High-Werte sein sollen.
Wenn der Simulator jedesmal die Werte von PORTB änderen würde falls du
die Pull-Ups an- oder ausschaltest, hättest du warscheinlich spätestens
bei Dingen wie Tastautreinlesen ein Problem. Von daher ist das schon
gut, wie das der Simulator macht.

Andy

von justus (Gast)


Lesenswert?

Ich werd wohl damit leben müssen ... ;-)
Ich hab bis jetzt noch keine Möglichkeit gefunden, meine Timer0
Interrupt-Routine zu simulieren (zum Glück lief sie auf der Hardware
ohne Probleme), da der Timerüberlauf nicht dazu geführt hat, das die
Routine angesprungen wird.
Kann der Simulator das?

Justus

von Andy (Gast)


Lesenswert?

Hallo Justus

Ich habe vor kurzem auch mit dem Timer0 programmiert und ihn im
Simulator versucht zu simulieren. Es ist kein Problem und springt auch
in die Routine allerdings wird das sehr sehr lange dauern. Du musst mal
zu dem Timer0-Register im Simulator schauen und dann einfach den Wert
manuel auf 244 setzten, dann läuft er ziemlich bald über und du kannst
die Sache gut simulieren. Das heißt du sagst dem Studio einfach, dass
es ein "bischen" Zeit überspringen soll.

Andy

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
Noch kein Account? Hier anmelden.