|
|
View previous topic :: View next topic |
Author |
Message |
Lagaffe
Joined: 14 Sep 2010 Posts: 14 Location: Portugal, TNV
|
Problem with ADC and PIC16F688 |
Posted: Sun Aug 07, 2011 1:09 pm |
|
|
Hi to all,
I'm trying to do a very simple thing with a PIC16F688, but for some reason, I'm failing to succeed!
All I want to do (for the moment) is to read a value from AN4, AN5 and AN6, and send it trough RS232. But, all I'm getting on the remote terminal is the value 0.
For an analog input voltage, I'm using a 5K pot, connected between VCC and GND.
In the code below, I'm only using the AN6.
main.h
Code: |
#include <16F688.h>
#device adc=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC //Internal RC Osc
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES MCLR //Master Clear pin enabled
#FUSES NOCPD //No EE protection
#FUSES NOPUT //No Power Up Timer
#FUSES NOIESO //Internal External Switch Over mode disabled
#use delay(clock=8000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C4,rcv=PIN_C5,bits=8)
|
main.c
Code: |
#include "main.h"
#include <stdlib.h>
#define bkbhit (next_in!=next_out)
#define BUFFER_SIZE 16
BYTE buffer[BUFFER_SIZE];
BYTE next_in = 0;
BYTE next_out = 0;
#int_RDA
void serial_isr()
{
int t;
buffer[next_in]=getc();
t=next_in;
next_in=(next_in+1) % BUFFER_SIZE;
if(next_in==next_out) next_in=t; // Buffer full !!
}
BYTE bgetc()
{
BYTE c;
while(!bkbhit) ;
c=buffer[next_out];
next_out=(next_out+1) % BUFFER_SIZE;
return(c);
}
void main()
{
int16 x;
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_adc_ports(ALL_ANALOG|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_32);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_oscillator(OSC_8MHZ);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(true)
{
set_adc_channel( 6 );
delay_us(50);
x=read_adc();
printf("Value = %Lu\r\n",x);
delay_ms(200);
}
}
|
This seems to be a pretty straight forward code, but, it doesn't work.
To make things even stranger, if I put some voltage on AN4 and AN5, and try to read any of those analog inputs, I get the value = 10 (?) ... is it something related to CCP2 ?
Can anyone help me, pointing out some sort of solution?
Thanks in advance.
Kind Regards
Lagaffe |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sun Aug 07, 2011 1:29 pm |
|
|
What's your CCS compiler version ?
Also, is this a manufactured board, or did you make it yourself ?
If it's factory built, post the manufacturer and part number of the board. |
|
|
Lagaffe
Joined: 14 Sep 2010 Posts: 14 Location: Portugal, TNV
|
|
Posted: Sun Aug 07, 2011 1:35 pm |
|
|
Hi,
Sorry, I forgot to mentioned that.
The board, I've made it myself, its very simple, just a PIC16F688 with ICSP connector, a MAX232 with caps, a 100nF cap next to the VCC and GND of the pic, and a 10K resistor from MCLR to VCC.
The CCS Compiler is the 4.084 version.
Any idea?
Thanks in advance |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sun Aug 07, 2011 2:51 pm |
|
|
It works for me. I installed vs. 4.084 and compiled your program.
I ran on a 16F688 on a Microchip "low pin count" board. I jumpered the
PICs Tx pin (and ground) over to a 3M breadboard with a Max232A chip
on it. I also jumpered AN6 (pin C2) to the center tap of a 5K trimpot on
the 3M breadboard. The other ends of the trimpot are connected to +5v
and ground. The output is displayed on TeraTerm on a PC. If I quickly
turn the trimpot through its range, this is what I get in the terminal
window. It's working.
Quote: |
Value = 1023
Value = 1023
Value = 1018
Value = 741
Value = 495
Value = 507
Value = 420
Value = 222
Value = 25
Value = 0
Value = 0
Value = 0 |
|
|
|
Lagaffe
Joined: 14 Sep 2010 Posts: 14 Location: Portugal, TNV
|
|
Posted: Tue Aug 09, 2011 6:12 am |
|
|
This must be one of those things that won't work, and I can't figure out where the problem is.
I'm using the PDIP version of the PIC.
In the weekend, I'll revise all the hardware, and if no major problem arrises, then, I'll have to try on another pic.
I'll keep this post alive.
Thanks for your help.
Regards |
|
|
|
|
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
|