Hola bmb, el manual que utilizo es: "Manual de usuario del compilador PCW de CCS y ahí no
encuentro la configuracion para poner en el PORTA dos entradas analogicas y tres digitales.
Tambien utilizo el libro: "Compilador C CCS y simulador PROTEUS para microcontroladores PIC"
y ahí tampoco veo la configuracion. He puesto el el programa las lineas de código:
setup_adc_ports(AN0);
setup_adc_ports(AN1);
pero tampoco es correcto. He referenciado a Vcc el led y cambiado la programacion:
if (BIT_TEST(PORTA,3)==0) bit_set ( PORTA, 5 );// encendemos el led
if (BIT_TEST(PORTA,3)==1) bit_clear( PORTA, 5 );// apagamos el led.
Adjunto el esquema con el led referenciado a Vcc.
Me gustaria saber una web donde se puedan configurar las entradas del PORTA como analogicas y digitales a la vez.
Gracias
/////////////////////////////////////////////////////////////
//
// PA-Programa de Aplicación
//
// Funciones: leer dos entradas analogicas RA0, RA1. Para voltimetro
// leer dos entradas digitales RA2, RA3. Para pulsadores
// leer una salida digital RA4. Para encender Led.
//
//
// El programa leera las dos entradas analogicas para leer los voltajes (RA0,RA1)
// al pulsar RA2 mostraremos en pantalla el mensaje "tecla 1"
// al pulsar RA3 encenderemos el led RA4
//
// asunto: PORTA.16F876a. dos entradas analogicas, tres digitales
//
/////////////////////////////////////////////////////////////////////////////////
#include <16F876.h>
#device adc=10
#FUSES XT,NOWDT
#FUSES
#use delay(clock=4000000)
#define use_portb_lcd TRUE
#include <LCD.C>
#include <math.h>
#BYTE TRISA = 0x85 //estos valores son exclusivos del puerto A
#BYTE PORTA = 0x05 //estos valores son exclusivos del puerto A
//#BYTE TRISB = 0X86 //estos valores son exclusivos del puerto B
//#BYTE PORTB = 0X06 //estos valores son exclusivos del puerto B
//#BYTE TRISC = 0X87 //estos valores son exclusivos del puerto C
//#BYTE PORTC = 0X07 //estos valores son exclusivos del puerto C
/////////////////////////////////////////////////////////////////
// DECLARAMOS LAS VARIABLES
/////////////////////////////////////////////////////////////////
float v; // variable para calcular el voltage del ADC
int8 lectura_adc;
//////////////////////////////////////////////////////////////////
void main()
{
bit_set (TRISA , 2); // A2 como entrada, para el pulsador
bit_set (TRISA , 3); // A3 como entrada, para el pulsador
bit_clear(TRISA , 4); // A4 como salida, para el led
//setup_adc_ports(RA0_RA1_ANALOG);
setup_adc_ports(AN0);
setup_adc_ports(AN1);
setup_adc(ADC_CLOCK_INTERNAL); //Fuente de reloj RC
lcd_init();
/////////////////////////////////////////////////////////////////////
while (1) //bucle infinito
{
// CONSULTAMOS EL VALOR DEL ADC
set_adc_channel(0); //Habilitación canal0
delay_us(20); //Retardo
lectura_adc = read_adc(); //Lectura canal0
// CALCULAMOS EL VOLTAJE A PARTIR DEL ADC
v=5.0*lectura_adc/1024.0; // leemos el voltage del ADC.
// VISUALIZAMOS EN PANTALLA
printf(lcd_putc, "\f" );//BORRAMOS LA PANTALLA
lcd_gotoxy(5,1);
printf(lcd_putc, "voltios");
lcd_gotoxy(3,2);
printf(lcd_putc, "\ %4ld V", v);
if (BIT_TEST(PORTA,2)==1) printf(lcd_putc, "/ftecla 1");
// ENCENDEMOS O APAGAMOS EL LED
if (BIT_TEST(PORTA,3)==0) bit_set ( PORTA, 5 );// encendemos el led
if (BIT_TEST(PORTA,3)==1) bit_clear( PORTA, 5 );// apagamos el led
delay_ms(100);// velocidad del programa
}
}