Forum: Mikrocontroller und Digitale Elektronik AVR-Ports, Umgang mit unvollständiger Herausführung.


von W. Meyer (Gast)


Lesenswert?

Werte Damen und Herren.

Als ich vor längerer Zeit mit dem AtMega 103
und dem AtMega 8515 werkelte war das noch kein Thema,
weil dort alle Ports auch komplett herausgefüht werden...

Bei'm Tiny2313 gilt das aber nur noch für Port B.
Port D hat nur noch  7 äußere Anschlüsse und Port A gar nur noch 3.
Für meinen Zweck brauche ich PA 0-1 als Ausgang.
PA 2 sollte ich wohl wegen der Reset-Funktion besser ganz in Ruhe 
lassen.
(Also auch keine Datenrichtung definieren usw... ?)
Port B 0-7 und Port D 0-7 brauche ich als Ausgänge.
Port B 7 muß aber unbedingt ein Eingang werden.

Natürlich gibt es passende Befehle dafür,
um auch bei einzelnen Pins die Datenrichtung festzulegen
und sie dann auch einzeln anzusteuern oder abzufragen.

Was passiert aber, wenn man z. B. den Port A komplett abfragt,
obwohl doch nur die ersten 3 Bit ein sinnvolles Ergebnis ergeben können?
Wo liegen sonst noch eventuelle "Fallsticke"?
(Hätte es gern mal gewußt, auch wenn ich PA 0-1 eigenlich als Ausgang 
nutzen will.)

Vielen Dank im Voraus: Wolfg.

von Flip B. (frickelfreak)


Lesenswert?

Im zugehörigen datenblatt stehen praktische tabellen mit den werten, die 
man garantiert aus diesen registern liest. meistens "always read as 0".
Schreiben ist auch nicht schlimm.

von troll (Gast)


Lesenswert?

W. Meyer schrieb:
> Werte Damen und Herren.
Werter Herr Meyer ;-)

> Für meinen Zweck brauche ich PA 0-1 als Ausgang.
DDRA=(1<<PA0)|(1<<PA1);

> PA 2 sollte ich wohl wegen der Reset-Funktion besser ganz in Ruhe
> lassen.
Wenn die passende Fuse für PA2=Reset gesetzt ist dürfte der Wert von 
DDRA<2> nicht interessieren.

> Port B 0-7 und Port D 0-7 brauche ich als Ausgänge.
DDRB=0xFF;

> Was passiert aber, wenn man z. B. den Port A komplett abfragt,
> obwohl doch nur die ersten 3 Bit ein sinnvolles Ergebnis ergeben können?
Wert=PINA&((1<<PA0)|(1<<PA1)|(1<<PA2)) und fertig.

Oder willst du Assembler?

von W. Meyer (Gast)


Lesenswert?

Erst mal danke für die Antworten.

Ich habe es schon immer mit Assembler gemacht
weil damit gut klarkomme und halt kein C kann oder brauche.
Mit welchen Befehlen ich die Datenrichtung festlege
und die Abfrage oder Eingabe für einzelne Pins machen muß, weiß ich.
Das hätte ich vielleicht gleich deutlicher schreiben sollen.

"always read as 0" scheint also "der Tipp" für mich zu sein.

Vielen Dank: Wolfg.

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.