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

Temas similares

05/12/2016 #1


¿Cómo guardar en la EEPROM las veces de ejecución de un programa?
hola queria saber como grabar en lenguaje basic (uso el microcode estudio ) dentro del pic 16f628a dentro de la memoria eeprom la cantidad de veces que se me lea el programa .
Lo que quiero hacer es que cada ves que el programa que tengo dentro del microcontrolador se ejecute en su totalidad me lo cuente en la memoria eeprom .Si el programa se ejecuta una ves me marque uno en la eeprom si lo ejecuta dos veces me ponga un dos en la eeprom y asi sucesivamente. ...
05/12/2016 #2
Moderador general

Avatar de DOSMETROS

¿ Que llevas hecho por tu cuenta hasta ahora ?
05/12/2016 #3


_INTOSC_OSC_NOCLKOUT
Define OSC 4
cmcon=7
trisb=0
Portb=%00000000
PAUSE 2000
led 1 var portb.0
led 2 var portb.1
led 3 var portb.2
high led 1
pause 1000
high led 2
pause 1000
high led 3
pause 1000
END
06/12/2016 #4
Moderador

Avatar de D@rkbytes

Ese programa únicamente encenderá cada LED con un retardo de un segundo y quedarán encendidos.
Lo que necesitas hacer, es escribir la memoria con un número inicial. Por ejemplo, el 1 para la primera vez.
Después, cada vez que se ejecute el programa o tras un reset, leer ese valor, incrementarlo y sobreescribirlo.
06/12/2016 #5

Avatar de ruben90

Hola, te invito a que leas el libro "microcontrolador pic16f84: desarrollo de proyectos" by Enrique Palacios Municio. Aunque esta enfocado al pic16f84 (el cual ya esta descontinuado), la temática del libro es muy buena. No puedo darte el link del libro porque va contra las políticas del foro pero utiliza el buscador de google. Viene un capitulo sobre la memoria eeprom, lectura y escritura.
06/12/2016 #6
Moderador

Avatar de D@rkbytes

Como comentario...
No sé si se trate del mismo libro "Microcontrolador PIC16F84. Desarrollo de proyectos"
Pero todos los ejemplos y ejercicios, se pueden descargar libremente desde su página oficial.
En cuanto al PIC16F84/A, aún sigue en producción por Microchip, por lo cual, no está descontinuado.
PIC16F84A - 8-bit PIC Microcontroller
microchip DIRECT
07/12/2016 #7


como seria el codigo que tendria que escribir si en el programa tuviera un boton que daria inicio al programa y cada ver que ese boton seria presionado comensaria a andar el programa y a la vez en la memoria eeprom me sumaria ( como un contador ) para saber cuantas veces fue pulsado ese boton.

---------- Actualizado después de 13 minutos ----------

_INTOSC_OSC_NOCLKOUT
Define OSC 4
cmcon=7
trisb=0
trisa=%00000001
porta=0
Portb=%00000000
prende var porta.0 ;prende

pulsar:
if prende =1 then inicio
PAUSE 1000
GOTO pulsar

inicio:
PAUSE 2000
led 1 var portb.0
led 2 var portb.1
led 3 var portb.2
high led 1
pause 1000
high led 2
pause 1000
high led 3
pause 1000
END
08/12/2016 #8
Moderador

Avatar de D@rkbytes

Puedes probar con algo así:
Código PHP:
Define OSC 4                    Definir que se trabajará con 4MHz.

Inicio:
    
Data @00                  Escribir un 0 inicial en la dirección 0 de la EEPROM interna.
    ; 
Declaración de variables:
    
Contador    Var Byte
    
Configuración de registros:
    
CMCON 7                   Comparadores analógicos OFF
    
Configuración de terminales:
    
Symbol LED1     PORTB.0   LED indicador de conteo activo
    Symbol LED2     
PORTB.1   LED indicador de conteo terminado.
    
Symbol Pulsador PORTA.0   Pulsador de inicio de programa.
    
    ; 
Ejecución inicial de conteo:
    
Read 0Contador            Leer la dirección 0 de la memoria y guardar el contenido en "Contador"
    
    
If Contador <= 10 Then      Si la variable "Contador" no ha llegado a 10...
        
High LED1               Indicar que aún no se llega a 10 ejecuciones.
        
Low LED2
        
GoTo Esperar_Pulsador   Ir a la rutina "Esperar_Pulsador"
    
Else                        ; Caso contrario... (Más de 10 ejecuciones)
        
Low LED1                Indicar que ya se superaron las 10 ejecuciones.
        
High LED2
        
GoTo Conteo_Excedido    Ir a la rutina "Conteo_Excedido"
    
EndIf

Esperar_Pulsador:
    If 
Pulsador 1 Then        Si se presiona el pulsador. (Activo en 1)...
        
Contador Contador Incrementar la variable "Contador"
        
Write 0Contador       Reescribir el valor en la EEPROM interna (Dirección 0)
        GoTo 
Programa           Ir a la rutina "Programa"
    
Else                        ; Caso contrario (Pulsador en 0)
        GoTo 
Esperar_Pulsador   Regresar a la etiqueta "Esperar_Pulsador"
    
EndIf
    
Programa:
    ; 
Hacer algo aquí:
    ; 
De ejemplo...
    
Toggle PORTB.7
    Pause 500
    
GoTo Programa
    
Conteo_Excedido
:
    ; 
Hacer algo aquí...
    ; 
De ejemplo...
    
Toggle PORTB.6
    Pause 500
    
GoTo Conteo_Excedido
    
    End 
08/12/2016 #9

Avatar de TRILO-BYTE

¿apoco 16f84a no es obsoleto?
yo opino que escribir las veces que se ejecuta el programa se va a terminar la eprom

digo

Código:
inicio

mostrar el contador de eprom

hacer la tarea

incrementrar contador eprom

escribir en eprom el contador

modo sleep
seria lo mas adecuado


pero si hacemos esto asesinariamos la eprom por la N cantidad de veces que se ejecuta el programa

Código:
inicio

bucle:

mostrar contador eprom

hacer la tarea 

incrementar contador eprom

escribir contador en la eprom

volver al bucle:
si ponemos un bucle infinito se escribira a la velocidad que se ejecuta el programa y al paso de unas horas la eprom terminara su vida util de escritura
08/12/2016 #10
Moderador

Avatar de D@rkbytes

TRILO-BYTE dijo: Ver Mensaje
¿A poco el 16F84A no es obsoleto?
Obsoleto, sí, descontinuado, no.
TRILO-BYTE dijo: Ver Mensaje
Yo opino que escribir las veces que se ejecuta el programa se va a terminar la EEPROM.
Pero si hacemos esto asesinaríamos la EEPROM por la N cantidad de veces que se ejecuta el programa.
Si se quisiera hacer lo que mencionas, se podría hacer una evaluación para determinar cuanto tiempo de vida tendrá la EEPROM, que se estima alrededor de 1,000,000 de ciclos de lectura y escritura.
Aparte se puede usar un entero de 64 bits para lograr el cometido si esa fuera la intensión.
TRILO-BYTE dijo: Ver Mensaje
Si ponemos un bucle infinito se escribirá a la velocidad que se ejecuta el programa y al paso de unas horas la EEPROM terminará su vida útil de escritura.
Podría ser, pero como el amigo aguss piensa usar un pulsador para realizar ese conteo, es más probable que lo primero que se dañe, sea el mismo pulsador.
08/12/2016 #11


¿Cómo hago si tengo tres programas y quiero con un botón cambiar los programas?
O sea, yo quiero poder seleccionar qué programa se ejecute en el PIC.
Código:
Trisb=%00000000 ;convierte todos los pines del puerto B en salidas
discoteca:      ;nombre de la subrutina
Portb=%00000001 ;enciende el puerto B.0, los demás permanecen apagados
GOSUB pedro     ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%00000010 ;enciende el puerto B.1, los demás les apaga
GOSUB pedro     ; ir a subrutina tiempo y volver cuando diga RETURN
Portb=%00000100 ;enciende el puerto B.2, los demás les apaga
GOSUB pedro     ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%00001000 ;enciende el puerto B.3, los demás les apaga
GOSUB pedro     ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%00010000 ;enciende el puerto B.4, los demás les apaga
GOSUB pedro     ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%00100000 ;enciende el puerto B.5, los demás les apaga
GOSUB pedro     ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%01000000 ;enciende el puerto B.6, los demás les apaga
GOSUB pedro     ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%10000000 ;enciende el puerto B.7, los demás les apaga
GOSUB pedro     ; ir a subrutina pedro y volver cuando diga RETURN
GOTO discoteca  ; ir al inicio del programa
pedro:          ;esta es la subrutina pedro
PAUSE 200       ;retardo de 200 milisegundos, aquí podemos cambiarlo
RETURN          ;volver al GOSUB que le envió


IF porta.4 = 1 THEN discoteca 
IF porta.4 = 0 then 
  
Trisb=%00000000 ;convierte todos los pines del puerto B en salidas
discoteca1:      ;nombre de la subrutina
Portb=%00000001 ;enciende el puerto B.0, los demás permanecen apagados
GOSUB pedro1     ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%00000010 ;enciende el puerto B.1, los demás les apaga
GOSUB pedro1     ; ir a subrutina tiempo y volver cuando diga RETURN
Portb=%00000100 ;enciende el puerto B.2, los demás les apaga
GOSUB pedro1     ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%00001000 ;enciende el puerto B.3, los demás les apaga
GOSUB pedro1     ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%00010000 ;enciende el puerto B.4, los demás les apaga
GOSUB pedro1     ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%00100000 ;enciende el puerto B.5, los demás les apaga
GOSUB pedro1     ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%01000000 ;enciende el puerto B.6, los demás les apaga
GOSUB pedro1     ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%10000000 ;enciende el puerto B.7, los demás les apaga
GOSUB pedro1     ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%01000000
GOSUB pedro1     ; ir a subrutina pedro y volver cuando diga RETURN
Portb=%00100000
GOSUB pedro1
Portb=%00010000 
GOSUB pedro1
Portb=%00001000
GOSUB pedro1
Portb=%00000100
GOSUB pedro1
Portb=%00000010
GOSUB pedro1
Portb=%00000001
GOSUB pedro1   
GOTO discoteca1  ; ir al inicio del programa
pedro1:          ;esta es la subrutina pedro
PAUSE 200       ;retardo de 200 milisegundos, aquí podemos cambiarlo
RETURN          ;volver al GOSUB que le envió
08/12/2016 #12
Moderador

Avatar de D@rkbytes

aguss dijo: Ver Mensaje
¿Cómo hago si tengo tres programas y quiero con un botón cambiar los programas?
O sea, yo quiero poder seleccionar qué programa se ejecute en el PIC.
Realiza un conteo y ejecuta el programa por selección.
08/12/2016 #13

Avatar de Gudino Roberto duberlin

Me parece que NO tiene sentido grabar directamente en la EEPROM, todas las veces que se ejecuta el programa. Más bien almacenar el dato en una variable y cuándo el PIC es desconectado de la alimentación, guardar ese dato en dicha EEPROM. Claro que para lograr ésto, debe detectarse una baja de tensión en la línea antes del regulador de 5V. y mediante un condensador sostener la tensión unos cuantos milisegundos, para que el PIC logre almacenar los datos antes de apagarse.
09/12/2016 #14

Avatar de TRILO-BYTE

pudiera ser una pilita CR2032 pudiera ayudar no? con un pin detectas un nivel logico alto cuando la energia se vaya al demonio la pilita aun sigue alimentando al micro y el pin ya no tendra un nivel logico entonces es ahi cuando entra la funcion grabar en eeprom
Respuesta
¿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 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.