TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: BEXTIXTOX en 08 de Junio de 2010, 23:51:44
-
HOLA tengo un problema con ccs
el problemas es que ago un programa muy simple como mandar "HOLA MUNDO" a una lcd de 40x2
con un PIC 16f877
si lo ago con CCS en proteus me funciona bien pero en la targeta REAL no mi problema es JUSTO cuando doy la palabra
" LCD_INIT() " pues e puesto a destellar unos led en el puerto B antes de inbocar LCD_INIT() y destellan bien.
y despues de la instruccion LCD_INIT() ya no destellan.
Ahora ago el programa equivalente pero en MIKROC y funciona correctamente en los dos PROTEUS y tarjeta REAL.
NOTA:
los led los puse para saber que esta vivo el pic en la tarjeta real y
de pendiendo la forma de destellar se en que punto se queda.
otra las librerias que uso una es la que trae CCS por DEFAULT y la otra ya la modifoque de acuerdo a articulos que
encontre por la red
la verdad me comentan que me olvide de CCS y siga con MIKROC pero NOOOOO!!!!!!!
el ARTE de esto es saber por que me esta dando problemas y por que
aqui pongo el codigo en CCS
#include <16f877.h> //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP //ordenes para el programador
#use delay (clock=4000000) //Fosc=4Mhz
#define use_portD_lcd TRUE //definir portd lcd
#include <lcd.c> //libreria manejo lcd
#use standard_io(c) //
#use standard_io(d) //
#use standard_io(b)
void main(void)
{
DELAY_MS(500); // UN RETARO DE MEDIO SEGUNO
output_b(0x0f); // 00001111
DELAY_MS(500); // UN RETARO DE MEDIO SEGUNO
output_b(0xf0); // 11110000
DELAY_MS(500); // UN RETARO DE MEDIO SEGUNO
output_b(0x0f); // 00001111
DELAY_MS(500); // UN RETARO DE MEDIO SEGUNO
output_b(0xf0); // 11110000
DELAY_MS(500); // UN RETARO DE MEDIO SEGUNO
lcd_init(); // JUSTO AQUI SE DETIENE
DELAY_MS(500); // UN RETARO DE MEDIO SEGUNO
output_b(0xaa); // 10101010
DELAY_MS(500); // UN RETARO DE MEDIO SEGUNO
output_b(0x55); // 01010101
DELAY_MS(500); // UN RETARO DE MEDIO SEGUNO
output_b(0xaa); // 10101010
DELAY_MS(500); // UN RETARO DE MEDIO SEGUNO
output_b(0x55); // 01010101
DELAY_MS(500); // UN RETARO DE MEDIO SEGUNO
printf(lcd_putc, " HOLA MUNDO "); //MENSAJE DE BIEN BENIDA
}
alguien me puede ayudar veo ilogico mi problema pero es REAL tengo ese problema...
saludos...
-
Podras explicar como conectas el display al PIC.??
Que pines utilizas y a donde los conectas??
CCS utiliza el pin de RW para leer o escribir en display, cosa que no muchos utilizan.
Si no lo conectas la libreria se queda buscando la lectura del bit de instruccion cumplida y no manda mas el proximo comando.
Por eso es tan importante... :mrgreen:
-
estoy trabajando en modo 4 bit
en el puerto d
D2 ------ RS
D3 ------ ENABLE
D4 ------ DATO 4
D5 ------ DATO 5
D6 ------ DATO 6
D7 ------ DATO 7
RW lo tengo a tierra
subo el proyecto completo diagrama y programa
Ahora quisiera QUE ustedes corrienran el programa para confirmar mi problema
-
AQUI VAN LAS DOS LIBRERIAS PARA LA LCD
UNA ES LA "LCD_MODIFICADA" ES LA QUE ALTERE UN POCO
Y LA OTRA PUES ES LA ORIGINAL "LCD"
A TAMBIEN INTENTE PONIENDO A GIE (INTCON) EN CERO
Y LOS CONVERTIDORES COMO DIGITALES
-
LISTO!!!! ME RESPONDI YO SOLO
ACEPTO QUE ME PASO UN ERROR DE PRIMERO JEJEJEJE...
YA PUDE VISUALIZAR EN LA LCD
DE CUALQUIER FORMA AGRADESCO LA ATENCION PRESTADA A MGLSOFT QUE ME ATENDIO
MI PROBLEMA
QUE ME UBIERA FUNCIONADO CON CUALQUIERA DE MIS LIBRERIAS SI SOLO UBIERA CONECTADO RW AL PIC Y NO MANDANDOLA A TIERRA COMO LA TENIA
MI CONCLUCION
ES QUE ESTO ES VALIDO PARA MIKROC, MICROBASIC Y MPLAB QUE SON LOS QUE HE COMPROBADO ASTA EL MOMENTO
NO DUDO QUE CON CCS SE PUEDA TAMBIEN PERO MI SALIDA RAPIDA FUE CONECTAR "RW" AL PIC
EN RESUMEN CONECTE
D1 ------ RW
D2 ------ RS
D3 ------ ENABLE
D4 ------ DATO 4
D5 ------ DATO 5
D6 ------ DATO 6
D7 ------ DATO 7
USANDO LA LIBRERIA QUE SUBI ANTERIORMENTE LA "LCD_MODIFICADA"
Y
-
Casi todos los compiladores tiene librerias para usar el LCD sin hacer uso de la linea RW.
Usarla es una complicacion adicional, pero es lo indicado para hacer una aplicacion comercial que siempre funcione, sin importar la marca y modelo del display LCD que utilizes y la temperatur del ambiente donde lo hagas.
Esa linea lo que hace es cambiar el modo de uso entre lectura o escritura del LCD.
Aqui (http://www.ucontrol.com.ar/wiki/index.php?title=Usando_LCDs) hay una explicacion acerca de la importancia de utilizar esa linea:
Sin embargo, los fabricantes de displays LCD aconsejan la utilización de la línea R/W conectada al controlador, cada vez que se escribe sobre el display, antes de enviar un nuevo comando, se pasan las líneas de datos a entradas y se lee el estado del BIT 7 del byte entregado por el display, de este modo sabremos cuando el display esta listo para recibir un nuevo comando. Si bien parece una tontería, en aplicaciones complejas, donde los tiempos valen oro, es muy importante no desperdiciarlo, por lo tanto utilizando la línea R/W se puede optimizar mucho el aprovechamiento de los mismos.
Imaginen además la ventaja de adaptarse sin problemas a distintas marcas y modelos de displays, funcionando a distintas condiciones de temperaturas y humedades, sin cambiar una sola línea de código.