Autor Tema: Dudas sobre como hacer un timer de 10 segundos usando TMRO  (Leído 4491 veces)

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

Desconectado richard12

  • PIC10
  • *
  • Mensajes: 12
Dudas sobre como hacer un timer de 10 segundos usando TMRO
« en: 22 de Mayo de 2007, 21:49:03 »
hola a todos lo que nescesito es hacer un timer que me chequee si hay un 1 en el port A por 10 segundos. Miren para que me entiendan mejor el programa que contiene el pic no trabaja constantemete trabaja a intervalos o sea que el equipo que alimenta mi pic le pone y le quita la alimentacion yo se que la alimentacion nunca va a mantenerse por un periodo prolongado y nunca seria mas de 10 segundios lo que trato de hacer es detectar cuando si mi PIC lo tratan de hacer trabajar fuera del equipo en el que esta trabajando para leer la Eprom y sacar los datos que tengo guardados ahii los cuales no se pueden proteger activando la casilla CP del programdor y quiero implementar este contador para si detecto que me quieren leer la eprom borrarla antes de que me la lean pero tengo dudas sobre como implementar el timer, uso un PIC16F84A y programo en ASM con MPLAB 7.2.

De antemano muchas gracias confio en ustedes este sito es lo maximo
                                                             saludos. :-/ :-/ 

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: Dudas sobre como hacer un timer de 10 segundos usando TMRO
« Respuesta #1 en: 23 de Mayo de 2007, 06:52:40 »
Hola richard12!

Lo más fácil no sería guardar los valores en la eeprom ya encriptados?

Me explico, si quieres guardar el valor 53 en la eeprom, guarda un valor que sumandole un determinado número te de 53.

Por ejemplo, en la eeprom guardas el valor 28 y... en tú programa, cada vez que leas ese valor le sumas 25.

Valor recogido de la eeprom? 28
Valor que sumas al de la eeprom? 25
Valor correcto que querías guardar? 53

Que te lea la eeprom quien quiera, no sabrá interpretar esos valores.

Evidentemente, no hay que hacer algo tan simple, marea un poco los valores y juega con ellos, así será difícil que alguien los entienda.


Un saludo desde Alicante.

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: Dudas sobre como hacer un timer de 10 segundos usando TMRO
« Respuesta #2 en: 23 de Mayo de 2007, 08:15:25 »
Primero una sugerencia, pon comas y puntos a tus mensajes. Se hace francamente difícil y molesto leerlo entero.

Respecto al programa, yo optaría por una solución tirando a lo que dice Azicuetano. No puedes asegurar que en esos 10 segundos no sean capaces de leerte la memoria, almenos parte de ella. Lo que no entiendo muy bien es porqué la alimentación se corta, si es a propósito o no.

Busca por google algún algoritmo sencillo para encriptar y fíjate cómo funciona para poder hacer el tuyo propio sin consumir muchos recursos.

Si aún así lo quieres hacer con el timer, la clave está en, conociendo la frecuencia de reloj, saber cada cuánto interrumpe el timer. A partir de eso y mediante un pre-escaler hacer que ese tiempo se multiplique por el valor adecuado. Y luego tener una variable que se incrementa dentro de la interrupcion del timer hasta que alcanza el valor para un tiempo de 10 segundos. Seguro que en el foro hay ejemplos de esto.

Un saludo!!

Desconectado richard12

  • PIC10
  • *
  • Mensajes: 12
Re: Dudas sobre como hacer un timer de 10 segundos usando TMRO
« Respuesta #3 en: 23 de Mayo de 2007, 08:49:35 »
Gracias por sus sugerncias, en este mensaje pondré cuidado con los signos de puntuacion; El metodo que me sugieren no es efectivo para mi proyecto, por que realmente lo que trato de ocultar es un algoritmo de incrementacion de determinados números en la eprom, y de esta forma si sumase a cada numero un determinado valor a la hora de mi programa leerlo; aun asi los numeros seguirian aumentando de acuerdo al algoritmo correspondiente. Es verdad que en 10 segundos no puedo asegurar que no me lean la memoria pero realmente eso no me interesa lo que me interesa es como ya dije que no vean el algoritmo, el cual en 10 segundos si es imposible de detectar por que antes de que incremente se borraria o pudiera programar que no avanzara cualquier modo de proteccion eso ya sería elección mia. Respecto a por que la alimentacion se corta es por que el equipo donde trabaja mi PIC carga el programa en memoria y desconecta la alimentación; cuando va a escribir en la eprom vuelve a energizar el PIC escribe en eprom y carga el programa una vez mas en la memoria, trabaja asi consecutivamente. Uso un oscilador RC y tengo una R conectada a la patilla PORTA,3 que sería la que me indicaría el 1 sotenido en esa patilla.

    Trataré de seguir buscando un ejemplo pero si pudieran ayudarme se los agradecería infinitamente SALUDOS

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 627
Re: Dudas sobre como hacer un timer de 10 segundos usando TMRO
« Respuesta #4 en: 23 de Mayo de 2007, 10:42:06 »
richard , si entendi bien tu primer post lo que te preocupa es que alguien saque el microcontrolador del equipo que lo alimenta y lea lo que tiene. si es asi la unica forma es activar la proteccion de codigo (CP) al momento de grabarlo , porque si alguien saca el microcontrolador y lo pone a un circuito grabador , el PIC entrara a modo de programacion y no hay nada que tu puedas poner en tu programa  que evite que el PIC sea leido. una vez leido el programa se desensambla y se analiza. Pero si activas CP lo unico que leeran son ceros .

Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado richard12

  • PIC10
  • *
  • Mensajes: 12
Re: Dudas sobre como hacer un timer de 10 segundos usando TMRO
« Respuesta #5 en: 23 de Mayo de 2007, 11:33:41 »
Si es verdad eso es si colocan el pic en un grabador, pero si tienen un software que actua tal como el equipo en el cual trabaja el pic pueden leer la epom, pero a diferencia del equipo aqui la alimentacion no seria a intervalos por que tuvieran que alimentar el pic con una fuente de corriente continua y ahii seria cuando yo lo detectaría entienden no tiene que ser 10 segundos puede ser menos incluso creo que con 6 o 7 segundos me sobra el equipo no mantiene la alimentacion por mucho tiempo.
                          Gracias a todos muchas gracias

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: Dudas sobre como hacer un timer de 10 segundos usando TMRO
« Respuesta #6 en: 23 de Mayo de 2007, 11:48:59 »
Yo creo que alguien que de verdad quiera leer la memoria intentará poner el PIC en un programador para leerla antes que diseñar un programa para leerlo "en vivo".

Yo cogería un PIC con CP y te olvidas del asunto.

Sobre el timer, ya te he dado la solución!! Frecuencia de reloj --> Interrupción Timer0 --> Preescaler --> Contar veces que salta la interrupción --> multiplicar veces que salta por tiempo entre saltos --> esperar a que eso sean 10 segundos!!

Te pondría el código en ASM pero trabajo con C. En el foro seguro que hay mil ejemplos de cómo se usa el timer en ASM.

Un saludo!!
« Última modificación: 23 de Mayo de 2007, 19:02:18 por DarkVect »

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Dudas sobre como hacer un timer de 10 segundos usando TMRO
« Respuesta #7 en: 23 de Mayo de 2007, 12:23:34 »
Bien, por lo que veo deseas proteger los datos almacenados en EEPROM contra escritura, si es así deberás utilizar algún método de encriptación o identificación del equipo que solicita los datos al uC, como si fuese una página WEB con user y pass, o ambas cosas.

No creo que un sistema como el que has pensado sea muy efectivo, porque eventualmente el que intenta leer esos preciados datos encontrará la forma de obtenerlos sin muchas dificultades. Entonces lo mejor será proteger a los datos mismos y no al uC, con ecriptación de los datos y autenticación del que los lee, ya la cosa se complica para el posible hacker.

un saludo Reinier

Desconectado richard12

  • PIC10
  • *
  • Mensajes: 12
Re: Dudas sobre como hacer un timer de 10 segundos usando TMRO
« Respuesta #8 en: 23 de Mayo de 2007, 12:25:47 »
Hola de nuevo y disculpen mi reiteración pero soy practicamente un novato, y no había trabajado con el TMRO nunca. Hice un ejeplito aqui mas o menos de lo que pretendo hacer. ¿Pudiera alguien corregirmelo?. Tengo dudas con el preescaler para aumentar el tiempo entre otras dudas y disculpen mi ignorancia recuerden siempre que  ¨Todos somos muy ignorantes pero no todos ignoramos las mismas cosas¨ 
                      Saludos y mil gracias


   __CONFIG   _CP_ON &  _WDT_OFF & _PWRTE_ON & _RC_OSC
    LIST       P=16F876A
    INCLUDE  <P16F876A.INC>

    CBLOCK    0x0C
    ENDC
 

    ORG     0

Inicio
    bsf        STATUS,RP0            ; Banco 1.
    movlw    b'10000111'
    movwf    OPTION_REG             ; Prescaler de 256 asignado al TMR0
    bcf        STATUS,RP0           ; Acceso al Banco 0.
Principal
    BTFSS     PORTA,3               ; Chequeo si PA= 1
    call    pausa                   ; aqui debe transcurrir el tiempo (pienso yo)
    BTFSS    PORTA,3                ; De nuevo Chequeo si PA= 1
    GOTO     EpErase                ; Y si es asi borro la eprom           
    goto     Principal

pausa
     clrf    TMR0                ;reset del contador del TMR0
    bcf        INTCON,T0IF            ; TOIF = 0
desborda
    btfss    INTCON,T0IF            ; desborda el timer?
    goto    desborda            ; si no se desplaza a la etiqueta desborda
    return
 
EpErase
NOP
goto EpErase
End

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 627
Re: Dudas sobre como hacer un timer de 10 segundos usando TMRO
« Respuesta #9 en: 23 de Mayo de 2007, 13:24:31 »
richard12 creo que podrias usar la interrupcion por desborde del TMR0 asi el PIC ejecuta normalmente el programa hasta que tengas los 10 seg , una vez que configures el TMR0 con preescaler de 256, lo borras y la habilitas su interrupcion y luego pasas a realizar el programa como esperas.

EN la rutina de interrupcion utilizas una variable que cuente las veces que entras a la interrupcion y asi poder controlar la cantidad exacta de tiempo . suponiendo un oscilador de 4 MHz, tendrias un ciclo de instruccion de 1 us , entonces el TMR0 desbordaria cada 65,5 ms, con una variable ContInt_T0 controlas la cantidad de desbordes y la ajustas para los 10 seg , esto seria algo asi como 153


 el codigo seria algo mas o menos asi

org   0x04     ;Vector de interrupcion

Int_TMR0
   
     incf    ContInt_T0 , F
     movf  ContInt_T0,W
     xorlw  .153                ;Pasaron los 10 seg??
     btfsc   STATUS,Z
     goto   $                     ;Si , entonces nos quedamos aqui y no nos movemos
     bcf      INTCON,T0IF   ;No , entonces continuamos
     retfie           

La instruccion goto $  hara que el contador de programa se quede en el mismo lugar , asi tendras un ciclo infinito del cual solo se prodra salir reseteando el PIC.

Pero tambien deberias considerar el poner algun password para leer los datos de la EEPROM , o algun tipo de encriptacion como te aconsejaron antes.

Saludos

La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube


 

anything