Forum: Mikrocontroller und Digitale Elektronik Atmel Ausgabe nur auf einem Port


von FX (Gast)


Lesenswert?

Hallo,

Ich arbeite gerade mit einem Atmega168 und komme bei einer Sache nicht 
weiter.
Ich nutze bei PORTD (alle Pins Ausgang) die Pins PD0 bis PD6 zur 
Ansteuerung eines LCD Displays, wie man schon sieht, ist PD7 noch 
unbenutzt.

Ich würde allerdings gerne noch etwas machen mit diesen Pins aber wie?
Also wie kann ich an dem Ausgang dort auf High wechseln, ohne das die 
anderen Pins beeinflusst werden und z.B. Müll auf dem Display erscheint? 
Außerdem müsste ich noch abfragen können, ob PD7 gerade High oder Low 
ist.

Wäre nett wenn mir das mal jemand kurz zeigen könnte wie es geht :)


MfG
FX

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Portpin setzen = zu setztende Bits (High) mit aktuellem Portzustand 
verodern.
Portpin löschen = alle nicht zu verändernden Bits High, das zu 
vernändernde Bit Low (das wäre dann auch das invertierte Byte vom 
setzen).

von Spess53 (Gast)


Lesenswert?


von Peter D. (peda)


Lesenswert?


von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

FX schrieb:
> Also wie kann ich an dem Ausgang dort auf High wechseln, ohne das die
> anderen Pins beeinflusst werden und z.B. Müll auf dem Display erscheint?

Am einfachsten geht das wohl mit den Assembler-Befehlen sbi und cbi:
1
sbi PORTD,PD7
2
cbi PORTD,PD7

> Außerdem müsste ich noch abfragen können, ob PD7 gerade High oder Low
> ist.

Geht recht gut mit sbis und sbic.

P.S.: ich seh grad, die Leute vor mir haben sehr gute Links gepostet. 
Beide sehr zu empfehlen.

von FX (Gast)


Lesenswert?

Ah Danke, das klappt schon mal.

Aber wie überprüfe ich jetzt ob dieser Pin high oder low ist?
Vorher habe ich auf 0b10000000 geguckt, aber es kann ja z.B. auch 
10000011 sein, das ist dann ein anderes Ergebnis aber das 7.bit ist ja 
trotzdem high.

von Justus S. (jussa)


Lesenswert?

steht doch lang und breit im schon verlinkten
http://www.mikrocontroller.net/articles/Bitmanipulation

von FX (Gast)


Lesenswert?

Oha, hätte wohl vorher nochmal aktualisieren sollen :D

Danke für die Hilfe, klappt alles :)

von martin (Gast)


Lesenswert?

http://www.mikrocontroller.net/articles/Bitmanipulation#Bits_pr.C3.BCfen

müssen wir es vorlesen ?

also.... Der AVR hat spezielle Befehle um direkt einzelne Bits in den 
CPU-Registern r0..r31 sowie den IO-Registern 0..0x1F zu prüfen.....

Also auch drauf achten das deine Ports auch in dem Bereich liegen sonst 
gehen die Befehle nicht.

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.