Forum: Mikrocontroller und Digitale Elektronik Keine 0 LSB erreichbar


von Sirko P. (poehli)


Lesenswert?

Hallo.

ich schaffe es nicht das beim ATmega16 mein interner A/Dwandler 0LSB 
anzeigt wenn ich den Eingang mit Masse verbinde.

Ich benutze externe Referenz die ich noch abgleiche ( 0,0 - 5,0V sollen 
0-1000LSB werden).

Lege ich an den Eingang Masse habe ich etwa 28 -34 LSB. Das Ergebnis ist 
von  Kanal zu Kanal etwas unterschiedlich.
Es handelt sich soweit ich das sagen kann nicht um Rauschen, denn die 
Werte stehen bei dem jeweiligen Kanal absolut staibl, allerdings mittle 
ich auch kräftig (65x)
Ich prüf morgen mal wie das aussieht wenn ich nicht mittle.

Welche Ursachen kann das haben?

eine die mir einfallen würde wäre eine Potentialdifferenz innerhalb der 
GND- Strecke, derartiges konnte ich aber nicht messen.




von Benedikt K. (benedikt)


Lesenswert?

Entweder hast du eine gewaltige Potentialdifferenz (30 entspricht etwa 
150mV) aufgrund eines Kurzschlusses (z.B. Port auf Ausgang und High, und 
mit Masse verbunden), oder du misst eine Differentielle Spannung mit 
hoher Verstärkung.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was macht die Referenzspannungsquelle? Wie sieht die Beschaltung von 
AREF aus?

> In either case, the external AREF pin is directly connected
> to the ADC, and the reference voltage can be made more immune
> to noise by connecting a capacitor between the AREF pin and ground.

(aus Mega16 user's manual)

von Falk (Gast)


Lesenswert?

@Sirko Pöhlmann

>Lege ich an den Eingang Masse habe ich etwa 28 -34 LSB. Das Ergebnis ist
>von  Kanal zu Kanal etwas unterschiedlich.

Das ist viel zu viel. Da is was faul.

>Werte stehen bei dem jeweiligen Kanal absolut staibl, allerdings mittle
>ich auch kräftig (65x)

Warum 65x?? 64 ist wesentlich sinnvoller, da sie Division zur 
Schiebeoperation vereinfacht wird. Vielleicht liegt dort der Fehler? 
Schmuggelt sich dort irgendwo ein Wert rein?

MfG
Falk

von Sirko P. (poehli)


Lesenswert?

Was soll die REF schon machen ? :-)

ist eine trimmbare Präzisionsreferenzspannungsquelle 5,0V.
Ist entsprechend Datenblatt angeschlossen. Die Referenzspannung steuert 
ja den "oberen" auflösungspunkt, da ist alles ok, kein Rauschen oder so, 
er arbeitet sauber bis 5,11V = 1023LSB ( 5,00=1000LSB).
Das Problem besteht nur an der unteren Grenze.

Die riesige Potentialdifferenz konnte ich bisher nicht finden, 
kontrolliere morgen aber nochmal die Software nach den Ports. Die 
meisten sind aber gar nicht benutzt, außer 4 A/D Eingängen und Uart ist 
praktisch nix angeschlossen. Trotzdem klingt das im Moment am 
vielversprechendsten!

Nein, ich messe keine differentielle Spannung mit Verstärkung.



von Sirko P. (poehli)


Lesenswert?

Falk wrote:
> @Sirko Pöhlmann
>
>>Lege ich an den Eingang Masse habe ich etwa 28 -34 LSB. Das Ergebnis ist
>>von  Kanal zu Kanal etwas unterschiedlich.
>
> Das ist viel zu viel. Da is was faul.
>

sag ich ja :-)

>>Werte stehen bei dem jeweiligen Kanal absolut staibl, allerdings mittle
>>ich auch kräftig (65x)
>
> Warum 65x?? 64 ist wesentlich sinnvoller, da sie Division zur
> Schiebeoperation vereinfacht wird. Vielleicht liegt dort der Fehler?
> Schmuggelt sich dort irgendwo ein Wert rein?


ähhh, sorry, natürlich mittle ich mit 64x wegen der Schiebeoperationen, 
verschrieben...
>
> MfG
> Falk

von Rolf Magnus (Gast)


Lesenswert?

Sind alle GND- und AGND-Pins verschaltet und überprüft?

von Ralph (Gast)


Lesenswert?

Die ADC Wandler in µC sind in der Regel so aufgebaut das ein 
Eingangsmultiplexer vor die Klemmschlatung geschaltet ist , und nach der 
Klemmschaltung dann der eigentliche AD Wandler kommt.

Wird jetzt von Eingang X auf Eingang Y geschaltet muss die 
Klemmschaltung umgeladen werden. Das benötigt Zeit.

Prüf mal noch ob du diese Zeit lang genug eingestellt hast.

Wenn diese Zeit zu kurz ist, hat das zur Folge das du an Eingang Y eine 
Spannung erkennst die irgendwo zwischen dem Wert an X und dem Wert an Y 
liegt.


von Sirko P. (poehli)


Lesenswert?

Ralph wrote:
> Die ADC Wandler in µC sind in der Regel so aufgebaut das ein
> Eingangsmultiplexer vor die Klemmschlatung geschaltet ist , und nach der
> Klemmschaltung dann der eigentliche AD Wandler kommt.

ja , ich weiß

> Wird jetzt von Eingang X auf Eingang Y geschaltet muss die
> Klemmschaltung umgeladen werden. Das benötigt Zeit.

aha,da hab ich ja noch gar nix von gehört. hm. wieviel Zeit?.... mal 
sehen ob ich das im Datenblatt finde...

>
> Prüf mal noch ob du diese Zeit lang genug eingestellt hast.

Ich hab da sicher gar nix eingestellt, es liegen zwar eine Menge 
Schritte dazwischen aber nicht explizit ein längeres Warteintervall.

>
> Wenn diese Zeit zu kurz ist, hat das zur Folge das du an Eingang Y eine
> Spannung erkennst die irgendwo zwischen dem Wert an X und dem Wert an Y
> liegt.

Kann ich nachvollziehen, allerdings sollte dann der Fehler am ersten 
abgefragten Eingang nicht auftreten, denn zwischen der Abfrage des 
letzten Kanals und des ersten Kanals liegt eine deutliche Pause ( 
Datenaufbereitung, UART senden ) Oder?

@ Rolf: na das will ich eigentlich hoffen, ist auf eigener Platine 
gelötet, aber ich mess nochmal nach. Das Problem tritt aber auf allen 4 
benutzten Kanälen auf, ich würde daher ausschließen das es ein Fehler in 
der jeweiligen Kanalaufbereitung ist. Ich hatte den Verdacht das A/D-GND 
keine Verbindung hat, konnte aber zwischen A/D-GND und GND keine 
Differenz messen. Morgen Früh klapper ich mal alle anderen GNDs noch ab 
:-)


von Sirko P. (poehli)


Lesenswert?

Also ich bin jetzt mit meinem Latein am Ende.

Ich kann nirgends auf der Platine eine Potentialdifferenz in der GND 
Strecke finden.

Ic habe den Controller mal mit anderen getauscht ( Atmega 16 und Atmega 
323), das Problem bleibt bestehen, der gemessene GND "Offset" ändert 
sich  ( zB 60 statt 28 LSB), aber ist trotzdem immer da,

Die Eingänge liegen wie gesagt direkt an Masse.

Ich habe 1,5ms Wartezeit zwischen die Kanalumschaltung vor dem Wandler 
gesetzt - bringt gar nix.

Ich habe die Mittelungen raus genommen - bringt gar nix. Der Wert 
rauscht nur die typ +/-1LSB, ansonsten stabil bei ca 30 LSB.

Sobald ich mit meiner am A/D angelegten Spannung über den Wert komme der 
den 30 LSB entspricht (150mV) funktioniert die Spannungsmessung des 
Wandlers wie gewünscht.

Es muß irgendwo einen Fehler geben - bloß wo.

Wen ich ihn nicht finde bleibt mir nur den A/DGND mit einem 
Spannungsteiler von -15V aus auf etwa -150mV zu ziehen und zu sehen ob 
es dann funktioniert.  Wäre aber nur rumdoktern an Symptomen...

von Simon K. (simon) Benutzerseite


Lesenswert?

Da ich noch nichts dazu gelesen habe:

Wo hast du welche Kondensatoren wie eingebaut?
Genug Abblockkondensatoren an der Versorgungsspannung und an AREF?

von Uli (Gast)


Lesenswert?

Da ist nicht irgend eine NICHT-Rail-to-Rail Elektronik davor ?

von Sirko P. (poehli)


Lesenswert?

ich versorge den Controller direkt aus der USB Buchse auf der Platine. 
Die ist in der Realität aber etwas unter 5V, etwa 4,91V. An der 
USB-Buchse sitzten 10nF zwischen GND und 5V

Der Controller hängt dann über 10µH an 5V und 100nF an GND

VCC --10uH----100nF--GND
            |
            |
           5V

Ansonsten gibts noch die Resetbeschaltung mit 47k ->5V und 47pF->GND
Und d


aus den 5V der USB Schiene mach ich noch +/-15V die ich für OPVs und 
anderes brauche.



von Björn W. (bwieck)


Lesenswert?

Sirko Pöhlmann wrote:
> ich versorge den Controller direkt aus der USB Buchse auf der Platine.
> Die ist in der Realität aber etwas unter 5V, etwa 4,91V. An der
> USB-Buchse sitzten 10nF zwischen GND und 5V

Mit was versorgst du denn deine Spannungsreferenz ?

Dir ist klar das der ARef Eingang nie nicht höheres potential haben darf 
als VCC..

Gruß
Björn

von Sirko P. (poehli)


Lesenswert?

die Referenz versorg ich über +15V, die aus dem  dcdc kommen ( 5V rein 
+/-15V raus)

von helferlein (Gast)


Lesenswert?

hallo,

ich hatte mal ein ähnliches problem mit einem pic,
nach langer suche war es dann ein dummer programmierfehler(überlauf)
der die internen pullups am AD port für einen takt zwischen den
messungen aktivierte.

vielleicht hast du ja auch das "glück" :)

von Falk (Gast)


Lesenswert?

@helferlein

>der die internen pullups am AD port für einen takt zwischen den
>messungen aktivierte.

Ei Pll-up wird aber wohl kaum die Masse nennenswert hochziehen können 
wenn der Eingang hart auf Masse liegt).

MFG
Falk

von Björn W. (bwieck)


Lesenswert?

Sirko Pöhlmann wrote:
> die Referenz versorg ich über +15V, die aus dem  dcdc kommen ( 5V rein
> +/-15V raus)

Wenn ich das jetzt richtig verstanden habe bekommt dein AREF Pin 5.11V
und AVCC 4.9-5V oder ?

Das kann nicht gehen, Siehe Datenblatt.

Gruß
Björn


von Marvin (Gast)


Lesenswert?

Öhm - 15V an der Referenz? Kann ich mir nicht vorstellen.
Leg doch mal die Referenz an VCC (interne Referenz abschalten!).

von Sirko P. (poehli)


Lesenswert?

Programmierfehler kann ich ausschließen, wenn ich direkt nach dem 
Wandeln eine 0 ins Register schreibe kommt zum Schluß auch eine 0 raus 
:-)

nein -15V kommen natürlich nicht an die Ref, das ist ein 
Missverständnis...

"Wenn ich das jetzt richtig verstanden habe bekommt dein AREF Pin 5.11V
und AVCC 4.9-5V oder ?
Das kann nicht gehen, Siehe Datenblatt."

Ja, da steckt das Problem wohl. Ich hatte im Hinterkopf das +/-0,3V 
Abweichung ok sind , das betrifft aber nur Avcc , nicht die Ref.

Wenn ich mit der Ref etwas unter AVcc gehe verschwindet das Problem!

Nur komme ich dann mit meinem Auflösungs und Dynamikbereich nicht mehr 
hin. Ich brauch zwingend 5,00V = 1000LSB

Ich müßte also am besten nur für die Versorgung des Atmega die knapp 5V 
aus dem USB etwas anheben, auf 5,3- 5,5V zB.  Wie macht man das am 
besten?

von Björn W. (bwieck)


Lesenswert?

Sirko Pöhlmann wrote:

> Nur komme ich dann mit meinem Auflösungs und Dynamikbereich nicht mehr
> hin. Ich brauch zwingend 5,00V = 1000LSB

Was misst Du denn eigentlich für ein Signal das es auf 0.00488 V 
Auflösung ankommt ? Du kannst ja in Software umrechnen.

Gruß
Björn

von Hannes L. (hannes)


Lesenswert?

> Nur komme ich dann mit meinem Auflösungs und Dynamikbereich nicht mehr
> hin. Ich brauch zwingend 5,00V = 1000LSB

Das mag ich ungern glauben. Wenn Du vor dem ADC des AVRs sowiso einen 
Operationsverstärker zur Aufbereitung Deines Eingangssignals hast, so 
kannst Du durch Verstellen dessen Verstärkung auf Deine gewünschte 
Auflösung kalibrieren.

Ich vermute stark, dass der Fehler im Analogteil (OPV) liegt. Hast Du 
mal den ADC direkt (ohne OPV davor) mit einem Poti zwischen GND und Vcc 
getestet?

...

von Sirko P. (poehli)


Lesenswert?

Der Aufbau ist so:

Messgerät Messbereich 0 - 1000ppm
Ausgang: 4-20mA

mein Umsetzer:
Eingang 4-20mA -> spezieller Schnittstellen-Umsetzer-IC-> 0-5V -> 
0-1000LSB digitalisiert als Asci Ziffernfolge via USB an PC -> am PC ist 
dann

Messbereich 0-1000ppm am Messgerät = LSB Wert 0-1000

ok?

sobald ich da an der 0-5V Geschichte fummel komm ich in Schwierigkeiten 
bzw es bietet sich dermaßen elegant an das genau SO zu machen da man 
überhaupt kein weitere Rechnerei mehr braucht. Wann hat man es schonmal 
das der gesendete LSB wert exakt dem Messwert entspricht.

von Falk (Gast)


Lesenswert?

@Sirko Pöhlmann

>Der Aufbau ist so:

>Messgerät Messbereich 0 - 1000ppm
>Ausgang: 4-20mA

>mein Umsetzer:
>Eingang 4-20mA -> spezieller Umsetzer-IC-> 0-5V -> 0-1000LSB

Die meisten Leute nehmen statt eines (teuern) Umsetzer ICs einfach einen 
240 Ohm Widerstand.

Stromschnittstelle

Beitrag "Hall-Sensor Mikrocontroller"

>digitalisiert als Asci Ziffernfolge via USB an PC -> am PC ist dann
>Messbereich 0-1000 = LSB Wert 0-1000

>ok?

Wenns eh schon ASCII ist, dann rechnet niemand in LSB sondern 
sionnvollerweise in Einheiten V, A, wasauchimmer. IN deinem Fall ppm
Un ob du nun 0-1000 ppm auf 0-5V oder 0-2,5 oder 0-3,3 oder 0-4,096V 
abbildest ist praktisch egal.

>sobald ich da an der 0-5V Geschichte fummel komm ich in Schwierigkeiten

Nö, du musst nur deinen Umsetzer-IC mit einem geringeren 
Verstärkunksfaktor einstellen (oder einfach einen kleineren Widerstand 
nehemen).
Wenn dann dein 0-1000ppm in 0...4,096 V umgewandelt werden, gehts 
wunderbar mit 5V AVR Betriebsspannung.

MfG
Falk

von Björn W. (bwieck)


Lesenswert?

Sirko Pöhlmann wrote:
> Der Aufbau ist so:
>
> Messgerät Messbereich 0 - 1000ppm
> Ausgang: 4-20mA
>
> mein Umsetzer:
> Eingang 4-20mA -> spezieller Schnittstellen-Umsetzer-IC-> 0-5V ->
> 0-1000LSB digitalisiert als Asci Ziffernfolge via USB an PC -> am PC ist
> dann
>
> Messbereich 0-1000ppm am Messgerät = LSB Wert 0-1000


AD-Wert durch 1,023 teilen und runden...
Musst Du nur noch in Software giessen.

von Falk (Gast)


Lesenswert?

@Björn Wieck

>> Messbereich 0-1000ppm am Messgerät = LSB Wert 0-1000

>AD-Wert durch 1,023 teilen und runden...
>Musst Du nur noch in Software giessen.

Von hinten durch die Brust ins Auge! Aua.

Besser nochmal die Grundlagen der Messtechnik durcharbeiten, mit Fokus 
aus Kalibrierung und Messwertumformung.

MFG
Falk

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.