J
junhao_wu
Guest
Ahoj kluci, potřebují pomoc zde.Snažím se program A / D konverzí do mého PIC16F873A k pocitu analogové napětí.
To je to, jak chci, můj program do práce:
Za prvé, jakmile je na PIC, první věc, kterou udělá, je smysl pro vstupní napětí.Je-li napětí menší než 4V, PWM bude režim se zapne a je-li napětí je více než 4V PWM by měl být vypnout.
Nejsem dostat nějaký výsledek z mého ADC.Spíše JÁ am prospěch "0" hodnotu
Pin číst vstupní napětí je pin7 (RA5).I am using VDD a Vss jako můj /-Vref
I am using PIC16F873A a CC5x kompilátor.
Níže je můj kód: Omlouvám se, pokud můj kód vzhled druh chaotický
Kód:# Include "math24f.h"
# Pragma čip PIC16F873A
# Define num1 900
# Define num2 1022/ / Uns8 cla, mcount, ncount;
int16 v_batt;neplatné int_pwm (void)
(
int cla;
TRISC = 0b.0011.0000;
PORTC.1 = 0; / / port C2 výstup (CCP1, PWM1)
PIE1.1 = 0; / / vypnout časovač 2 přerušuje
PIE1.2 = 0; / / vypnout ccp1 přerušení
CCP1CON = 0; / / CCP1 modulu off
PR2 = 0b.0011.1110; / / zatížení období registru (62)
CCP1CON.5 = 0;
CCP1CON.4 = 0;
daň = 0b.0001.1111; / / set pracovní cyklus
CCPR1L = 0b.0001.1111;
T2CON = 0b.0000.0000; / / prescaler 01:01
TMR2 = 0; / / časovač 2 off
CCP1CON = 0b.0000.1100; / / ccp1 PWM režim, ccp1 modul
)neplatné int_adc (void)
(TRISA = 0b.0011.1111; / / set RA0, RA1, RA2, RA3, RA4 a RA5 na analogový vstup
ADCON1 = 0b.1000.0000
/ / set Vref = Vdd, Vref-= Vss, zarovnáno.neplatné start_conv (void) (ADCON0.2 = 1; / / start / D konverzí
while (ADCON0.2 == 1) (); / / test, pokud A / D konverzi stále
návrat;
)neplatné get_measure_batt (void)
(
v_batt.low8 = ADRESL; / / získat měření a ukládání do v_batt
v_batt.mid8 = ADRESH;
)neplatné measure_batt (void)
(ADCON0 = 0b.0110.0001;
/ / A / D převodník modul napájení, vyberte Channel 4 jako vstupní pin,
/ / Fosc / 8
start_conv ();
get_measure_batt ();
)
void main (void)
(
int_adc ();
while (1)
(measure_batt ();
if (v_batt <num1)
(
int_pwm ();// do PWM věci zde, pokud Volt je menší než 4V
T2CON.2 = 1;
)
jiný
(
int_pwm ();
T2CON.2 = 0; / / vypnout PWM-li napětí větší než 4V
)
)
)
To je to, jak chci, můj program do práce:
Za prvé, jakmile je na PIC, první věc, kterou udělá, je smysl pro vstupní napětí.Je-li napětí menší než 4V, PWM bude režim se zapne a je-li napětí je více než 4V PWM by měl být vypnout.
Nejsem dostat nějaký výsledek z mého ADC.Spíše JÁ am prospěch "0" hodnotu
Pin číst vstupní napětí je pin7 (RA5).I am using VDD a Vss jako můj /-Vref
I am using PIC16F873A a CC5x kompilátor.
Níže je můj kód: Omlouvám se, pokud můj kód vzhled druh chaotický
Kód:# Include "math24f.h"
# Pragma čip PIC16F873A
# Define num1 900
# Define num2 1022/ / Uns8 cla, mcount, ncount;
int16 v_batt;neplatné int_pwm (void)
(
int cla;
TRISC = 0b.0011.0000;
PORTC.1 = 0; / / port C2 výstup (CCP1, PWM1)
PIE1.1 = 0; / / vypnout časovač 2 přerušuje
PIE1.2 = 0; / / vypnout ccp1 přerušení
CCP1CON = 0; / / CCP1 modulu off
PR2 = 0b.0011.1110; / / zatížení období registru (62)
CCP1CON.5 = 0;
CCP1CON.4 = 0;
daň = 0b.0001.1111; / / set pracovní cyklus
CCPR1L = 0b.0001.1111;
T2CON = 0b.0000.0000; / / prescaler 01:01
TMR2 = 0; / / časovač 2 off
CCP1CON = 0b.0000.1100; / / ccp1 PWM režim, ccp1 modul
)neplatné int_adc (void)
(TRISA = 0b.0011.1111; / / set RA0, RA1, RA2, RA3, RA4 a RA5 na analogový vstup
ADCON1 = 0b.1000.0000
while (ADCON0.2 == 1) (); / / test, pokud A / D konverzi stále
návrat;
)neplatné get_measure_batt (void)
(
v_batt.low8 = ADRESL; / / získat měření a ukládání do v_batt
v_batt.mid8 = ADRESH;
)neplatné measure_batt (void)
(ADCON0 = 0b.0110.0001;
/ / A / D převodník modul napájení, vyberte Channel 4 jako vstupní pin,
/ / Fosc / 8
start_conv ();
get_measure_batt ();
)
void main (void)
(
int_adc ();
while (1)
(measure_batt ();
if (v_batt <num1)
(
int_pwm ();// do PWM věci zde, pokud Volt je menší než 4V
T2CON.2 = 1;
)
jiný
(
int_pwm ();
T2CON.2 = 0; / / vypnout PWM-li napětí větší než 4V
)
)
)