Autor Tema: de 16f877 a 18f442  (Leído 2009 veces)

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

Desconectado devilevil

  • PIC10
  • *
  • Mensajes: 6
de 16f877 a 18f442
« en: 09 de Enero de 2007, 21:41:52 »
Tengo un programa en un 16f877a y me voy a mudar para un 18f442. el programa es el siguiente:

#include<18f442.h>
#use delay(clock=40000000)
#include<lcd420portd.c>
void main(void){
lcd_init();
for(;;){
output_high(pin_a1);
lcd_gotoxy(1,1);
lcd_putc("Hola");
lcd_gotoxy(1,2);
printf(lcd_putc,"Date: %s\n", __time__);
delay_ms(100);
output_low(pin_a1);
delay_ms(100);
}}


Simplemente necesito visualizar datos en una LCD, pero el problema es que no me funciona y solamente le cambio
#include<16f877a.h> por #include<18f442.h>, la distribucion de los pines para la LCD es la misma, pero lo voy a simular en proteus y no me funciona, la version de proteus que uso es 6.7 SP3
no se si tengo que cambiar de libreria LCD o que tengo que hacer.
Necesito que me ayuden con esto, que me digan si tengo que usar algunos fusibles o si tienen una libreria distinta o un programa que funcione correctamente con las librerias que se usan y la simulacion en proteus y en lenguaje C para PICC.

Les agradezco profundamente toda la ayuda que me sea dada.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: de 16f877 a 18f442
« Respuesta #1 en: 10 de Enero de 2007, 19:49:39 »
El unico problema que tienes esta en la libreria del LCD, seguramente no tienes una definicion condicionada segun el compilador a utilizar de las direcciones de los pines del LCD, por lo tanto el PIC escribe donde estan las direcciones del PIC16F , mientras que las direcciones reales del PIC18F son otras.

Si copias la libreria LCD420portD.c aqui (utiliza el boton Usar Codigo, #), asi los caracteres no se deforman, y te especificamos como reformarla para usarla con ambos PICs... :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado vwsalvagti

  • PIC10
  • *
  • Mensajes: 1
Re: de 16f877 a 18f442
« Respuesta #2 en: 24 de Junio de 2008, 04:32:14 »
Hola,
soy nuevo en el foro, y estaba trasteando un LCD 2x16 para vidualizar chorradillas.
Cada vez keria poner mas cosas, intentando poner un LCD 4x20, pero en este su libreria esta configurado por el puero B.
Como hiciste para configurarlo cono la lib 2x16, es decir por el puerto D.
Gracias de antemano

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: de 16f877 a 18f442
« Respuesta #3 en: 24 de Junio de 2008, 09:21:08 »
Debes abrir la librería y modificar las líneas al que hace el llamado, la escritura y todo lo que está relacionado al puerto b, y de seguro, deberás configurar el puerto d, en la librería (lo mejor) o en el programa principal.

Si posteas la librería, se te podrá indicar las líneas a modificar y/o retirar, si las hubiese, claro.

Fíjate en el consejo de MGLSOFT, para subir el código. O también, lo puedes adjuntar.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: de 16f877 a 18f442
« Respuesta #4 en: 24 de Junio de 2008, 10:27:35 »

Al inicio de la libreria de la LCD hay una linea de codigo que dice:
Citar
// Un-comment the following define to use port B
// #define use_portb_lcd TRUE

Con respecto a la asignacion del puerto, el problema esta en que en la libreria de 4x20 hay que modificar la direccion tal y como lo dijo MGLSOFT, o incluir:
Código: [Seleccionar]
#if defined use_portb_lcd
   //#locate lcd = getenv("sfr:PORTB")    // This puts the entire structure over the port
   #ifdef __pch__
    #locate lcd = 0xf81
   #else
    #locate lcd = 6
   #endif
   #define set_tris_lcd(x) set_tris_b(x)
#else
   //#locate lcd = getenv("sfr:PORTD")    // This puts the entire structure over the port
   #ifdef __pch__
    #locate lcd = 0xf83
   #else
    #locate lcd = 8
   #endif
   #define set_tris_lcd(x) set_tris_d(x)
#endif

en lugar de la linea:
Código: [Seleccionar]
#byte lcd = 6
y cambiar los set_tris_b, por set_tris_lcd

Saludos.
« Última modificación: 24 de Junio de 2008, 10:35:27 por MLO__ »
El papel lo aguanta todo


 

anything