Autor Tema: dudas en paginacion  (Leído 5042 veces)

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

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
dudas en paginacion
« en: 06 de Agosto de 2011, 11:58:39 »
hola.tengo algunas dudas sobre como se comporta el PC en los saltos entre paginas.
estoy haciendo un programa que visualize en una LCD de 16 caracteres.el texto del quijote (como practica) hasta que se agote la memoria de un 16f877
el programa principal esta hubicado en la pagina 0.y la tabla como el puntero de salto en las restantes.

como es normal hay que modificar el PCLATH cuando se realiza el salto entre paginas.y esto me hace suponer que voy a tener que poner punteros de tabla en cada pagina.o realizar la conmutacion antes de que se realice el salto erroneo.
en todo caso la duda que tengo es que si estoy en la pagina 0.y conmuto PCLATH para saltar a la pagina 1.porque cuando retorna al encontrar un retlw.
lo hace a la pagina 0.si el PCLATH no ha sido modificado durante el retorno?
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: dudas en paginacion
« Respuesta #1 en: 06 de Agosto de 2011, 12:29:03 »
he dado un repaso al datasheet.los call y goto pueden saltar cualquier posicion dentro de una pagina.pero un salto a otra pagina implica seleccionar en el PCLATH
a que pagina se quiere saltar.
respecto al retorno.aqui no hay problema ya que en el puntero de pila se guarda la direccion desde donde se realizo la llamada,incluso la pagina.
por lo visto el PCLATH no es modificado durante el retorno.

me ha parecido entender que los unicos bits utiles del registro PCLATH. almenos en el 16f877 son el bit3 y bit4.ya que aunque se puden escribir del 0 al 2.
no seria practico ya que los gestiona un call o un goto.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: dudas en paginacion
« Respuesta #2 en: 06 de Agosto de 2011, 14:01:44 »
Si porque en la pila son todos los bits de direccion pero en el PC no, los tre mas significativos son un codigo de control (o algo asi) el codigo para call y goto es:

CALL  10 0KKK KKKK KKKK
GOTO 10 1KKK KKKK KKKK

Como ves solo 11 bits de direccion, 8 para el PCL y y tres para el PCLATCH, con esto direccionas 2K pero a partir de ahi hay que ayudarle un poquito al PC  :lol:

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: dudas en paginacion
« Respuesta #3 en: 06 de Agosto de 2011, 19:14:34 »
llevo mucho tiempo estudiando los pics.pero realizando programas cortos.las tablas es lo que mas ocupa memoria en un microcontrolador.y cuando hay qye hacer paginacion es un lio.hay que tener muy claras las cosas.

aunque de aqui en adelante voy a tirar para la serie 18Fxxxx en estos no hay paginacion que yo sepa.y ademas estos chips estan incluso mas varatos que los 16fxxx.
solo queria terminar de hacer este programa para entender bien como funciona la paginacion.yo creo que con esto ya le habre sacado bastante jugo a estos pic.
no creo que suceda lo mismo con los 18Fxxxx. :D estan vastante completos.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: dudas en paginacion
« Respuesta #4 en: 07 de Agosto de 2011, 18:24:23 »
bueno.esto va de perlas.ya he podido visualizar en la LCD un mensage que ocupa 3 paginas de eeprom y con solo un puntero al principio de pagina
es un poco complicado aprender paso por paso lo que realiza un controlador.sobretodo cuando hay que conmutar los bancos de memoria.
ahora tengo un error que no entiendo porque sale.
me indica que me he pasado del ultimo byte de que dispone la eeprom del pic.

Error - section '.org_2' can not fit the absolute section. Section '.org_2' start=0x00000800, length=0x00002e02
Errors    :

y digo que no lo entiendo porque realmente no me he pasado de la direccion 0x1FFF. el error me sale cuando sobrepaso la direccion 0x1EFF
255 bytes antes de terminar la pagina 3.

el pic es el 16F876 y segun el datasheet tiene 8192bytes.porque me da error si escribo en estos ultimos 255bytes?
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: dudas en paginacion
« Respuesta #5 en: 08 de Agosto de 2011, 18:38:55 »
solucionado.he tenido que dividir la tabla poniendo los 255bytes restantes en otra tabla.

con un org 0x1F00.y ya no sale el error.

supongo que el compilador no admite tablas tan largas con la directiva dt"  "
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: dudas en paginacion
« Respuesta #6 en: 14 de Agosto de 2011, 12:13:56 »
ya termine el programa.aqui esta el programa: http://www.todopic.com.ar/foros/index.php?topic=24397.msg297596#new

me ha parecido mejor lugar donde ubicarlo.para poder encontrarlo mas facilmente.
la parte mas importante para que el PC no se desborde en el salto entre paginas. es la seleccion de la pagina adecuada antes salto por modificacion
del PCL.
aunque para la lectura de los datos en una tabla.tambien hay que tener encuenta los sectores de las paginas.esto se realiza con la el incremento
del PCLATH.ya que aunque los bits de la conmutacion de las paginas son el bit3 y bit4.el bit0,bit1 y bit2 se encargan de conmutar los bancos de cada pagina.
la modificacion de estos bits conmutan los 8 bancos de cada pagina.
al igual de que si no seleccionamos correctamente una pagina. durante un retorno el PC saltaria errorneamente a otra pagina.
si no seleccionamos bien los sectores.el PC saltaria a un banco erroneo dentro de la misma pagina.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: dudas en paginacion
« Respuesta #7 en: 14 de Agosto de 2011, 20:15:24 »
bueno.pues ya que logre hacer funcionar la LCD. y aunque este hilo estaba orientado a resolver un problema de paginacion.he decidido realizar una modificacion al programa para que funcione en el modo de 4 bit.con esto lograremos ahorrarnos 4 pin del pic.

he estado buscando informacion para entender como se gestiona la LCD para mostrar mensages con este modo de funcionamiento.
no he encontrado una informacion muy exacta.

la diferencia que he encontrado entre un sistema y  otro.es que en el modo 8 bit,se manda un byte.y posteriormente un impulso en E del LCD.
y en el modo de 4bit hay que mandar un nible,impulso en E,otro nible y otro impulso en E.

por ahora lo que me sale es un mensage de error: attempted to write after reading a single nibble.

"trató de escribir después de leer un solo nible".no estoy muy seguro de lo que quiere decir.

estare practicando haber cual es la solucion.si alguen sabe de alguna libreria para asm le agradeceria me indicase donde adquirirla.
me gustaria hecharle un vistazo.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado om@r

  • PIC12
  • **
  • Mensajes: 86
Re: dudas en paginacion
« Respuesta #8 en: 14 de Agosto de 2011, 21:40:07 »
Hola groundman ,esta es la rutina que uso cuando quiero usar el lcd 16x2 a 4bits :shock: ,el retardo esta hecho para un oscilador 4mhz y me resulto bien para varios modelos de lcd ,el registro TEMPLCD es el que contiene el byte sea de comando o dato. La rutina esta hecha para usar la parte alta del puerto B y las señales de control estan puestas en el puerto A :shock:
Saludos!!!
;*********************************************************
;INICIO LCD MODO 4
;*********************************************************
LCD    MOVLW      02H
          CALL          CONTROL
          MOVLW      28H
          CALL          CONTROL
          MOVLW      0CH
          CALL          CONTROL
          MOVLW      06H
          CALL          CONTROL
          MOVLW      01H   
          CALL          CONTROL
          RETURN
;*********************************************
RETARDO
              MOVLW   0FFH
   MOVWF  TEMP_1
   NOP
              DECFSZ   TEMP_1,F
             GOTO       $-1
             RETURN
;====================================
;**********************************************
CONTROL
              BCF        PORTA,RS
              GOTO     DATO2
DATO     BSF        PORTA,RS
DATO2   BSF         PORTA,E
              MOVWF   TEMPLCD
              MOVLW    0FH
              ANDWF    PORTB,F
              MOVF      TEMPLCD,W
              ANDLW    0F0H
              IORWF     PORTB,F
              CALL        RETARDO
              BCF         PORTA,E
              CALL        RETARDO
              BSF         PORTA,E
              MOVLW   0FH
              ANDWF   PORTB,F
              SWAPF   TEMPLCD,W
              ANDLW    0F0H
              IORWF    PORTB,F
              CALL       RETARDO
              BCF         PORTA,E
              CALL       RETARDO
              RETURN
;===============================
 

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: dudas en paginacion
« Respuesta #9 en: 15 de Agosto de 2011, 18:19:03 »
gracias om@r por tu aporte.lo estudiare a fondo para entender que es lo que estoy haciendo mal.
por lo que he visto por encima.este programa es la secuencia de inicializacion?

ya que no veo que envie caracteres a la LCD.supongo que tambien sevira para enviar caracteres.quizas haya que seleccionar el modo dato en la lcd.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado om@r

  • PIC12
  • **
  • Mensajes: 86
Re: dudas en paginacion
« Respuesta #10 en: 15 de Agosto de 2011, 22:43:31 »
Hola ,si la rutina sirve para enviar info al lcd tanto dato como control  :shock: es una sola rutina dividida para los dos usos
es solo para no duplicar la parte en donde se trabaja el byte ya que seria igual.
La rutina LCD es para inicializar el lcd a 4bits ,la principal lo que hace es dividir en dos el byte que quieres enviar ,tambien se encarga de no modificar el estado de la mitad del puerto en este caso el B que no se usa para el lcd ,esto lo podes modificar facilmente si usas otro puerto o otra parte del puerto como tambien los que se usan para RS y E ,el R/W esta a tierra  :shock:.
RS y E salen por los pines 0 y1 del puerto A
RS   EQU   0 ;PORTA,0
E     EQU   1 ;PORTA,1

Ejemplo
            CALL           LCD             
            MOVLW       80H             
            CALL           CONTROL     
            MOVLW       'A'                 
            CALL            DATO
Saludos!!!

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: dudas en paginacion
« Respuesta #11 en: 16 de Agosto de 2011, 17:14:48 »
gracias ya lo he entendido mejor.le dare un buen repaso. ;-)
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: dudas en paginacion
« Respuesta #12 en: 04 de Septiembre de 2011, 14:46:21 »
por fin he hecho funcionar la LCD en modo a 4bit.me ha venido muy bien tu ejemplo. om@r. :)

lo pondre en pequeños proyectos.pero tengo una duda.quisiera comprovar el bit BUSY.y no se si la lectura en 4 bit se comporta igual que la lectura en 8bit.
sabes algo al respecto?
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: dudas en paginacion
« Respuesta #13 en: 05 de Septiembre de 2011, 18:05:02 »
pues logre hacerlo funcionar.aunque no se si esta bien hecho.he segido las instrucciones.pero como es una simulacio,no se si internamente el flag BUSY
esta activandose.supongo que tendre que usar el ICD2 para comprobarlo.

este es el codigo.por si alguien le encuentra algun error.

Código: [Seleccionar]
LCD_BUSY    movfw PORTA ;carga en W el contenido de PORTA
andlw 0x01 ;guarda el valor del estado del bit RS
movwf TEMP_RS ;salva el valor de RS en el registro temporal
COMANDOS ;selecciona el modo comandos
BANK1 ;selecciona banco 1
          movlw    H'F0' ;
          movwf    TRISB        ;nible alto de PORT B como entrada
          BANK0    ;Selecciona el banco 0
READ          ;Pone el LCD en Modo RD "lectura"
          ENABLE          ;Activa el LCD (lectura del nible alto)
L_BUSY      btfsc    PORTB,7      ;Chequea bit de Busy
          goto    L_BUSY ;espera a que la LCD este libre
      DISABLE        ;Desactiva LCD

ENABLE ;Activa el LCD (lectura del nible bajo)
call RETARDO ;retardo de 1ms
DISABLE ;Desactiva LCD

          BANK1 ;selecciona banco 1
          clrf    TRISB        ;Puerta B salida
          BANK0 ;Selecciona el banco 0
          WRITE          ;Pone LCD en modo WR

movfw TEMP_RS ;restaura el valor de SR
iorwf PORTA,f ;activa en PORTA el bit RS
          return ;retorna
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: dudas en paginacion
« Respuesta #14 en: 05 de Septiembre de 2011, 19:26:03 »
 :-/ parece que si funciona.por lo visto el registro que contiene el flag BUSY.tambien contiene la direccion de la CG RAM o DD RAM.
y puedo ver como se van incrementando los bit cuando se van visualizando los caracteres.
solo que se realiza en dos nibles. :)
Montando mi primera impresora 3D (Raprep Prusa i3)


 

anything