mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik A/D Wandler am PIC18F2431 gibt nur 9bit


Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Ich arbeite mit dem PIC18F2431 und versuche momentan den A/D-Wandler zum 
gescheiten funktionieren zu bekommen.

Das Problem ist, dass er zwar wandelt und das auch problemlos, jedoch 
nur bis Vdd/2. Dann sollte er ja aufs zehnte Bit umschalten, tut er aber 
nicht. Gibt es bei dem Ding so etwas, wie mit und ohne Vorzeichen zu 
messen oder irgendwelche anderen Späße, dass er nich höher kommt und bei 
511 stehen bleibt. Ich suche jetzt schon den ganzen Tag und komme 
einfach nicht weiter. Vielleicht hat ja jemand einen einfachen Tipp für 
mich.

Mit freundlichen Grüßen
Marco

Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie hast du Vref beschaltet?

woher weißt du, dass nur 9Bit gewandelt werden? Schaust du dir die SFR 
an?

Rudi

Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vref sind AVdd und AVss, hab erstmal nichts externes dran.

Und ja ich schau mir die SFR an. Es ist auch egal ob ich links- oder 
rechtsbündig schreibe, mehr als 511 spuckt er nicht aus.

Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was passiert denn, wenn du mehr als 50% der betriebsspannung an den 
AD-wandler sendet? Ändern sich denn die unteren Bits bei verschiedenen 
Spannungen oberhalb von 50%?

Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein. Er bleibt konstant bei 511, also dem maximalen was man aus 9 Bit 
rausholen kann.

Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kannst du mal deine Schaltung und den Softwareteil der der 
Initialisierung des AD-wandlers veröffentlichen? Ich habe seit Jahren 
den 4320 im Einsatz und auf den ersten Blick sieht der AD-Teil identisch 
aus.

Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja der sollte auch identisch sein.

Schaltung veröffentliche ich jetzt einfach mal nicht, weil einfach eine 
Klemme vom Netzteil an dem PIN hängt und ich die Spannung damit zum 
Testen direkt vorgebe.
 
  TRISA = 0xFF;    //Trisa<0:4> als Eingänge
  ANSEL0 = 0x07;      //Analoge Eingänge RA<0:4>
  ADCON0 = 0b00001001;  //Single-Shot, Single Channel, GroupA, Start
  ADCON1 = 0x00;
  ADCON2 = 0x80;
  ADCON3 = 0x00;      //A/D all triggers disabled 
  ADCHS = 0x00;      //AN0,AN1,AN2,AN3

  ADCON0bits.ADON = 1;

Abfragen tu ich das ganze dann über den Interrupt der durch den 
AD-Wandler ausgelöst wird.
Ich hoffe das reicht an Informationen

Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Schaltung veröffentliche ich jetzt einfach mal nicht, weil einfach eine
>Klemme vom Netzteil an dem PIN hängt und ich die Spannung damit zum
>Testen direkt vorgebe.

?? Zusammmen mit der Betriebsspannung? Regelst du beides gleichzeitig?

Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, ich habe zwei seperate Netzteile hier.

Eine Sache ist mir noch aufgefallen, die aber keinen Einfluss hatte als 
ich sie geändert habe. Bei ANSEL0 sollte ein ANSEL0 = 0xFF sein.

Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Vorschlag:

Lass doch zunächst den Interrupt weg. Dann frage den AD-Wandler im 
Polling ab. Etwa so:

ADCON1 = bin(1000.0100);      // PORTA.0, A.1 = analog, Vref = VDD
      // ADRESH = rechtsbuendig

ADCON0 = bin(1000.0001);// AD-Wandler init, GO=0, conversion clock 
=Fosc/32

while (1)
{
 GO = 1;
 #asm
  nop
 #endasm
 while (GO == 1)
 {
 }
}
....

So kannst du wunderbar die SFR beobachten...wenn soweit elektrisch alles 
passt, sollte es funktionieren..

Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Macht auch keinen Unterschied zu der Abfrage im Interrupt.

Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, dann scheint doch vielleicht elektrisch etwas nicht zu passen.

Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich wüsste nicht was an AVdd und AVss liegen die entsprechenden 
Pegel an, und die Massen der beiden Netzgeräte sind verbunden, also von 
daher kann ich mir nicht vorstellen, dass da irgendwas nicht passt.

Autor: Jens Martin (jens-martin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>REGISTER 21-3: ADCON2: A/D CONTROL REGISTER 2

>bit 7 ADFM: A/D Result Format Select bit
>1 = Right justified
>0 = Left justified

Steht das richtig?


>bit 6-3 ACQT<3:0>: A/D Acquisition Time Select bits
>0000 = No delay (conversion starts immediately when GO/DONE is set)(1)
>0001 = ...

Hier genug Zeit gelassen für 10 Bit conversion / S&H Cap. charging


>bit 2-0 ADCS<2:0>: A/D Conversion Clock Select bits
>000 = FOSC/2
>001 = FOSC/8
>002 ...

Schnell genug bevor abgefragt wird?

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mach mal testweise einen 0.1uF-kondensator vor den AD-wandlereingang; 
blockkondensatoren für den PIC hast du hoffentlich auch

Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Snowman
Blockkondensatoren um die Eingangsspannung zu glätten sind da. Am A/D 
Wandler hab ich leider noch keinen, kann ich aber mal versuchen.

@Jens
Er steht definitiv auf rechtsbündig.
Das mit den DelayZeiten werd ich auch nochmal versuchen, hatte ich aber 
glaub ich gestern schonmal getestet.

A/D Conversion Clock Select bits Hab ich noch  incht verstellt, die 
machen mir den A/D-Wandler doch aber nur langsamer oder nicht?

Autor: Marco Schulze (sharkman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So.

Problem behoben, es lag wirklich an der Conversion Clock. Ich hatte sie 
auf Fosc/2 und jetzt geändert auf Fosc/4. Ich wüsste jetzt aber gerne 
noch, wie lange er für die Wandlung braucht. ist das Fosc, der extern 
angelegte Takt oder der Befehlstakt? Ich vergess das leider immer 
wieder.

Autor: Jens Martin (jens-martin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marco Schulze schrieb:
> Problem behoben, es lag wirklich an der Conversion Clock. Ich hatte sie
> auf Fosc/2 und jetzt geändert auf Fosc/4. Ich wüsste jetzt aber gerne
> noch, wie lange er für die Wandlung braucht. ist das Fosc, der extern
> angelegte Takt oder der Befehlstakt? Ich vergess das leider immer
> wieder.

RTFM


21.6 Selecting the A/D Conversion
Clock
The A/D conversion time per bit is defined as TAD. The
A/D conversion requires 12 TAD per 10-bit conversion.
The source of the A/D conversion clock is software
selectable. There are eight possible options for TAD:
• 2 TOSC
• 4 TOSC
• 8 TOSC
• 16 TOSC
• 32 TOSC
• 64 TOSC
• Internal RC Oscillator
• Internal RC Oscillator/4
For correct A/D conversions, the A/D conversion clock
(TAD) must be as short as possible, but greater than the
minimum TAD (approximately 416 ns, see parameter
A11 for more information).

TABLE 21-2: TAD vs. DEVICE OPERATING FREQUENCIES

EQUATION 21-3: CONVERSION TIME FOR MULTI-CHANNEL MODES

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.