Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

11/12/2008 #1


Leer Eeprom PIC16f877A
Hola, Tengo un problema. Resulta que estoy haciendo un sistema de alarma para el hogar con un PIC16f877A, un display de 4 led 7segmentos y un teclado matricial, todo funciona bien la cosa es a la hora de leer la Eeprom no logro entender la rutina, la dejo para que la analisen y me digan donde esta el error, La de escritura que es mas complicada la entendi y funciona ok pero ya se me formo una laguna en la cabeza.
Gracias de antemano!

de la rutina GUARDAR salto aqui hasta terminar de guardar los 4 digtos
;------------------copiar de Eeprom a Flash-----------------


LEER BSF STATUS,RP1
BCF STATUS,RP0 ; Banco 2
MOVF DATA_EE_ADDR,W ; direccion a leer, la misma la voy incrementando
MOVWF EEADR ; Dirección de leer
BCF EECON1,EEPGD ; punto de Datos
BSF EECON1,RD ; EE leer
BCF STATUS,RP0 ; Banco 2
MOVWF 0X11 ;dato a cargar en flash
GOTO GUARDAR ;salto a rutina guardar (en flash)
11/12/2008 #2

Avatar de Moyano Jonathan

yo te puedo ayudar con el programa pero en C de CCS.
11/12/2008 #3


no entirndo nada de C, Me gustaria aprender pero no se por donde empezar, el problema es que tengo todo el programa en asm ye es muuuy extenso como para hacerlo nuevamente, tendria que hacer un programa pequeño para aprender.
Vos no entendes ASM?
11/12/2008 #4

Avatar de Moyano Jonathan

y más o menos , tengo un libro que te explica todo relacionado a la programación en asm pero es para el 16f84a. Aunque si me pongo lo entiendo.

Tengo una librería de control de la eeprom interna del pic , que en una de esas te puede ayudar (en ASM)
Archivos Adjuntos
Tipo de Archivo: rar eeprom_147.rar (1,1 KB (Kilobytes), 163 visitas)
11/12/2008 #5


Gracias pero la del 877 es totalmente diferente para grabar, tiene4 bancos no como la del 84 que solo tiene 2 voy a ver como me arreglo. Ya pude grabar pero me hago lio con los bancos para leer y eso que grabar es mucho mas complicado.
Una ultima consulta Como hago para aprender C? Realmente no se por donde comenzar. Como aprendistes vos?
11/12/2008 #6

Avatar de Moyano Jonathan

Primero que nada la estructura de programación (lo más largo), luego de a poco ir aprendiendo los comandos. Yo utilizo c de ccs y tengo que leer el manual en inglés para aprender los comandos pero igual no es dificil y te olvidas de los bancos de memoria.
11/12/2008 #7


de donde descargo todo el software y el manual?
11/12/2008 #8

Avatar de Moyano Jonathan

El manual de acá:
http://www.ccsinformación.com/downloads.php

y el soft demo de la misma página......aunque googleando lo podés encontar full , te pondría el link pero por politicas del foro no puedo
11/12/2008 #9


mil gracias!
Voy a tratar de solucionar mi problema y luego comienzo con C...
11/12/2008 #10


Hola marcelo26, supongo que habrás consultado el datasheet del pic, ahí hay una rutina de ejemplo para leer la EEPROM (también hay un ejemplo de escritura), usando esa rutina de ejemplo y la rutina que pusiste tu al principio se obtiene la siguiente rutina:
Código:
LEER		BSF		STATUS, RP1		;
		BCF		STATUS, RP0		; Banco 2
		MOVF	DATA_EE_ADDR, W	; Direccion a leer, la misma la voy incrementando
		MOVWF	EEADR			; Direccion de leer
		BSF		STATUS, RP0		; Banco 3
		BCF		EECON1, EEPGD	; Apunta a la memoria de Datos
		BSF		EECON1, RD		; Comienza lectura
		BCF		STATUS, RP0		; Banco 2
		MOVF	EEDATA, W		; W = EEDATA (lee memoria EEPROM y lo guarda en W)
En ese momento ya leiste la memoria EEPROM y el valor de la lectura está en el registro de trabajo W, además estás en el banco 2, lo que sigue ahí es guardar ese valor en algún registro o usarlo para el propósito que quieras.

Tu rutina no funcionaba porque nunca cambiabas al banco 3 y en ese banco es donde se encuentra el registro de control EECON1. Prueba la modificación de la rutina, debe funcionar sin problemas.
11/12/2008 #11

Avatar de Moyano Jonathan

dale y luego te puedo pegar una mano en c , aunque a mi me falta mucho todavía para considerarme alguien respetable en el tema de la programación en c , pero de a poco todo se puede

pd: como el dicho con paciencia y con saliba el elefante.....
11/12/2008 #12


pic-man cuando pondo la rutina leer se cuelga todo, si la saco funciona todo ok. Me faltara salir de algun banco o poner algun bit a 0?

me quedó así

LEER MOVF 0x10,w ; Numero de direccion de eeprom 0 a 3
BSF STATUS,RP1 ;
BCF STATUS,RP0 ; Banco 2
MOVF DATA_EE_ADDR,W ;Direccion a leer, la misma la voy incrementando con (0x10)
MOVWF EEADR ; Direccion de leer
BSF STATUS,RP0 ; Banco 3
BCF EECON1,EEPGD ; Apunta a la memoria de Datos
BSF EECON1,RD ; Comienza lectura
BCF STATUS,RP0 ; Banco 2
MOVF EEDATA,W ;W = EEDATA (lee memoria EEPROM y lo guarda en W)
MOVWF 0X11 ; EEDATA a 0x11
GOTO GUARDAR ;Salto a guardar el dato
11/12/2008 #13


Por eso aclaré que al final terminas en el banco 2, si quieres cambiar al banco 0 debes poner un BCF STATUS,RP1
12/12/2008 #14


Ya vi cual es el problema pero no puedo solucionnarlo porque no se como se genera el mismo.
lo que pasa es que cuando trato de leer sigue todos los pasos hasta terminar de leer ahora cuando muestro un numero en el display se traba en la tabla, hago CALL Tabla salto a (TABLA ADDWF PCL,F) tomo el numero y RETLW y ahi en ves de regresar donde se quedo antes de CALL salta a cualquier lado y se estanca, pero si saco la rutina de leer Eeprom anda todo ok. yo supongo que me fralta reiniciar algun Bit luego de leer. Que opinan?
Gracias por su ayuda!
12/12/2008 #15


Sin duda ese es el problema es cuando hago una llamada CALL a la Tabla, esta en ves de regresar donde se realizo la llamada salta nuevamente a "Leer EEprom" ahora si saco la etapa de leer eeprom el programa funciona ok. La eeprom la lee bien cuando leo las bariavles leidas las mismas estan con los valores de la eeprom.
Ya me estoy quedando sin hideas
12/12/2008 #16


¿Qué te parece si publicas el código para ver por que pasa eso? En algún lado debe haber un error, pon tu código para poder encontrar la falla.
12/12/2008 #17


Aca dejo todo completo
No soy un capo en esto disculpen si esta desprolijo...
Archivos Adjuntos
Tipo de Archivo: rar alarma_165.rar (19,3 KB (Kilobytes), 81 visitas)
12/12/2008 #18


En mi curso de ASM está explicado el porqué.

Entra en mi curso y busca la parte del CALL y GOTO. Se llama ASM desde 0.
12/12/2008 #19


La verdad es que no tengo idea, no entiendo muy bien el código, pero no veo nada que pueda hacer que al regresar de la tabla vuelva a la rutina de lectura de la EEPROM.
12/12/2008 #20


Yo tampoco.
Ya puse movlw 0x03 y movwf PCLATH antes de call com en tu tutorial pero nada!
es raro porque en el pic 16 f84 arme programas con eeprom y no tube problema
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.