Hallo,
ich versuche einen einzelnen PinB jedes mal wenn ein Taster an PortD
betätigt wurde ein bzw. aus zu schalten.
Beim Testen im AvrStudio5 läuft alles wie geplant (vorausgesetzt der
PinD 4 wird manuell bedient).
Am ATMega168 wird an PB1 jedoch 2,5V angezeigt.
Meine Überlegung ging dahin das PB1 evtl. in schneller Folge 1|0
geschaltet wird, was bedeuten würde das der Taster\PortD4 nach dem
ersten Aufruf aktiv bleibt ?
Zum toggeln fehlen noch ein paar Befehle, aber
wenn Du ein Pin setzen möchtest, dann über PORTB und nich über PINB.
PINx : zum eingeben
PORTx : zum ausgeben
Mit "sbi PORTB, 1" wirds wohl klappen.
Jürgen W. schrieb:> der komplette PortB schon auf 1 ist.
Da hilft es nichts, wenn der Kommentar was anderes behauptet...
>> out PORTB, r16 ;PortB 0 (alle aus)
Nun ja, ich hatte gelesen das bei moderneren Microcontrollern eben ein
Port getoggelt werden kann in dem man den entsprechenden Pin direkt
manipuliert (ihn auf 1 setzt).
Doch, das mit PINB sollte eigentlich gehen, da man durch schreiben auf
PINX.n PORTX.n toggelt... Aber dein Port toggelt solange du den Taster
gedrückt hast wie wild hin und her. Du musst den Taster entprellen und
auf jeden Tastendruck nur ein Mal reagieren. Das macht man mit Flags.
Schau mal hier im Wiki nach.
Gruß
Jonathan
DAs kommt auf den Mikrocontroller drauf an und nicht ob er modern ist.
Datenblatt lesen !!!
http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf
UND MIT LESEN IST DURCHARBEITEN UND NACHVOLLZIEHEN GEMEINT
beim lesen kann man fragen stellen.
Ist doch alles richtig.
Solange PORTD,BIT4 L ist wird bei jedem Durchlauf BIT1 auf PORTB
invertiert.
Als Ein-/Aus-Taster fehlt da dann allerdings Entprellmechanismus.
Z.B. so:
r16.0 = Dein Flag, ob bereits gedrückt wurde
Loop:
SBRC r16, 0
RJMP Toggle_ende
SBIS PIND, 4
RJMP Toggle_ende
SBI PINB, 1
SBR r16, &B00000001
Toggle_ende:
SBIS PIND, 4
CBR r16, &B00000001
RJMP Loop
So wird bei jedem Drücken nur ein Mal getoggelt.
(Ungetestet und ohne Entprellung)
Gruß
Jonathan
>>Toggling the pin>>Writing a logic one to PINxn toggles the value of PORTxn, independent on>>the value of DDRxn.>>Note that the SBI instruction can be used to toggle one single bit in a>>port.
Wieder was gelernt.
Ja Uwe, ich habe das Datenblatt gelesen (s.73) aber wenig verstanden da
ich wirklich ein Anfänger bin. Ob der 168 diese Funktion bietet war aber
auch nicht die Frage.
Ich werde mich nun erstmal mit Entprellung und Flags beschäftigen und
danke euch für die zahlreichen Antworten sowie den kompakten Code.