Hola, en primer lugar pedir perdón por iniciar otro hilo sobre lcd, lo he estado manejando bien hasta ahora, que con el pic16f684 no hya forma de hacerlo funcionar:
Uso ccs 4.104; en la entrada A0 tengo un divisor resitivo con una LDR a masa y en el otro lado un potencimetro a VDD, y del punto de union entre ambos un cable a la patilla AN0, si al configuro la forma en que la tengo no necesito ni Vref+ ni VSS, las toma internas,no? el caso es que creo que la ADC la hace bien, pero intenté poner un lcd para mostrar el dato de la conversion y no hay forma de conseguirlo, tengo ls RW del lcd a masa, las conexiones recomprobadas pero no consigo que me saque el valor por pantalla, ni siquiera llega a mostrar el "inicio.." del principio...
#include <16f684.h>
#device adc=10
#FUSES NOWDT,NOMCLR,HS
#use delay (clock=8000000)
//#define USE_LCD_RW 0
#define LCD_DB4 PIN_C1
#define LCD_DB5 PIN_C2
#define LCD_DB6 PIN_C3
#define LCD_DB7 PIN_C4
#define LCD_RS PIN_C0
#define LCD_RW PIN_A4
#define LCD_E PIN_A5
#INCLUDE "flex_lcd.c"
int16 valor,pwm;
void main()
{
setup_timer_2(T2_div_BY_1,224,1);
setup_ccp1(ccp_PWM);
lcd_init();
delay_ms(100);
lcd_putc("Inicio..");
delay_ms(2000);
lcd_putc("\f");
setup_adc(adc_clock_internal);
setup_adc_ports(sAN0|VSS_VDD);
set_adc_channel(0);
while(true) {
valor=read_adc();
delay_us(30);
if (valor<11)
pwm=0;
if (valor> 12 && valor <100)
pwm=400;
if (valor>101&&valor<200)
pwm=500;
if (valor>201&&valor<300)
pwm=700;
if (valor>401&&valor<500)
pwm=600;
if (valor> 501 && valor <600)
pwm=0;
if (valor>601&&valor<700)
pwm=700;
if (valor>701&&valor<800)
pwm=8000;
if (valor>4801&&valor<900)
pwm=900;
if (valor>901)
pwm=1000;
set_pwm1_duty(pwm);
PRINTF(LCD_PUTC,"%Ld",valor);
delay_ms(200);
}
}
Me gustaria añadir que llevo ya muchas horas con esto, para avalar nada mas añadir que en españa son las 4 de la madrugada....
Muchas gracias a todos y un saludo....