Interrupciones RBI y escritura en la EEPROM

Hola amigos, soy entusiasta de los microcontroladores PIC. Actualmente trabajo con un PIC 16F877A y deseo realizar un control de velocidad para un motor Hidraulico. La primera parte del proyecto es introducir a mi sistema dos variables modificables (xx y yy) desde tres botones conectados a las Entradas RBI y despues de modificar los valores quiero que los datos queden guardador en la EEPROM del microcontrolador.

La gran pregunta es: Como debo hacer para guardar los datos de las variables XX y YY en la EEPROM si estoy atendiendo las entradas RBI dentro del proceso de interrupción?

Describo como funciona mi proyecto:

La atención a las entradas RBI debe ser por interrupciones de la siguiente manera:

Despues de iniciar, configurar el LCD, las entradas y las Interrupciones el micro recupera de la EEPROM dos valores que son guardados en las variables XX y YY visualiza los mensajes "VALOR1=XX" y "VALOR2=YY" pasando a estado de reposo y se visualizara en un LCD un mensaje: "EN ESPERA"

RB5: al activar esta entrada en un display LCD se visualizara un valor de un "mensaje1" durante 1 segundo despues de esto se visualizaran en LCD los mensajes "VALOR1=XX" y "VALOR2=YY". y nuevamente se visualizara el mensaje "EN ESPERA"

RB6: al activar esta entrada en un display LCD se visualizara un valor de un mensaje2 durante 1 segundo despues de esto se visualizaran en LCD los mensajes "VALOR1=xx" y "VALOR2=yy".
y nuevamente se visualizara el mensaje "EN ESPERA"

RB7: al activar esta entrada no sucede nada. ( menos de 1 segundo)

RB7: al activar esta entrada durante 1 Segundo o mas el sistema pasara a un "modo de configuracion" y las variables XX y YY seran modificables a traves de las entradas RB6 y RB5 incrementadolos en una unidad por cada pulsación de entrada hasta lograr el valor deseado, al llegar a un limite maximo previamente definido el valor regresa a un valor inicial y sigue incrementando.

Activando RB7 durante 1 segundo o mas el sistema regresara a su "modo de espera". Y se deberan guardar los valores de XX y YY en la memoria EEPROM

Salvar datos en la EEPROM no es problema, hacer las rutinas para las entradas RBI tampoco pues me he basado en el libro: MIcrocontrolador PIC16F84 de Palacios y Remiro especificamente en el programa INT_TEMPORIZADOR.ASM de la pagina 277.

Agradezco su atención.
Roberto.
 
y porque necesitas utilizar interrupciones? es un sistema muy sencillo, yo lo que haria es hacer una especia de máquina de estados en el que, en primer lugar escribo en el LCD lo que me haga falta, luego escribo en la eeprom, si es que tengo que hacerlo, y luego reviso una por una todas las entradas. Luego configuraria un timer de 1 segundo de forma que cuando lo necesite lo habilito y ya está.
Un saludo.
 
Gracias. La descripcion que dí es solo una de las varias cosas que tiene que hacer mi sistema y quiero avanzar paso a paso, pero dejame hacer una descripción general de todas las cosas que deseo que mi sistema haga:

Medición de velocidad de un camión. Se usaran sensores de inducción en la corona del diferencial.
Medicion de RPM de un motor hidraulico. Se usara un sensor de induccion y una rueda dentada.
Control de una bomba hidraulica a traves de una electrovalvula usando PWM ( AL CONTROLAR LA BOMBA SE HACEN VARIACIONES DE VELOCIDAD EN EL MOTOR HIDRAULICO)
Programación de los parametros que determinan de que manera se debe controlar el motor hidraulico a traves de tres botones, no deseo usar teclado ( no por el momento)
La medicion de velocidad y RPM se logra utilizando en micro en modo de captura. (Primera interrupcion)
Uso un timer adicional que desborde si el camion o el motor hidraulico se detienen (Segunda Interrupción)
El modo de programación se logra despues de pulsar durante mas de un seg la entrada RB7 (tercera interrupcion)
Despues de configurar el sistema debo guardar los datos en la eeprom (cuarta interrupcion)

El tratamiento de la interrupcion lo deseo hacer por "pooleo" de banderas y no por pooleo de entradas pues me quitaria precision en las mediciones de RPM y Velocidad.

Espero haber sido claro.

Voy a anexar un dibujo.
 

Adjuntos

  • ESQUEMA.jpg
    ESQUEMA.jpg
    52 KB · Visitas: 6
Última edición:
vale pero, sigo pensando que la lectura de las entradas es mas sencillo hacerlo por pooling. Te explico como lo haria yo.
Las interrupciones del timer de que desborda y el modulo de captura las dejo tal cual, luego la lectura de las entradas la hago en el bucle. si el portB = o, no hago nada, si portB= 0x80, entonces pongo en marcha el timer y salgo, ahi vamos a estar entrando siempre a RB7, cuando se cumpla que (RB7 = 1 && timer1s = 1) entonces entro en modo programación, y habilito en el bucle que se puedan leer RB6 y RB7 mediante una variiable, por ejemplo programacion = 1, p.e.(RB6 == 1 && programacion == 1), Luego para salir del modo programación hago lo mismo, El lcd puedes hacer que se actualice cada 100ms, aquí podrias utilizar el un timer de 100ms, y cada 10 interrupciones es un segundo, y tienes 2 temporizaciones en un solo timer. cuando salimos del modo programacion, es decir (RB7 = 1 && programacion = 1 && timer1s = 1), almaceno datos en la eeprom. No se si se habrá entendido... preguntame si no entendiste algo

Un saludo.
 
Atrás
Arriba