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
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 ;)
> 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?
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.
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
@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!!!
@ 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.