TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: mrk992 en 15 de Agosto de 2009, 18:40:34

Título: Ayuda LCD
Publicado por: mrk992 en 15 de Agosto de 2009, 18:40:34
Buenas, os vuelvo a pedir ayuda para que me reviséis un código y para saber porque no me funciona ne la realidad .
Os paso el circuito de la micropic Trainer  donde lo utilizo  y el codigo
Circuito del Micro pic trainer
(http://img512.imageshack.us/img512/2159/sinttulov.th.png) (http://img512.imageshack.us/i/sinttulov.png/)
El  codigo
#include <16F628A.h>
#use delay(clock=4000000)
#include <flex_lcd.c>

 void main()
{
#fuses XT,NOLVP,NOWDT
setup_oscillator(OSC_4MHZ);
set_tris_b(0x00000000); /*Defino el puerto B como salidas*/
set_tris_a(0x11111111);
lcd_init();
lcd_putc("HOLA SOY MARCOS\n " );
delay_ms(500);
lcd_putc("¿Que tal? ");

}
y en la libreria flex_lcd.c he cambiao los puertos de salida que es el puerto B y RS,RWyE con el puerto A de salida
Título: Re: Ayuda LCD
Publicado por: jhozate en 15 de Agosto de 2009, 19:39:53
que errores te da la compilacion? ademas  el numero que le pones al set_tris_a y b esta mal denotado...supongo que lo que quisiste fue ponerlo en binario, cuando quieres ponerle en binario desbes escribir antes el 0b y para escribirlo en hexadecimal debes escribir 0x. Entonces definiendo el un puerto como salida podria ser:
Código: CSS
  1. set_tris_b(0); //notacion decimal
  2. set_tris_b(0b00000000); // en binario
  3. set_tris_b(0x00);  // notacion hexadecimal


como entrada
Código: CSS
  1. set_tris_b(255); //en decimal
  2. set_tris_b(0xff); // en hex
  3. set_tris_b(0b00000000);
Título: Re: Ayuda LCD
Publicado por: Suky en 15 de Agosto de 2009, 19:55:35
En la libreria flex_lcd la configuración de pines debe ser así:

Código: C
  1. #define LCD_DB4 PIN_B4
  2. #define LCD_DB5 PIN_B5
  3. #define LCD_DB6 PIN_B6
  4. #define LCD_DB7 PIN_B7
  5.  
  6. #define LCD_RS PIN_A0
  7. #define LCD_RW PIN_A1
  8. #define LCD_E  PIN_A2

Estas configuraciones no las hagas, la librería se encarga, así que no tiene sentido:
Código: C
  1. set_tris_b(0x00000000); /*Defino el puerto B como salidas*/
  2. set_tris_a(0x11111111);

Luego en el hard, procura seleccionar solo el LCD, que no estén conectados los potenciometros, los leds, etc.

Saludos!
Título: Re: Ayuda LCD
Publicado por: mrk992 en 16 de Agosto de 2009, 01:28:22
ya pero he modificado la libreria flex_lcd y he puesto las salidas  como estan conectadas en el micropic traiener la RS,RW,E al puerto A y las demas al puerto B en vez del puerto D ya que le pic 16F628A no tiene puerto D voy a haber si lo intneto mañana por la mañana enga bye y gracias a todos
Título: Re: Ayuda LCD
Publicado por: pablo en 16 de Agosto de 2009, 02:04:12
Perdon si digo una burrada.
No hay que poner esto para usar el puerto a?

setup_comparator(NC_NC_NC_NC)
Título: Re: Ayuda LCD
Publicado por: mrk992 en 16 de Agosto de 2009, 08:49:32
eso creo que no era pra usar comparadores analógicos??
Título: Re: Ayuda LCD
Publicado por: Suky en 16 de Agosto de 2009, 09:53:49
Perdon si digo una burrada.
No hay que poner esto para usar el puerto a?

setup_comparator(NC_NC_NC_NC)
Es cierto, porque el bendito PIC los trae "activado" por defecto  :5] Hay que agregar es linea.

Saludos!
Título: Re: Ayuda LCD
Publicado por: mrk992 en 16 de Agosto de 2009, 10:40:57
no os entiendo  me lo podeis explicar??? tengo que incluir eso en el código??
Título: Re: Ayuda LCD
Publicado por: Suky en 16 de Agosto de 2009, 10:59:57
no os entiendo  me lo podeis explicar??? tengo que incluir eso en el código??

Se debe incluir en el main, y los fuses van al principio del proyecto, no me había dado cuenta que estaba dentro del main  :D Revisa los tutoriales y ejemplos que hay! Link (http://infopic-suky.blogspot.com/2009/04/lenguajes-de-programacion.html)

Código: C
  1. #include <16F628A.h>
  2.  
  3. #fuses INTRC,NOLVP,NOWDT,NOMCLR
  4. #use delay(clock=4000000)
  5. #include <flex_lcd.c>
  6.  
  7. void main(){
  8.    setup_oscillator(OSC_4MHZ);
  9.    setup_comparator(NC_NC_NC_NC)
  10.    lcd_init();
  11.    lcd_putc("HOLA SOY MARCOS\n " );
  12.    delay_ms(500);
  13.    lcd_putc("¿Que tal? ");
  14.  
  15. }

Si utilizas el oscilador interno del PIC es necesario la linea setup_oscillator(OSC_4MHZ);, sino no.

Saludos!
Título: Re: Ayuda LCD
Publicado por: mrk992 en 16 de Agosto de 2009, 15:38:21
gracias creo que el problema es de los fuses ya que en el proteus se los salta xDD gracias voya a probar
Título: Re: Ayuda LCD
Publicado por: Suky en 23 de Agosto de 2009, 21:36:22
Por lo visto no has logrado hacer andar el LCD:
yo no soy capaz de utilizar el LCD del micropic trainer y he utilizado la libreria LCD.h y la Flexlcd y no me funciona ya puse un post y no me dijisteis nada esera que os le pongo haber que me podeis decir http://www.todopic.com.ar/foros/index.php?topic=27211.0
graciass

Pero podías aclararlo acá!  :D :D

Coloca el ejemplo con las modificaciones indicadas haber si se detecta el problema.


Saludos!
Título: Re: Ayuda LCD
Publicado por: KALLITOS en 23 de Agosto de 2009, 21:46:36
Hola mrk992 en este hilo (http://www.todopic.com.ar/foros/index.php?topic=27141.0), se te mencionó lo referente a los comparadores existentes en el PIC16f628.
Amigo suky, muy rapido olvidas las cosas  :).

Saludos.
Título: Re: Ayuda LCD
Publicado por: Suky en 23 de Agosto de 2009, 21:52:37
Hola mrk992 en este hilo (http://www.todopic.com.ar/foros/index.php?topic=27141.0), se te mencionó lo referente a los comparadores existentes en el PIC16f628.
Amigo suky, muy rapido olvidas las cosas  :).

Saludos.

Es el mismo  :shock: Tantas cosas en la cabeza ya estoy :z)  :D :D :D

Saludos!
Título: Re: Ayuda LCD
Publicado por: mrk992 en 24 de Agosto de 2009, 08:33:10
seria el mismo circuito de arriba y el mismo código y todo y en el proteus me funciona perfectamente, pero............ en el micropic trainer........  no funciona , haber si podems hacerle funcionar. Es que toy empezando a  programa
Título: Re: Ayuda LCD
Publicado por: mrk992 en 24 de Agosto de 2009, 18:02:14
nadie sabe nada??????
Título: Re: Ayuda LCD
Publicado por: pajaro en 25 de Agosto de 2009, 16:40:10
Hola amigo
voy a intentar ayudarte, no se si lo conseguire.

1.- si te funciono en el simulador de proteus podria ser problema del hardware de placa,
 me esplico algo mal configurado, un jumper, o una configuración erronea, el simulador frente a realidad tiene diferencias.

2.- te recomendaria que miraras cuando le cargas el programa, el lcd se inicializa,... se queda en blanco(todo cuadros), o da el error ese de la linea.Un error tipico es tener el contraste muy bajo y no ves las letras pero en realidad si funciona (potenciometro de 10k).

3.- con un polimetro o con un zumbador y un cable iria probando que patas del chip tienen tension y cuales no.
    si las definiste como salida verificalo.

4.- verifica las conesiones del lcd y la libreria lcd, creo que tienes por ahi un jumper segun la foto, mira tus pines de control de la libreria y los  
   de  tu placa un solo pin te la puede estar jugando.


Un saludo.




Título: Re: Ayuda LCD
Publicado por: mrk992 en 25 de Agosto de 2009, 20:54:23
mañana voy a probar haber.......... si consiguo algo pero alomejor es algo de fuses, ya que el proteus se salta todos esop
Título: Re: Ayuda LCD
Publicado por: mrk992 en 26 de Agosto de 2009, 15:13:06
pos nada sigue todo igual en el lcd sale una linea de cuadraditos negros tenga el jumper abierto o cerrado  y el potenciometro le he subio y bajao y nada y tension tengo en las patas
Título: Re: Ayuda LCD
Publicado por: pajaro en 26 de Agosto de 2009, 17:07:54
Hola amigo

Los cuadritos negros indican que esta mal inicializado el lcd.
puedes tener cambiada la Rs por Rw o no tener conectada la rw cuando deberia estarlo.

Verifica las lineas de control, RS, RW ,E.

Tambien podria ser que tubieras definidas las lineas del bus de datos al reves, 1-2-3-4..
y en relidad son ....4-3-2-1.

Tengo por ahi un pos de posibles errores del lcd..

http://www.todopic.com.ar/foros/index.php?topic=23713.msg190606#msg190606


Un saludo.
Título: Re: Ayuda LCD
Publicado por: Suky en 26 de Agosto de 2009, 20:35:40
El código que utilizas es este no es cierto?
Código: C
  1. #include <16F628A.h>
  2.  
  3. #fuses INTRC,NOLVP,NOWDT,NOMCLR
  4. #use delay(clock=4000000)
  5. #include <flex_lcd.c>
  6.  
  7. void main(){
  8.    setup_oscillator(OSC_4MHZ);
  9.    setup_comparator(NC_NC_NC_NC)
  10.    lcd_init();
  11.    lcd_putc("HOLA SOY MARCOS\n " );
  12.    delay_ms(500);
  13.    lcd_putc("¿Que tal? ");
  14.  
  15. }

Agrega setup_vref(FALSE); por las dudas:


Código: C
  1. void main(){
  2.    setup_oscillator(OSC_4MHZ);
  3.    setup_comparator(NC_NC_NC_NC);
  4.    setup_vref(FALSE);
  5.    lcd_init();
  6.    lcd_putc("HOLA SOY MARCOS\n " );
  7.    delay_ms(500);
  8.    lcd_putc("¿Que tal? ");
  9.  
  10. }

Y la librería está configurada así:

Código: C
  1. #define LCD_DB4 PIN_B4
  2. #define LCD_DB5 PIN_B5
  3. #define LCD_DB6 PIN_B6
  4. #define LCD_DB7 PIN_B7
  5.  
  6. #define LCD_RS PIN_A0
  7. #define LCD_RW PIN_A1
  8. #define LCD_E  PIN_A2

Si es así en el código no veo el problema, tiene que estar en el hard. Saca todos los jumper, que solo quede conectado el LCD.


Saludos!
Título: Re: Ayuda LCD
Publicado por: mrk992 en 27 de Agosto de 2009, 08:34:42
okoko  si utilizo ese codigo. peor la libreria.......... eso de del puerto d? el 16F628a no llega a tener puerto D. Y el comando este para que sirve?. A y los cuadraditos negros estan simpre encendido esten abierto o cerrado el jumper nose.....
Título: Re: Ayuda LCD
Publicado por: Suky en 27 de Agosto de 2009, 10:46:28
okoko  si utilizo ese codigo. peor la libreria.......... eso de del puerto d? el 16F628a no llega a tener puerto D. Y el comando este para que sirve?. A y los cuadraditos negros estan simpre encendido esten abierto o cerrado el jumper nose.....

 :shock: Me confundí (http://img254.imageshack.us/img254/7936/auch.gif) Debe ser en el puerto B:

Código: C
  1. #define LCD_DB4 PIN_B4
  2. #define LCD_DB5 PIN_B5
  3. #define LCD_DB6 PIN_B6
  4. #define LCD_DB7 PIN_B7
  5.  
  6. #define LCD_RS PIN_A0
  7. #define LCD_RW PIN_A1
  8. #define LCD_E  PIN_A2

Esto tenes que reemplazarlo en la librería para que utilice los pines correctos, sino no funciona jamas  :mrgreen:

Saludos!
Título: Re: Ayuda LCD
Publicado por: mrk992 en 28 de Agosto de 2009, 09:47:07
creo que ya lo cambie pero de todas formas lo voy a confirmar
Título: Re: Ayuda LCD
Publicado por: mrk992 en 29 de Agosto de 2009, 04:00:55
Código: [Seleccionar]
// flex_lcd.c

#define LCD_DB4   PIN_B4
#define LCD_DB5   PIN_B5
#define LCD_DB6   PIN_B6
#define LCD_DB7   PIN_B7

#define LCD_RS    PIN_A0
#define LCD_RW    PIN_A1
#define LCD_E     PIN_A2

// If you only want a 6-pin interface to your LCD, then
// connect the R/W pin on the LCD to ground, and comment
// out the following line.

#define USE_LCD_RW 0

 no sera por esa ultima linea??? ya que no esta conectado directamente a tierra , si no a una potenciometro. Ayudarme please  ;-)
Título: Re: Ayuda LCD
Publicado por: Suky en 29 de Agosto de 2009, 09:44:11
Como un potenciometro??? No, debe estar directamente al PIC o comenta esta linea así no utiliza este pin.