|
|
View previous topic :: View next topic |
Author |
Message |
Francesc Guest
|
A/D converter from 16F876 |
Posted: Tue Dec 30, 2003 8:03 am |
|
|
Hi all, we would use the A/D converter on pin RA5 and use an external voltage reference on pin RA3 from 16F876.
I write thats lines, but that not work with our 2,5V external reference connected on pin RA3.
What configuration we need ??
Also, when include the line SETUP_ADC_PORTS(A_ANALOG_RA3_REF), the LCD not show nothing.
#include <16f876.h>
#device ADC=10
#USE DELAY(CLOCK=4000000,RESTART_WDT)
#include <LCD2.C>
#USE FAST_IO(A)
#USE FAST_IO(B)
LONG TEMP=0;
VOID MAIN()
{
SETUP_ADC(ADC_CLOCK_DIV_8);
SETUP_ADC_PORTS(A_ANALOG_RA3_REF);//If include that line, LCD not show nothing.
LCD_INIT();
lcd_gotoxy(1,1);
LCD_PUTC("TEST:");
while(1)
{
RESTART_WDT();
set_tris_a(0x28); ////RA3 / RA5 inputs
SET_ADC_CHANNEL(4);
TEMP=READ_ADC();
delay_ms(200);
display(); //Show results
}
}
Please, Help
Merry Christmas for all |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Dec 30, 2003 3:09 pm |
|
|
My suggestions are:
1. First, make it work with the internal Vref. (ie., VDD).
Don't attempt to use the external Vref until later.
So use this line for the A/D setup:
SETUP_ADC_PORTS(ALL_ANALOG);
2. Get rid of the WatchDog Timer, during initial testing.
Use NOWDT in your #fuses statement.
Once you have it working, then you can put these other
features back in, one at a time.
Questions:
1. You said that if you put in this line, the LCD shows "nothing".
SETUP_ADC_PORTS(A_ANALOG_RA3_REF);
What do you mean by "nothing" ? Do you mean that it shows
a value of 0000 ? Or, do you mean the LCD is blank ?
2. What pins on the PIC are used by the LCD ? Does it use
any pins on Port A ? |
|
|
Francesc Guest
|
A/D converter from 16F876 |
Posted: Wed Dec 31, 2003 12:55 am |
|
|
Hi all,
When we include that line SETUP_ADC_PORTS(A_ANALOG_RA3_REF) on my program the LCD display is blank, not show nothing.
Also, not work with external reference,but it work with internal reference.
The pins used for LCD are all PORT B and bits 1,2,3 of PORT A.
That are the code
Please Help me!!!
#include <16f876.h>
#device ADC=10
#USE DELAY(CLOCK=4000000)
#include <LCD2.C>
#USE FAST_IO(A)
#USE FAST_IO(B)
LONG TEMP=0;
VOID MAIN()
{
SETUP_ADC(ADC_CLOCK_DIV_8);
SETUP_ADC_PORTS(A_ANALOG_RA3_REF);//If include that line, LCD not show nothing.
LCD_INIT();
lcd_gotoxy(1,1);
LCD_PUTC("TEST:");
while(1)
{
RESTART_WDT();
set_tris_a(0x28); ////RA3 / RA5 inputs
SET_ADC_CHANNEL(4);
TEMP=READ_ADC();
delay_ms(200);
display(); //Show results
}
}
Merry Christmas |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Dec 31, 2003 1:41 am |
|
|
Quote: | The pins used for LCD are all PORT B and bits 1,2,3 of PORT A. |
The use of some pins on Port A for the LCD is the problem.
With this line, you are setting up Port A to have all analog pins,
except for RA3, which is for Vref:
SETUP_ADC_PORTS(A_ANALOG_RA3_REF);
The LCD requires Digital pins for the control signals E, RS, and R/W.
Because you have those 3 pins configured as Analog pins, the
LCD will not work.
But, Port A can't be configured in the mode that you need.
Look at the following chart in section 11.0 of the 16F876 data sheet:
PCFG3:PCFG0: A/D Port Configuration Control bits
Pick the best possible configuration from that chart.
You will need to move your LCD control signals to some other pins.
When you have picked the best configuration, then look in the 16F877.H
file to find the #define value that CCS uses as a name for that
configuration. Then change the parameter in setup_adc_ports()
to use that new value. |
|
|
|
|
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
|