Autor Tema: Lectura y almacenamiento en memoria EEPROM  (Leído 4240 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Linnaster

  • PIC10
  • *
  • Mensajes: 4
Lectura y almacenamiento en memoria EEPROM
« en: 27 de Mayo de 2015, 17:23:04 »
Soy nuevo en el foro y nuevo en el mundo de los microcontroladores... Por eso de antemano MIL GRACIAS hasta ahora me han servido muchos de los aportes de este sitio, y espero aprender más y poder aportar en el foro más adelante.
Mi problema es el siguiente: Debo trabajar con el PIC16F84A en asm y con un interruptor en el pin RB0, hacer una interrupción cuando este se ponga en uno (flanco de subida).
En el puerto A (cualquier pin) debo tener un pulsador y presionarlo un determinado número de veces, ese valor se debe guardar en la memoria EEPROM y cuando ponga el interruptor en RB0 de nuevo en 0 este valor se tiene que mostrar en los 7 pines restantes del puerto B (RB1-RB7) mediante un display 7 segmentos. Es decir si lo presiono cinco veces debo poder visualizar un 5 en mi display, luego de poner el 0 el interruptor.
Además puedo usar la librería EEPROM.INC del libro de Palacios... ¿Alguien me puede ayudar? Gracias de nuevo amigos.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Lectura y almacenamiento en memoria EEPROM
« Respuesta #1 en: 27 de Mayo de 2015, 19:19:43 »
Podrias hacerlo...

Tu codigo seria asi de simple:
Código: [Seleccionar]
Configuracion de puertos
Al comienzo de programa asignale pulso ascendente en la interrupcion del RB0,
Configura el TMR0 para que cuente desde pulsos externos (RA4) descendentes y ponelo a 0

Cuando entre a la interrupcion de RB0 lo cambias a descendente y pones a 0 el TMR0 y registro que tenga el valor a contar.
Cuando entre nuevamente cambias a ascendente y guardas el valor del TMR0 en algun registro que tenga ese valor.

Tu programa principal lo unico que hace es mostrar en el display.

Es necesario usar la memoria EEPROM ?, ya que estar escribiendo como loco en la EEPROM no es bueno. Pero si asi lo deseas entonces en ves de guardarlo en un registro que lo guarde en la EEPROM.
Tampoco es necesario usar la libreria esa, el codigo te lo da Microchip en el datasheet, como leerlo y como grabarlo.

PD: Seria bueno que tuvieras un antirebote en HW y simplificar el programa.
Con lo que dije deberias ser capaz de realizar el programa incluso sin el uso de la EEPROM ( que es lo que YO haria al principio, usando la RAM ) Solo tenes que hacer el codigo. Que te deberia llevar una hora para hacerlo todo (exagerando).

Desconectado Linnaster

  • PIC10
  • *
  • Mensajes: 4
Re: Lectura y almacenamiento en memoria EEPROM
« Respuesta #2 en: 27 de Mayo de 2015, 22:25:35 »
¿Si podría hacerlo por TMR0? es que tengo entendido que así cuenta cierto número de pulsos preestablecidos en el programa, pero en mi caso ese valor es cambiante (depende de qué tantas veces presione el pulsador en el puerto A) En eso es en lo que más encuentro dificultad a la hora de escribir el código...
En cuanto a lo de usar la EEPROM si es necesario ya que estoy viendo el curso de microcontroladores en la universidad y el profesor me lo pide así  :(
« Última modificación: 27 de Mayo de 2015, 22:27:52 por Linnaster »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Lectura y almacenamiento en memoria EEPROM
« Respuesta #3 en: 27 de Mayo de 2015, 22:32:11 »
Los Timers son contadores, cuentan pulsos, los pulsos pueden venir o del reloj ( es decir del cristal de cuarzo y luego pasando por el oscilador del pic Periodo = 4/Fosc ) o como tiene la posibilidad este TMR desde un pin exterior.

Yo te estoy ofreciendo la solucion usando un modulo que es el TMR0 y que seria fantastico para lo que pedis hacer. Observaras que con lo que puse no exige mucho codigo.

Obviamente tambien se puede hacer sin este modulo. y leer continuamente el puerto para contar. En el cual vas a tener que buscar una solucion para detectar cuando se suelta el boton. Sin afectar a tu programa.
Esta solucion puede ser simple o no dependiendo de que otras cosas mas quieras hacer en tu programa.

Con respecto al display, Si es un solo display se simplifican las cosas aun mas. Y tal ves lo puedas meter en tu interrupcion, dejando tu main con un loop, y no tendrias que guardar contexto(W y STATUS) cuando entres a la interrupcion
« Última modificación: 27 de Mayo de 2015, 22:38:27 por KILLERJC »


 

anything