[Hilfe] ADC verfälscht LM385-2.5 schuld

OP Persönliche Seite #4381067
Lesenswert?

Hi,
ich bin mit meinem Latein am Ende.
Habe einen Atmega16 mit externer 2.5V AREF.
Der Schaltplan ist erprobt, die Programmierung auch.
Doch die Ausgabe (Temperatur) am LCD ist minimal zu hoch (ca 20°C bei 
Raumtemperatur 16°C) und springt auch ungewöhnlich oft.

Im Wandel der Zeit habe ich den
http://www.mouser.de/Search/ProductDetail.aspx?R=LM385Z-2.5Gvirtualkey58410000virtualkey863-LM385Z-2.5G

gegen den
http://www.mouser.de/Search/ProductDetail.aspx?R=LM385DR-2-5virtualkey59500000virtualkey595-LM385DR-2-5

getauscht. (Vom ersteren leider keinen mehr übrig, um gegen zu testen.)

Gibt es irgendetwas, was ich in den Datenblättern übersehen habe, 
weswegen ich diese beiden nicht gegeneinander tauschen darf?

Ich hänge noch Mal das Schaltbild an.

Folgendes habe ich bereits geprüft:
Spannungsquelle: saubere 5V
AREF: saubere 2.5V
Wert von R11 korrent.
Spannungsteiler R15 am ADC auch korrekt.

Noch Jemand eine Idee. Fuses die das Verhalten beeinflussen gibt es doch 
keine oder?

Grüße Oekel
Angehängte Dateien:
Gast #4381095
Lesenswert?

Warum soll der LM385 schuld sein?

Was macht denn der Motor-Temperatursensor?
Den hast du nicht benannt.
R15 hab ich auch noch nicht gefunden...

Lass mal den Motorsensor weg und überbrücke die Klemmen
7-2 / 7-3 mit 2,2 kOhm. Das gibt über R16 etwa 1,56 V.
Wenn das eine stabile Anzeige (egal welcher Wert) gibt,
dann liegt dein Problem außerhalb.

Wenn nicht - und die Spannungen sind wirklich sauber,
dann legts wohl am Programm.
OP Persönliche Seite #4381165
Lesenswert?

Oldie schrieb:

> Wenn das eine stabile Anzeige (egal welcher Wert) gibt,
> dann liegt dein Problem außerhalb.

bei 10k erhalte ich binnen 5sec eine stabile Anzeige von 45°

Laut Adam Riese sollten dann wohl 1/11 von 5V anliegen = 0,45454545

Bei dem LM35, welchen ich als Sensor verwende kommen 10mV/Grad raus.
Auch das scheint mir also ein richtiger Wert zu sein.

Noch weitere Ideen?

Meine "Raumtemperatur" schwankt zwischen 22 und 27 Grad :(
Gast #4381207
Lesenswert?

Wenn der Spannungsteiler stabil ausgewertet wird, hast du
doch ein Problem mit dem Sensor, oder der Verdrahtung.

Schau mal ins TI-Datenblatt, da sind ein paar Tipps zum
Aufbau mit längeren Leitungen in störender Umgebung.
OP Persönliche Seite #4381251
Lesenswert?

Oder hätte ich für R16 statt Dickfilmwiderstände - SMD 1K OHM 5%

lieber 1% nehmen müssen/sollen?

Wie weit darf das RC Glied (1k 100nF) vom Sensor bzw ADC entfernt 
liegen?
Wie weit darf man das R vom C trennen?

Ich bilde mir ein minimale Verbesserungen zu erhalten, wenn ich ein 
zweites Pärchen direkt an den Sensor halte.
(Dann hätte ich das RC-Glied jedoch 2x in der Schaltung im original war 
es auch nur 1x auf der Platine und nicht am Ende des Kabels in 
Sensornähe.

Ich bezweifle dass mein Layout, indem sich R&C ca 2cm verschoben haben 
eine derartige Verschlechterung bewirkt? (siehe Anhänge)

EDIT: habe ich evtl den Displayanschluss (i2c) zu nah an das ADC Signal 
geführt?

Falls ja, kann ich mit Filtern ausbessern?

Grüße Oekel
Angehängte Dateien:
OP Persönliche Seite #4381982
Lesenswert?

Marcus H. schrieb:

> AREF = 2,5V
korrekt.

> -> 256 Digits
Bislang "closed Source" Ich schiebe es bereits 8 Monate vor mir her die 
Funktionalität in C als Blackbox nachzubauen, denn der gegebene 
Bascom-Code ist für mich einfach nur hässlich und unverständlich:

Hoffe ich vergesse nun nichts:
Config Porta = Input                                        'Eingänge
Porta = &B00011111
'Set Sfior.pud                                               'pullup 
widerstände deaktivieren für Temperaturmessung (ADC) 
'
'Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , 
Polarity = Low , Phase = 0 , Clockrate = 64 , Noss = 1       '
'Spiinit
Config Adc = Single , Prescaler = Auto , Reference = Aref 
'internal_2.56
'Now give power to the chip
'Start Adc


...
Ich vermute fast, mir wurde nicht Mal der aktuellste Code überliefert, 
denn "Reference = Aref   'internal_2.56" scheint mir nicht wie eine eine 
externe Versorgung mit 2.5V

Wenn ich denn Pin aber anhebe geht er gleich auf nen Fehler.
Kann ich im SourceCode für euch noch nach etwas interessantem suchen, 
oder hilft uns das eh nicht weiter (vermute ich fast, dass ich wie 
gesagt immer das gleiche hex flashe, welches bei dem alten Layout 
weniger Schwankungen aufweißt)



Grüße Oekel
Persönliche Seite #4381992
Lesenswert?

D a v i d K. schrieb:
> Habe einen Atmega16 mit externer 2.5V AREF.

Du hast die Spannung nachgemessen (am ARef-Pin) und dein 
Spannungsmessgerät zeigt dir 2.50V an oder 2.56V oder einen ganz anderen 
Wert?

Ich hatte schon Referenzspannungen von 2.701V oder auch 2,45V bei meinen 
AVRs gemessen!

Die Referenzspannung ist sehr stabil, aber eben nicht sehr genau.
Kalibrieren muss man sie auf alle Fälle damit das Messergebnis stimmt.
Ich habe dafür extra eine sehr genaue Referenzspannungsquelle (LT1021) 
gekauft.
(Firma: www.harerod.de) Persönliche Seite #4382014
Lesenswert?

Naja, wenn die Blackbox-Firmware auf interner Referenz steht, dann will 
die am AREF-Pin nur einen 100nF Kappa sehen.
Aktuell gewinnt halt scheinbar die externe Referenz gegen die 
eingebaute. Sicher nicht ideal.

Ansonsten, was Atmega schrieb: Wenn auf die absolute Genauigkeit kein 
Verlass ist, dann hilft ggf. eine Messung der Verhältnisse.
Versuch mal die Registersettings mit dem Datenblatt zu vergleichen.

Praxisbeispiel: Zwei ADC-Kanäle. Der eine misst die 
Sensorversorgungsspannung über einen Referenzspannungsteiler, der andere 
die tatsächliche Messspannung. Über das Verhältnis der beiden Messwerte 
hast Du einen Messwert der unabhängig vom Absolutwert der Referenz ist.
Auf die Art holst Du unkalibriert mehr als 10bit Genauigkeit aus einem 
eingebauten MCU-ADC. Der größte limitierende Faktor sind dann 
Messwiderstände.
Gast #4382064
Lesenswert?

Walter S. schrieb:
> mit Vermutungen kommt man bei der Fehlersuche nicht
> weiter

Klar, man vermutet und dann misst man nach. :-)
Dann vermutet man das nächste ...

Debugger ran, in die Register schauen und auch mal den rohen AD Wert 
anschauen.
Es gibt 1000 Möglichkeiten das im Programm zu versauen.
Wird ADC ready ausgewertet oder 'blind' gelesen etc. pp.

D a v i d K. schrieb:
> Doch die Ausgabe (Temperatur) am LCD ist minimal zu hoch (ca 20°C bei
> Raumtemperatur 16°C) und springt auch ungewöhnlich oft.

Out of the box geht der ADC auch nicht sehr genau.
Nullpunkt und Steigung sollten abgelichen werden.

Das Springen ....
Um wie viele digits springt der denn ?
Was ist denn gewöhnlich oft springen ?

D a v i d K. schrieb:
> Folgendes habe ich bereits geprüft:
> Spannungsquelle: saubere 5V
> AREF: saubere 2.5V
> Wert von R11 korrent.
> Spannungsteiler R15 am ADC auch korrekt.

Sauber und korrekt.
Mit dem feuchten Finger gemessen, oder dem Multimeter (minimal genauer) 
oder einem Oszi das den Namen verdient ?
Ripple hast Du immer drauf. Wie hoch ist der bei Dir ?

Wirklich, Du läßt uns jedes Detail raten.
Geb uns doch mal Informationen mit den Du was anfangen könntest wenn Du 
nicht mit dem Projekt vertraut bist.

Natürlich ist eine Layoutveränderung ein ganz hervorragender Grund sich 
diese Art Probleme einzufangen.
Gleitende Mittelwertbildung ist übrigens auch kein Hexenwerk.
OP Persönliche Seite #4382091
Lesenswert?

Michael K. schrieb:

> Gleitende Mittelwertbildung ist übrigens auch kein Hexenwerk.

Es geht nicht drum, dass ich es nicht (neu) programmieren könnte und 
dann auch debuggen.

Doch das braucht 1-2 Tage und bisher ist der "Kunde" nur am abfordern 
der HW. Daher habe ich die Software bisher nicht angefasst 
(Zeitknappheit) und "nur" die Hardware (Bauteile unverändert) in SMD 
etwas zusammengeschoben.

"Nur" zum Ersten, weil das alte Layout in der Produktion schlichtweg zu 
teuer war, um überhaupt noch etwas dran zu verdienen und...

"nur" zum Zweiten hab ich da nicht weit genug nachgedacht, wie wir hier 
gerade sehen ;)

Ich werde heute Abend das Fluke anhängen, Fernwartung von der Arbeit 
wird nur noch in weiteren Mutmaßungen enden.

Grüße Oekel
(Firma: DC3AX) #4382250
Lesenswert?

Also bitte miss mal nach und rechne das auf dem Papier aus. Dann 
vergleichen:
Du kennst (oder kannst nachmessen) den Widerstand des Fühlers und kannst 
dann die Spannung am ADC Eingang errechnen.
Du kennst auch deine AREF und damit kannst Du den erwarteten digitalen 
Wert errechnen.

Nun musst Du in der Software nachsehen, welcher Temperatur dieser 
digitale Wert entspricht.

Da Dein Fühler aber einen falschen Wert anzeigt, kannst Du den digitalen 
Wert ja auch noch mal zurück rechnen, ausgehend von der anderen AREF von 
2.56V. Kommst Du dann auf das eigentlich falsche, aber angezeigte 
Ergebnis, hat, wie zuvor schon mal erwähnt, die interne AREF gewonnen.

Sollte das der Fall sein, erklärt sich auch das seltsame und 
empfindliche verhalten der Schaltung, da zwei Referenzen gegeneinander 
arbeiten, Deine extern und die interne. Das kann rauschen und schwingen.

Nebenbei habe ich immer einen 1µF tantal und einen 100nF oder 10nF Cap 
an meine externe oder interne AREF geklemmt.

Gruß
Ulrich
#4382319
Lesenswert?

Config Porta = Input   'Eingänge Porta = &B00011111
'Set Sfior.pud   'pullup widerstände deaktivieren für 
TemperaturmessungADC)
'
'Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes ,
Polarity = Low , Phase = 0 , Clockrate = 64 , Noss = 1       '
'Spiinit
Config Adc = Single , Prescaler = Auto , Reference = Aref
'internal_2.56
'Now give power to the chip
'Start Adc

Hier stimmt eine ganze Menge nicht:
Config PortÁ = Input schaltet den GANZEN Port auf Eingang, nicht wie im 
Kommentar angegeben.

Config Adc = Single , Prescaler = Auto , Reference = Aref
'internal_2.56

Das ist auch nicht richtig, weil Du draußen dran eine 
Referenzspannungsquelle hast. Da muß Reference = Off stehen, damit die 
interne Referenzquelle abgeschaltet wird und die draußen dranhängende
benutzt wird.

Start Adc
braucht man hier auch nicht, weil schon "Config ADC" weiter oben den ADC 
startet.

MfG Paul
#4398020
Lesenswert?

Nach den Schaltplanfragmenten liegen die 5V dauerhaft am Sensor, 
richtig? Dann sollte C8 keine Auswirkung haben. Oder ändert sich die 
Motortemperatur im Millisekundenbereich?
Vielleicht war das nur noch dem Namen nach ein C, aber eigentlich mehr 
ein R. -> Messen!
Persönliche Seite #4398048
Lesenswert?

D a v i d K. schrieb:
> Kann Irgendwer in seiner Glaskugel erkennen, wieso das zur Lösung
> geführt hat? ;)

Wenn du den (KL7-2) Pin zwischen Eingang und Ausgang umschaltest oder du 
den PullUp hinzu schaltest, dann könnte es sein dass die Spannung am 
Kondensator eine andere ist.

Ich gehe davon aus dass sich dort ein NTC-Spannungsteiler an der KL7 
Buchse befindet.

Schau doch mal nach ob irgend ein Programmteil den entsprechenden 
Port/Pin der als ADC dient beeinflusst.
Also auf alle "PORTA = 0x??" oder "DDRA = ??".

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren