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.
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" :-)
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
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.