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?
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
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?
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.
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
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. .
Peter D. schrieb: > Ein Taster läßt sich nur schlecht simulieren, es fehlt das Prellen. Keinen Taster zu Hause zu haben allerdings auch.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.