Autor Tema: 16f873 y lcd  (Leído 4346 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado dkhiri

  • PIC10
  • *
  • Mensajes: 12
16f873 y lcd
« en: 01 de Abril de 2006, 10:27:00 »
Buenas a todos. Hace unos dias que estoy con un proyecto de mover 2 motores paso a paso y controlar un lcd. Primero hice los motores en un 16f628 y ningun problema. Ahora, para añadirle en lcd,he cambiado a un 16f873A. Segun la simulacion de proteus, todo esta correcto pero estoy haciendo las pruebas en placa y ni si quiera me enciende un led que tengo cuando se enciende todo. Haber si alguien puede ayudarme un poco.
Gracias de antemano.

#include <16F873A.h>

#device adc=8

#FUSES NOWDT, XT,  NOPROTECT,NOLVP,NODEBUG, BROWNOUT,NOCPD, NOWRT,NOPUT
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#use fixed_io(A_OUTPUTS=PIN_A0,PIN_A1,PIN_A2, PIN_A3)
#use fixed_io(C_OUTPUTS=PIN_C0,PIN_C1,PIN_C2,PIN_C3,PIN_C5)
#include <LCD.C>
#include <stdlib.h>

unsigned int leche()
{
   if(!input(PIN_C4))
   {
      output_low(PIN_A0);
      output_low(PIN_A1);
      output_low(PIN_A2);
      output_low(PIN_A3);
      output_low(PIN_C0);
      output_low(PIN_C1);
      output_low(PIN_C2);
      output_low(PIN_C3);
      lcd_putc("
"Giño;
      lcd_putc(" STOP  "Giño;
      return(0);
   }
   else
   return(1);
}


void main()
{
   unsigned char opcion[3], a[4];
   unsigned int i,j, velocidad=150;
   port_b_pullups(TRUE);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   lcd_init();
   lcd_putc("Empezamos"Giño;
   output_high(PIN_C5);
   while(TRUE)
   {
    if ( kbhit () )
     {
      j=1;
      lcd_putc("f"Giño;
      gets(opcion);
      if (opcion[1]=="")
         opcion[1]=1;
      if (opcion[0]=="V")
         velocidad=opcion[1];
      putc(opcion[0]);
      switch (opcion[0])    //adelante
      {
         case ("a"):
            lcd_gotoxy(1,2);
            lcd_putc("Avanza"Giño;
            lcd_gotoxy(8,2);
            if (opcion[1]==1)
                lcd_putc("1 paso"Giño;
            else
            {

               itoa(opcion[1],10,a);
               for(i=0; i<3; i++)
                   lcd_putc(a);
              lcd_putc(" pasos"Giño;
            }
         for(i=0; i<opcion[1]; i++)
         {
            j=leche();
            if(j==1)
            {
               output_low(PIN_A0);
               output_low(PIN_C0);
               output_high(PIN_A2);
               output_high(PIN_C2);
               delay_ms(velocidad);
               output_low(PIN_A2);
               output_high(PIN_A1);
               output_low(PIN_C2);
               output_high(PIN_C1);
               delay_ms(velocidad);
               output_low(PIN_A1);
               output_high(PIN_A3);
               output_low(PIN_C1);
               output_high(PIN_C3);
               delay_ms(velocidad);
               output_low(PIN_A3);
               output_high(PIN_A0);
               output_low(PIN_C3);
               output_high(PIN_C0);
               delay_ms(velocidad);
            }
            else
               i=opcion;
         }
         break;

      case ("b")://atras
            lcd_gotoxy(1,2);
            lcd_putc("Atras "Giño;
            lcd_gotoxy(7,2);
            if (opcion[1]==1)
                lcd_putc("1 paso "Giño;
            else
            {
               itoa(opcion[1],10,a);
               for(i=0; i<3; i++)
                   lcd_putc(a);
               lcd_putc(" pasos"Giño;
            }
         for(i=0; i<opcion[1]; i++)
         {
         j=leche();
         if (j==1)
         {
         output_low(PIN_A1);
         output_high(PIN_A2);
         output_low(PIN_C1);
         output_high(PIN_C2);
         delay_ms(velocidad);
         output_low(PIN_A2);
         output_high(PIN_A0);
         output_low(PIN_C2);
         output_high(PIN_C0);
         delay_ms(velocidad);
         output_low(PIN_A0);
         output_high(PIN_A3);
         output_low(PIN_C0);
         output_high(PIN_C3);
         delay_ms(velocidad);
         output_low(PIN_A3);
         output_high(PIN_A1);
         output_low(PIN_C3);
         output_high(PIN_C1);
         delay_ms(velocidad);
         }
         else
         i=opcion;
         }
         break;
         case ("c")://derecha
            lcd_gotoxy(1,2);
            lcd_putc("Derecha"Giño;
            lcd_gotoxy(9,2);
            if (opcion[1]==1)
                lcd_putc("1 paso"Giño;
            else
            {
               itoa(opcion[1],10,a);
               for(i=0; i<3; i++)
                   lcd_putc(a);
               lcd_putc(" pasos"Giño;
            }
         for(i=0; i<opcion[1]; i++)
         {
            j=leche();
            if (j==1)
            {
            output_low(PIN_A0);
            output_high(PIN_A2);
            output_low(PIN_C1);
            output_high(PIN_C2);
            delay_ms(velocidad);
            output_low(PIN_A2);
            output_high(PIN_A1);
            output_low(PIN_C2);
            output_high(PIN_C0);
            delay_ms(velocidad);
            output_low(PIN_A1);
            output_high(PIN_A3);
            output_low(PIN_C0);
            output_high(PIN_C3);
            delay_ms(velocidad);
            output_low(PIN_A3);
            output_high(PIN_A0);
            output_low(PIN_C3);
            output_high(PIN_C1);
            delay_ms(velocidad);
            }
            else
            i=opcion;
         }
         break;
         case ("d")://izquierda
            lcd_gotoxy(1,2);
            lcd_putc("Izquierda"Giño;
            lcd_gotoxy(11,2);
            if (opcion[1]==1)
                lcd_putc("1 paso"Giño;
            else
            {
               itoa(opcion[1],10,a);
               for(i=0; i<3; i++)
                   lcd_putc(a);
               lcd_putc("pasos"Giño;
            }
         for(i=0; i<opcion[1]; i++)
         {
            j=leche();
            if (j==1)
            {
            output_low(PIN_A1);
            output_high(PIN_A2);
            output_low(PIN_C0);
            output_high(PIN_C2);
            delay_ms(velocidad);
            output_low(PIN_A2);
            output_high(PIN_A0);
            output_low(PIN_C2);
            output_high(PIN_C1);
            delay_ms(velocidad);
            output_low(PIN_A0);
            output_high(PIN_A3);
            output_low(PIN_C1);
            output_high(PIN_C3);
            delay_ms(velocidad);
            output_low(PIN_A3);
            output_high(PIN_A1);
            output_low(PIN_C3);
            output_high(PIN_C0);
            delay_ms(velocidad);
            }
            else
            i=opcion[1];
         }
         break;
      }
     }

}
}

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: 16f873 y lcd
« Respuesta #1 en: 01 de Abril de 2006, 16:58:00 »
Tienes el oscilador configurado como XT, e sto es para cristales 4Mhz o inferiores.

Si usas un cristal de mayor frecuencia usa HS.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado dkhiri

  • PIC10
  • *
  • Mensajes: 12
RE: 16f873 y lcd
« Respuesta #2 en: 02 de Abril de 2006, 05:34:00 »
Gracias maunix, ahi me he colado Avergonzado pero de todos modos sigue igual. Al principio pongo a nivel alto C5 pero no lo hace, pasa de mi, y del lcd ni hablemos. Quitando ese error, todo lo demas estaria bien no? Es que soy nuevo en este mundilloVacilando

Muchas gracias

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: 16f873 y lcd
« Respuesta #3 en: 02 de Abril de 2006, 05:37:00 »
Puedes poner un esquema o detallar como conectaste el LCD?
Si juegas contra el mejor, pierdes como los demás.

Desconectado dkhiri

  • PIC10
  • *
  • Mensajes: 12
RE: 16f873 y lcd
« Respuesta #4 en: 02 de Abril de 2006, 08:11:00 »
He intentado adjuntar el archivo pero no me deja. Las conexiones son:
RB0= enable
RB1= RS
RB2=R/W
RB4 a RB7 datos

Las salidas las testeo con el tester y a veces hay tension y a veces no. No lo entiendo.Enfurruñado

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: 16f873 y lcd
« Respuesta #5 en: 02 de Abril de 2006, 08:22:00 »
Pues no veo en tu programa la linea:

Codigo:
#define use_portb_lcd


Verificame si falta Flash
Si juegas contra el mejor, pierdes como los demás.

Desconectado dkhiri

  • PIC10
  • *
  • Mensajes: 12
RE: 16f873 y lcd
« Respuesta #6 en: 02 de Abril de 2006, 09:32:00 »
La tengo la linea. Cuando activas la lcd.c hay un comentario que te dice que si controlas el lcd por el puerto B, que active esa linea y ya lo hice en la libreria.
Lo bueno es que acabo de probar lo del lcd con un 16f628 y el lcd funciona. No lo entiendo

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: 16f873 y lcd
« Respuesta #7 en: 02 de Abril de 2006, 11:47:00 »
Pues entonces solo falta que pruebes con un 873 distinto, puede ser que alguna pata este estropeada...
Si juegas contra el mejor, pierdes como los demás.

Desconectado dkhiri

  • PIC10
  • *
  • Mensajes: 12
RE: 16f873 y lcd
« Respuesta #8 en: 02 de Abril de 2006, 12:34:00 »
Creo que te hare caso. Mañana cogere uno nuevo.
Gracias de todos modos Giño

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: 16f873 y lcd
« Respuesta #9 en: 02 de Abril de 2006, 23:56:00 »
¿Has conectado el potenciómetro que regula el contraste en el lcd?, sin eso no funciona, eh

Desconectado dkhiri

  • PIC10
  • *
  • Mensajes: 12
RE: 16f873 y lcd
« Respuesta #10 en: 04 de Abril de 2006, 09:22:00 »
Si que lo puse. Pero es que no me hace nada de nada. No pone a 1 C5 ni nada. Lo acabo de probar con un 16f870 y tampoco.
Hay algun sitio donde esten explicados los fuses. Es que hace un tiempo no me iban los motores con un 16f628 y era por un fuse. Haber si el problema lo tengo ahi porque no se que pensar

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: 16f873 y lcd
« Respuesta #11 en: 04 de Abril de 2006, 09:49:00 »
Ahora que sacas el tema de los fuses ...

Codigo:

#FUSES NOWDT, XT, NOPROTECT,NOLVP,NODEBUG, BROWNOUT,NOCPD, NOWRT,NOPUT
#use delay(clock=20000000)



Quita XT (que es para cristales de 4 mhz) y pon HS (para cristales más rapidos). Quizás por esto el pic no realiza bien las rutinas de retardos que hay en el interior de la libreria de la LCD y no hace nada coherente...
Si juegas contra el mejor, pierdes como los demás.

Desconectado dkhiri

  • PIC10
  • *
  • Mensajes: 12
RE: 16f873 y lcd
« Respuesta #12 en: 04 de Abril de 2006, 09:53:00 »
He puesto XT con clock a 4Mhz, HS con clock a 20Mhz, en la placa he puesto un cristal de 4 y uno de 20 y nada. No lo entiendo. Llevo todo el fin de semana y no me cuadra.

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: 16f873 y lcd
« Respuesta #13 en: 04 de Abril de 2006, 10:09:00 »
Y dices que con otro Pic te funcionó?? Probaste ya con un 2º 873??
Si juegas contra el mejor, pierdes como los demás.

Desconectado dkhiri

  • PIC10
  • *
  • Mensajes: 12
RE: 16f873 y lcd
« Respuesta #14 en: 04 de Abril de 2006, 10:18:00 »
Si. He probado con otro 873 y con un 870 y me hacen lo mismo. Ahora hare un codigo para encender led"s haber si eso al menos si me lo hace y luego ire poco a poco.
Gracias por echar un cable Flash


 

anything