Hallo,
ich habe eine Frage zum AT Mega 32 16PU. Beschäftige mich erst seit
kurzem mit diesem Controller und habe vorher mit einem AT Mega88 auf dem
Elektor ATM18 Board erste Erfahrungen gesammelt.
Da die I/O Lines bzw. eher die Flash-Speichergröße für mein Projekt
nicht ausreichten, habe ich mir nun selbstständig eine Platine gelötet
und den AT Mega 32 verbaut.
Ich möchte an PA0(ADC0) eine Spannung eines Temp.sensors wandeln und an
PA7(ADC7) eine Sollwerteinstellung mittels Poti vornehmen.
Nun habe ich aber das Problem das der ADC nicht funktioniert bzw.tritt
folgender Fehler auf. Selbst wenn ich den kompletten Port A als Eingang
konfiguriere liegt an den I/O Lines PA1-PA7 eine Spannung von ca.1,4V
an, trotzdessen diese mit keiner Peripherie verbunden sind. Gleiches
hatte ich bereits beim Port C an welchem ich ein LCD betreibe, dieses
"Problem" löste sich als ich das JTAG Interface (ge)disabled habe an
meinem erstmalig in Betrieb genommenen Controller. Woran liegt dies nun
aber an Port A?
Weiterführend hätte ich gern eure Meinung zu einem anderen Sachverhalt.
Derzeit habe ich es mir so vorgestellt bzw. hardwaremäßig realisiert,
das ich die Sollwerteinstellung mittels Poti mit Hilfe der internen
Referenzspannung von 2,56V erfasse. Wobei ich ein 220k Ohm Poti zwischen
AREF und GND platziert habe und den Mittelabgriff zurück an ADC7 führe.
An AREF liegen auch geforderte 2,56V an, nur funktioniert die Wandlung
eben nicht. Da mein Temp.sensor Spannungen zwischen 1,375V und 3,625V
ausgibt dachte ich mir hier AVCC als Referenz zu verwenden und ändere im
laufenden Programm via ADMUX die Auswahl der Referenz, nach jedem Ändern
mache ich eine Wandlung deren Ergebnis ich verwerfe und zusätzlich warte
ich einige Millisekunden um erneut zu wandeln. Doch wie bereits erwähnt
funktioniert dies nicht. Ist es hierbei überhaupt möglich, dass ich AREF
bei Uref AVCC nicht mittels Kondensator gegen GND schalte, sondern
dieser befindet sich dann mittels 220k Ohm Widerstand gegen Masse.
Vielen Dank im Voraus für eure Unterstützung.
Gruß Michi
Woher die Spannung an Port A kommt kann ich dir nicht sagen. Schon mal
den Kontroller aus dem Sockel entfernt?
AVCC mit VCC verbunden?
An AREF gehört ein 100n nach GND.
Der Widerstand einer Spannungsquelle am ADC sollte nicht höher als 10k
sein.
AREF, als Spannungsquelle, ist nicht geeignet für deine Zwecke.
Hallo Hubert,
Vielen Dank für deine Antwort und Einschätzung, dass "Problem" mit den
unerklärlichen Spannungspegeln an PA1 und PA7 haben sich in Wohlgefallen
aufgelöst. Auch wenn mir nicht erklärlich ist was der Grund war.
Mir ist bekannt, dass im Regelfall ein 100nF Kondensator zwischen AREF
und GND gehört. Habe diese Beschaltungsvariante aus dem Tutorial
entnommen:
"Oft interessiert auch der absolute Spannungspegel nicht. Im
Beschaltungsbeispiel oben ist man normalerweise nicht direkt an der am
Poti entstehenden Spannung interessiert. Viel mehr ist diese Spannung
nur ein notwendiges Übel, um die Stellung des Potis zu bestimmen. In
solchen Fällen kann die Poti-Beschaltung wie folgt abgewandelt werden:
Hier wird AREF (bei interner Referenz) als vom µC gelieferte Spannung
benutzt und vom Spannungsteiler bearbeitet wieder an den µC zur Messung
zurückgegeben. Dies hat den Vorteil, dass der Spannungsteiler
automatisch Spannungen bis zur Höhe der Referenzspannung ausgibt, ohne
dass eine externe Spannung mit AREF abgeglichen werden müsste. Selbst
Schwankungen in AREF wirken sich hier nicht mehr aus, da ja das
Verhältnis der Spannungsteilerspannung zu AREF immer konstant bleibt
(ratiometrische Messung). Und im Grunde bestimmt der ADC ja nur dieses
Verhältnis. Wird diese Variante gewählt, so muss berücksichtigt werden,
dass die Ausgangsspannung an AREF nicht allzusehr belastet wird. Der
Spannungsteiler muss einen Gesamtwiderstand von deutlich über 10kΩ
besitzen. Werte von 100kΩ oder höher sind anzustreben. Verwendet man
anstatt AREF AVCC und schaltet auch die Referenzspannung auf AVCC um,
ist die Belastung durch den Poti unkritisch, weil hier die
Stromversorgung direkt zur Speisung verwendet wird."
Hatte mir davon versprochen das, dass Bit-Zittern geringer ist. Es
funktioniert auch alles einwandfrei, nur eben bleibt der gewünschte,
erhoffte Effekt aus. Aus dem Tutorialzitat ergibt sich auch die Höhe des
verwendeten Widerstandes.
Warum bist du der Meinung das es für meine Anwendung ungeeignet ist?
Mit ungeeignet meinte ich das die Belastung von AREF immer kritisch ist.
Wenn du es schon machst solltest du den 100n trotzdem einfügen.
Je hochohmiger die Quelle am ADC-Eingang ist, um so störungsanfälliger
wird sie auch. Wenn du schon deine Konfiguration verwenden willst dann
lege noch eine 10n Kondensator vom ADC-Eingang nach GND.
Wenn ich Messungen über den ADC mache, dann addiere ich zehn oder mehr
Messungen und nehme den Mittelwert.
in ATTiny26 Datenblatt hatte ich mal diesen kleinen Filter gesehen, den
verwende ich seit dem an allen AVRs um die AVCC Spannung etwas zu
glätten.
Wie gesagt ein hochohmiges Signal ist sehr störanfällig, wenn es nicht
anders geht würde ich einen kleinen RC Filter nehmen. Der Widerstand
begrenzt die Belastung der Signalquelle und der Kondensator puffert das
dann für die Wandlung. Allerdings sollte man dann auch die Ladezeiten
des RC Filters berücksichtigen und die Messabstände entsprechend
verlängern. Evtl. könnte eine Verringerung des ADC-Taktes helfen was
auch einer Mittlung gleichkommt.
Beim ADMUX Register wird gerne hochgezählt, achte darauf nicht über 111
zu zählen sonst verstellt du neben dem Kanal andere Sachen.
Mich wundert etwas deine Codegröße, wozu brauchst du 32 kByte Flash?
Moin,
danke für eure Antworten, werde ich mal ausprobieren. Bin bislang aber
auch noch nicht dazu gekommen.
Ich brauche nicht den kompletten Flash des AT Mega 32, nur war es eben
beim AT Mega 88 zu knapp.
Mein Projekt besteht aus "etwas" mehr als dem hier beschriebenem und hat
unter anderem diverse Textausgaben an ein LCD bzw. "Visualisier" ich
einen Erhitzungsprozess mittels blauer und roter LEDs, die ich in
Abhängigkeit der Ist-Temperatur langsam aufleuchten bzw. dimmen lasse.
Desweiteren gehört ein Countdown dazu und noch einiges mehr ...
Eine eigene Frage?
Dieser Thread ist über 14 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.