Autor Tema: cambiar de pagina  (Leído 1990 veces)

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

Desconectado neosud

  • PIC12
  • **
  • Mensajes: 51
cambiar de pagina
« en: 05 de Octubre de 2004, 20:14:00 »
hola amigos del foro, he comenzado a realizar algunas aplicaciones con el pbplus y sucede q rebace los 2k de memoria de programa luego de compilar el programa en pblus, aparentemente no hay ningun error pero cuando se prueba en hardware, no funciona bien, stuve leyendo q debo hacer un cambio de pagina de la cero a la page1, como puedo hacerlo con el pbplus?

otro problema q se me presento es como enviar caracteres a visualizar a la pantalla lcd (44780).
estoy utilizando un bus de 8 lineas para el pic16f876.
realizo la siguiente conexion:

RS... PORTC,0
R/W#...PORTC,1
E.....PORTC,2
DB0....PORTB,0
DB1...PORTB,1
.....
...
DB7...PORTB,7
He visto q utilizan la instruccion print, como puedo utilizarla bajo la configuración descrita?
COMO PUEDO TRABAJAR CON EL LCD CON UN BUS DE 4 LINEAS?
Desde ya muy agradecido por sus ayuda.

Desconectado khasistos

  • PIC18
  • ****
  • Mensajes: 493
RE: cambiar de pagina
« Respuesta #1 en: 05 de Octubre de 2004, 20:33:00 »
Hola:

aqui  te mando un ejemplo de como conectar y definir un lcd con pbplus.
DEVICE = 16F877
        XTAL = 20



                LCD_DTPIN = PORTD.4   "aqui conectas los 4 pines   d4,d5,d6,d7 del diplay a portd.4  .5  .6  .7   
   LCD_RSPIN = PORTE.0
   LCD_ENPIN = PORTE.1
   LCD_INTERFACE = 4     " 4-bit Interface
   LCD_LINES = 2
   LCD_TYPE = 0
""" el R/W pata 5 del lCD va a masa
   Print at 1,1,"HOLA"

bueno esto funciona ,pero ello no implica que lo puedas usar en los ports que quieras ,es decir por ej   LCD_DTPIN=portb.4 y asi como quieras con los ports ,

Saludos
Khasistos

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: cambiar de pagina
« Respuesta #2 en: 06 de Octubre de 2004, 13:59:00 »
Haber contribuyendo un poco en tu problema de la paginacion si estas usando proton+, debiste de haber resivido un warning o error(en este caso) de que estabas llamando un bucle o una variable o una funcion de otra pagina para esto si es un bucle puedes usar un BRANCHL  que es un goto pero para regresar o ir a otras paginas sin problemas, o la otra solucion es hacerlo en asm directamente, tambien podrias tratar de Reorganiza y distribuir  correctamente tu codigo a lo mejor estas llamando una rutina que pusiste hasta el final del programa y esa rutina justamente esta ubicada en una pagina posterior de donde se llama , podrias ponerla antes y correr lo que resta del codigo secuencial.
Salu2 pana

Desconectado neosud

  • PIC12
  • **
  • Mensajes: 51
RE: cambiar de pagina
« Respuesta #3 en: 16 de Octubre de 2004, 19:33:00 »
Gracias por la ayuda, tengo entendido q con la instruccion branch se puede acceder a diferentes etiquetas deacuerdo al valor de una variable, he utilizado algunas veces esta instruccion, pero aun no me queda muy claro como utilizar el branchl para el paginado, no quisiera abusar pero podria ayudarme con un pequeño programa de ejemplo donde pueda aclarar las muchas dudas q tengo al respecto?.

En cuanto al lcd, solo funciona con los pines especificados en su ejemplo?
Es decir no podría utilizar estas instrucciones con el pic 16f84 o 16f873/6 q no tienen estos ports?
Si asi es como podría hacer para el manejo del lcd con estos pics



Gracias nuevamente por la ayuda prestada.

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: cambiar de pagina
« Respuesta #4 en: 16 de Octubre de 2004, 21:11:00 »
Hola jacmsud,
asi es , como te dije con es a instruccion puedes accesar como un goto desde cualquir banco en el que estes, pero por lo que veo tienes una variable que pasa del banco 0 al 1 (o del 1 al 2) es decir ESTAS sobre pasando con esa misma variable de un banco a otro(o pagina como gustes decirlo)
Si tienes un warning como este:
Warning! *** WORD Variable "PROBLEMA" Crossing Bank boundary 0-1 ***

Lo que puedes hacer es ESA variable que esta dandote el warning, lo mas seguro es que sea Word, dividirla en la misma es decir:
.
.
.
.
dim variable as word <--- esta es la que te esta marcando el warning!???

ponerla asi:

dim variable as byte <------- en bancox
dim problema as word <-------esta es la que te marca en warning ya que un byte esta en bancox y la otra en el bancoy,
Si no tienes esa variable puedes cambiar de lugar una  byte por esa que tengas desde el picnipio especificada, asi tu variable word o dword(segun sea el caso) queda completa en una pagina.La idea es que no se corte
corregido:

dim problema as word <-------- ambas en el banco x
dim  variable as byte<------- en el  bancoy
ya en caso que no tengas ninguna con cual cambiar(raro pero no imposible)inventas una aunue no la uses(que desperdicio de espacio , jajajajaja.

Como puedes ver es solo una mala distribucion de variables la que tienes, aunque si no usas comando complejos no es necesario este proceso, pero te aconsejo que esos warnings los corrijas.
Esta tabla te muesta lo que ocupa cada una
FLOAT        4 bytes de RAM.
DWORD        4 bytes de RAM.
WORD       2 bytes de RAM.
BYTE       1 byte de RAM.
BIT                    1 byte de RAM por cada 8 BIT"S  usados.
Con una simple suma de VARIABLES al inicio puedes distribuirlas mejor y eliminar tu problema.(si es este por supuesto).

En cuanto al LCD , el ejemplo del pana Khasistos funciona con ESOS PUERTOS(por eso los define!!!!!) que estan determinados, si queires usarlos en otros, solo definelos a que corresponda a como lo quieres usar tu, si solo quieres usar a 4 bits de buffer, tienes que definir el puerto y el 4° bit de ese puerto, por ejemplopor sentido comun si no tienes 8 pines de puerto no puedes usar la transmision a 8 bits)
DECLARE LCD_DTPIN PORTD.4   
o
DECLARE LCD_DTPIN PORTB.4   
o
DECLARE LCD_DTPIN PORTc.4   

Si quieres usar a 8 bits siempre desde el bit de inicio  del puerto:
DECLARE LCD_DTPIN PORTB.0
o
DECLARE LCD_DTPIN PORTD.0
etc


no te olvides de usar pullups o activarlas con PORTB_PULLUPS = ON, si el puerto maneja mas funciones como comparadores o demas, usarALL_DIGITAL = TRUE, o activar solo los registros necesarios.
Para forzar a un banco a banco0(que se situe en banco cero) cada ves que llames un label(o etiqueta) puedes usar:  DECLARE LABEL_BANK_RESETS = ON o OFF   (puedes usar un  "- "  si no quieres poner todo  
Algo que no debes olvidar (por el detalle de los warnings) es leerte el manual Proton+(todo esto viene en el) , aprender ensamblador( bsf  status,Rp0 , bcf status,rp0 , etc.....) y leerte el Ds.Lo cual veo de Prioridad Ensamblador  que es lo mejor que se puede aprender en lenguajes.
Salu2

Desconectado neosud

  • PIC12
  • **
  • Mensajes: 51
RE: cambiar de pagina
« Respuesta #5 en: 16 de Noviembre de 2004, 13:37:00 »
Gracias amigos por la ayuda, he podido comprender como organizar mis programas y no tener problema en el paginado, en el lcd aun no he realizado pruebas con el ejemplo q me indicas, pero en estos dias hare las pruebas, estoy lleno de dudas en otros temas mas pero ya luego les comentare, se q uds ya han pasado por estos retos y necesitaré mucho de sus ayudas.

Muy agradecidos a todos y saludos


 

anything