Autor Tema: PIC18F4520  (Leído 4500 veces)

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

Desconectado solitario

  • PIC10
  • *
  • Mensajes: 23
PIC18F4520
« en: 02 de Marzo de 2009, 15:04:32 »
Buen dia a todos, saben? estoy trabajando en un proyecto que creo es interesante, ya que tengo que controlar una impresora Zebra modelo TLP2844, esta la puedo controlar por programacion EPL2, estos son comandos o cadenas de strings que le envio al puerto RS232 que tiene la impresora.
Pero el problema no acaba ahi, la tarea de la impresora pues es imprimir etiquetas adheribles, en estas etiquetas hay informacion que hay que estar actualizando cosntantemente, una es el numero del operador que mando imprimir y el otro es la hora y fecha.

Por ser un proyecto poco grande, pues me vi en la necesidad de hacer subsistemas:
* El primero fue mandar imprimir la etiqueta desde el PIC y todo OK!!! Esto consume 30% de la RAM
* El segundo manejar un LCD y teclado lo que se podria llamar una interfaz hombre maquina, esto para poder actualizar los datos del numero de operador y que el usuario pueda ver los datos que tendra la etiqueta OK!! Consume 65% de la RAM
* Actualmente estoy trabajando en la configuracion y lectura del DS1307, creo que todo va bien. Esto consume 50%

Despues de este choro mareador, pueden darse cuenta que todo este programa no cabra en un PIC16F877A, entonces recurri al PIC18F4520, la razon de escoger este PIC es porque aqui tengo uno a la mano. Y para adentrarme en este PIC pues empiezo a hacer un ejemplo muy sencillo, pero cielos!!!!!!! NO FUNCIONA!!!!!!!

Al momento de correr mi circuito en PROTEUS simplemente envia la palabra por RS232, del lcd y teclado no veo nada, pego mi codigo para que por favor, me echen una mano, y saber por donde empezar.

#include <18F4520.h>
#device adc=8
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES HS                       //High speed Osc (> 4mhz)
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES BORV25                   //Brownout reset at 2.5V
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOCPD                    //No EE protection
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES LVP                      //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads
#FUSES NOCPB                    //No Boot Block code protection
#FUSES LPT1OSC                  //Timer1 configured for low-power operation
#FUSES MCLR                     //Master Clear pin enabled
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)

#use delay(clock=20000000)    //Reloj
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)   //Directivas comunicacion serial
#use i2c(Master,Slow,sda=PIN_C4,scl=PIN_C3)     //Directivas comunicacion I2C

#include <LCD.C>
#include <KBD.C>

#define lcd_portb TRUE

char MiTecla=0;

void main()
{

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF|ADC_TAD_MUL_0);
   setup_psp(PSP_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_oscillator(False);
   
   // TODO: USER CODE!!
   lcd_init();
   kbd_init();
   for(;;)
   {
      printf(lcd_putc,"NUM OP: XXXX\n");   //Salta al siguiente renglon
      printf(lcd_putc,"NUM PART:XXXX");
      lcd_gotoxy(8,1);
      printf("QUE PASO");  //ESTO SI LO VEO POR LA TERMINAL
      do
      {
         MiTecla=kbd_getc();
      } while (MiTecla!='#');
      printf(lcd_putc,"\f");
      printf(lcd_putc,"YA TERMINO WHILE");
   }
}

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: PIC18F4520
« Respuesta #1 en: 02 de Marzo de 2009, 16:21:51 »
Hola.

Pues debe ser de conexiones, yo que tu cambiaba la LCD al PORTD y el KBD al PORTB para aprovechar las pullup's. Segun tu codigo, nunca vas a poder visualizar los mensajes despues del while, ya que pasa a escribir en la LCD nuevamente lo que esta al inicio del for( ;; ). Te recomiendo tambien que cambies el fuse LVP a NOLVP, para que uses el pinB5 como un pin I/O.

Eso a vuelo de pajaro ... de pronto se me escapan mas detalles, pero inicia por ahi.

Saludos
El papel lo aguanta todo

Desconectado solitario

  • PIC10
  • *
  • Mensajes: 23
Re: PIC18F4520
« Respuesta #2 en: 02 de Marzo de 2009, 17:01:22 »
Gracias MLO__ por tus comentarios, ya estuve haciendo mas pruebas y agregando lo que me dijiste, no veo completo la leyenda en el LCD, se come algunas letras.

Pego mi codigo a ver si alguien sabe que pasa con esto. Y tambien anexo algunos mensajes que me muestra el PROTEUS.

#include <18F4520.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES HS                       //High speed Osc (> 4mhz)
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES BORV25                   //Brownout reset at 2.5V
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOCPD                    //No EE protection
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                      //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads
#FUSES NOCPB                    //No Boot Block code protection
#FUSES LPT1OSC                  //Timer1 configured for low-power operation
#FUSES MCLR                     //Master Clear pin enabled
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)

#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3)

#include <LCD.C>
#include <KBD.C>

#define use_portb_kbd TRUE

void main()
{

   port_b_pullups(TRUE);
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF|ADC_TAD_MUL_0);
   setup_psp(PSP_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   lcd_init();
   kbd_init();
   setup_oscillator(False);
   
   //set_tris_d(0x00);

   // TODO: USER CODE!!
   printf("FUNCIONARA COM RS-232????");
   lcd_gotoxy(1,1);
   lcd_putc("\f");
   lcd_putc("HOLA LCD!!!");
}

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: PIC18F4520
« Respuesta #3 en: 02 de Marzo de 2009, 17:13:20 »
Cambia el oscilador a XT (4MHz) a ver que sucede.
El papel lo aguanta todo

Desconectado solitario

  • PIC10
  • *
  • Mensajes: 23
Re: PIC18F4520
« Respuesta #4 en: 02 de Marzo de 2009, 17:23:17 »
 :-/ :-/Muchas gracias MLO__!!!! En el PROTEUS ya funciona corretamente, ahora me adentrare al teclado, ya los estare molestando.

Saludos . . .


Desconectado solitario

  • PIC10
  • *
  • Mensajes: 23
Re: PIC18F4520
« Respuesta #5 en: 02 de Marzo de 2009, 19:46:57 »
No encuentro como conectarle el teclado al puerto b, estoy usando la libreria que trae por default el ccs. Alguno de ustedes sabe como debo conectarla??? Anexo imagen de como la estoy conectando y no forula nada de nada.

Saludos . . .

Desconectado solitario

  • PIC10
  • *
  • Mensajes: 23
Re: PIC18F4520
« Respuesta #6 en: 02 de Marzo de 2009, 20:42:13 »
Bueno, despues de estar dandole y dandole vueltas he logrado conectar correctamente el teclado, muchas gracias RedPic, utilice la libreria que propones en tu web asi como las conexiones, desde luego tuve que modificarle para que fuera posible leer un teclado 4x3.

Gracias!!!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: PIC18F4520
« Respuesta #7 en: 03 de Marzo de 2009, 00:30:58 »
Hola.

La libreria que trae el CCS esta para un teclado de 4x3, solo hay 2 opciones de conexion. Que bien que lo solucionaste
El papel lo aguanta todo

Desconectado solitario

  • PIC10
  • *
  • Mensajes: 23
Re: PIC18F4520
« Respuesta #8 en: 03 de Marzo de 2009, 01:55:42 »
Asi es gracias MLO___!!!! Nada mas hay dos opciones de conexion, pero ya ves que cuando la desesperacion llega, todo haces mal;  ya mañana me tocara armar mi circuito en un protoboard y a hacer pruebas fisicamente con el circuito, y pos a ver que tal nos va.

Saludos . . .

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: PIC18F4520
« Respuesta #9 en: 03 de Marzo de 2009, 01:58:24 »
Hola.

Pues mucha paciencia a la hora de montar el Hard. Si ya da en proteus, es muy probable que te de en fisico. Exitos.
El papel lo aguanta todo

Desconectado solitario

  • PIC10
  • *
  • Mensajes: 23
Re: PIC18F4520
« Respuesta #10 en: 03 de Marzo de 2009, 02:11:39 »
Eso espero, tener muchisima paciencia, ya que es la primer aplicacion que hare con un PIC18. y pues si, en el PROTEUS si da todo. Alguna recomendacion a la hora montar????

Saludos . . .

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: PIC18F4520
« Respuesta #11 en: 03 de Marzo de 2009, 14:43:44 »
Hola.

Se acostumbra mucho colocar condensadores de desacople entre Vdd y GND de 100nF y 4,7uF. No olvides cuadrar el contraste de la LCD (muchos han posteado fallas en la LCD y solo era cuestion de mover el potenciometro del contraste  :mrgreen: )

Saludos
El papel lo aguanta todo

Desconectado solitario

  • PIC10
  • *
  • Mensajes: 23
Re: PIC18F4520
« Respuesta #12 en: 04 de Marzo de 2009, 15:22:45 »
Muchas gracias per la recomendacion, y efectivamente, ayer sufri mucho con el LCD y era el contraste, pero ya esta lista esa parte del proyecto, ya veo mensajes y puedo meter caracteres via teclado matricial.

Ya nada mas estoy esperando que me llegue el DS1307, para hacer pruebas con hardware y ya vere que pasa. Por cierto, que valor de resistencia pull up me recomiendan para la red i2c???

Saludos . . .

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: PIC18F4520
« Respuesta #13 en: 04 de Marzo de 2009, 15:26:23 »
Hola.

No encontre el hilo donde estaba la discusion sobre las resistencias de pullup, pero normalmente se ponen unas 4k7.
Da gusto cuando salen las cosas rapido y bien.  :-/

Saludos.
El papel lo aguanta todo

Desconectado solitario

  • PIC10
  • *
  • Mensajes: 23
Re: PIC18F4520
« Respuesta #14 en: 04 de Marzo de 2009, 18:22:01 »
Efectivamente MLO__  :lol:da gusto cuando asi salen las cosas, y muchas gracias por los de las resistencias, en cuanto me llegue el circuito lo echo a andar, ya me urge que llegue la paqueteria!!!!!!

Saludos . . .