Grabar una memoria 24xx512 y 24xx64 con el programador de PIC's (SOLUCIONADO)

Hola a todos :)

En esta ocasión, tengo una duda que no he podido solucionar por mas foros y google que utilizo.

:oops: Ustedes disculparán la ignorancia, pero ya no encuentro salida.

Necesito grabar varias memorias 24xx512 y 24xx64 con diferentes datos cada una (Series de Mensajes para mostrar en LCD). Tengo el programador de Pic's que también puede grabar cualquier memoria del tipo 24xx, 25xx, 93xx y otros tipos.

Mi gran duda es...
Como hago que el compilador (Tengo acceso al MpLAB, Proton y PIC C Compiler) me genere el archivo xx.hex para una memoria, no para un PIC.

En el foro se han tocado muchos temas de cómo escribir/leer datos desde y hacia una eeprom externa, pero todos son basados en un pic, como hacer para que el pic envíe y reciba datos.

Pero no he encontrado una solución para que el compilador sólo me genere el archivo hex para una memoria predeterminada.

Tengo el código para escribir y leer datos (con cualquiera de los compiladores que mencioné anteriormente) en la eeprom del pic (16F648a en mi caso) pero algunos de los mensajes que necesito son demasiado largos y no caben en la eeprom del mismo. Por lo que intenté usar una memoria externa, el plan era grabarla aparte con los mensajes y sólo lerla desde el pic.

Si alguno pudiera darme un norte les estaría muy agradecido. un documento, link o lo que se pueda.

Muchas gracias por su tiempo.
Un saludo al foro!!
 
Última edición:
Estimado Apollo:

Muy buena pregunta, la verdad nunca le habia tomado el asunto a hacer eso.
Pero bueno nos tocara experimentar. Tengo un vago recuerdo que se pueden definir en un archivo ASM localidades de memoria a usar con la directiva del compilador ORG, y tambien que se podia escribir directamente en la memoria EEPROM del PIC los datos que se querian dejar almacenados, direccionando una localidad que no recuerdo de momento pero esta en los manuales de cada PIC. Luego definiendo los datos con un DW o DB dependiendo del ancho de los datos que queria poner.

Me imagino que funcionan de la misma manera para las memorias EEPROM.

Experimentare por la noche y luego te comento si me funciono. Aunque de lo que si estoy seguro es que usando programas como WINPIC800 y PonyProg puedes Editar lo que quieres almacenar en la eeprom(le das clic en la ventana donde aparecen los datos a grabar como ASCII y tecleas todo lo que quieres almacenar). y posteriormente guardarlo como Hex.

Estimado Compañero Apollo.

Pues como lo habia comentado, intente hacer el codigo y compilarlo. Pero el compilador me dijo que no soportaba el dispositivo lo cual es raro ya que el archivo que incluye los dispositivos se encuentra en su lista.
Te pongo el codigo como lo habia puesto en el editor:

LIST P=EEPROM8
INCLUDE "MEMORY.INC"
LIST M=_24LCS21

org 0x00

dw "Hola a todos", 0
end

Pero bueno creo que tal vez la version del MPASM ya no soporta este dispositivo o algo tendra por que encontre informacion en esta pagina y esta tal cual lo habia considerado:
http://sdphca.ucsd.edu/phy120b/pic_manuals_pdf/Readme_for_MPASM_Assembler.htm
Me supongo que tendremos que buscar alguna version viejita del MPLAB por que la que tengo no trae el MPASM para probarlo por linea de comandos.
Ojala alguien pueda apoyar y probar en sus compiladores para ver cual seria el problema.

Saludos
 
Última edición:
Hola estimado jjfonsecaz:

Muchísimas gracias por los aportes, No conocía ni el WINPIC800 ni PonyProg.

Ya los bajé y comencé a experimentar un poco, aunque no pude encontrar la forma de cambiar el contenido de la memoria como lo explicas, o por lo menos no para cadenas de caracteres, sólo he podido hacerlo por bytes separados.

En mi desesperación, me puse a hurgar en la carpeta del MpLab y encontré el archivo que mencionas en el mensaje (memory.inc), al leerlo no comprendí del todo la mecánica del proceso, o algo me faltó, ya que, como viene en el comentario del archivo intenté comenzar un nuevo proyecto, seleccionando una memoria en lugar del procesador.

Pero al tratar de seleccionar una “toolsuite”, no aparece el MPASM de inicio, de hecho ninguno de los lenguajes son soportados o eso parece, ya que todos me aparecen con unas “X” rojas al lado. Excepto el Proton, mañana investigaré como puedo hacerlo con el proton.

Pero, al dejar seleccionado el cuadro de: “Mostrar todas las “toolsuites instaladas” si me deja seleccionar el MPASM, sólo que ya no pude probar nada por causa de tiempo, Hasta ahí llego el día de hoy… bueno de ayer.

Probablemente mañana siga investigando si puedo hacer algo en ASM, aunque si detecté otro pequeño problema, en el archivo memory.inc, las memorias sólo llegan hasta la 24xx256, no hay de 512, también tendré que ver como modificar el máximo de memoria hasta la 24xx512.

De nuevo agradezco enormemente el tiempo dedicado a este hilo. :apreton:
Ya veremos si llegamos a un final feliz con esto.

Saludos al foro :)
 
Compañero Apollo:

Te adjunto las imagenes de donde le debes de dar doble click en el winpic para que escribas los datos como letreros de una manera muy sencilla.

Por otro lado ya pude compilar el codigo que te escribi anteriormente, me busque el compilador de MPASM pero no lo encontre, y solo encontre el MPASMWIN de esta pagina :
http://melabs.com/support/mpasm.htm
Que de hecho es el mismo que debes de tener en tu MPLAB, por lo que lo puedes copiar a una carpeta raiz como c:\mpasm. pero te recomiendo mejor descargar el de esta pagina y descomprimirlo en c:\ (esto por que por alguna razon el MPASMWIN no admite rutas tan largas que excedan de 64 caracteres).
Luego el codigo que anteriormente te describi:

LIST P=EEPROM8
INCLUDE "MEMORY.INC"
LIST M=_24LCS21

org 0x00

dw "Hola a todos", 0
end

Lo puedes copiar tal cual a un editor cualquiera y guardarlo como "*.asm" (nuevamente de preferencia en "c:\" aunque aqui lo puedes poner una carpeta)en mi caso lo llame "memoria.asm".
Luego en la carpeta donde descomprimiste el MPASMWIN buscalo y dale doble click.
En la imagen mpasm520.jpg te muestro como dejar las configuraciones del compilador MPASMWIN y dale ensamblar.

y listo tendras el archivo.hex que tanto necesitas.

por ultimo si dices que no aparece la definicion de la memoria en el archivo .inc; puedes definirlo con el nombre del componente y la localidad maxima a la que direcciona ejemplo:
#define _24LC512 H'FFFF'
agregale esta linea al archivo .inc y tendria que funcionarte.

saludos.
 

Adjuntos

  • winpic8001.JPG
    winpic8001.JPG
    72.3 KB · Visitas: 37
  • winpic8002.JPG
    winpic8002.JPG
    74 KB · Visitas: 41
  • mpasm520.JPG
    mpasm520.JPG
    54.8 KB · Visitas: 37
Hola jjfonsecaz :D

Perdón por no seguir con el hilo hasta hoy, pero estaba hasta el tope de trabajo.
De nuevo muchas gracias por el tiempo y el esfuerzo. Te comento como salió esto:

Precisamente lo que me comentas es a la solución que había llegado, como no encontré el MPASM para DOS, probé con el MPASMWIN, todo esto desde la carpeta de instalación del MpLAB, y me pudo generar el archivo, quiero suponer que funcionó bien ya que no tenía físicamente el circuito que iba a usar la memoria, sólamente la grabé con las especificaciones que me dieron y así se la llevaron. Y hasta el momento no ha habido noticias.

Ahora, para poder darle seguimiento a las memorias, intenté hacer un pequeño ejemplo de funcionamiento de las memorias con el bus I2C.

Dejo el programa y el circuito en ISIS para el archivo.

Código:
'******** FUSES *********
    Device 16F648A
    Config INTRC_OSC_NOCLKOUT, WDT_OFF, BODEN_OFF,_
    CP_OFF, DATA_CP_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
'******** variables  **********
 DIM W1 AS BYTE
 DIM W2 AS BYTE
 DIM R1 AS BYTE
 DIM R2 AS BYTE
 DIM Address AS WORD
 DECLARE I2C_SLOW_BUS OFF
'******** Alias ************ 
 SYMBOL sda = PORTB.2      ' Alias the SDA (Data) line
  SYMBOL scl = PORTB.1     ' Alias the SSL (Clock) line
  SYMBOL escribe = %10100001 ' Alias para escribir
  SYMBOL lee = %10100000  ' Alias para leer
'*********** Inicializar Hardware ************ 
pic_INI:
 ALL_DIGITAL = true
 INTCON = %00000000
 TRISA = %00000000
 TRISB = %00000000
 PORTB_PULLUPS = false
 PORTA = 0
 PORTB= 0 
 
lcd_INI:
 Declare LCD_TYPE 0
 Declare LCD_INTERFACE 4
 Declare LCD_DTPIN PORTA.0
 Declare LCD_ENPIN PORTA.4
 Declare LCD_RSPIN PORTA.7
 Declare LCD_LINES 2
 Declare LCD_COMMANDUS 2000
 Declare LCD_DATAUS 50
 
' Programa principal
Inicio:
 
 W1 = "X"  ' Variable para escribir 1
 W2 = "B"  ' Variable para escribir 2
 Address = 1
 
 PRINT AT 1,5, "HOLA"
 DelayMS 500
 Cls
 
  I2COUT sda, scl, escribe , Address,  [W1] ' Envia W1 a eeprom dir 0
  DelayMS 200
  
  I2CIN sda, scl, lee , Address,  [R1]   ' Lee de eeprom dir 0 y guarda en R1
  DelayMS 200
   
   PRINT AT 1,5, R1  ' Envia al LDC R1 (dato desde eeprom)
   DelayMS 200
   
   PRINT AT 2,5, W2  ' Envia al LCD W2 (dato desde PIC)
 DelayMS 1500
 
 Cls
 DelayMS 500
 
 goto inicio
 
 
 End

Saludos al foro (y)
 

Adjuntos

  • eeprom_I2C.zip
    15.6 KB · Visitas: 70
Última edición:
Atrás
Arriba