www.mikrocontroller.net

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


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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" :-)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.