mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 2 Kanal-ADC mit uart am ATmega8


Autor: Bakunin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Ich habe vor eine Temperaturregelung von zwei Wasserbecken und rs232 
Anschluss zu realisieren, leider hakt es noch ein wenig ...

Genauer gesagt möchte ich immer abwechselnd den adc0 und adc1 auslesen, 
das gewandelte Ergebniss intern verrechnen und dann auf anfrage per 
rs232 (senden eines“?/r") an einen pc senden.

Das Ganze soll im Single Conversion Mode laufen und ist momentan recht 
hässlich zusammengeschustert (es gab vor kurzer zeit große Änderungen in 
der Programmstruktur)

Schön und gut- nun das für mich wirklich eigenartige Problem:  Was Herm 
mir anzeigt (mein Terminalprogramm) ist, dass sich die werte, an adc0 
und adc1 immer nur sehr wenig voneinander unterscheiden- lege ich an 
einen Pin ein Netzteil an so wird bei einer gewissen Voltzahl zB wie es 
auch seien Soll 43grad angezeigt, der unbeschaltete oder auf Ground 
gezogene andere ADchannel zeigt aber mit nicht null grad an, sondern 
auch irgendwas um die 43 Grad rum - meine Schlussfolgerung war bis 
jetzt, dass gar nicht der Wechsel des Kanals vollzogen wird, aber wenn 
ich Channel 2 beschalte und Channel 1 nicht ergibt sich genau dasselbe 
Spiel.

Das ist nun der Punkt, bei dem ich wirklich auf dem Schlauch stehe- für 
Hilfen und Tipps währe ich wirklich dankbar ...

achja, die Libs sind teils heillos zusammengeklaut, also wundert Euch 
hier nicht über wechselnde Sprachen u.ä. in den Kommentaren

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Wie kommen die 'Temperaturen' zu ADC?

MfG Spess

Autor: Bakunin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also für die schlussendliche Messung per PT1000, der über 
Wheatstonebrücke abgeglichen und dessen Spannung an einem 
Instrumentenverstärker verstärkt wird -(das funktioniert soweit wie es 
soll)

Testweise wurde hier ein Labornetzteil an den ADC gelegt.
Ich denke aber dass Hardwareseitig alles in Ordnung ist, wird irgendwie 
an der ADC_Read(adchannel) liegen oder in der main.c -ich bin mit meiner 
Logik am Ende ;)

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>     uint16_t temp =((30 * result)/1023)+15;

Die Formel ist falsch (1023). Aber das erklärt die Beobachtung nicht 
sondern ist Nebengefecht.

Wie sieht der Schaltplan aus?

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist ADC0 und ADC1 mit einem Widerstand auf ein festes Potential gezogen 
bei nicht-Beschaltung? Wenn nein ist das ein klassisches Übersprechen 
benachbarter Kanäle.

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Wenn nein ist das ein klassisches Übersprechen benachbarter Kanäle.

Bei AVRs kenne ich das nur bei zu hochohmigen ein koppeln der Signale. 
Wenn die Quellimpedanz <10k ist gibt es keine Probleme.

@Bakunin (Gast)

Weshalb machst du in 'uint16_t ADC_Read(uint8_t Mux_channel)' jedes mal 
eine komplette ADC Initialisierung?
Den ADC einmal initialisieren und dann nur noch den Kanal umschalten. 
Dann klappt es auch mit dem Messen.

MfG Spess

Autor: Bakunin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Spess:

ich hatte die lib so übernommen (copy paste iss manchmal vll doch etwas 
Hirnrissig ;) ) -dachte auch schon daran dass mal umzustricken, Danke!!!

@Stefan B.:

ein Nebengefecht, aber kein unwichtiges :D -wiso ist 1023 falsch? (zur 
Aufklährung: dachte an 0 counts bei 15 Grad, 1023 counts bei 45...)

@Michael:

tatsächlich ist das ganze bei Rauschen (also ich meine unbeschaltet) auf 
dem einen Channel aufgetreten- allerdings auch wenn ein Channel auf gnd 
gezogen wurde.


danke schonmal für die schnelle Antwort und das durch-den-code-wühlen an 
alle!!!

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Bakunin (Gast)

>ein Nebengefecht, aber kein unwichtiges :D -wiso ist 1023 falsch? (zur
>Aufklährung: dachte an 0 counts bei 15 Grad, 1023 counts bei 45...)

Was in Summe 1024 Schritte macht. Siehe AD-Wandler.

>tatsächlich ist das ganze bei Rauschen (also ich meine unbeschaltet) auf
>dem einen Channel aufgetreten- allerdings auch wenn ein Channel auf gnd
>gezogen wurde.

Siehe

http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC

Pack zum testen erstmal einen 10K poti an jeden Eingang, dazu noch 10nF.

MFG
Falk

Autor: Bakunin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, danke für die schnelle hilfe euch allen! es lag tatsächlich an der 
bescheierten initialisierung vor jeder wandlung - so wie im tutorial 
gehts (...was ja irgendwie zu erwarten war :D )

gruss

Bakunin

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.