Port eines ATMega32 wie einen Port eines 8052 ansteuern

Gast #727502
Lesenswert?
• ▲
▼
Hallo,

ich bin grad am Grübeln, ob es möglich ist, einen Port des ATMega32 so 
zu beschalten, dass er sich in der Software wie ein Port eines 8052ers 
verhält. Damit meine ich die "quasi-bidirektionalität" der 8052-Ports. 
Vorgestellt hab ich mir das so, dass ich an den Port 
Pull-Down-Widerstände hänge, die hochohmiger sind, als die internen 
Pull-Ups des ATMega bei aktivierten Eingängen. In der Software stelle 
ich dann den Port fest auf Eingang. Möchte ich eine 1 ausgeben, 
aktiviere ich den Pull-Up, für eine 0 deaktiviere ich ihn. Würde das so 
gehen? Was meint ihr?

Ralf

PS: Das ist eine Seitenfrage, ist nicht konkret für ein Projekt, würde 
mich nur mal interessieren, ob das so machbar wäre, vielleicht kann mans 
ja mal brauchen.
Gast #727533
Lesenswert?
• ▲
▼
> In der Software stelle ich dann den Port fest auf Eingang. Möchte
> ich eine 1 ausgeben, aktiviere ich den Pull-Up, für eine 0
> deaktiviere ich ihn.

Nicht ganz, der Low-Pegel soll ja niederohmig sein.

Um 8052-ähnliches Verhalten zu erzielen, musst du für High-Pegel den
Port auf Eingang schalten (DDR=0) und den Pullup aktivieren (PORT=1),
für Low-Pegel den Port auf Ausgang (DDR=1) schalten und den Pegel auf
0 (PORT=0) setzen.

Das Problem ist, dass man zum Umschalten zwei Registerzugriffe
braucht. Somit befindet der Port bei jedem Umschaltvorgang für einen
Taktzyklus in einem nicht 8052-konformen Zustand: Je nachdem, in
welcher Reihenfolge man die Register beschreibt, ist entweder der
High-Pegel kurzzeitig niederohmig (DDR=1, PORT=1), oder der Port ist
hochohmig und hat damit überhaupt keinen definierten Pegel (DDR=0,
PORT=0).

Wenn man über diese Glitches hinwegsieht und der - wie du schon
erkannt hast - hohe Pullup-Widerstand nicht stört, kann man mit dem
AVR portseitig tatsächlich einen 8052 mimen.
Gast #727540
Lesenswert?
• ▲
▼
Nachtrag: Wenn du bereit bist, dem Port einen externen
Pullup-Widerstand zu spendieren, wird die Sache perfekt: Du kannst den
richtigen Widerstandswert wählen, und das Umschalten zwischen den
Pegeln geschieht nur noch mit dem DDR-Register. Das PORT-Register
bleibt immer auf 0. DDR=1 ergibt 8052-Low, DDR=0 entsprechend
8052-High.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren