TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: pietrodilaccua en 05 de Agosto de 2004, 21:42:00
-
hola amigos,
para unos desarrollos me cambie del 16f873 al 16f628, me recomendaron este chip por tener muchas prestaciones y es muy barato en encapsulado de 18 patitas.?????????.
El tema es que al tratar de grabar datos en la eeprom, no lo hace, he buscado todas las alternativas posibles pero el chip no responde en lo que es la grabacion en eeprom. He trabajado bastante en el manejo de datos en eeprom con otrosl chips, pero con este no funciona ,
si alguien conoce algo de este tema con respecto a este chip le agradecere la informacion.
saludos amigos ... pietrodilaccua
-
La EEPROM del chip funciona perfectamente, deberás revisar las rutinas de grabación. Yo no he tenido ningún problema con esto y he utilizado muchos de estos.
Saludos
Ricky
Madrid-España
-
Hola Pietro, en que lenguaje programas?, si es en asembler, ten cuidado, porque estan en otro banco de memoria...
, a mi me ocurrio....
suerte
Norberto
-
RICKY,
OK REVISARE MIS RUTINAS , PERO CREO QUE EL PROBLEMA ESTA POR LA INDICACION DE NORBERTO, YO TRABAJO SOLO EN ENSAMBLADOR Y HE SEGUIDO TODAS LAS INDICACIONES DEL DATA SHEET SUMINISTRADO POR EL FABRICANTE MICROCHIP Y NADA.
NORBERTO TE AGRADECERE SI ME INDICAS EL BANCO EN QUE MANEJO LA EEPROM Y EL PROCEDIMIENTO GENERAL PARA ACCEDER.
SALUDOS AMIGOS
PIETRODILACCUA
-
HOLA DE NUEVO AMIGOS, LE INDICO LA RUTINA QUE ESTOY USANDO PARA ESCRIBIR LA EEPROM DEL 16F628.
HE DEFINIDO EN EL ENCABEZAMIENTO DEL PROGRAMA LOS REGISTROS EEDATA, EEADR, EECON1 Y EECON2 EN LAS DIRECCIONES 1A,1B,1C,Y 1D RESPECTIVAMENTE PARA SU USO EN EL BANCO 1 QUE ES DONDE SE LOCALIZAN.
LUEGO A PARTIR DE 2OH EN EDELANTE HE DEFINIDO DOS REGISTROS QUE SON:
DATA_EEPROM; USADO PARA PONER LOS DAOS QUE ALMACENARE EN EEPROM Y
ADRES_EEPROM ; USADO PARA ALMACENAR LA DIRECCION A LA QUE ACCEDERE EN LA EEPROM.
FINALMENTE LA SUBRUTINA SE LLAMA GRABA_ EEPROM:
GRABA_EEPROM
BSF STATUS,RPO ;BANCO1
MOVF ADRES_EEPROM,W ; CARGO LA DIRECCION
MOVWF EEADR ; EN REGISTRO DE DIR.
MOVF DATA_EEPROM,W ; CARGO EL DATO
MOVWF EEDATA ; EN REG DE DATOS
BSF EECON1,WREN ; HABILITO ESCRITURA
MOVLW 0X55 ; SIGUE SECUENCIA DE WRITE
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR ; INICIA ESCRITURA
BCF EECON1,WREN ; CIERRO ESCRITURA
BCF STATUS,RPO ; VUELVO A BANCO 0
RETURN ; Y RET AL PROG. PRINCIPAL
DONDE ESTA LO MALO AMIGOS???????, NO SOY UN SUPER EXPERTO EN PICS PERO NO HE TENIDO PROBLEMAS CON NINGUN OTRO CHIP. ADEMAS HE SEGUDO TODAS LAS INDICACIONES DEL ULTIMO DATASHEET DE ESTE MICRO QUE SE ENCUENTRA EN LA PAGINA DE MICROCHIP.
AGRADECERE SUS COMENTARIOS.
LINDO FIN DE SEMANA .... PIETRODILACCUA.
-
hola Pietro... esta es la rutina que empleo... ojo que empleo byte y direccion, y tu empleas data_eeprom y adres_eeprom... (solo cambian los nombres de los registros...)para el caso es lo mismo ok?
y ademas recuerda, luego de enviar a grabar, te quedas en un loop esperando que termine la grabacion,,,... con
ESCRCOMPL2
BTFSC EECON1,WR ;BYTE ESCRITO?
GOTO ESCRCOMPL2
BCF STATUS,RP0
espero te sirva... 
suerte
Norberto
-
norberto, a la rutina que has visto ya le he agregado las instrucciones que mencionas pero tampoco funciona la grabacion, es decir pasa por el bit test del wr y yo asumo que ha terminado el ciclo de escritura ya que retorna al programa principal, de lo contrario se quedaria eternamente en este loop, pero al revisar las posiciones de la eeprom estas estan en 00 y de grabacion ,nada.
en tu opinion, esta correcta la rutina que estoy usando????
estoy pensando en algun desperfecto en los chips.
saludos pietrodilaccua
-
Talvez no venga al caso pero ¿no sera que esta malo tu pic?
-
hola micom.
Gracias por tu atencion, te cuento que compre 4 de estos para no usar los f873 que son mas caros.
y los programas funcionan perfectamente bien entodos ellos, el tmr1 como reloj, la usart para transmitir algunos comandos, todos los i/o.. etc. pero en todos ellos no logro grabar la eeprom, ademas tengo programas funcionando en atros chips de la familia de los 16fXX y en todos no tengo problemas. he puesto la rutina que estoy usando para que alguien me indique si hay algun error, es basicamente la misma usada en otros chips con las diferencias logicas en la definicion de algunos registros de acuerdo al banco en que se localizan.
bueno amigos seguire en contacto para ver si resuelvo el problema.
saludos pietrodilaccua
-
Sugiero que las eeprom convencionales tardan unos 10ms en completar las operaciones de escritura, podria ser eso tal vez? No vendria mal poner un bucle infinito despues del comando de escritura, que solo sea roto mediante la interrupcion de final de escritura en la eeprom.
salu2
-
bueno amigos , he hecho todo lo sugerido. incluso lo que sugiere manex esta señalado mas arriba, pero todavia nadie me ha indicado si la rutina que he puesto anteriormente esta con algun problema.
seguire tratando de solucionar este lio, si alguien se le ocurre algo mas, bienvenido sea.
saludos a todos
petrodilaccua
-
hola a todos

petrodilaccua trate de ensambrar el codigo que pusiste y tienes un error cuando cambias de banco ya que estas poniendo
BSF STATUS,RPO ;BANCO1
y estas mal cuando pones (RPO) ya que estas poniendo una O mayuscula y es un cero 0 (RP0) el mpasm da ese error
te voy a poner un pedazo de codigo que estoy usando en un proyecto donde grabo la eeprom
call Delay
BSF STATUS,RP0 ;
BCF STATUS,RP1 ;
movlw 0x00 ;direccion de la eeprom
movwf EEADR
movlw 0x10 ;datos que vamos a grabar
movwf EEDATA
BSF EECON1,WREN ;Permiso de escritura
BCF INTCON,GIE
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2 ;Secuencia seg£n Microchip
BSF EECON1,WR ;Orden de escritura
BSF INTCON,GIE
BCF EECON1,WREN
BCF STATUS,RP0
movlw 0x00
movwf EEADR ;Posici¢n EEPROM
BSF STATUS,RP0
BSF EECON1,RD ;Orden de lectura
BCF STATUS,RP0 ;Selecci¢n banco 0
MOVF EEDATA,W ;datos en W
este codigo lo estoy usando en este momento
saludos a todos desde REP. DOM.
miltonmc
-
hola mi amigo.
es cierto yo uso RPO con "O" pero en el encabezamiento de mis programas lo defino como: RPO EQU 5, y siempre me han funcionado perfectamente. En todo caso esta vez no solo use RP0 con "cero" sino que probe nuevamente con la rutina que me enviaste, teniendo en cuenta que es practicammente la la misma que yo uso, en mi caso, como puedes ver mas arriba, la diferencia esta en que las direcciones y los datos yo los saco de dos registros pero en el fondo es lo mismo.
Y el resultado...????????...igual... siguen mis 16f628-04/P sin grabar la eeprom. ha!!! ....y compre varios ...y todos funcionan perfectamente exepto por la eeprom que ninguno la graba.
...Creo que tendre que cocinarlos
agradecido de tu respuesta.
un saludo a todos pietrodilaccua
-
Hola Pietro, has probado en grabarlas en el mismo programa, es decir con tu programador?, asi sacamos la duda de que no funciona la eeprom?
por ejemplo, agrega en tu programa
ORG H"2100"
DE 4 ,1, 1, 1, 1, 1, 1, 1, 1, 0, 5,32, 32 ; 5
DE 0, 8, 0, 4, 0, 4, 0, 0,0A,0A, 0, 0
y luego lee la eprom...
avisa como fue...
Norberto
-
Hola norberto,
he hecho un pqueño programa que contiene las instrucciones que me has indicado y una rutina de lectura que tengo que muestra las posiciones de memoria eeprom en un display a partir de la 00 .
solo grabe el programa y luego revise a partir de la 00.......,nada todo esta en cero.
otra prueba,...puse tambien estas instrucciones al final de mi programa, lo compile sin ningun problema y luego fui a leer la eeprom desde la 00 , nada tampoco la memoria sigue en 00.
he escrito lo que me has indicado sin saber bien que Significa "DE"
y me imagino que despues de ORG el H2100 debe referirse de alguna manera la direccion de la eeprom. si puedes te agradecere me lo expliques.
como ves mi amigo esto sigue misterioso.
saludos pietrodilaccua
-
hola a todos
petrodilaccua yo use ese codigo en un programa para controlar 3 bombas de agua con 4 sensores y uso la eeprom para saber cual fue la ultima bomba que se uso y asi encender la siguiente primero. y el programa me funciona muy bien.
luego use el winpic800 y al codigo le escribi varios mensajes a la eeprom como mi nombre, telefono, compañia, ect. y les puse el codigo CP para que solo puedan leer la eeprom.
puedes mandarme tu programa por privado para simularlo en el mplab y asi saber donde esta el fallo.
saludos desde rep dom. miltonmc
-
amigos
despues de un tiempo de desaparecido acabo de enviar a miltonmc mi programa segun me lo indico.
en todo caso si alguen tiene una rutina probada y funcionando de grabacion de la eeprom del 16f628 le voy a agradecer me la envie para probarla.
saludos desde santiago de chile pietrodilaccua
-
Hola, estoy en el mismo embrollo.... espero que en estos meses estimado pietro ya tengas la respuesta para este problema de eeprom. Por favor si es así, enviame tu receta.
Gracias de antemano
-
Bueno.... Hola a todos...
tengo tiempo usando el PIC84A pero por las mismas razones que muchos de ustedes tienen, cambie al 628A. Pero tendo el mismo problema que nuestro amigo que inicio esta charla... No graba mi código en la eeprom. en el 84A funciona perfectamente, pero al hacer el cambio al 628, algo no anda bien y no se que es...
este es el código... el dato lo traigo ya listo desde otra rutina del programa. esta rutina solo la uso para grabar. EEDATA ya tiene el dato y EEADR ya fue borrada desde otro punto del programa para iniciar desde el primer registro de memoria. Insisto, en el 84A funciona perfectamente bien...
;***** Writing to EEPROM *****
EE_Pisi BCF STATUS, RP1 ; ************Recomendación de Microchip
bsf STATUS, RP0 ; Bank 1 ...
bsf EECON1, WREN;
BCF INTCON, GIE ;Disable INTs.**********************Recomendación de Microchip
NOP
NOP
BTFSC INTCON, GIE
GOTO $-4
movlw h'55' ;
movwf EECON2 ;
movlw h'AA' ;
movwf EECON2 ;
bsf EECON1, WR ; WRITE
EE_Pis1 btfsc EECON1, WR ; i
GOTO EE_Pis1 ;
bcf EECON1, WREN;
BSF INTCON, GIE ; *******************Recomendación del proveedor
bcf STATUS, RP0 ; Bank 0
RETURN ;
-
Bueno.... Hola a todos...
tengo tiempo usando el PIC84A pero por las mismas razones que muchos de ustedes tienen, cambie al 628A. Pero tendo el mismo problema que nuestro amigo que inicio esta charla... No graba mi código en la eeprom. en el 84A funciona perfectamente, pero al hacer el cambio al 628, algo no anda bien y no se que es...
este es el código... el dato lo traigo ya listo desde otra rutina del programa. esta rutina solo la uso para grabar. EEDATA ya tiene el dato y EEADR ya fue borrada desde otro punto del programa para iniciar desde el primer registro de memoria. Insisto, en el 84A funciona perfectamente bien...
;***** Writing to EEPROM *****
EE_Pisi BCF STATUS, RP1 ; ************Recomendación de Microchip
bsf STATUS, RP0 ; Bank 1 ...
bsf EECON1, WREN;
BCF INTCON, GIE ;Disable INTs.**********************Recomendación de Microchip
NOP
NOP
BTFSC INTCON, GIE
GOTO $-4
movlw h'55' ;
movwf EECON2 ;
movlw h'AA' ;
movwf EECON2 ;
bsf EECON1, WR ; WRITE
EE_Pis1 btfsc EECON1, WR ; i
GOTO EE_Pis1 ;
bcf EECON1, WREN;
BSF INTCON, GIE ; *******************Recomendación del proveedor
bcf STATUS, RP0 ; Bank 0
RETURN ;
En que momento cargas los registros EEADR y EEDATA? estos registros tambien estan en el banco1, por lo que los tienes que cargar dentro del mismo, de lo contrario no funcona,
-
Esas variables las tengo ya listas en otra rutina y funciona bien en el 84A. No veo la complejidad del codigo propuesto por el fabricante... practicamente es la misma!!!!
Pero no funciona....
Yo pienso que no es un tema de codigo, sino mas bien de configuracion de los registros.... tambien tenia problemas con el PORTA y se resolvio incluyendo las lineas de configuracion del PORTA para I/O. pero para la EEPROM no hay nada fuera de lo normal....
Simplemente no funciona...
-
yo estoy trabajando actualmente con el 16f628A, y estas son las rutinas que uso para escribir y leer en la EEPROM
ESCRIBIR:
BSF STATUS,RP0 ;BANCO 1
BSF EECON1,WREN
BCF INTCON,GIE
BTFSC INTCON,GIE
GOTO $-2
MOVLW H'55'
MOVWF EECON2
MOVLW H'AA'
MOVWF EECON2
BSF EECON1,WR
BTFSC EECON1,WR
GOTO $-1
BCF EECON1,WREN
BCF STATUS,RP0 ;BANCO 0
BSF INTCON,GIE
RETURN
LEER:
BSF STATUS,RP0 ;BANCO1
MOVWF EEADR
BSF EECON1,RD
BTFSC EECON1,RD
GOTO $-1
MOVF EEDATA,W
BCF STATUS,RP0 ;BANCO0
RETURN
Para mandarlas llamar hago lo siguiente:
;Llamada a LEER
MOVLW H'08'
CALL LEER
:Llamada a ESCRIBIR
BSF STATUS,RP0
MOVLW H'0D'
MOVWF EEADR
MOVF ESTADO,W
MOVWF EEDATA
BCF STATUS,RP0
CALL ESCRIBIR
espero te sirva
-
a mi me esta pasando lo mismo con un pic 16f873a, todos los bytes de la eeprom estan en 00 cuando deberian estar en ff, todo esto empezo cuando intente modificar la palabra de configuracion a grabar en el pic por medio de mplab, antes la eeprom funcionaba bien
-
a mi me esta pasando lo mismo con un pic 16f873a, todos los bytes de la eeprom estan en 00 cuando deberian estar en ff, todo esto empezo cuando intente modificar la palabra de configuracion a grabar en el pic por medio de mplab, antes la eeprom funcionaba bien
Tenes habilitada la proteccion de codigo?