Autor Tema: LCD con PIC 16F876  (Leído 3938 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado efrenpal

  • PIC10
  • *
  • Mensajes: 9
LCD con PIC 16F876
« en: 12 de Octubre de 2004, 10:23:00 »

Hola, perdon a todos.

He intentado borrarlo pero no me deja. Paso la pregunta al subforo de C.

Gracias

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: LCD con PIC 16F876
« Respuesta #1 en: 13 de Octubre de 2004, 03:41:00 »
Hola paisano.

Lo que comentas es perfectamente posible... realizar una conversion A/D y visualizar el resultado mediante un lcd. También es posible utilizar los pines que comentas para controlar el lcd y mientras esten bien configurados debería funcionar perfectamente, así que no creo que sea ese tu problema.

No dices que compilador usas, pero tiene toda la pinta de ser CCS, en este caso, asegurate de que a la hora de compilar, en el combo de arriba, tienes seleccionado "microchip 14 bit" que sería lo correspondiente al pic que estas utilizando (esto no es necesario si tienes una versión moderna del compilador, con una versión moderna, se hace la selección automaticamente a la hora de compilar).También puede que sea por la línea #device 16f876.h que te falte o que no esté bien situada, procura poner la expresión en la primera línea del programa.

Si no consigues solucionar el problema, te invito a que pegues el código para que podamos ayudarte a resolver tu problema (a veces es bastante difícil solucionar los problemas solamente viendo los errores que genera el compilador), en el hilo de C para microcontroladores en el que existen verdaderos "cracks" que pueden ayudarte con tu problema, pega el código por aquí en un nuevo tema que ya verás como lo solucionas.

También por si te sirve de ayuda, en mi intento de página web, tengo hechos algunos ejemplinos con el compilador ccs, quizás te puedan servir como base para lo que estés realizando, recuerdo que hice algo con A/D y quizá te pueda servir.

Un saludo.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: LCD con PIC 16F876
« Respuesta #2 en: 13 de Octubre de 2004, 04:09:00 »
Pero hombre, pero hombre ¿porqué repites el mensaje? ... y además con título de tema diferente.

Yo contestando por una parte y oshow contestando por otra.

Como te comenta oshow las preguntas de C, hazlas en el subforo de C. Hagamos las cosas ordenadas y será bueno para todo el mundo, tanto para los que leen como para los que escriben.

Un saludo

Desconectado Elena2000

  • PIC24F
  • *****
  • Mensajes: 722
RE: LCD con PIC 16F876
« Respuesta #3 en: 13 de Octubre de 2004, 05:15:00 »
Si, desde luego esto es un cacao. Así no hay forma de centrarse en los temas si resulta que están repetidos y hay respuestas en dos sitio distintos..
A ver, señor invisible (no se entiende por qué el nick tuyo que no aparece en los mensajes...); cuando formules una pregunta la formulas una vez, anda, y procura que esté clasificada en el subforo adecuado. Vale, un error lo tiene cualquiera y a todos nos ha pasado que le hemos dado al botón dos veces y se han publicado dos mensajes iguales... pero todos estos errores se pueden reparar! nada más tienes que editar uno de los mensajes que están repes y lo borras, y así ya todas las respuestas van a un único hilo, vale?

Bueeeeeno, no te enfades y porfa, que lo mejor para todos, como dice Pocher, es que hagamos las cosas ordenadas.

Desconectado efrenpal

  • PIC10
  • *
  • Mensajes: 9
RE: LCD con PIC 16F876
« Respuesta #4 en: 14 de Octubre de 2004, 07:13:00 »

Lo siento mucho, y ante todo pido las mas sinceras disculpas.

La verdad es que lo escribi 2 veces porque pense que no lo había enviado (no se, pero no lo ví, deben de ser los efectos de la gripe...
El caso es que estuve en duda si ponerlo en el subforo de C, pero como en este subforo también vi cosas de C pues por eso me dicidí, ya que creí que lo mejor era no clasificar mi pregunta por el lenguaje de progamación, sino por la duda que planteaba en cuanto a la conexion con la LCD , ya que creí que el error no estaba en el programa.

En cuanto a lo del nick ( va por Elena2000) tampoco lo entiendo yo, porque en usuario conectado siempre me sale. Soy efrenpal y mi pretensión nunca ha sido estar en el anonimato.

Desconectado Elena2000

  • PIC24F
  • *****
  • Mensajes: 722
RE: LCD con PIC 16F876
« Respuesta #5 en: 14 de Octubre de 2004, 08:00:00 »
Hola efrenpal,

No eres el único al que no le aparece visible el nick. Parecía que sólo ocurría con los que eran muy largos, pero por lo visto no. Ultimamente está ocurriendo con muchos foristas.
Lo que sí está claro es que no es culpa tuya, sino de miarroba, que se le cuela un error por algún lado. No te preocupes que ya sabía de sobra que tu intención no era "despirtarnos" con un nick misterioso, para nada. Te llamé señor invisible para quitarle hierro al asunto,  nada más una bromilla de las mías...

En cuanto a tu doble pregunta, pues ya está, no hace falta disculparse tanto. Lo que sí debes hacer es cuidar esa gripe, eh, que luego pasa lo que pasa...

Anda, cuéntanos, ¿cómo va tu LCD? ¿se "acopla".... o no se acopla al PIC?

Desconectado efrenpal

  • PIC10
  • *
  • Mensajes: 9
RE: LCD con PIC 16F876
« Respuesta #6 en: 14 de Octubre de 2004, 08:45:00 »
Bueno, como el tema ya lo expuse en este subforo (ya pedi disculpas por ello), voy a continuar con el en su lugar de origen ( no quiero liar mas la madeja).

En cuanto al compilador que utilizo es efectivamente de CCS.

Adjunto 2 ficheros,  que son 2 programas que hacen lo mismo, uno con una comunicación serie asíncrona y el otro con una LCD. El de la comunicación serie asincrona funciona perfectamente (rpm) y en el de la LCD (rpmlcd) no compila.  La conexion que realizo con la LCD es la que trae la PICDEM-2 demo board.

Bueno, como no hay suficiente espacio...los pego. Este es el rpmlcd:

#include "16F876.h"         
#device PIC16f876 ADC=10

#use delay (clock=4000000)      
#include <LCD.c>
#fuses HS,NOWDT,PUT,BROWNOUT,NOLVP,NOPROTECT,NOCPD,NOWRT

#byte PORTA=0x05
#byte PORTB=0X06
#byte PORTC=0x07


static int cont=0;
long int pto=0,pulse=0;

main()   
         
{


set_tris_A(0b001010);                                                            
set_tris_B(0b11000000);

enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);

setup_adc_ports(A_ANALOG_RA3_REF);
setup_adc(ADC_CLOCK_INTERNAL);
SET_ADC_CHANNEL(1);

lcd_init();                                
lcd_gotoxy(1,1);                            
lcd_putc("r.p.m.:");  



INICIO:

portb=(0b00000001);
pulse=0;cont=0;pto=0;

                   
set_timer1(3036);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);


while(cont<10)                            
    {
    output_low(PIN_B1);
    while((pto<160)&&(cont<10))
    {delay_us(5);
     pto=read_adc();
        }
    printf("
pto=%ld",pto);
   
     output_high(PIN_B1);
   
     while((pto>=155)&&(cont<10))
    {
     delay_us(5);
     pto=read_adc();
    }
    pulse++;
   }

pulse--;

pulse=pulse*12;

lcd_gotoxy(1,2);                          
printf(lcd_putc,"%ld",pulse);

setup_timer_1(T1_DISABLED);


goto inicio;

}



#INT_TIMER1

interrupcion_timer1()

{

setup_timer_1(T1_DISABLED);
cont++;

set_timer1(3036);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);

}

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: LCD con PIC 16F876
« Respuesta #7 en: 14 de Octubre de 2004, 13:31:00 »
Al compilar aparecen un montón de errores. Debes de ir resolviéndolos uno a uno. Mira el fichero .err que crea CCS

En este fichero,  te aparecerá el archivo que contiene el error, la línea y una breve descripción del error.

Un saludo y ánimo.

PD. El primer error que te aparece, lo solucionarás así:

#include "16F876.h"
#device ADC=10

Sigue tú con los demás.

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: LCD con PIC 16F876
« Respuesta #8 en: 14 de Octubre de 2004, 13:55:00 »
Hola paisano, que tal...

Como bien te dicen Pocher y Elena lo ideal sería que pasases por el foro de C, allí estaría en el lugar correcto el mensaje, pero bueno no pasa nada, todos nos equivocamos y más cuando recién ingresamos en un foro.

En cuanto al programa, como bien te indica Pocher, cambiando esas lineas y algún que otro errorcito de por ahí, el programa compila...ahora, eso no quiere decir que esté bien... sólo he mirado los errores para poder compilarlo, no me he parado a buscarle un sentido al código, pruebalo y nos comentas vale?, y si es posible mejor en el hilo de C.

Codigo:

#include "16F876.h"
#device ADC=10

#use delay (clock=4000000)
#include <LCD.c>
#fuses HS,NOWDT,PUT,BROWNOUT,NOLVP,NOPROTECT,NOCPD,NOWRT

#byte PORTA=0x05
#byte PORTB=0X06
#byte PORTC=0x07


static int cont=0;
long int pto=0,pulse=0;

main()
{
   set_tris_A(0b001010);
   set_tris_B(0b11000000);

   enable_interrupts(INT_TIMER1);
   enable_interrupts(GLOBAL);

   setup_adc_ports(A_ANALOG_RA3_REF);
   setup_adc(ADC_CLOCK_INTERNAL);
   SET_ADC_CHANNEL(1);

   lcd_init();
   lcd_gotoxy(1,1);
   lcd_putc("r.p.m.:");



while(TRUE)
{

      portb=(0b00000001);
      pulse=0;cont=0;pto=0;


      set_timer1(3036);
      setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);


   while(cont<10)
   {
      output_low(PIN_B1);
      while((pto<160)&&(cont<10))
         {
            delay_us(5);
            pto=read_adc();
         }

   printf(lcd_putc,"pto=%ld",pto);

   output_high(PIN_B1);

      while((pto>=155)&&(cont<10))
         {
            delay_us(5);
            pto=read_adc();
         }

         pulse++;
   }

   pulse--;

   pulse=pulse*12;

   lcd_gotoxy(1,2);
   printf(lcd_putc,"%ld",pulse);

   setup_timer_1(T1_DISABLED);


}

}



#INT_TIMER1
interrupcion_timer1()
{

   setup_timer_1(T1_DISABLED);
   cont++;

   set_timer1(3036);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);

}




Entre los errores encontré dos bastante "graves" o por lo menos que llamasen la atencion (tampoco son tan graves), el primero fue no definir el stream de salida, si pones un #include<lcd.c> para incluir el driver del lcd, al escribir la orden printf debes decirle por que dispositivo vas a sacarlo "lcd_putc", y no dejarlo en blanco como has hecho que se suele utilizar para imprimir por el puerto serie. Otro fallo fué el poner el goto, no es que no funcione, pero no es una buena técnica de programación, mejor poner el while....


Ya nos contarás amigo, a ver si te funciona, de momento ya lo puedes compilar, ahora a probarlo......

Un saludo.

Desconectado efrenpal

  • PIC10
  • *
  • Mensajes: 9
RE: LCD con PIC 16F876
« Respuesta #9 en: 14 de Octubre de 2004, 17:59:00 »

Pues estoy muy bien paisano, y tu?

Os voy a hacer caso en cuanto al foro. De todas formas hay unas cosillas que quería deciros.

Yo no tengo problema con el programa, ya que el mismo, pero configurado para visualizar en una pantalla hyperterminal los datos (en vez de la LCD), compila y funciona perfectamente, osea, no me da ningun error hasta que lo cambio y le pongo la directiva #include <LCD.c> y lo demás para visualizar por la LCD.

En cuanto a la directiva de  la conversion A/D (#device PIC16F876 ADC=10) siempre lo he puesto asi y siempre me ha fincionado bien, ademas en el manual de referencia de Custom Computer lo pone asi tambien. Osea, os quiero decir que el circuito esta funcionando perfectamente, hace lo que pretendo hasta ahora, ya que voy pasito a pasito, lo unico que queria era visualizar los datos en una LCD ya que posteriormente debo realizar medicciones en lugares remotos y no tengo la suerte de poseer un portatil para visualizar los datos.

Con lo de lcd_putc lo he puesto en un printf y se me paso en otro (ya que habia modificado el prog. que tenía para imprimir por el puerto serie.

Lo que no entendi muy bien fue lo de los "Goto" . Es que en programas largos me resulta mas sencillo a veces poner etiquetas y goto para hacer los saltos. Supongo que será una mala manía.

Bueno, pues pongo la pregunta en el otro foro, de todas formas os agradezco vuestro interés por ayudarme.

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: LCD con PIC 16F876
« Respuesta #10 en: 14 de Octubre de 2004, 19:41:00 »
Vaya... te acabo de contestar en otro subforo... nos estamos liando un poco...

A ver, MGLSOFT o Todopic... por que no mueven esto al subforo de C a ver si nos aclaramos un poco??

La cosa no es que no esté bien colocado... Está aquí y listo...
La cosa es no postear el mismo problema en distintos subforos.
Pero si se hace... pues se rectifica, se borran todos menos uno. Y ya está.
Pero es que estás volviendo a hacer lo mismo... Aunque lo hayas hecho con todo el buen corazón del mundo, colocandolo en el de C.
Pero avisa, hombre...

Saludos!!
Saludos desde Huelva (ESPAÑA)