Hallo, liebe Forengemeinde,
ich hab ein sehr merkwürdiges Problem mit dem AD Wandler vom LPC2138. In
den Erratasheets hab ich nichts dazu gefunden, auch mit dem User Manual
komm ich nicht weiter.
Die AD-Wandlung funktioniert soweit prima, allerdings manchmal "hängt"
sich der Wandler auf.
Sowohl im Burst Mode als auch im Software Mode.
Verwendet wird der folgende Code:
1 | static unsigned short adc_read(unsigned char ch)
|
2 | {
|
3 | unsigned int i;
|
4 | AD0CR = 0x00200300 | ch; // Init ADC (Pclk = 12MHz) and select channel
|
5 | AD0CR |= 0x01000000; // Start A/D Conversion
|
6 | do
|
7 | {
|
8 | i = AD0DR; // Read A/D Data Register
|
9 | }
|
10 | while ((i & 0x80000000) == 0); // Wait for end of A/D Conversion
|
11 | unsigned int channel = AD0DR & 0x07000000;
|
12 | return (i >> 6) & 0x03FF; // bit 6:15 is 10 bit AD value
|
13 | }
|
Problem:
Das Done-Bit wird nicht gesetzt, ergo wird die do-while-Schleife nicht
verlassen.
Woran kann das liegen? Die IO-Pins sind auch richtig für den Wandler
konfiguriert, ebenfalls läuft er (Power control etc.)
Meine Vermutung:
Da es sporadisch auftritt, könnte es ein Problem mit der
Versorgungsspannung des Prozessors sein.
Das ganze wird über TRACO Gleichrichter versorgt, mit 3.3 V. Allerdings
kann es shconmal vorkommen, dass kleinere Spannungsspitzen bzw.
-Einbrüche auftreten. Hardwaremäßig ist da so leider nicht viel dran zu
ändern.
VIelleicht liegt es aber auch nicht daran.
Für jede Hilfe bin ich sehr dankbar!
-Kai