Forum: Mikrocontroller und Digitale Elektronik AD-Wandler C-Control


von Balu (Gast)


Lesenswert?

Hi,

ich hab von der Schule eine C-Control Pro, also App-Board mit Mega128, 
bekommen und will da ein paar Sensoren anschließen.
Hab bis jetzt leider noch nie sowas gemacht. Komme zwar so ganz gut 
zurecht, nur beim AD-Wandler hab ich einige Probleme:

Ich hab einen Pin auf ADC-Messung umgeschaltet und jetzt mein 
Sensorboard angeschlossen (DS18S20 Temperatursensor mit 4,7k Widerstand 
laut Datenblatt). Einen Pin auf GND und einen auf 5V VCC geschaltet und 
entsprechend alles angeschlossen. Da der Sensor aber etwas absurde Werte 
ausspuckt hab ich die Pins mal mit einem Multimeter ausgemessen.

Der AD-Wandler gibt mir dann auch wenn nichts angeschlossen ist und 
keine anderen Pins geschaltet sind Rückgabewerte aus, die bei meist um 
die 0,56V (ca. 0x006F) liegen, aber teilweise stark schwanken. Wenn ich 
ihn direkt mit GND verbinde wird 0V (0x0000) ausgegeben, beim Verbinden 
mit VCC die entsprechenden 5V (0x03FF).

Ist das normal, dass der AD-Wandler da auch Werte empfängt, ohne, dass 
etwas angeschlossen ist?
Und wie kann ich da bessere Messwerte erziehlen?

Wäre wirklich dankbar für ein paar Denkanstöße, hänge jetzt schon einige 
Zeit vor dem Problem ohne wirklich weiter zu kommen...

Gruß,
Balu

von Thorsten (Gast)


Lesenswert?

Der DS1820 ist ein 1-wire sensor, d.h. er gibt die Messwerte digital 
raus. Den an den ADC anschliessen macht nicht viel Sinn...
Vielleicht nochmal den Rest vom Datenblatt durchlesen ;-)
Gruss,
Thorsten

von Karl H. (kbuchegg)


Lesenswert?

> Ist das normal, dass der AD-Wandler da auch Werte empfängt, ohne,
> dass etwas angeschlossen ist?

Ja.
In deiner Umgebung schwirrt jede Menge elektromagnetischer
Strahlung rum. Der ADC Eingang ist hochohmig genug um die
Aufzufangen.

> Und wie kann ich da bessere Messwerte erziehlen?
Bis jetzt hast du noch nicht gesagt, was an deinen
realen Messwerten schlecht ist. Die mit dem
offenen Eingang zählen nicht. Ein offener Eingang
ist ein Zufallszahlengenerator.

Ansonsten: Da wirst du wohl deine Beschaltung des
Sensors verändern müssen.

von Balu (Gast)


Lesenswert?

Hi,

vielen Dank für die schnellen Rückmeldungen.

@ Thorsten (Gast):
>Der DS1820 ist ein 1-wire sensor, d.h. er gibt die Messwerte digital
>raus. Den an den ADC anschliessen macht nicht viel Sinn...
>Vielleicht nochmal den Rest vom Datenblatt durchlesen ;-)
Den 1-wire verwende ich nicht. Ich benutze alle drei Pins des Sensors 
(VCC, GND, I/O).
Ich dachte, dass die digitalen Ports lediglich 0 und 1 als Rückgabewert 
und die durch den ADC zu analogen Ports umgestellten dann den 1024bit 
Wert liefern können. Und da der DS1820 laut Datenblatt einen 
Hexadezimalwert ausgibt und ich diesen auch über die mittels ADC 
definierten Ports auslesen kann dachte ich, dass es so richtig wäre.
An welchen Port sollte ich den Sensor denn sonst anschließen? Mir fällt 
jetzt keine Alternative ein, sorry wenn ich auf dem Schlauch stehe...

@ Karl heinz Buchegger (kbuchegg):
>In deiner Umgebung schwirrt jede Menge elektromagnetischer
>Strahlung rum. Der ADC Eingang ist hochohmig genug um die
>Aufzufangen.
Danke, dass klingt logisch :)

>Bis jetzt hast du noch nicht gesagt, was an deinen
>realen Messwerten schlecht ist. Die mit dem
>offenen Eingang zählen nicht. Ein offener Eingang
>ist ein Zufallszahlengenerator.

Mit offenem Eingang meinst du die Pins, die nicht verbunden sind?
Ja, die können keine Werte liefern die aussagekräftig sind.
In meinem Zimmer sind nach Quecksilbertermometer ca 20°C, der DS1820 
gibt allerdings einen Wert von 0053h aus, was 42,5°C entspricht. Der 
Wert lässt sich allerdings nicht verändern sondern wird konstant 
ausgegeben.

>Ansonsten: Da wirst du wohl deine Beschaltung des
>Sensors verändern müssen.
Ich bin jetzt den Anweisungen im Datenblatt nachgegangen und habe die 
GND direkt mit dem GND Pin und VCC ist über einen 4,7k Widerstand mit 
I/O verbunden.

Oder is der Auslesecode einfach falsch?

>#define SPACE 0x20
>
>void main(void)
>{
>    Port_DataDirBit(40,1);       //F0 Ausgang
>    Port_WriteBit(40,1);         //F0 VCC=5V
>    Port_DataDirBit(41,1);       //F1 Ausgang
>    Port_WriteBit(41,0);         //F1 GND
>
>    word wert;
>
>    ADC_Set(ADC_VREF_VCC,ADC2);  //F2 AD-Wandler
>    while (1)
>    {
>        wert=ADC_Read();
>        Msg_WriteHex(wert);
>        Msg_WriteChar(SPACE);
>
>        AbsDelay(1000);
>    }
>}

von Thorsten (Gast)


Lesenswert?

> Den 1-wire verwende ich nicht. Ich benutze alle drei Pins des Sensors
(VCC, GND, I/O).

Hmm, laut Datenblatt hat der Sensor aber nur 1-wire interface. Du meinst 
wahrscheinlich den "parasitic power" mode, in dem Sensorspeisung und 
Daten über die gleiche Leitung gehen. In jedem Fall gibt der DS1820 die 
Temperatur als Digitalwert raus und mit dem ADC kannst Du da nicht viel 
anfangen. Du musst das serielle Datenübertragungsprotokoll 
implementieren.
Zur Verdeutlichung: Der ADC gibt Dir einen Messwert zurück, der einer 
Spannung am Pin entspricht. Der Sensor gibt Dir den Messwert als 
zeitliche Folge von Nullen und Einsen raus. Das passt nicht zusammen.

Gruss,
Thorsten

von Balu (Gast)


Lesenswert?

Hi,

hm, ok, dann hab ich den 1-wire mit p.-power verwechselt. Sorry.
Das is jetzt dumm, dann kanns ja nich gehn...

Kann ich den Sensor dann irgendwie anders an die C-Control anschließen?
Wie implementiere ich denn ein serielles Datenübertragungsprotokoll?

Sorry für die blöden Fragen. Das Datenblatt hab ich dann wohl nicht ganz 
kapiert beim kaufen und es mir zu leicht vorgestellt.
Würde mich freuen, wenn du bzw ihr mir n wenig auf die Sprünge helfen 
könntet.

Args, das ärgert mich jetzt...

Vielen Dank!
Balu

von Thorsten (Gast)


Lesenswert?

Balu,

Beim Implementieren des 1-wire kann ich Dir nicht helfen, aber für den 
Anfang ist es wahrscheinlich einfacher, einen PTC oder NTC Sensor in 
einem Spannungsteiler mit dem ADC zu messen (von daher war Dein Ansatz 
gar nicht so verkehrt). Guck mal hier für weitere Infos:
http://www.sprut.de/electronic/temeratur/temp.htm

Gruss,
Thorsten

von Benny G. (sommer87)


Lesenswert?

Hi,

(hab mich grade angemeldet, bin Balu, der Threadersteller)

Danke für den Link, werde ich mir durchlesen.
Dachte am Anfang von dem Projekt, dass die Sensoren vll nicht so genau 
sein würden und hab mich deshalb für den DS entschieden.
Aber den kann ich ja erstmal in die Ecke legen und vll später wenn ich 
mehr Ahnung von hab wieder auspacken ;)

Noch ne zweite Frage dann:
Ist das beim MPXA6115A Drucksensor das gleiche Problem?
Den Sensor müsste ich doch an den ADC anschließen können oder?
Hab jetzt zumindest nichts mit 1-wire gefunden und da stand auch Vout im 
Datenblatt.

Auf jeden Fall vielen Dank für deine Hilfe.
Werde mich vll später noch mal mit weiteren Fragen melden :)

Gruß,
Benny

von Thorsten (Gast)


Lesenswert?

Keine Sorge - der MPXA6115A hat einen Analogausgang :-) Noch dazu ist 
der Ausgangsspannungsbereich gross genug, um ihn direkt (ohne 
Vorverstärker) an einen ADC anzuschliessen (je nach Anwendung bzw. 
geforderter Auflösung muss aber doch noch ein eine Beschaltung davor).
Gruss,
Thorsten

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.