ATMEGA 48/88, Live-Umschaltung Portpin ADC ./. Digital-IO

OP #7382258
Lesenswert?

Liebe Leute, Folgende Frage konnte ich mir @Datenblatt (noch) nicht beantworten, vielleicht übersah ich dort (wo?) aber etwas:

Am Atmega48 liegt an einem ADC-Eingang (PC.5/ADC.5) der EIN-/AUSGANG eines 4051-Analog-Multiplexers, der dient 3 Zwecken:

  • paar 4051-Pins sind Digital-IN
  • paar 4051-Pins sind Digital-OUT
  • paar 4051-Pins sind Analog-IN Zyklisch wird der 4051 adressiert und der AVR-PortPin entsprechend konfiguriert.

WENN ich nun über ADMUX den AVR-PortPin (temporär) als ADC wähle:

  • ist es relevant, wie der PortPin per DDRn/PORTn zuvor definiert wurde?
  • oder wird er durch ADMUX eh komplett von der DigitalWelt abgekoppelt?

WIE bringe den PortPin danach wieder zu digitaler Funktion?

  • reicht es ADMUX auf einen anderen Input/GND zu schalten?
  • kehrt der Port dann zur vorherigen DDRn/PORTn-Definition zurück?
  • oder muss ich den PortPin danach neu konfigurieren?

Besten Dank schomma für etwas Hilfe!

Moderator Persönliche Seite #7382273
Lesenswert?

Es gibt AVRs, bei denen man den Digitaleingang komplett "tot legen" kann, wenn man den Pin analog benutzt. Hat bspw. Sinn, wenn man "zappelige" Analogsignale anliegen hat, die dazu führen, dass der Eingang ständig hin und her schaltet, was zusätzlichen Energieverbrauch bedeutet.

ATmega48/88 haben diese Funktionalität nicht. Man sieht im Blockdiagramm der IO-Ports, dass dort die einzige Möglichkeit, den Digitaleingang vom Pad zu entkoppeln ist, dass sich die MCU im Sleep befindet. Ansonsten ist der Digitalteil der Eingangslogik immer angeschlossen und bewertet das anliegende Signal entsprechend seiner Eingangscharakteristik (Pegel, Schmitt-Trigger-Zustand).

#7382275
Lesenswert?

Ist aber im Datenblatt eindeutig erklärt.

Kapitel I/O-Ports - Alternate Port Functions:

Signal Name: AIO

Full Name: Analog Input/Output

Description: This is the Analog Input/output to/from alternate functions. The signal is connected directly to the pad, and can be used bi- directionally.

Also die ADC Eingänge sind parallel zum Portpin geschaltet.

Gruß Jobst

OP #7382284
Lesenswert?

Jörg W. schrieb:

Ansonsten ist der Digitalteil der Eingangslogik immer angeschlossen und bewertet

Jobst M. schrieb:

Also die ADC Eingänge sind parallel zum Portpin geschaltet.

Besten Dank! Also -wenn ich richtig verstehe- sollte ich dann:

a) VOR 4051-Umschaltung auf ADC-Verwendung den AVR-Eingang STETS auf "Input-ohne-PullUp" schalten, um das AnalogSignal möglichst wenig zu beeinflussen.

b) VOR 4051-Umschaltung auf DIGITAL-Verwendung den AVR-Eingang STETS "neu-und-jeweils" konfigurieren.

Verstand ich es richtig? Dank nochmal!

#7382329
Lesenswert?

Jochen schrieb:

Verstand ich es richtig?

Sieht so aus aber mal, so als Idee, und wenn dein Digital-Signal nicht rasend schnell ausgewertet werden muss:

Lass den Eingang doch immer als ADC laufen. Wenn die das Digitalsignal interessiert wertest du einfach die Analogmessung aus indem du dann z.B. alles < 0.3Vcc als 0 bewertest und alles >0.7Vcc als 1. So kannst du dir das Umschalten zwischen Analog- und Digitalfunktion im Grunde schenken, nur mal so als Idee ;)

#7382395
Lesenswert?

Mit DIDR0 kann man die digitalen Eingangspuffer abschalten. Will man zwischen allem umschalten, muß man also DDRC, PORTC und DIDR0 entsprechend setzen.

Jochen schrieb:

  • paar 4051-Pins sind Digital-OUT

Ausgänge mit dem 4051 zu multiplexen halte ich für völlig sinnfrei. Die nicht adressierten sind dann ja floatend, nur der eine ausgewählte ist Ausgang. Für Ausgänge gibt es adressierbare Latches, z.B. 74HC259.

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