Autor Tema: Timer para tiempos largos?  (Leído 5627 veces)

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

Desconectado D1to

  • PIC10
  • *
  • Mensajes: 39
Timer para tiempos largos?
« en: 14 de Febrero de 2017, 00:33:07 »
Buenas noches a todos, tengo una pequeña consulta, me gustaría implementar un timer que pueda controlar tiempos desde min hasta horas, por ejemplo 20 min o 4 horas, ¿alguna idea o referencia donde pueda encontrar información? uso mikroC Pro

Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
Re:Timer para tiempos largos?
« Respuesta #1 en: 14 de Febrero de 2017, 04:49:02 »
Que tal, que PIC utilizas? La mayoria de micros tienen timers de 16 bits por muy grandes, realmente no encuentro sentido de porque usar un timer para tiempos largos si ya el mismo compilador contiene librerias de delay basadas en los timers con base de retardos en ms o us, que se pueden ciclar en tiempos anidados a una función for.

Saludos

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re:Timer para tiempos largos?
« Respuesta #2 en: 14 de Febrero de 2017, 10:26:15 »
Yo ajustaría un tóner digamos a 10 segundos, y en cada desborde incrementaría una variable cuando la incrementas 6 veces ya tienes un minuto en ese momento incrementaría una variable minutos y compararía los minutos con los.minutos a los que tienes que temporizar y al llegar pondría a cero todo, todo esto dentro de la interrupción ya que es un código pequeño
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:Timer para tiempos largos?
« Respuesta #3 en: 14 de Febrero de 2017, 11:17:43 »
Si tienes RTC mejor utilízalo antes que un timer: pones una interrupción y ya llegará la hora del despertador... :P. Saludos!
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re:Timer para tiempos largos?
« Respuesta #4 en: 14 de Febrero de 2017, 11:22:14 »
Si tienes RTC mejor utilízalo antes que un timer: pones una interrupción y ya llegará la hora del despertador... :P. Saludos!

Eso mismo iba a proponer yo, para tiempos largos lo mejor un RTC.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:Timer para tiempos largos?
« Respuesta #5 en: 14 de Febrero de 2017, 17:38:28 »
Lo malo del RTC en los PICs es que no tiene un pin de alimentación dedicado (que yo sepa) como en otro micros (p.e.: Kinetis): por lo demás es muy cómo para alarmas (tiempos largos) como dice RedPic.
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado D1to

  • PIC10
  • *
  • Mensajes: 39
Re:Timer para tiempos largos?
« Respuesta #6 en: 15 de Febrero de 2017, 01:10:40 »
Gracias por sus respuestas, no se q es un rtc, investigare en internet a ver como lo aplico, si no aplicare lo de incrementar variables. Uso 16f877a y mikroc pro. Lo del tiempo es algo q me planteé a modo de practica, controlar un motor q funcione 2 horas luego se apague y arranque otro, un arranque alternado. Es posible? O requiero de algun componente externo?

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:Timer para tiempos largos?
« Respuesta #7 en: 15 de Febrero de 2017, 06:15:09 »
El RTC al que no referimos es un modulo del PIC igual que otros como timer, pwm, adc, etc. Las siglas quieren decir "reloj de tiempo real"; en esencia es un contador de segundos con hora, calendario y alarmas que recibe como entrada un reloj externo de 32.768khz o uno interno de 32Khz (en este caso tienes que ir ajustando el desfase "a mano). El PIC que comentas no tiene RTC. También hay RTCs externos.

Si no tienes RTC hazlo con un timer: era sólo una sugerencia.

Saludos!
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado D1to

  • PIC10
  • *
  • Mensajes: 39
Re:Timer para tiempos largos?
« Respuesta #8 en: 15 de Febrero de 2017, 10:24:28 »
 :D  :D muchas gracias por su apoyo amigos a modo de prctica usare lo de la interrupcion y variables y mas adelante trabajo con un rtc.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Timer para tiempos largos?
« Respuesta #9 en: 15 de Febrero de 2017, 13:32:48 »
Una forma estándar de hacerlo es programar una interrupción cada milisegundo y contar los milisegundos con una variable entero largo (32bits).

static volatile unsigned long millis;
 
Puedes temporizar desde 1 milisegundo hasta 50 días. Las variables unsigned long son estandar en c y no dan problemas.
Los desbordamientos tampoco dan problemas, restas del tiempo mayor, el menor y el resultado siempre es un positivo con el tiempo que falta para llegar.

Hay que dejar un margen. Si falta mucho tiempo, ha habido desbordamiento y es que el tiempo ya se ha pasado. Tu puedes definir cuánto tiempo es eso. Por ejemplo con 1 día tendrás más que suficiente para comprobar si el tiempo se ha pasado y te quedarán 49 días para temporizar.

Un saludo.
« Última modificación: 15 de Febrero de 2017, 13:37:22 por Picuino »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Timer para tiempos largos?
« Respuesta #10 en: 15 de Febrero de 2017, 13:46:54 »
Para comenzar, te recomiendo que programes con Arduino.
Tienes muchas librerías, ayudas y ejemplos.

Esto haría lo que tu quieres (programado en 5-10 minutos):

Código: C
  1. const unsigned long minutos = 60*1000;
  2. const unsigned long horas = 3600*1000;
  3. const int pin_motor1 = 2;
  4. const int pin_motor2 = 3;
  5. unsigned long tiempo;
  6. int marcha_motor;
  7.  
  8. void setup() {
  9.   pinMode(pin_motor1, OUTPUT);
  10.   pinMode(pin_motor2, OUTPUT);
  11.   tiempo = millis();
  12.   marcha_motor = 1;
  13. }
  14.  
  15. void loop() {
  16.   if (tiempo < millis()) {
  17.     tiempo = tiempo + 2 * horas + 30 * minutos;
  18.     if (marcha_motor == 1) {
  19.        digitalWrite(pin_motor1, HIGH);
  20.        digitalWrite(pin_motor2, LOW);
  21.        marcha_motor = 2;
  22.     }
  23.     else {
  24.        digitalWrite(pin_motor1, LOW);
  25.        digitalWrite(pin_motor2, HIGH);
  26.        marcha_motor = 1;  
  27.     }
  28.   }
  29.  
  30.   // Otras instrucciones aquí
  31.  
  32. }

Un saludo

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Timer para tiempos largos?
« Respuesta #11 en: 15 de Febrero de 2017, 13:57:18 »
Manual Arduino. Milisegundos:
https://www.arduino.cc/en/Reference/Millis

Tienes arduinos por menos de 3 Euros:
http://www.ebay.es/itm/Micro-Mini-USB-Nano-V3-0-ATmega328P-5V-16M-Arduino-Y1-Modulo-Junta-Controlador-/252195398867?hash=item3ab80464d3:g:0ywAAOSwajVUM0ED

Hay placas nano que cuestan menos de 2 euros con transporte incluído:
http://www.ebay.es/itm/Pro-3-3V-8M-Mini-atmega328-Replace-ATmega128-Arduino-Compatible-Nano-Redesign-/122158909212?hash=item1c713d071c:g:YnAAAOSwzaJX7hlE


El compilador es GCC (opensource, libre, gratuíto y muy potente) que compila C++.

Con Arduino también puedes controlar los detalles de bajo nivel del micro y utilizar un entorno de desarrollo profesional como Eclipse.

Un saludo.
« Última modificación: 15 de Febrero de 2017, 13:59:26 por Picuino »

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:Timer para tiempos largos?
« Respuesta #12 en: 15 de Febrero de 2017, 16:20:24 »
Macho!!! 2-3€ que barbaridad  :D :D :D No hay quien compita con eso... :oops:
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Timer para tiempos largos?
« Respuesta #13 en: 15 de Febrero de 2017, 17:21:55 »
Por eso Arduino está subiendo como un cohete. No hay color.
Lo nuestro con los PIC ya empieza a ser masoquismo (y lo dice un fan de los PIC).

Un saludo.

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:Timer para tiempos largos?
« Respuesta #14 en: 15 de Febrero de 2017, 17:25:57 »
Bueno, yo me quedo con PIC o si eso Kinetis  :D :D :D
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -


 

anything