Forum: Mikrocontroller und Digitale Elektronik AD Wandlung mit LPC2132


von znil (Gast)


Lesenswert?

Hallo zusammen,
habe mal ne Frage zu AD Wandlern. Arbeite mit einem LPC2132 in C. Der 
interne AD Wandler bekommt einen analogen Spannungswert und soll diesen 
dann nach einer bestimmten mathematischen funktion weiterverarbeiten. 
Das Problem ist nun das die erste AD Wandlung nicht funktoniert. Ab der 
zweiten Wandlung funktionieren alle weiteren korrekt. Hat jemand eine 
Idee woran das liegen könnte...?Falls ihr noch ne genauere 
problembeschreibung oder den Quellcode benötigt, bitte auch melden. 
Danke schonmal

von Olly K. (rossi75)


Lesenswert?

Zu meinem PCF.... steht im Datenblatt dass die erste Wandlung Müll 
ergibt. Vielleicht hast Du hier das gleiche Problem?

von znil (Gast)


Lesenswert?

das kann eigentlich nicht sein.es steht zumindestens davon nichts im 
datenblatt...hat sonst noch jemand ne idee? häng mal nen stück code mit 
an, vielleicht ist es dann besser zu verstehen.


  // starts AD conversion
    AD0CR = 0x1200C04;
  // Übertragung des AD Wertes
           udi_ADCValue = AD0DR >> 6;
    udi_ADCValue = udi_ADCValue & 0x3FF;
    printf("relevantes Ergebnis der AD Wandlung %lx\n\r", udi_ADCValue);

           r_UVIS = udi_ADCValue * 12.96 * 0.001;
          printf("Betriebsspannung VIS Strahler %f\n\r", r_UVIS);


wenn ich zwischen Zeile 1 AD0CR=0x1200C04 und der darauffolgende Zeile 
eine printf Anweisung einbaue funktioniert das Ganze. Kann es sein dass 
die Wandlung noch nicht abgeschlossen ist und ich trotzdem schon mit dem 
Wert(der dann nicht korrekt ist) weiterarbeite?
Bin über jegliche Antworten dankbar...

von Andreas K. (a-k)


Lesenswert?

Quellwiderstand des Analogsignals?

von znil (Gast)


Lesenswert?

Bevor das Signal auf den ADC geht ist ein Widerstand angebracht...meinst 
du es leigt eher an der hardware als an der software?

von Robert T. (robertteufel)


Lesenswert?

Du musst dem AD Wandler etwas mehr Zeit lassen die Wandlung auch 
durchzufuehren. Das dauert etwas laenger als einen C-Shift-Befehl. 
Koenntest z.B. auf das Interrupt Request Flag pollen oder das ganze 
vorneweg mit Interrupt machen.
Du startest die Wandlung und liest sofort aus. Die Wandlung dauert aber 
min. 2+ usec. Bei printf dauert das lange genug damit der Wandler fertig 
ist.
Der Ratschlag ist also, etwas mehr Geduld mit dem ADC ;-)

Robert

von znil (Gast)


Lesenswert?

danke, das habe ich mir schon gedacht...das einfachste wäre (wenn ich 
das richtig verstanden habe) ein flag abzufragen. Vor der Wandlung ist 
dies beispielsweise auf FALSE, sobald die Wandlung abgeschlossen ist, 
setze ich es auf TRUE. Danach mache ich eine Abfrage, ob das flag 
gesetzt ist. Wenn ja, kann ich mit dem Shift Befehl weiterarbeiten...Ist 
das so korrekt?

von Robert T. (robertteufel)


Lesenswert?

Das Bit ist im A/D Data Register zu finden, das sogenannte "DONE" bit 
(Kapitel 16 im User's Manual). Kannst fuer die erste Wandlung in einer 
Schleife abfragen, fuer die anderen Wandlungen muesste es soweiso schon 
gesetzt sein wenn Du das Ergebnis liest.

Robert

von znil (Gast)


Lesenswert?

Danke für die Antworten, so hatts dann funktioniert....

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.