Forum: Mikrocontroller und Digitale Elektronik Port eines ATMega32 wie einen Port eines 8052 ansteuern


von Ralf (Gast)


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.

von Ralf (Gast)


Lesenswert?

Ach so, klar ist natürlich, dass der Port auf die Art natürlich so gut 
wie keinen Strom liefern kann, taugt also nicht viel, aber es ist ja wie 
gesagt nur eine "Seitenfrage" :-)

von spess53 (Gast)


Lesenswert?

Hi

Wenn mich nicht alles täuscht, hat Atmel in der AppNote 'Software 
I2C'(oder ähnlich) so etwas gemacht. Mal auf der Atmel-Seite nachsehen.

MfG Spess

von yalu (Gast)


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.

von yalu (Gast)


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.

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.