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