Problème avec l'ADC de potentiomètre

H

Hasher

Guest
Bonjour!

J'utilise PIC18F2420 (cristal 8MHz = & & HS-PLL) HiTech avec compilateur C.
Je veux 50kΩ Potentiomètre à être converties en numérique sur les deux segments de l'affichage 7-sur PORTB.

Problème ==> je me suis correct o / p, mais avec moins un.Je veux dire que si je me suis 50KΩ appliquée 0xFE plutôt que 0xFF et si 0kΩ est appliquée I got 0x01 plutôt que de 0x00.

Programme ==>
#
include <pic18.h>
#
include "config.h"
#
include "delay.h"
#
include "jwb.h"

int adc_value;
void init (void);
unsigned char ReadAdcChannel (unsigned char c);

void main (void)
(
unsigned char val0;
char i;
unsigned char c;
double dval0;

init ();

tout (1)
(
val0 = ReadAdcChannel (0);
/ / dval0 * val0 = 5,0 /
1,024 / / convertir AN0 valeur float (assumer Vdd = 5V)
PORTB = val0;
)

void init (void)
(
PORTA = 0x00;
/ / SELECT ADC HORLOGE INTERNE ET SON TOUR SUR ADC
ADCS2 = 0; ADCS1 = 1; ADCS0 = 1; Adon = 1;

/ / SEULEMENT CH0 EST INTERNE REF = VCC ET REF-= GND
PCFG0 = 0; PCFG1 = 1; PCFG2 = 1; PCFG3 = 1;

SET_AS_INPUT (TRISA, BIT0 | BIT1);
TRISB = 0x00;

)

unsigned char ReadAdcChannel (unsigned char c)
(
unsigned char temp;

/ / CLEAR GODONE BIT, CHS0 = CHS1 = CHS2 = 000 pour sélectionner le canal 0
CHS0 = 0; CHS1 = 0; CHS2 = 0; GODONE = 0;

DelayUs (20) / / attente 20us pour ADC pour se préparer
GODONE = 1; / / start conversion ADC
while (GODONE) / / attendre la fin de l'ADC
if (ADFM)
return ((ADRESH <<

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Cool" border="0" />

| ADRESL);
autre
return ((ADRESH <<2) | (ADRESL>> 6));
retour ADRESH;
)================================================== ===
jwb.h
================================================== ===
# define SET_AS_INPUT (port, bits) port | = (bits)
# define SET_AS_OUTPUT (port, bits) port & = (~ (bits))
# define BIT0 0x01
# define BIT1 0x02
# define Bit 2 0x04
# define BIT3 0x08
# define BIT4 0x10
# define BIT5 0x20
# define BIT6 0x40
# define BIT7 0x80

 
Hasher a écrit:

Bonjour!J'utilise PIC18F2420 (cristal 8MHz = & & HS-PLL) HiTech avec compilateur C.

Je veux 50kΩ Potentiomètre à être converties en numérique sur les deux segments de l'affichage 7-sur PORTB.Problème ==> je me suis correct o / p, mais avec moins un.
Je veux dire que si je me suis 50KΩ appliquée 0xFE plutôt que 0xFF et si 0kΩ est appliquée I got 0x01 plutôt que de 0x00.Programme ==>

# include <pic18.h>

# include "config.h"

# include "delay.h"

# include "jwb.h"int adc_value;

void init (void);

unsigned char ReadAdcChannel (unsigned char c);void main (void)

(

unsigned char val0;

char i;

unsigned char c;

double dval0;init ();tout (1)

(

val0 = ReadAdcChannel (0);

/ / dval0 = 5.0 * val0 / 1024 / / la valeur à convertir AN0 float (assumer Vdd = 5V)

PORTB = val0;

)void init (void)

(

PORTA = 0x00;

/ / SELECT ADC HORLOGE INTERNE ET SON TOUR SUR ADC

ADCS2 = 0; ADCS1 = 1; ADCS0 = 1; Adon = 1;/ / SEULEMENT CH0 EST INTERNE REF = VCC ET REF-= GND

PCFG0 = 0; PCFG1 = 1; PCFG2 = 1; PCFG3 = 1;SET_AS_INPUT (TRISA, BIT0 | BIT1);

TRISB = 0x00;)unsigned char ReadAdcChannel (unsigned char c)

(

unsigned char temp;/ / CLEAR GODONE BIT, CHS0 = CHS1 = CHS2 = 000 pour sélectionner le canal 0

CHS0 = 0; CHS1 = 0; CHS2 = 0; GODONE = 0;DelayUs (20) / / attente 20us pour ADC pour se préparer

GODONE = 1; / / start conversion ADC

while (GODONE) / / attendre la fin de l'ADC

if (ADFM)

return ((ADRESH <<
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Cool" border="0" /> | ADRESL);

autre

return ((ADRESH <<2) | (ADRESL>> 6));

retour ADRESH;

)================================================== ===

jwb.h

================================================== ===

# define SET_AS_INPUT (port, bits) port | = (bits)

# define SET_AS_OUTPUT (port, bits) port & = (~ (bits))

# define BIT0 0x01

# define BIT1 0x02

# define Bit 2 0x04

# define BIT3 0x08

# define BIT4 0x10

# define BIT5 0x20

# define BIT6 0x40

# define BIT7 0x80
 
Le montant maximal de l'impédance de source de mon PIC18F2420 ADC est 2.5kΩ.

Est-ce que cette info vous aider?

 
Hasher a écrit:

Le montant maximal de l'impédance de source de mon PIC18F2420 ADC est 2.5kΩ.Est-ce que cette info vous aider?
 
le maximum d'impédance mai comme le facteur ....pourriez-vous tester avec un 1k potentiomter?

 

Welcome to EDABoard.com

Sponsor

Back
Top