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


von Marco S. (sharkman)


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

von Rudi (Gast)


Lesenswert?

Wie hast du Vref beschaltet?

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

Rudi

von Marco S. (sharkman)


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.

von Rudi (Gast)


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%?

von Marco S. (sharkman)


Lesenswert?

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

von Rudi (Gast)


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.

von Marco S. (sharkman)


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.
1
 
2
  TRISA = 0xFF;    //Trisa<0:4> als Eingänge
3
  ANSEL0 = 0x07;      //Analoge Eingänge RA<0:4>
4
  ADCON0 = 0b00001001;  //Single-Shot, Single Channel, GroupA, Start
5
  ADCON1 = 0x00;
6
  ADCON2 = 0x80;
7
  ADCON3 = 0x00;      //A/D all triggers disabled 
8
  ADCHS = 0x00;      //AN0,AN1,AN2,AN3
9
10
  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

von Rudi (Gast)


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?

von Marco S. (sharkman)


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.

von Rudi (Gast)


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..

von Marco S. (sharkman)


Lesenswert?

Macht auch keinen Unterschied zu der Abfrage im Interrupt.

von Rudi (Gast)


Lesenswert?

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

von Marco S. (sharkman)


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.

von Jens M. (Gast)


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?

von Master S. (snowman)


Lesenswert?

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

von Marco S. (sharkman)


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?

von Marco S. (sharkman)


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.

von Jens M. (Gast)


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

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.