www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LPC2138 AD-Wandler Problem


Autor: Kxx S. (kskolik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:

static unsigned short adc_read(unsigned char ch)
{
  unsigned int i;
  AD0CR = 0x00200300 | ch; // Init ADC (Pclk = 12MHz) and select channel
  AD0CR |= 0x01000000; // Start A/D Conversion
  do
  {
    i = AD0DR; // Read A/D Data Register
  } 
  while ((i & 0x80000000) == 0); // Wait for end of A/D Conversion
  unsigned int channel = AD0DR & 0x07000000; 
  return (i >> 6) & 0x03FF; // bit 6:15 is 10 bit AD value
}


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

Autor: kskolik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist das Problem schonmal bei jemandem aufgetreten?

Hier ist noch ein Auszug aus dem User Manual:

------------------------------------------------------------------------

Note: if the A/D converter is used, signal levels on analog input pins 
must not be
above the level of V3A at any time. Otherwise, A/D converter readings 
will be invalid.

(aus: LPC213x User manual Rev. 01 — 24 June 2005 Seite 193)

------------------------------------------------------------------------

Nun kann es sein, dass durch Induktivitäten bzw. Schaltvorgänge im 
Lastromkreis Spannungsspitzen auftreten. Leider lassen sich diese durch 
eine galvanische Entkopplung (mittels Hall Sensoren) nicht vollständig 
von der Steuerelektronik fernhalten.

Kann es sein, dass durch solch auftretende Spannungsspitzen (die 3.3V, 
also V3A, kurzzeitig überschreiten) sich der AD-Wandler "aufhängt"?

Sollte das der Fall sein, wie kann man am besten dagegen vorgehen? 
Kondensatoren vor dem AD-Wandler Eingang gegen Masse? Wenn ja, was wäre 
da ein akzeptabler Wert?

Des Weiteren: Was wäre eine sinnvolle, softwareseitige Abbruchbedingung 
für die im vorigen Beitrag genannte while-Bedingung? Es gibt ja beim 
AD-Wandler leider kein Fault-Mode Bit oder ähnliches.
Vielleicht mit einem Timer? Oder einfach eine Zählvariable, die 
vielleicht bis 15 zählt? (Der AD-Wandler benötigt ja für 10Bit 11 
Zyklen).

Ich bitte um Hilfe :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.