H
Hasher
Guest
Hej!
Jeg bruger PIC18F2420 (krystal = 8MHz & & HS-PLL) med HiTech C compiler.
Jeg ønsker 50kΩ potentiometer til at blive konverteret til digitalt på to 7-Segmenter displayet på PORTB.
Problem ==> Jeg fik korrekte o / p men med minus én.Jeg mener, hvis 50KΩ anvendes Jeg fik 0xFE snarere end 0xFF og hvis 0kΩ anvendes Jeg fik 0x01 snarere end 0x00.
Program ==>
#
include <pic18.h>
#
include "config.h"
#
include "delay.h"
#
include "jwb.h"
int adc_value;
void init (void);
usignerede CHAR ReadAdcChannel (usignerede char c);
void Main (void)
(
usignerede CHAR val0;
CHAR I;
usignerede char c;
dobbelt dval0;
init ();
mens (1)
(
val0 = ReadAdcChannel (0);
/ / dval0 = 5,0 * val0 / 1024 / / konvertere AN0 værdi til at flyde (påtage Vdd = 5V)
PORTB = val0;
)
void init (void)
(
PORTA = 0x00;
/ / SELECT INTERNE ADC CLOCK og tænde ADC
ADCS2 = 0; ADCS1 = 1; ADCS0 = 1; ADON = 1;
/ / KUN çH0 vælges med INTERNE
Ref. = Vcc og ref-= GND
PCFG0 = 0; PCFG1 = 1; PCFG2 = 1; PCFG3 = 1;
SET_AS_INPUT (TRISA, BIT0 | BIT1);
TRISB = 0x00;
)
usignerede CHAR ReadAdcChannel (usignerede CHAR c)
(
usignerede CHAR temp;
/ / CLEAR GODONE BIT, CHS0 = CHS1 = CHS2 = 000 for at vælge kanal 0
CHS0 = 0; CHS1 = 0; CHS2 = 0; GODONE = 0;
DelayUs (20); / / vente 20us for ADC at blive klar
GODONE = 1 / / start ADC konvertering
while (GODONE); / / derefter vente på ADC til slut
if (ADFM)
tilbagevenden ((ADRESH <<
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Kølig" border="0" />
| ADRESL);
anden
tilbagevenden ((ADRESH <<2) | (ADRESL>> 6));
tilbagevenden ADRESH;
)================================================== ===
jwb.h
================================================== ===
# define SET_AS_INPUT (havn, bits) port | = (bits)
# define SET_AS_OUTPUT (havn, bits) port & = (~ (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
Jeg bruger PIC18F2420 (krystal = 8MHz & & HS-PLL) med HiTech C compiler.
Jeg ønsker 50kΩ potentiometer til at blive konverteret til digitalt på to 7-Segmenter displayet på PORTB.
Problem ==> Jeg fik korrekte o / p men med minus én.Jeg mener, hvis 50KΩ anvendes Jeg fik 0xFE snarere end 0xFF og hvis 0kΩ anvendes Jeg fik 0x01 snarere end 0x00.
Program ==>
#
include <pic18.h>
#
include "config.h"
#
include "delay.h"
#
include "jwb.h"
int adc_value;
void init (void);
usignerede CHAR ReadAdcChannel (usignerede char c);
void Main (void)
(
usignerede CHAR val0;
CHAR I;
usignerede char c;
dobbelt dval0;
init ();
mens (1)
(
val0 = ReadAdcChannel (0);
/ / dval0 = 5,0 * val0 / 1024 / / konvertere AN0 værdi til at flyde (påtage Vdd = 5V)
PORTB = val0;
)
void init (void)
(
PORTA = 0x00;
/ / SELECT INTERNE ADC CLOCK og tænde ADC
ADCS2 = 0; ADCS1 = 1; ADCS0 = 1; ADON = 1;
/ / KUN çH0 vælges med INTERNE
Ref. = Vcc og ref-= GND
PCFG0 = 0; PCFG1 = 1; PCFG2 = 1; PCFG3 = 1;
SET_AS_INPUT (TRISA, BIT0 | BIT1);
TRISB = 0x00;
)
usignerede CHAR ReadAdcChannel (usignerede CHAR c)
(
usignerede CHAR temp;
/ / CLEAR GODONE BIT, CHS0 = CHS1 = CHS2 = 000 for at vælge kanal 0
CHS0 = 0; CHS1 = 0; CHS2 = 0; GODONE = 0;
DelayUs (20); / / vente 20us for ADC at blive klar
GODONE = 1 / / start ADC konvertering
while (GODONE); / / derefter vente på ADC til slut
if (ADFM)
tilbagevenden ((ADRESH <<
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Kølig" border="0" />
| ADRESL);
anden
tilbagevenden ((ADRESH <<2) | (ADRESL>> 6));
tilbagevenden ADRESH;
)================================================== ===
jwb.h
================================================== ===
# define SET_AS_INPUT (havn, bits) port | = (bits)
# define SET_AS_OUTPUT (havn, bits) port & = (~ (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