|
|
View previous topic :: View next topic |
Author |
Message |
sorasit46
Joined: 07 May 2007 Posts: 69
|
Can open ADC port full time? |
Posted: Tue Mar 17, 2009 5:45 pm |
|
|
Hi!
In 16F886, I use ANO & AN4 for capture 2 voltages( 0.2Volts & 1.5 Volts ). Can I turn on ANO & AN4 full time or every time I read ADC I must turn on and turn off. My project read as dynamic data. What way is correct? Now I destroy this port in 2-4 hours.
Code: |
#include <16F886.h>
#device ADC=10
#define CLOCK_SP 4000000
#fuses hs,NOLVP,WDT,NOPROTECT,NOPUT,NOBROWNOUT,NOCPD,NOWRT,NODEBUG
#use delay (clock=CLOCK_SP)
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#byte port_b=6
#byte OSCCON = 0x08F
#ROM 0x2100 = {0x00}
.
#define Vbat PIN_A0 // Input Analog AN0 Leg2,check Battery Voltages.
#define OverMo PIN_A5 // Input Analog AN4 Leg7,check motor drive current
#define Bz PIN_A3 // Output Buzzer Leg5
#define Fl PIN_C4 // Output Flash Leg15
.
#define Vbe 0.0048875855327468230694037145650049 // Vcc/ADC10 = (5/1023)
.
float Vreadch,Vm_ref
.
Void main()
{
OSCCON=0x60;
while ((OSCCON&0x4)!=0x4);
setup_ccp1(CCP_CAPTURE_FE); // Configure CCP1 to capturerise
setup_ccp2(CCP_OFF);
enable_interrupts(INT_CCP1); // Enable interrupt CCP1
enable_interrupts(GLOBAL); // All interrupts ON
setup_adc_ports(sAN0 | sAN4); // Fix Port AN0 & AN4 for ADC
setup_adc(adc_clock_internal);
setup_spi(FALSE);
enable_interrupts(INT_TIMER0); // enable interrupt timer0
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // setup timer0 enabled
set_timer0(0); // set timer0
setup_timer_1(T1_DISABLED); // setup timer1 disabled
setup_timer_2(T2_DISABLED,0,1); // setup timer2 disabled
set_tris_a(0b00110001);
set_tris_b(0xF8);
set_tris_c(0b11101101);
setup_wdt(WDT_2304MS);
output_low(Bz);output_low(Fl);
while(1)
{
.
.
set_adc_channel(0);delay_us(10); // Read Analog input AN0 (channel=0)
Vreadch=read_adc();delay_us(10);
Vreadch =Vreadch*Vbe;
if (Vreadch < 1.5 ) output_high(Bz);
Out7seg(Vreadch); // LED 7 Segment 3 digits.
delay_ms(1000);output_low(Bz);restart_wdt();
.
set_adc_channel(4);delay_us(10); // Read Analog input AN4 (channel=4)
Vreadch=read_adc();delay_us(10);
Vreadch =Vreadch*Vbe;
if (Vreadch > 0.2 ) output_high(Fl);
Out7seg(Vreadch);delay_ms(1000);output_low(Fl);restart_wdt();
.
.
}
}
[/quote]
OR
[quote]
Void main()
{
.
.
setup_adc_ports(NO_ANALOGS); // Don't fix port for ADC
setup_adc(ADC_OFF); // Analog to digital off
.
while(1)
{
.
.
setup_adc_ports(sAN0);setup_adc(adc_clock_internal); // Turn on ADC AN0
set_adc_channel(0);delay_us(10); // Read Analog input AN0 (channel=0)
Vreadch=read_adc();delay_us(10);
setup_adc_ports(no_analogs);setup_adc(adc_Off); // Don't fix ADC port, ADC off
Vreadch =Vreadch*Vbe;
if (Vreadch < 1.5 ) output_high(Bz);
Out7seg(Vreadch); // LED 7 Segment 3 digits.
delay_ms(1000);output_low(Bz);restart_wdt();
.
setup_adc_ports(sAN4);setup_adc(adc_clock_internal); // Turn on ADC AN4
set_adc_channel(4);delay_us(10); // Read Analog input AN4 (channel=4)
Vreadch=read_adc();delay_us(10);
setup_adc_ports(no_analogs);setup_adc(adc_Off); // Don't fix ADC port, ADC off
Vreadch =Vreadch*Vbe;
if (Vreadch > 0.2 ) output_high(Fl);
Out7seg(Vreadch);delay_ms(1000);output_low(Fl);restart_wdt();
.
.
}
}
|
Regards
Last edited by sorasit46 on Tue Mar 17, 2009 6:03 pm; edited 1 time in total |
|
|
sorasit46
Joined: 07 May 2007 Posts: 69
|
|
Posted: Tue Mar 17, 2009 5:59 pm |
|
|
Why I can reprogram this destroy chip (verify after programming pass). I use EPIC Version 2.46 Beta. In fact this chip can not use ADC port.
regards |
|
|
Sydney
Joined: 13 Feb 2009 Posts: 71
|
|
Posted: Wed Mar 18, 2009 4:51 pm |
|
|
You dont need to turn it off, but you need to read the datasheet as you are using adc_clock_internal, which you shouldnt be. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|