A/D Wandler SFR ADCON

Postby ufchen » Fri Jan 22, 2010 12:00 am

Hallo,
ich bin wieder mit meinen Lehrbriefen beschäftigt und bin in Lehrbrief 3 beim A/D Wandler wo sich bei der Maskierung der einzelnen Bits mir eine Frage stellt (das eigentliche maskieren stellt kein Problem dar)

Mein Problem bezieht sich auf das SFR ADCON,
ich starte die Wandlung mit dem setzten der jewaligen Bits, stelle die Betriebsart ein ob Analog oder Digital I/O und setzte die Bits für den jewaligen Eingang mit welchem ich messen will usw,soweit so gut,

aber, wenn die Wandlung beendet ist muß ich warten bis das ADEOC
eine 1 ausgibt, was ist mit den anderen Bits von ADCON werden die nach der Wandlung wieder zurück auf 0 gesetzt, wie z.b. SCH0-SCH2(Grund meiner frage ist die Rechnung auf Seite 101 oben im Lehrbrief 3)

Danke Uwe
ufchen
 
Posts: 40
Joined: Fri Jan 03, 2014 1:49 pm

Postby ufchen » Sat Jan 23, 2010 12:00 am

Hallo ich sitze immernoch dran,

Habe eine zweite Frage,
sie bezieht sich auf den Vergleich "ist Grenzwert überschritten,dann"

in der Lösung steht folgendes
if (wert > 819) summer = 0;
wie kommt man auf den Wert 819 der ja für die 2,0V steht?

Danke für eure Hilfe
Uwe
ufchen
 
Posts: 40
Joined: Fri Jan 03, 2014 1:49 pm

Postby kletor » Sun Jan 24, 2010 12:00 am

Hallo, Uwe

Hier ein bisschen Unterstützung.

1. Nach der Auswertung weiter in der schleife nach oben dort
wird
dann zurückgesetzt, in der while()
Programmteil: Zeile 90 … 105.

2. Wir haben eine Referenzspannung U_ref = 2.5 V
Und eine 10-Bit Auflösung das sind 1024 teil Spannungen,
der 2V / Teil-Spannung = 819 teile
(für 2.2V / 2.44 mV = 902 teile)
Programmteil: Zeile 53 … 59

Programm im Anhang.

Grus Georg
Attachments
ADCON-1.c
(7.74 KiB) Downloaded 36 times
kletor
 
Posts: 4
Joined: Fri Jan 03, 2014 2:13 pm

Postby ufchen » Sun Jan 24, 2010 12:00 am

Ich danke dir an diese Rechnung hatte ich nicht mehr gedacht,
jetzt kann ich endlich weiter machen!

schönen rest Sonntag noch
Gruß Uwe
ufchen
 
Posts: 40
Joined: Fri Jan 03, 2014 1:49 pm

Postby echris » Sun Jan 06, 2013 12:00 am

Hallo zusammen,

ich würde das Thema gerne nochmal aufgreifen.

Und zwar geht es mir speziell um die Auflösung des A/D-Wandlers des CC03ers.

In der oben genannten C-Datei "ADCON_1" wird die Auflösung von 10 Bit angenommen.

Anhand des Datenblatt des CC0ers ist die "Standard conversion" 8 Bit und die "Precision conversion" 10 Bit. Laut Datenblatt muss im ADCON-Register das PSIDLE-bit gesetzt werden, um den A/D-Wandler mit einer Auflösung von 10 Bit zu betreiben.

Leider finde ich diese Einstellung, also das Setzen des PSIDLE-Bit, nicht in der oben genannten C-Datei.

Verstehe ich nun das Datenblatt falsch, oder übersehe ich einen Programmcode im Quelltext.

Wünsche noch einen schönen Sonntag,

Grüße
eChris
echris
 
Posts: 2
Joined: Fri Jan 03, 2014 2:13 pm

Postby rai » Sun Jan 06, 2013 12:00 am

Hi,

zuerstmal zum PSIDLE Flag:
Wenn dieses gesetzt ist wird der µController während der A/D Wandlung angehalten (kein weiterer Programmablauf) um internes Rauschen zu minimieren.
Um den µC zu reaktivieren muss mit einem Interrupt gearbeitet werden.
--> Effekt: Das Ergebnis der A/D wandlung wird genauer

Prinzipiell arbeitet der A/D wandler jedoch immer mit 10Bit. Der Anwender kann dann entscheiden ob er nur das 8Bit Register ausließt oder die zwei weiteren Bit ebenfalls hinzunimmt.

Wenn du das 10Bit Ergebnis nimmst und ohne PSIDLE gearbeitet hast, dann ist eben ein bisschen Rauschen im Ergebnis mit drin.

Für alles was im Rahmen des Fernlehrgangs gemacht wird ist es jedoch "wurscht" ob du 8, 10 oder 10+PSIDLE nimmst.
Auflösung bei 8 Bit: 0,0097V (2,5/256)
Auflösung bei 10 Bit: 0,0024V (2,5/1024)
Fazit: 8 Bit reichen meistens sowieso aus. Da hast du meistens größere Schwankungen durch Temperaturveränderungen in deiner Schaltung drin.

Rai
rai
 
Posts: 45
Joined: Fri Jan 03, 2014 2:12 pm

Postby echris » Sun Jan 06, 2013 12:00 am

Vielen Dank für deine schnelle Antwort.

Ich verstehe nun jedoch noch nicht ganz, wie die beiden Ergebnisregister ADDH und ADDL beschrieben werden ?

Wenn mein A/D-Wandler im Prinzip immer mit einer 10-Bit Auflösung arbeitet, müsste doch immer im ADDL mein LSB stehen, oder ?

Anschließend würde ich meinen Messwert wie folgt auswerten:

// Messwert aus den Registern ADDH und ADDL holen

messwert = (ADDH<<2)+(ADDL & 0x03);

// Spannung ausrechnen (Wandlungsergebnis * Uref / 2^10)

spannung = messwert*(2.5/1024.0);


Grüße
eChris
echris
 
Posts: 2
Joined: Fri Jan 03, 2014 2:13 pm

Postby rai » Mon Jan 21, 2013 12:00 am

Hi,

ADDH und ADDL werden vom µController nach erfolgreicher AD Wandlung beschrieben.

Ja, in ADDL stehen immer die beiden LSB drin, der Rest ist "Datenschrott".

Der Code stimmt!

Rai
rai
 
Posts: 45
Joined: Fri Jan 03, 2014 2:12 pm


Return to Mikrocontroller-Fernlehrgang (TFH)

Who is online

Users browsing this forum: No registered users and 1 guest