TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: culebrasx en 27 de Marzo de 2010, 00:16:52
-
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.... :5] :5]
Muchas gracias a todos y un saludo....
-
HOLA amigo lo primero que veo ahi es que el tipo de oscilador que usas es HS que usa los pines A4 Y A5, y tambien estos mismos pines estas utilizando para el LCD, tal vez sea uno de los problemas
se podria resolver usando el oscilador interno.
saludos
-
Hola culebrasx, revisa este ejemplo a ver si te sirve de algo.
saludos.
-
No te funciona porque defines A5
y A5 corresponde al MCLR.
Saludos!
-
He cambiado el pin_A5,
He definido NOMCLR, por lo que creo que esa patilla la podria utilizar como entrada salida,no? de todas formas la he cambiado.
SI defino HS, hace referencia al oscilador interno de alta velocidad,8MHz, por lo que tambien entiendo que esas patillas las podria utiliar como entrada salida,no?
NADA, creo que me habia cargado la pantalla, he probado con otra y funciona todo ok...
Como no se veia muy bien se subi un poco el voltaje (6V) y no se si sera eso...
Ahora tengo otro problemas con conversion de tipos..pero eso no corresponde con el titulo del hilo...muchas gracias a todos... ;-)
-
Hola culebrasx, no has definido el oscilador interno , el HS hace referencia a un oscilador externo superior a 4Mhz.
en ese micro seria algo asi como:
#FUSES NOWDT,NOMCLR,INTRC //