TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Torete en 11 de Diciembre de 2009, 17:12:33
-
:shock:muy buenas:
tengo el siguiente percanse en la programacion con este pic en la parte de memoria eeprom, el problema es el siguiente:
tengo k grabar en la eeprom los datos obtenidos del modulo de conversion analogo/digital, la parte alta y la parte baja,
ademas tengo k incrementar no se k registro para k pueda ir almacenando en la eeprom los datos uno por uno hasta llenar esta memoria,
tengo dudas sobre los registros eeadr y eedata no tengo muy claro su funcion pero se k me sirven, estoy programando en asssembler..
desde ya muchas gracias.. :shock:
PD: creo k se grabar en la eeprom, pero no se cmo o dnd llamar a grabar para tomar los datos de la conversion e ir grabandolos sucesivamente en la eeeprom,
el programa funciona con un interruptor el cual cuando es accionado comienza la conversion, finalizada la conversion y los muestra en portb,la parte baja y portc, la parte alta, de ay debo grabar los datos en eeprom, o los debo grabar antes???
-
Hola, primero por favor lee este link:
http://www.todopic.com.ar/foros/index.php?action=globalAnnouncements;id=1
Ahí entenderás porque se modificó el título de tu tema.
Después sería bueno que dieras una vuelta por el subforo de Iniciación a los microcontroladores. Ahí tendrás la solución a tus preguntas.
Si aún tienes dudas puedes subir tu código y avances para que se revisen con más detalle.
-
Hola torete
No se mucho sobre este mundillo de la picmania
Intentare dar una idea sobre como entiendo lo que es eedat y eeadr
Eeadr es la direccion de la EEPROM en la que quieres depositar un dato como cuando das una direccion en la RAM
de proposito general :
adresh
-
Hola torete
No se mucho sobre este mundillo de la picmania
Intentare dar una idea sobre como entiendo lo que es eedat y eeadr
Eeadr es la direccion de la EEPROM en la que quieres depositar un dato como cuando das una direccion en la RAM
de proposito general :
adresh
Ola:
Entonces la que debo incrementar en 1 es EEADR para que vaya cambiando de posicion dentro de la eeprom para los nuevos valores de mi conversion??
entonces debo tomar los datos de adresh y adresl y pasarlos a eedata o no???
realmente tengo muchas dudas..
revisate en programa??
gracias
-
Pido disculpas de novato
No se que hice con mi anterior post soy un poco manazas :oops:
Si efectivamente deves incrementar la direccion de EEPROM
Ejem:
_captura del valor bajo(adresl)
_paso el valor a eedata(L)
_grabo en direccion 00 de EEPROM
_captura del valor alto(adresh)
_paso el valor a eedata(h)
_grabo en direccion 01 de EEPROM
tambien decirte que tienes una llamada a la etiqueta "leer_eeprom" la cual no tienes definida
Por ultimo no se la finalidad del programa pero la grabacion de la EEPROM es para que en un fallo de alimentacion no
pierdas los datos
entonces si visualizas primero el dato y luego lo grabas en la EEPROM cuando se resetee el dato sera el actual
si por el contrario primero grabas el dato y luego visualizas este , en un fallo de alimentacion o se resetea
visualizas siempre el ultimo dato hasta su nuevo refresco
Un saludo
-
ola
bueno parece que ya toy entendiendo un pokito mas voy a ver que pasa y te cuento...
aaa la etiqueta ta mal es "escribir_eeprom" :)
desde ya muchas gracias
-
Hola
Espero que se disipe la duda
Sigue contandonos como te va el codigo
Un saludo
-
ola ola de nuevo:
Las siguientes instrucciones deben ir despues de la conversion?, esta bien lo que estoy asiendo?
no he podido podido probarlo por la sencilla razon k me encuentro enfermo y no e podido ir al instituto :)
bsf status,6 ;selecciona el banco 2
clrf eeadr ;selecciona direccion 00 de eeprom
movf adresl,w
movwf eedata
call escribir_eeprom
incf eeadr,1
movf adresh,w
movwf eedata
call escribir_eeprom
incf eeadr,1
una pregunta el programa tengo k subirlo de nuevo o editarlo, si lo tengo k editar como lo hago, ya que soy nuevo en esto de foros, o lo subo de nuevo
-
Hola
Si deberian ir despues de la captura para asi ir refrescando la EEPROM o para ir guardando mas datos en
otras direcciones y hacer un promedio
Pienso que has entendido lo que trate de esplicarte
La ultima linea "incf eeadr,1" pienso que no te molestara a la hora de ejecucion del programa,la puedes borrar
ya que te apunta a la direccion 02 de la EEPROM
Un consejo de novato yo me haria una rutina para grabar la EEPROM y poderla utilizar en otros programas
Un saludo
-
Hola:
El proyecto que estoy realizando se trata de tomar mediciones con una celda solar (la mayor cantidad de mediciones)por ejemplo cada 1 hora las 24 hrs del dia sin k uno este presente, para posteriormente guardar los datos en la eeeprom de este pic, y llenar las 256 posiciones de la EEPROM para despues rescatar estos datos.. espero k se entienda..(por el momento todo esto lo estoy realizando en laboratorio, hasta tener el programa concluido)
muchas gracias por tu ayuda.
PD: ¿tendria k ir incrementando 1 por 1 hasta llegar a 256 o existe otra manera mas practica?
-
ola juan47:
:?
he probado el programa, con una fuente de alimentacion variable, a la entrada RA0 le meto 3 volt, despues al ver los datos que fueron grabados con el icprog hay me salta una duda en la parte de abajo lo unico k me cambia es esto...adjunto el dibujito.creo k algo esta mal
-
Hola torete
He estado muy ocupado
PD: ¿tendria k ir incrementando 1 por 1 hasta llegar a 256 o existe otra manera mas practica?
No conozco otra manera de ir incrementando la direccion de la EEPROM
he probado el programa, con una fuente de alimentacion variable, a la entrada RA0 le meto 3 volt, despues al ver los datos que fueron grabados con el icprog hay me salta una duda en la parte de abajo lo unico k me cambia es esto...adjunto el dibujito.creo k algo esta mal
Parece que solo introduce el dato en la direccion 00
Adjunta el codigo modificado ,como en tu primer podt y procurare darle un vistazo ,si el tiempo me lo permite
Un saludo
-
ay va el programita con los cambios
-
Hola torete
He probado el programa con MPLAB y me he dado cuenta de que el problema radica
que al volver de la primera grabacion en la EEPROM seguidamente se incrementa
EEADR
Al salir de la escritura se esta en el banco 0 y EEADR esta en el banco 2 por ello no se incrementaba
Deberias poner
call escribir_eeprom
bsf STATUS,6
incf eeadr
Tambien decirte que hay algunos registros de la SFR que las direcciones no se corresponden
Para todo ello te recomiendo la descarga del datasheet del dispositivo, te sera muy util
Un saludo
-
ola una pequeña duda
para tomar los datos despues de la conversion (adresl y h) tengo k primero ir a sus bancos correspondientes y despues moverlos a eedata?
puede ser k = tenga malo?
gracias probare con lo k me dijste y con esto otro y te cuento cmo me fue
graciassssssss 8)
-
ola juan47:
probe el programa pero me sale otro error, graba en la eeprom, pero ahora no me graba lo k yo quiero y ademas graba en todas la direcciones de la eeprom
cuando deberia grabar en las dos primeras posiciones, no se k estara mal en el programita, te lo envio para k le eches un vistaso vale.. (lo pruebo con 5 volt y me deberia mostar en la eeprom 03 FF, lo cual no lo ase.. me muestra puros garabatos :))
gracias 8)
-
Hola torete
Disculpa si me reitero en algunas cosas
Tambien decirte que hay algunos registros de la SFR que las direcciones no se corresponden
Para todo ello te recomiendo la descarga del datasheet del dispositivo, te sera muy util
Efectivamente le das el mismo valor al declarar los registros
;
status equ 3h
trisa equ 5h
trisc equ 7h
portc equ 7h
portb equ 6h
porta equ 5h
trisb equ 6h
adcon1 equ 1fh
adcon0 equ 1fh
adresh equ 1eh
adresl equ 9eh
conta1 equ 20h
eecon1 equ 18ch
eecon2 equ 18dh
eedata equ 10ch
eeadr equ 10dh
Si te fijas ADCON0 y ADCON1 ,por nombrar alguno,tienen el mismo valor EQU 1FH asi como otros
esto puede darte errores en los datos a guardar en la EEPROM
Esto deverias solucionarlo para que te grave los datos correctos
El otro tema de que se llena la EEPROM es devido a que no controlas su direccion (EEADR)
movf adresh,w
bcf status,5
bsf status,6 ;banco2
movwf eedata
call escribir_eeprom
bsf status,6 ;banco2
incf eeadr,1
bsf status,5
bcf status,6 ;banco1
movf adresl,w
bcf status,5 ;banco2
bsf status,6
movwf eedata
call escribir_eeprom
Al principio no pones, como en el archivo que adjuntaste anteriormente,la linea clrf EEADR
y despues de grabar los datos del registro ADRESH incrementas la direccion de la EEPROM y
grabas los datos del registro ADRESL
Esto provoca que al volver a efectuar otra conversion nueva A/D y querer otra vez volver a grabar en la
EEPROM la direccion que hay en EEADR es 01 y en consecuencia ADRESH pisa el valor anteriormante grabado
y ADRESL se graba en la direccion EEPROM 03
Un saludo
-
-efectivamente cambie las direcciones de la SFR a la que corresponden,
-tambien el clrlf eeadr lo declaro en la parte del inicio al final,
- con respecto a esta parte del programa agrege en la ultima linea un incremento en eeadr, para k cuando vuelva a realizar otra conversion grabe en la direccion 02 y 03 parte alta y baja respectivamente.
movf adresh,w
bcf status,5
bsf status,6 ;banco2
movwf eedata
call escribir_eeprom
bsf status,6 ;banco2
incf eeadr,1
bsf status,5
bcf status,6 ;banco1
movf adresl,w
bcf status,5 ;banco2
bsf status,6
movwf eedata
call escribir_eeprom
incf eeadr,1
aora el problemita k tengo es que no me esta grabando en las siguientes direcciones al realizar la siguiente conversion, por k al accionar el interruptor varias veces para un mismo dato me deberia ir grabando parte alta y parte baja, parte alta y baja asi sucesivamente , asta llenar la eeprom el problema es k no me esta incrementando como yo kiero a lo mejor me estoy equivocando en algo k no estoy viendo y no me puedo dar cuenta.
te envio el programa con los arreglos, ya no es necesario k muestre en las portb y portc la parte baja y alta..
gracias me a servido de mucha ayuda tus indicaciones, o si no todavia estaria estankado desde el principio..
-
el programa en si lo k deberia aser es lo siguiente:
ejemplo:
tomar datos cada 30 minutos (es decir k yo cada 30 minutos debo presionar el interruptor para k se inicie el programa, y grabe el dato finalizada la conversion), e ir guardandolos en la eeprom hasta llenarla, o una vez apagado el pic debo ver los datos guardados por ejemplo de 15 pinchasos, los cuales deberian estar en la eeeprom, no se si me explike bien, espero k yes
desde ya muchas gracias por tu paciencia y voluntad para enseñar
gracias...
-
Hola torete
Si en la ultima parte del codigo pusiste incf EEADR pero el problema es que la siguiente linea es un END
consecuentemente reinicia el programa comenzando de nuevo con él
Tendrias que hacer un bucle hacia comienzo esperando la nueva actuacion sobre RA3
No tienes que darme las gracias puesto que el programa lo estas haciendo tú solo
Un saludo
-
Hola
Se me olvido comentarte que el programa vuelve al inicio si tienes WDT activado
Un saludo
Feliz Navidad