Autor Tema: Comparar 2 Posiciones de la EEPROM pic16f84a  (Leído 3373 veces)

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

Desconectado Vangeluz

  • PIC12
  • **
  • Mensajes: 74
    • Vangeluzweb
Comparar 2 Posiciones de la EEPROM pic16f84a
« en: 13 de Septiembre de 2013, 02:45:51 »
Hola q tal de nuevo. Gracias a todos por brindarme ayuda pude avanzar muchisimo, en mis proyectos y experimentos,
aunque aun me falta muchisimo mas , ahora tengo una inquietud a la hora de comparar 2 datos guardados en la EEPROM

Tengo un contador de 3 digitos de 7 segmentos ( Unidades, decenas y centenas ).
Al mismo le coloque un guardado en la EEPROM de cada valor de display a medida que incrementa en cada pulso.
Osea en la posicion 00h de la EEPROM unidades, en 01h Decenas y en 02h Centenas.

Al iniciar el micro testea las tres posiciones guardadas anteriormente, las visualiza y continua el conteo.
Funciona correctamente, tanto al guardar, como al contar, como al iniciar de la cuenta guardada.
He usado lo siguiente:
PARA GUARDAR
Código: [Seleccionar]
clrf eeadr ;Guarda el conteo de unidades en la eeprom POSICION 0
etc .....
incf eeadr,1 ;Guarda el conteo de decenas en la eeprom  POSICION 1
etc....
incf eeadr,1 ;Guarda el conteo de centenas en la eeprom POSICION 2
etc....

Para leer use las mismas.
Ahora quisiera entrar en una rutina de programacion, con un boton y agregar Unidades, Decenas y Centenas a unas nuevas 3 POSICIONES de la EEPROM.
Osea guardar en las POSICIONES 03h, 04h y 05h 3 valores, que al llegar el conteo a esos valores guardados genere otra rutina de corte o algo por el estilo.

Ya tengo la rutina del boton, asi mismo el guardado en las ultimas 3 posiciones, pero no se como comparar los valores.
Para que quede claro seria algo asi:
Valores guardados por conteo en POSICIONES (00h Unidades) (01h Decenas) (02h Centenas)
Valores guardados por programacion en POSICIONES (03h Unidades)  (04h Decenas) (05h Centenas)
Comparar valor de Posiciones (00h con 03h), (01h con 04h) (02h con 05h)
O para hacerlo mas sencillo comparar unidad programada con unidad de conteo y asi mismo con las decenas y centenas y como consecuencia saltar a otra rutina, caso contrario seguir contando.


Desde ya muchas gracias por darme una manito !!!!
Vangeluz

Desconectado BBMNet

  • PIC12
  • **
  • Mensajes: 91
Re: Comparar 2 Posiciones de la EEPROM pic16f84a
« Respuesta #1 en: 14 de Septiembre de 2013, 02:10:31 »
De primera intención yo sugeriría que copiaras a RAM los valores de referencia que son aquellos con los que quieres que la cuenta se compare.

Ciertamente podrías hacerlo contra la EEPROM pero se me hace un esfuerzo excesivo por tanta transferencia de datos además de que los cambios de bancos de memoria eventualmente te harán copiar los datos a RAM aunque sea temporalmente.

Si lo que quieres hacer es un corte a longitud o similar que requiera precisión no te sugiero que lo hagas de esa manera.

La EEPROM está hecha para respaldar información pero dudo que para ser usada directamente en un programa en ejecución por lo complejo de su uso.

Al menos esa es mi opinión.

Un saludo.

Desconectado Vangeluz

  • PIC12
  • **
  • Mensajes: 74
    • Vangeluzweb
Re: Comparar 2 Posiciones de la EEPROM pic16f84a
« Respuesta #2 en: 14 de Septiembre de 2013, 05:20:01 »
De primera intención yo sugeriría que copiaras a RAM los valores de referencia que son aquellos con los que quieres que la cuenta se compare.

Ciertamente podrías hacerlo contra la EEPROM pero se me hace un esfuerzo excesivo por tanta transferencia de datos además de que los cambios de bancos de memoria eventualmente te harán copiar los datos a RAM aunque sea temporalmente.

Si lo que quieres hacer es un corte a longitud o similar que requiera precisión no te sugiero que lo hagas de esa manera.

La EEPROM está hecha para respaldar información pero dudo que para ser usada directamente en un programa en ejecución por lo complejo de su uso.

Al menos esa es mi opinión.

Un saludo.

gracias por tu respuesta: lo que intentaba hacer que aun estoy en la prueba seria algo como:
Código: [Seleccionar]

Ejemplo: el numero 111,
yo uso el PORTB como salida y los 8 bits para los 7 segmentos b'00000000'
con lo que lo estoy usando de la siguiente configuracion    b'00000000' = b'0gfedcba'
Para el numero 111 deberia poner el PORTB con b'00000110' = ByC, formando el numero 1
Repitiendolo con la multiplexacion en los tres display daria el numero 111
Ahora, cada ( 1 ) esta guardado en su respectiva memoria, 00h, 01h y 02h
Luego lo mismo con los digitos que yo les llamo de programacion en 03h, 04h y 05h.
Ahora lo que yo pensaba hacer es lo siguiente:
Código: [Seleccionar]
En cada incremento pongo lectura a la unidad, poniendo un condicional y si es b'00000110' ( NUMERO 1 ) en la posicion 00h salte a leer la posicion de unidad 03h,
si es igual, pase a la decena 01h, comparar nuevamente el numero 1 con el de la posicion 04h, si es asi saltar a las centenas, y si da igual todo prender un led por ej.

En caso de no dar con un numero de un digito, que quede saltando hasta que llegue...

Espero que se entienda lo que quiero encarar, ya lo tengo casi todo se programa y me da lectura de programacion,  guarda los 6 estados, solo falta la comparacion.
Voy a probar con esta secuencia a ver que pasa
Vangeluz

Desconectado BBMNet

  • PIC12
  • **
  • Mensajes: 91
Re: Comparar 2 Posiciones de la EEPROM pic16f84a
« Respuesta #3 en: 14 de Septiembre de 2013, 10:29:08 »
Por lo que entendí la comparación la estás realizando contra los dígitos del display.

¿No sería más fácil contra los dígitos del contador?

Suerte.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Comparar 2 Posiciones de la EEPROM pic16f84a
« Respuesta #4 en: 14 de Septiembre de 2013, 14:53:07 »
Citar
¿No sería más fácil contra los dígitos del contador?

Si Vangeluz, creo que tiene razon BBMNet, no creo que sea buena idea guardar la codificacion de los segmentos, ya que si sabes el numero el codigo para enviar al segmento lo tienes en tablas, las tablas entan en memoria de programa que no se te van a borrar ¿No?

Desconectado Vangeluz

  • PIC12
  • **
  • Mensajes: 74
    • Vangeluzweb
Re: Comparar 2 Posiciones de la EEPROM pic16f84a
« Respuesta #5 en: 15 de Septiembre de 2013, 04:15:16 »
Citar
¿No sería más fácil contra los dígitos del contador?

Si Vangeluz, creo que tiene razon BBMNet, no creo que sea buena idea guardar la codificacion de los segmentos, ya que si sabes el numero el codigo para enviar al segmento lo tienes en tablas, las tablas entan en memoria de programa que no se te van a borrar ¿No?
Si me suena sensillo, pero me hice una bola de posibilidades y me hice una laguna en la cabeza.
Como cabeza dura sigo pensando en comparar por ejemplo las unidades guardadas tanto la que contea, como la programada.
Osea la programada se programa y queda fija esperando que la de conteo llegue a su igualdad.
Pensaba algo asi:

Código: [Seleccionar]

A1    equ   0x0C   ; UNIDAD DE CONTEO CADA 1 SEGUNDO
A2    equ   0x0d   ; UNIDAD DE PROGRAMACION

                                movf         A2,w         ; UNIDAD DE PROGRAMACION
subwf A1,W ;Resta/compara con dato A2
btfsc STATUS,Z ;Son iguales
goto IGUALES ;Si
btfsc STATUS,C ;No. es mayor
goto MAYOR
MENOR
             SEGUIR CON LA RUTINA DE CONTEO NORMAL

IGUALES
              GOTO   LOQUESEA

MAYOR
              NO SIRVE, TIRAR EL PIC A LA $%&/ Y DEDICARME A OTRA COSA

Espero me sirva esto ya que no se como seguir .... gracias a todos  estoy aprendiendo .... a quemarme la cabeza !!!!
Vangeluz

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Comparar 2 Posiciones de la EEPROM pic16f84a
« Respuesta #6 en: 15 de Septiembre de 2013, 05:09:00 »
Pues creo que si que te servira asi como lo tienes, ponlo en el MPLAB y simulalo, ahi veras si de verdad hace lo que quieres o tienes que cambiar algo, todos tenemos que hacerlo asi, tengamos experiencia o seamos novatos, no queda otra, el MPLAB es el que dicta sentencia  :lol: :lol:

Desconectado Vangeluz

  • PIC12
  • **
  • Mensajes: 74
    • Vangeluzweb
Re: Comparar 2 Posiciones de la EEPROM pic16f84a
« Respuesta #7 en: 15 de Septiembre de 2013, 07:27:31 »

Muchachos, gracias a todos por su ayuda, al final fui tan cabeza dura que lo pude hacer como queria.
Mis limitados conocimientos me llevaron a hacer esa estupides que dige y quedo perfecto.
Al principio me saltaba siempre, porque tanto la programacion como el conteo arrancaban a 000, cosa que me llevo muchisimas horas ( para no decir dias ) en averiguarlo.
Pero asi se aprende !!!!!, aca dejo como estupidamente lo solucione


Código: [Seleccionar]

A1 = UNIDAD DE CONTEO CONSTANTE
A2 = UNIDAD QUE PROGRAMO PARA QUE CORTE

movlw d'3' ; SELECCIONA LA 4 POSICION DE LA EEPROM
call leer ; LEE EL NUMERO GUARDADO
movwf A2 ; LO PASA AL REGISTRO A2
movf A2,W                 ;Carga el dato A2
movlw d'0' ; SELECCIONA LA 0 POSICION DE LA EEPROM
call leer ; LEE EL NUMERO GUARDADO
movwf A1 ; LO PASA AL REGISTRO A1

movf A1,W
subwf A2,W ;Resta/compara con dato A1
btfsc STATUS,Z ;Son iguales (Z=1)??
goto igual ; ES IGUAL
btfsc STATUS,C ;No. A mayor que B (C=0)??
goto mayor ;Si ; ES MAYOR

menor ; POR AHORA NO HACE NADA

mayor ; POR AHORA SOLO ESTA DE VAGO
goto seguir
igual
;clrf uni ;Pone a 0 el resultado
bsf ptob,7       ; ENCIENDE UN ESTUPIDO LED
btfss ptoa,3       ;LEE UN ESTUPIDO BOTON QUE LO SACA DE LA RUTINA ESTANCADA
goto $-1           ; QUEDA PAVEANDO !!!
btfsc ptoa,3       ;SE SOLTO EL ESTUPIDO BOTON ?
goto $-1           NOP, ENTONCES QUEDA HUEVEANDO HASTA QUE SAQUE EL DEDO DE EL
goto lectura      SI, VUELVE A LA RUTINA INICIAL O A OTRA RUTINA COMPARANDO LAS DECENAS ( ESA ES LA IDEA )
seguir


Y bueno asi culmino mi duda, despues de perder cabello y las pestañas de tantas madrugadas, ahora a seguir con las decenas y centenas.
Muchas gracias a todos !!!!
Vangeluz


 

anything