A/D Wandler am PIC18F2431 gibt nur 9bit

OP #1930554
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
Gast #1930607
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.
OP #1930611
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
Gast #1930612
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?
Gast #1930629
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..
Gast #1930688
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?
OP #1931363
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?
OP #1931445
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.
Gast #1931523
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren