Forum: Mikrocontroller und Digitale Elektronik Assembler AVR Atmega Taster simulieren? Also einem Eingangs-pin einen Wert geben?


von Markus M. (kingloddo)


Lesenswert?

Assembler

Ich bin ziemlich neu und würde gerne in Atmel Studio einen Taster 
"simulieren" (für den Atmega16).

Ich habe $0F auf DDRD gesetzt, damit sollten PD0-3 Eingänge und PD4-7 
Ausgänge sein.
Nun möchte ich, dass etwas passiert, wenn der Taster PD4 betätigt wird. 
Ich habe aber leider keinen Taster zu Hause, weshalb ich gerne dem PD4 
eine eins zuweisen würde, damit ich im Atmel Simulator gucken kann, ob 
mein nachfolgender Code, also die Abfrage, ob am Pin eine 1 vorliegt, 
auch funktioniert.
Ausgabepins kann ich ja kinderleicht definieren mit out PORTD, xxx aber 
wie funktioniert das für Eingabepins?

von Uwe (Gast)


Lesenswert?

Hi,
entsprechendes Portbit mit Maus anklicken/setzen... wo ist das Problem?
>Ausgabepins kann ich ja kinderleicht definieren mit out PORTD, xxx aber
>wie funktioniert das für Eingabepins?
normalerweise mit PinD
Viel Erfolg,Uwe

von F. F. (foldi)


Lesenswert?

Uwe schrieb:
> wo ist das Problem?

Vermutlich hat er auch keine Maus.

SCNR

von Felix P. (fixxl)


Lesenswert?

Markus M. schrieb:
> Ich habe $0F auf DDRD gesetzt, damit sollten PD0-3 Eingänge und PD4-7
> Ausgänge sein.

Ist es nicht genau anders? PD7 wird durch das MSB festgelegt und ist 
daher 0, also Eingang?

von Peter D. (peda)


Lesenswert?

Ein Taster läßt sich nur schlecht simulieren, es fehlt das Prellen.

Man könnte den Pin als Augang definieren und dann mit einem 
Timerinterrupt ihn prellen lassen, d.h. bei loslassen oder betätigen ~10 
mal toggeln mit ~1kHz.

von chris (Gast)


Lesenswert?

Taster wird abgefragt mit folgenden Befehlen

SBIS heißt von 1 auf 0 des PinXn oder

SBIC heißt von 0 auf 1 des PinXn

Zu beachten ist das man beim Sprung in die Routine als erstes ca 
150ms-200ms wartet damit der selbe Pin nicht schon weitere Aktionen 
ausführt falls dieser im Unterprogramm auch verwendet wird.

zb Steuerkreuz für ein Menu...

Andere Möglichkeiten sind zb den gesamten PinX in ein Register schieben, 
dann xor um das Prellen zu umgehen..


Das Selbe funktioniert auch wenn das DDRx mit $FF gesetzt worden ist 
kann trotzdem mit PinXn der Zustand der einzelnen Pins abgefragt werden

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Felix P. schrieb:
> Ist es nicht genau anders? PD7 wird durch das MSB festgelegt und ist
> daher 0, also Eingang?

Du hast recht, es ist genau anders. Eine 0 im DDR ist für Eingang und 
eine 1 setzt den Pin als Ausgang.
Richtig wäre als, DDRD mit 0xF0 zu besetzen, wenn man PD0-3 als Eingang 
benutzen will. .

von Philipp G. (geiserp01)


Lesenswert?

Peter D. schrieb:
> Ein Taster läßt sich nur schlecht simulieren, es fehlt das Prellen.

Keinen Taster zu Hause zu haben allerdings auch.

von chris (Gast)


Lesenswert?

Markus M. schrieb:
> Ich habe $0F auf DDRD gesetzt, damit sollten PD0-3 Eingänge und PD4-7
> Ausgänge sein.

Falsch

$0f = binär 00001111, gesetzt wird nur das untere Nibble, also Px0-3 als 
Ausgang im DDRx und das obere Nibble Px4-7 als Eingang im DDRx!!!

Datenblatt lesen ebenso dazu im Anhang das Instruction Set wo die 
Befehle erklärt sind


In der Software bzw im Simulator musst due nur die PinXn anklicken und 
dann dich für positive (1-aktiv) oder negative (0-Aktiv) entscheiden mit 
den darauf folgenden Befehl

von Markus M. (kingloddo)


Lesenswert?

Sorry Leute!

Am Anfang hatte ich mich verschrieben, ich meinte natürlich PD0-3 sind 
Ausgänge und 4-7 Eingänge.

Dass ich die Pins einfach in der Software anklicken kann, wusste ich gar 
nicht, funktioniert aber wunderbar!
Daher vielen vielen Dank an alle, die sich die Zeit genommen haben, 
einem blutigen Anfänger weiterzuhelfen.

Übrigens besitze ich keinen Taster, da ich die Sache für die Uni 
schreiben soll und aus eigener Initiative niemals auf die Idee gekommen 
wäre, Assembler zu lernen. Aber ich muss zugeben, es macht Spaß :D

von chris (Gast)


Lesenswert?

Markus M. schrieb:
> aus eigener Initiative niemals auf die Idee gekommen
> wäre, Assembler zu lernen. Aber ich muss zugeben, es macht Spaß :D

deutlich einfacher als ein Hochsprache zu lernen ;)

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.