mikrocontroller.net

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


Autor: justus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: justus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: justus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: justus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.