AVR - ein paar ADC-Fragen

Gast #359316
Lesenswert?

Hallo,

ich sitze hier gerade vor meinem (nicht richtig funktionierenden)
AVR-ADC und finde den Fehler nicht. Deshalb erstmal eine
Grundsatzfrage:

Ich habe vor den ADC einen externen 4067 sitzen (16-Kanal Analog
Multiplexer). Dieser hat 4 digitale Eingänge, mit denen man bestimmen
kann, welcher der 16 analogen Eingänge auf den Ausgang durchgeschaltet
wird. Diese will ich mit PORTA0..3 ansteuern, der Analogausgang liegt
auf PORTA5. Geht das überhaupt? Oder ist, wenn ich den ADC nutzen will,
der ganze PORTA weg?

Gruß,
Sebastian
#359317
Lesenswert?

Das geht. Wobei bei meinem AVR (Mega8) der ADC auf PortC liegt. ;-)

Bei meinem anderen AVR (Mega48) kann (und sollte) man sogar bitweise
den Digitalteil des Ports deaktivieren, wenn man den ADC nutzen will.

Bei meinem noch anderen AVR (Tiny15) gibt es nur einen Port (PortB),
von dem einige Pins als ADC nutzbar sind.

Wie das bei deinem AVR ist, könnte dir wahrscheinlich ein Blick ins
entsprechende Datenblatt verraten.

...
Gast #359318
Lesenswert?

Oh, tschuldigung, habe vergessen zu erwähnen. ATMega32.

Wollte nur wissen, ob gleichzeitig digitaler Ausgang auf 5Pins und
analoger Eigang auf einem Pin auf dem selben Port möglich ist. Dazu
habe ich im Datenblatt nämlich nix gefunden.

Danke einstweilen. Es funktioniert zwar immer noch nicht, aber dann
liegt es zumindest nicht dadran.

Sebastian
#359319
Lesenswert?

;-)

Ja selbstverständlich kann man jedes Bit eines Ports getrennt als
Digital-Ausgang, Digital-Eingang oder Analog-Eingang verwenden.
Das steuerst du halt mit den Registern DDRA und PORTA (falls es um Port
A des Mega32 geht). Allerdings sollte man (bei einigen AVRs) während der
Wandlung nicht an den Digitalausgängen am selben Port herumschalten, da
dies die Wandlungsgenauigkeit beeinflussen könnte. Aber das trifft ja
in deinem Fall sowiso nicht zu.

Denke daran, dass die Wandlung Zeit braucht. Wenn du die Quelle
eingestellt hast, dann startest du die Wandlung und wendest dich
anderen Aufgaben zu. Ist die Wandlung fertig (ADC-Complete-Interrupt
oder sowiso laufender Timer-Interrupt), so liest du den Wert aus, weist
ihn dem entsprechenden Speicherplatz zu, schaltest die Messquelle um und
startest die nächste Wandlung. Nur so bekommst du auch den Wert der
jeweiligen Quelle.

...
Gast #359320
Lesenswert?

Ok, Problem ist gelöst: Ich benötige nur 8 Bit, und ich habe vergessen,
das ADLAR-Bit (Linksbündig) zu setzen. Die Mini-Ergebnisse habe ich
fälschlicherweise als Messfehler interpretiert.

Danke für die Antworten.
Sebastian

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