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


von Bakunin (Gast)


Angehängte Dateien:

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

von Spess53 (Gast)


Lesenswert?

Hi

Wie kommen die 'Temperaturen' zu ADC?

MfG Spess

von Bakunin (Gast)


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 ;)

von Stefan B. (stefan) Benutzerseite


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?

von Michael (Gast)


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.

von Spess53 (Gast)


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

von Bakunin (Gast)


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!!!

von Falk B. (falk)


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

von Bakunin (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.