www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega8 - Problem mit ADU


Autor: Dominik W. (absurdum)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Habe ein Problem mit dem ADU beim ATMega8.

Habe einen DMX Transceiver gebaut um mit ihm LED Scheinwerfer 
anzusteuern.
Zum Einstellen der Helligkeit und der Geschwindigkeit des Farbwechsels 
habe ich zusätzlich 2 Potis genommen.
Ich will die beiden Spannungswerte der Potis (~0 - 5V) digitalisieren 
(mittels ADU) und zur Steuerung der Helligkeit und der Geschwindigkeit 
des Farbwechsels verwenden.
Wenn ich nur einen der beiden ADU Eingänge verwende, passen die Werte. 
Aber wenn ich beide Eingänge auslese, vermischen sich die Ergebnisse und 
es kommt ein Blödsinn raus.
Hab schon diverse Methoden probiert, aber noch keine Lösung gefunden.
- Hab schon probiert den ADU jedes Mal zuerst zu starten und nach der 
Konvertierung wieder zu beenden
- Hab schon probiert, vor der Konvertierung ein Dummie-Readout zu machen 
und danach den Mittelwert aus 4 Ergebnissen zu bilden

Ich mache die Auswertung mittels Polling, weil ich vermeiden will, dass 
der ADU Interrupt mit dem Interrupt des USART (DMX) konguriert.

Der Code im Anhang ist vereinfacht, habe alle DMX betreffenden Teile 
herausgenommen, da ich hoffe, dass so jemand schneller einen Fehler 
entdeckt.

Wäre sehr sehr dankbar wenn mir bei dem Problem jemand helfen könnte.

Autor: LordZiu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dominik,

Schonmal mit dieser Funktion hier versucht?

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Das benutze ich immer und es hat bisher super geklappt. Ansonste poste 
mal deinen Schaltplan.

Autor: Dominik W. (absurdum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Diese Version hab ich schon probiert.
Es ändert sich nichts.

Schaltplan:
hab zwei 10k Potis am ADC0 und am ADC1 eingang.
Poti liegt an 0 und +5V, Schleifer auf µC

Des komische ist, beide Potis sind angeschlossen, in dem Modus in dem 
nur ein Kanal ausgelesen wird, funktionierts ohne Probleme. Erst wenn 
ich den zweiten Kanal zusätzlich auslesen will kommt nichts gescheites 
raus.

Autor: LordZiu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lies hier nochmal nach, wie man das ADC-Register ausliest:

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Auf den ersten Blick sehe ich nur, dass du lediglich den ADCH ausliest. 
Mal davon abgesehen, dass ADCH dir nur die Auflösung / 8 gibt, musst du 
beide Register auslesen.

Von der Beschaltung sollte es so funktionieren. Wo setzt du deine 
Referenzspannung?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LordZiu schrieb:

> Auf den ersten Blick sehe ich nur, dass du lediglich den ADCH ausliest.
> Mal davon abgesehen, dass ADCH dir nur die Auflösung / 8 gibt, musst du
> beide Register auslesen.

Nein. Muss er nicht.
ADCH muss auf jeden Fall gelesen werden. ADCL nur dann, wenn man am Wert 
interessiert ist (und wenn das der Fall ist, dann muss ADCL vor ADCH 
ausgelesen werden. ADCL lesen verriegelt den ADC Wert gegen 
Veränderungen, ADCH lesen hebt die Verriegelung wieder auf). Da er ADLAR 
gesetzt hat reicht es nur ADCH zu lesen.

Ich seh im Code allerdings auch nichts.

Autor: Dominik W. (absurdum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnte es sein, dass der Interrupt des USARTs die Konvertierung 
beeinträchtigt?
Allerdings wüsste ich dann gern, warum es funktioniert, wenn ich nur 
einen Kanal auslese.

Ein Freund hat gemeint, dass eventuell eine Verknüpfung zwischen den 
beiden Kanälen sein könnte, weiß jemand was dazu?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich sehe keinen Wert für den Prescaler. Möglicherweise ist dein ADC zu 
schnell.

MfG Spess

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Gerade gesehen ADC mit 16MHz. Recht sportlich.

MfG Spess

Autor: Dominik W. (absurdum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was für ein Prescaler wär bei 16 MHz empfehlenswert?

Warum funktionierts dann, wenn ich nur einen auslese?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dominik W. schrieb:
> Was für ein Prescaler wär bei 16 MHz empfehlenswert?

Datenblatt nachsehen.
Da steht drinnen, in welchem Ferquenzbereich der ADC benutzt werden 
soll. Du hast deine Taktfrequenz, weist in welche Frequenzbereiche du 
kommen musst und suchst dir davonausgehend den dafür notwendigen 
Prescaler.

> Warum funktionierts dann, wenn ich nur einen auslese?

Wahrscheinlich deswegen, weil du dann zwischendurch den Kanal nicht 
wechselst. Die Sample&Hold Stufe wird sich dann irgendwann auch so auf 
den richtigen Wert einstellen. Schlimmstenfalls erst nach dem 2.ten oder 
3.ten Ausleseversuch.

Autor: X- Rocka (x-rocka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Multiplexer ist das Problem, vor allem bei der Abtastrate.

Ich nutze den ATmega ADC generell nur per Interrupt, und wenn ich den 
ADMUX umschalte, warte ich erstmal 1 - 4 ADC Werte, bis ich sie nutze.

Funtioniert wunderbar mit allen Kanälen.

ninja'd!

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Der Multiplexer ist das Problem, vor allem bei der Abtastrate.

Nein, die Sample&Hold-Stufe. Irgendwann reicht die Zeit nicht mehr, um 
den Kondensator unzuladen.

>Ich nutze den ATmega ADC generell nur per Interrupt, und wenn ich den
>ADMUX umschalte, warte ich erstmal 1 - 4 ADC Werte, bis ich sie nutze.

Dann kannst du den ADC auch gleich langsamer laufen lassen und es klappt 
dann auch bei jeder Messung.

>Was für ein Prescaler wär bei 16 MHz empfehlenswert?

Bei 16MHz: 128

MfG Spess

Autor: X- Rocka (x-rocka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 schrieb:

>>Der Multiplexer ist das Problem, vor allem bei der Abtastrate.
>
> Nein, die Sample&Hold-Stufe. Irgendwann reicht die Zeit nicht mehr, um
> den Kondensator unzuladen.

stimmt ja, hätte schreiben sollen "das multiplexen der S/H"...
egal, ich nehme lieber höhere Abtastrate und schmeiße die ersten Werte 
weg, betreibe dafür dann oversampling.

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich nehme jeden Wert, auch nachdem ich den MUX umgeschaltet habe 
und es funktioniert,
ich habe auch im Datenblatt nichts gefunden dass es nicht funktionieren 
sollte, man sollte natürlich das Datenblatt beachten beim Umschalten

Autor: Dominik W. (absurdum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab jetzt den Prescaler auf 64 eingestellt und es FUNKTIONIERT!!!
Herzlichen Dank an spess53
Hab alles probiert und an alles gedacht, außer an die Geschwindigkeit!

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du solltest trotzdem lieber Prescaler 128 nehmen, wie Spess schrieb, 
damit die Frequenz zwischen 50kHz nud 200kHz liegt, siehe Tutorial ADC.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Hab jetzt den Prescaler auf 64 eingestellt und es FUNKTIONIERT!!!

Freut mich.

>Hab alles probiert und an alles gedacht, außer an die Geschwindigkeit!

Wenigstens wirst du das nicht so schnell wieder vergessen.

MfG Spess

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.