Problema su ADC su potenciometru

M

M

Guest
Labas!

I'm using PIC18F2420 (kristalai = 8MHz & HS-PLL) su HiTech C Compiler.
Noriu 50kΩ potenciometras būti konvertuojamas į skaitmeninį du 7-Segmentai rodyti PORTB.

Problema ==> Aš teisingai o / p tačiau atėmus vieną.Aš tai jei 50KΩ prašė aš 0xFE nei 0xFF ir jei 0kΩ taikomas aš 0x01 o ne 0x00.

Programos ==>
#
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;
dvigubo dval0;

init ();

o (1)
(
val0 = ReadAdcChannel (0);
/ / dval0 = 5,0 * val0 / 1024 / / konvertuoti AN0 vertės flotacinio (prisiimti VDD = 5V)
PORTB = val0;
)

void init (tuščia)
(
PORTA = 0x00;
/ / PASIRINKITE VIDAUS ADC clock ir įjungti ADC
ADCS2 = 0; ADCS1 = 1; ADCS0 = 1; ADON = 1;

/ / TIK CH0 pasirinktas SU VIDAUS Nuoroda = VCC IR Nuoroda-= 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;

/ / AIŠKIOMIS GODONE BIT, CHS0 = CHS1 = CHS2 = 000 Į PASIRINKITE CHANNEL 0
CHS0 = 0; CHS1 = 0; CHS2 = 0; GODONE = 0;

DelayUs (20) / / palaukti 20us ADC gauti pasirengęs
GODONE = 1; / / start ADC konversijos
while (GODONE); / / laukti ADC baigti
jei (ADFM)
return ((ADRESH <<

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

| ADRESL);
kitas
return ((ADRESH <<2) | (ADRESL>> 6));
grįžti ADRESH;
)================================================== ===
jwb.h
================================================== ===
# define SET_AS_INPUT (uostas, bitai) uostas | = (bits)
# define SET_AS_OUTPUT (uostas, bitai) uosto & = (~ (bits))
# define BIT0 0x01
# define BIT1 0x02
# define BIT2 0x04
# define BIT3 0x08
# define BIT4 0x10
# define BIT5 0x20
# define BIT6 0x40
# define BIT7 0x80

 
Mėsmalės rašė:

Labas!I'm using PIC18F2420 (kristalai = 8MHz & HS-PLL) su HiTech C Compiler.

Noriu 50kΩ potenciometras būti konvertuojamas į skaitmeninį du 7-Segmentai rodyti PORTB.Problema ==> Aš teisingai o / p tačiau atėmus vieną.
Aš tai jei 50KΩ prašė aš 0xFE nei 0xFF ir jei 0kΩ taikomas aš 0x01 o ne 0x00.Programos ==>

# 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;

dvigubo dval0;init ();o (1)

(

val0 = ReadAdcChannel (0);

/ / dval0 = 5,0 * val0 / 1024 / / konvertuoti AN0 vertės flotacinio (prisiimti VDD = 5V)

PORTB = val0;

)void init (tuščia)

(

PORTA = 0x00;

/ / PASIRINKITE VIDAUS ADC clock ir įjungti ADC

ADCS2 = 0; ADCS1 = 1; ADCS0 = 1; ADON = 1;/ / TIK CH0 pasirinktas SU VIDAUS Nuoroda = VCC IR Nuoroda-= 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;/ / AIŠKIOMIS GODONE BIT, CHS0 = CHS1 = CHS2 = 000 Į PASIRINKITE CHANNEL 0

CHS0 = 0; CHS1 = 0; CHS2 = 0; GODONE = 0;DelayUs (20) / / palaukti 20us ADC gauti pasirengęs

GODONE = 1; / / start ADC konversijos

while (GODONE); / / laukti ADC baigti

jei (ADFM)

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

kitas

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

grįžti ADRESH;

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

jwb.h

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

# define SET_AS_INPUT (uostas, bitai) uostas | = (bits)

# define SET_AS_OUTPUT (uostas, bitai) uosto & = (~ (bits))

# define BIT0 0x01

# define BIT1 0x02

# define BIT2 0x04

# define BIT3 0x08

# define BIT4 0x10

# define BIT5 0x20

# define BIT6 0x40

# define BIT7 0x80
 
Didžiausias šaltinis impedancja ADC mano PIC18F2420 yra 2.5kΩ.

Ar, kad informacija gali jums padėti?

 
Mėsmalės rašė:

Didžiausias šaltinis impedancja ADC mano PIC18F2420 yra 2.5kΩ.Ar, kad informacija gali jums padėti?
 
maksimalus varža gali būti faktorius ....galėtų išbandyti tai su 1k potentiomter?

 

Welcome to EDABoard.com

Sponsor

Back
Top