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