Autor Tema: Reemplazo de 4,096 para reloj  (Leído 3976 veces)

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

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
Reemplazo de 4,096 para reloj
« en: 03 de Diciembre de 2003, 07:15:00 »
Hola a todos:

Ante la imposibilidad de conseguir el cristal 4,096Mhz en Argentina pensaba si existia alguna especie de reloj externo del cual se puedan sacar los datos sin tener que utilizar este cristal.

Saludos.
Pablo

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: Reemplazo de 4,096 para reloj
« Respuesta #1 en: 03 de Diciembre de 2003, 07:34:00 »
Si la aplicacion es una temporizacion exacta, yo utilizo un cristal de 4 Mhz y ajuste finalmente el valor inicial del Tmr0 para aprovechar todas las instrucciones de la interrupcion que incrementan el timer antes de la recarga.
Lo optimice a full utilizando el contador de tiempo del mplab y poniendo un punto de parada en la instruccion de recarga del timer.
Probe con varios valores y consegui una temporizacion exacta de 1 mseg.
A partir de alli ya tienes todo OK.

Sino tienes los PIC de la gama media donde le pones un cristal que interrumpe sobre el timer2 y alli si lo haces exacto....
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
RE: Reemplazo de 4,096 para reloj
« Respuesta #2 en: 03 de Diciembre de 2003, 08:56:00 »
Hola:

Me podes decir que es lo que deberia cambiar para que sea exacto

#include <16F84A.h>

#use delay (clock=4000000)
#fuses XT,NOWDT
#define INTS_PER_SECOND 76     // (4000000/(4*256*256))

byte int_count;    // Number of interrupts left before a second has

#int_rtcc                          // This function is called every time
clock_isr() {                      // the RTCC (timer0) overflows (255->0).
                                   // For this program this is apx 76 times
    if(--int_count==0) {           // per second.
      segundos1++;
      int_count=INTS_PER_SECOND;
    }

}

void main(void) {
   int_count=INTS_PER_SECOND;
   set_timer0(0);
   setup_counters( RTCC_INTERNAL, RTCC_DIV_256);
   enable_interrupts(INT_RTCC);
   enable_interrupts(GLOBAL);

//   set_tris_b(0x0);
   for(; {
      //codigo
   }
}


Gracias.
Pablo

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: Reemplazo de 4,096 para reloj
« Respuesta #3 en: 04 de Diciembre de 2003, 06:54:00 »
A ver si esto te sirve, tuve que leer mas del C, para orientarme.


#include <16F84A.h>

#use delay (clock=4000000)
#fuses XT,NOWDT
#define INTS_PER_SECOND 250 // (4000000/(4*4*250))

byte int_count; // Number of interrupts left before a second has

#int_rtcc // This function is called every time
clock_isr() { // the RTCC (timer0) overflows (255->0).
// For this program this is apx 76 times
if(--int_count==0) { // per milisecond.
milisegundos++;
if(milisegundos==1000) { // per second.
segundos1++;
milisegundos==0
}
int_count=INTS_PER_SECOND;
}

}

void main(void) {
int_count=INTS_PER_SECOND;
set_timer0(0);
setup_counters( RTCC_INTERNAL, RTCC_DIV_4);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);

// set_tris_b(0x0);
for(; {
//codigo
}
}





Probalo a ver que pasa.

Sugerencia:
Este tema en este subforo no tiene mucho que ver, pedile a los moderadores que lo muevan al de lenguaje C...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Reemplazo de 4,096 para reloj
« Respuesta #4 en: 04 de Diciembre de 2003, 10:29:00 »
Este tema ya está en el subforo de C y tú contestaste en él querido MGLSOFT.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: Reemplazo de 4,096 para reloj
« Respuesta #5 en: 04 de Diciembre de 2003, 12:37:00 »
Pues muevan los mensajes, Pocher.
Muchos han escrito varios post en otros foros, eso no quita que contestemos.
Si te fijas como empieza el primer mensaje, veras que poco podia saber que derivaria en una contestacion en C, motivo que finalmente me decide a mover el tema.
No veo porque el reto, yo puedo moderar en otras listas, pero no en C.
De ultima muevan todos los mensajes, solamente.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: Reemplazo de 4,096 para reloj
« Respuesta #6 en: 05 de Diciembre de 2003, 06:19:00 »
En cuanto a lo que te comentaron sobre lo de buscar el cristal de 32,...Khz puedes conectarlo al timer1 y así conseguirás tener un barato RTC. Hay notas de aplicación en microchip. Así podrás trabajar con el cristal de 4MHz e irá más rápido tu aplicación. Ojo que el 16F84A no tiene timer1!!

Otra solución que se me ocurre es usar uno de esos micros que tienen oscilador interno, y calibrarlo para que te dé los 4,096MHz. No usé nunca el oscilador interno, pero si se pueden calibrar, supongo que se podría hacer esto. No sé, es una idea...

Saludos!
Saludos desde Huelva (ESPAÑA)

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: Reemplazo de 4,096 para reloj
« Respuesta #7 en: 05 de Diciembre de 2003, 06:56:00 »
Por cierto, si quieres usar l opción del cristal de 32KHz, y no lo encuentras tampoco... te comento.
No se si ahí donde vives existen esas tiendas de todo a cien (conocidas así aquí en España). Pues bien, los relojes que venden ahí, los despertadores, esos que la maquinaria viene en una cajita negra (son todas iguales), trae un cristal de esos. Es el canutillo de metal. Estas maquinarias también las venden en tiendas de manualidades, ya que se usan cuando haces un reloj con punto de cruz, o de escayola... Aunque ahí, supongo que te costará algo más caro.
Si tienes un reloj roto electrónico, pues ya tienes cristal... No hay que tirar nada
Saludos!!
Saludos desde Huelva (ESPAÑA)

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
RE: Reemplazo de 4,096 para reloj
« Respuesta #8 en: 05 de Diciembre de 2003, 07:54:00 »
Hola MGLSOFT

Probe el ejmplo que me pasaste pero tarda mucho en pasar un segundo.
Luego lo que hice es reducir la pregunta milisegundos == 1000 por milisegundos == 4 pero igualmente adelanda 1 seg por minuto.
Si podes miralo a ver si me estoy confundiendo en algo.
En cuanto a la respuesta de cucaracha voy a buscar el cristal de 32k y luego te comento.

Saludos a todos.
Pablo

#include <16F84A.h>

#use delay (clock=4000000)
#fuses XT,NOWDT
#define INTS_PER_SECOND 250 // (4000000/(4*4*250)) (4*Divisor*Interrupciones)

byte CONST Display2[] = {0b00100000,0b00100001,0b00100010,0b00100011,0b00100100,0b00100101,0b00100110,0b00100111,0b00101000,0b00101001};

byte segundos1;      // A running seconds counter
byte int_count;    // Number of interrupts left before a second has elapsed
byte milisegundos;

#int_rtcc                          // This function is called every time
clock_isr() {                      // the RTCC (timer0) overflows (255->0).
   if(--int_count==0) { // per milisecond.
      milisegundos++;
      if(milisegundos==4) { // per second.
         segundos1++;
         milisegundos=0;
      }
      int_count=INTS_PER_SECOND;
   }

}

void main(void) {
   segundos1 = 0;
   milisegundos = 0;
   int_count=INTS_PER_SECOND;
   set_timer0(0);
   setup_counters( RTCC_INTERNAL, RTCC_DIV_4);
   enable_interrupts(INT_RTCC);
   enable_interrupts(GLOBAL);

//   set_tris_b(0x0);
   for(; {
      output_b(Display2[segundos1]);
      delay_ms(3);
   }
}

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: Reemplazo de 4,096 para reloj
« Respuesta #9 en: 05 de Diciembre de 2003, 13:15:00 »
Estas seguro que el cristal que estas utilizando es de 4 MHZ ??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
RE: Reemplazo de 4,096 para reloj
« Respuesta #10 en: 09 de Diciembre de 2003, 04:56:00 »
Si. Pueden ser los capacitores que esten mal. Son de 22.
El codigo esta bien?


 

anything