Autor Tema: AYUDA !!!!!!. Tiempo real en los pic  (Leído 2956 veces)

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

Desconectado mardelpic

  • PIC10
  • *
  • Mensajes: 3
AYUDA !!!!!!. Tiempo real en los pic
« en: 21 de Diciembre de 2006, 13:07:00 »
por favor si alguien me puede tirar un dato, necesito el calculo para establecer una temporizacion en tiempo real para un 16f876, (para calcular el valor del cristal), o sino el cristal que tengo que usar :-/
« Última modificación: 21 de Diciembre de 2006, 13:10:51 por mardelpic »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: AYUDA !!!!!!. Tiempo real en los pic
« Respuesta #1 en: 21 de Diciembre de 2006, 13:40:23 »
por favor si alguien me puede tirar un dato, necesito el calculo para establecer una temporizacion en tiempo real para un 16f876, (para calcular el valor del cristal), o sino el cristal que tengo que usar :-/

Amigo, qué quieres decir por "temporización en tiempo real".  ¿Acaso cuando mides tiempo no lo haces en la realidad?

El concepto tiempo real se utiliza para sistemas que deben dar una respuesta en un rango acotado de tiempo porque manejan un proceso que no se puede detener.  En realidad el controlador funciona varias veces más veloz que el sistema a controlar de manera que parezca que la respuesta es inmediata.

Cuanto más avezado y experto es el programador (la persona) en la matería, la velocidad del microprocesador no deberá ser tantos ordenes de magnitud mayor que el sistema a controlar.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado mardelpic

  • PIC10
  • *
  • Mensajes: 3
Re: AYUDA !!!!!!. Tiempo real en los pic
« Respuesta #2 en: 21 de Diciembre de 2006, 13:53:35 »
el tema es el siguiente:
estoy haciendo un proyecto en el cual en una de las funciones muestra un reloj. por mis conocimientos y practicas con cristales de cualquier valor se puede por programacion acercarse al tiempo exacto, aunque siempre tenes diferencias que hacen que a las horas o dias el reloj se atrase o adelante.
mi pregunta es que valor de cristal es el correcto para no tener esas diferencias.
desde ya muchas gracias por responder.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: AYUDA !!!!!!. Tiempo real en los pic
« Respuesta #3 en: 21 de Diciembre de 2006, 14:44:54 »
Que tal mardelpic,

No entiendo bien tu pregunta, pero creo que te refieres a como realizar rutinas de tiempo con respecto a algun oscilador en el PIC.

Todos los PIC de cualquier familia dividen el oscilador entre cuatro, lo que significa que si tienes un oscilador de 4MHz el micro estara corriendo a 1MHz. Ya de esta frecuencia se toma lo que se conoce como ciclo instruccion que equivale al inverso de la frecuencia de 1 MHz. La mayoria de las instrucciones del PIC se ejecutan en un ciclo instruccion a excepcion de los saltos (GOTO, CALL). Los saltos condicionales se ejecutan en 1 o 2 ciclos, eso depende de si se cumple o no la condicion. Ejemplo:

BTFSS STATUS,C     'El carry tiene un 1?
GOTO ALGO
NOP

si se cumple la condicion del carry en 1, entonces esa instruccion ocupara 2 ciclos instruccion, pero si no se cumple unicamente utilizara 1.

Con la referencia anterior si tenemos que nuestro cristal es de 4MHz y nuestra frecuencia instruccion es de 1MHz, entonces el tiempo de cada ciclo instruccion es de 1microsegundo.

Si hacemos una rutina de tiempo, por ejemplo:

CALL       DELAY                 'Esta instruccion usara 2 ciclos instruccion

DELAY      MOVLW      x        'Esta instruccion usara 1 ciclo isntruccion
                   MOVWF     VAR    'Esta usara 1 ciclo instruccion
                   DECFSZ      VAR,F  'Esta usara 2 ciclos si la condicion se cumple de lo contrario solo usara 1
                   GOTO          $-1      'Esta usara 2 ciclos instruccion
                   RETURN                 'Esta usara 2 ciclos

Con la informacio anterior entonces podemos hacer uso de nuestras amigas las matematicas para encontrar una ecuacion general. Pero comencemos con un caso particular en donde x, tiene el valor de 3

Por lo tanto;
 2 ciclos del CALL
1 ciclo del MOVLW
1 ciclo del MOVWF
1 ciclo de DECFSZ hasta que la condicion se cumple
2 ciclos del GOTO
Como se puede ver las dos instrucciones anteriores se ejecutaran 2 veces, por lo que generara 3ciclos * 2 = 6 ciclos
2 ciclos del DECFSZ cuando se cunple la consicion
2 ciclos del RETUN

El total es 14 ciclos

Ahora vamos al caso general.

Entonces tenemos que: 2+1+1+3(x-1)+2+2 = numero de ciclos
numero de ciclos = 8+3(x-1)

Prueba:
Si x = 3
Sustituyendo en nuestra ecuacion:
numero de ciclos = 8+(3-1)
                           = 8+(3-2)
                           = 8+ 6
                           = 14
BINGO, funciona, funciona.

Pero cual es el tiempo que genera.

Si bien caca ciclo instruccion es de 1 microsegundo el cual obtuvimos de:
Frecuencia ciclo = XTAL/4
tiempo de ciclo instruccion = 1/frecuencia ciclo = 4/XTAL
Ahora bien si el tiempo total de la rutina lo obtnemos multiplicando el numero de ciclos de nuestra rutina por el valor del tiempo del ciclo instruccion, entonces

Tiempo total = (4*numero de ciclos)/XTAL

Asi entonces volviendo a nuestro ejemplo, si la rutina genera 14 ciclos instruccion, sustituyendo en nuestra ecuacion,

Tiempo toal = (4*14)/4MHz
                    =56/4Mz
                    =14 microsegundos

FUNCIONA, FUNCIONA.

Asi entonces solo tenemos que cambiar el valor de x desde 0 hasta 255 y sustituirla en nuestra ecuacion y obtendremos lo que buscamos.

Esta es una de las razones del porque si se gusta de la electronica formal, son tan necesarias las matematicas. Y asi no hay falla ni estar con los dolores de cabeza y preguntandonos por que no funciona.

Espero esto sirva y ayude a solucionar los problemas que muchos tenemos.

Y recuerden para eso estamos, para ayudar en lo que se pueda.

Feliz navidad y propero anio nuevo.

Elreypic





Desconectado andros

  • PIC16
  • ***
  • Mensajes: 111
Re: AYUDA !!!!!!. Tiempo real en los pic
« Respuesta #4 en: 21 de Diciembre de 2006, 14:49:04 »
Como estás:

Pues si requieres mostrar un reloj, lo mas recomendable es que utilices un RTC (Real Time Clock), estos son unos circuitos integrados cuya función es precisamente generar tiempos en segundos EXACTOS, te permite conocer en cualquier momento los segundos, minutos y horas. Adicionalmente posee la función de calendario, es decir, información de días, semanas, meses y años, aún los biciestos!.

Específicamente te recomiento el DS1307 de maxim, posee 8 pines, requiere un reloj externo de 32Khz aproximadamente (32.6.... Hhz). Posee comunicación I2C, lo que lo hace muy fácil de controlar. Es más, también posee entrada para batería de emergencia, para cuando apagues el pic no pierdas la información.

Espero te sirva.

Andros.

P.D: Por aquí el compañero RedPic ha hecho todo un tratado de cómo manejar estos "bichos".
Andros!

Desconectado andros

  • PIC16
  • ***
  • Mensajes: 111
Re: AYUDA !!!!!!. Tiempo real en los pic
« Respuesta #5 en: 21 de Diciembre de 2006, 15:17:56 »
Andros!

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
Re: AYUDA !!!!!!. Tiempo real en los pic
« Respuesta #6 en: 21 de Diciembre de 2006, 15:42:42 »
Con un cristal de cuarzo de 32768Hz, y la fórmula del tiempo para el timer0, encontrarás conteos de un segundo exactos.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: AYUDA !!!!!!. Tiempo real en los pic
« Respuesta #7 en: 30 de Diciembre de 2006, 20:34:26 »
Y si el cristal es de 4MHz, también puedes utilizar el timer si lo configuras con preescaler de 8 y haces una precarga en el timer para que salte cada 125 pasos. Te salen justo ciclos de 1 ms.

 4 MHz = 1 MIPS -> 1000000us. / 8 / 125 = 1000us. = 1ms.