Autor Tema: Como calcular cuanto tiempo ha pasado  (Leído 8918 veces)

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

Desconectado Archangels

  • PIC10
  • *
  • Mensajes: 27
Como calcular cuanto tiempo ha pasado
« en: 01 de Junio de 2017, 10:52:25 »
Como podría hacer para qué en un PIC actualmente el 16F687 pueda calcular el tiempo qué ha pasado desde qué he pulsado un pulsador hasta qué lo he soltado?

Estoy utilizando actualmente CCS.

No veo ninguna función qué me devuelva el tiempo actual, me da igual si el resultado viene en ms o s o minutos.

Mi idea es cojer tiempo actual, al soltar el pulsador qué coja tambien el tiempo y después restar y ver cuanto es el tiempo transcurrido.

Un saludo y a ver si me pueden ayudar.
Gracias!

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Como calcular cuanto tiempo ha pasado
« Respuesta #1 en: 01 de Junio de 2017, 11:28:35 »
Ya varias veces se hablo del tema, te dejo un link:

http://www.todopic.com.ar/foros/index.php?topic=14427.0

No hay funciones magicas como en Arduino. Vas a tener que creartelas vos y aprender sobre los modulos involucrados.
Basicamente vas a tener que utilizar un Timer, o CCP si posee el micro para medir el pulso.

El concepto es simple. La entrada de reloj es de Fosc/4, es decir si tenes 4Mhz de oscilador, Tu timer va a aumentar cada 1us ( si el preescaler es de 1:1 )
Si en tu timer tenes la cuenta 100 cuando detectas el boton, y luego tenes la cuenta 1000 ( supongamos que es de 16bits) entonces pasaron 900 ciclos, ciclos que en el ejemplo son de 1us, por lo tanto pasaron 900us.


Desconectado Archangels

  • PIC10
  • *
  • Mensajes: 27
Re:Como calcular cuanto tiempo ha pasado
« Respuesta #2 en: 01 de Junio de 2017, 12:21:00 »
Muchas gracias por tu pronta respuesta, una ultima duda, si yo tengo qué utilizar el ccp y quiero usar pwm también y solo tiene un pin que hace las 2 cosas podria hacer las 2 cosas a la vez ??

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re:Como calcular cuanto tiempo ha pasado
« Respuesta #3 en: 01 de Junio de 2017, 12:50:38 »
Muchas gracias por tu pronta respuesta, una ultima duda, si yo tengo qué utilizar el ccp y quiero usar pwm también y solo tiene un pin que hace las 2 cosas podria hacer las 2 cosas a la vez ??

Si es un solo pin NO, tendrás que hacer una o la otra y dependiendo la frecuencia/velocidad de reloj puedes hacer cualquiera por software.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Como calcular cuanto tiempo ha pasado
« Respuesta #4 en: 01 de Junio de 2017, 13:10:36 »
Teniendo en cuenta las soluciones "mágicas" que tiene Arduino ¿Por qué no te pasas a Aduino?

En esa plataforma yo podría ayudarte. En PIC me da muuucha pereza. No solo porque el código sea más difícil, es que además el código resultante no se suele reutilizar.
En Arduino creas una librería para solucionar esto y puede servir para otros.
Vendría muy bien porque esta duda sobre pulsadores se plantea muy a menudo.


La solución fácil en Arduino (sin interrupciones) es leer la función millis() al pulsar y al soltar el pulsador. Luego restas los valores y ya está.

Saludos.

Desconectado Archangels

  • PIC10
  • *
  • Mensajes: 27
Re:Como calcular cuanto tiempo ha pasado
« Respuesta #5 en: 01 de Junio de 2017, 15:39:50 »
El problema qué la placa de arduino es muy grande jaja y yo necesito ahorrar espacio. Hmm y si uso solamente el chip del arduino, funcionaria también no ? Qué otros componentes aparte del cristal harían falta ?

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Como calcular cuanto tiempo ha pasado
« Respuesta #6 en: 01 de Junio de 2017, 16:13:36 »
Un par de condensadores y la resistencia de reset.

Puedes desarrollar con la placa y luego pasarlo a un micro con encapsulado tqfp.

Saludos.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Como calcular cuanto tiempo ha pasado
« Respuesta #7 en: 01 de Junio de 2017, 16:14:57 »
Citar
La solución fácil en Arduino (sin interrupciones) es leer la función millis() al pulsar y al soltar el pulsador. Luego restas los valores y ya está.

Creo que millis usa la interrupcion, es mas ni siquiera hay que complicarse por eso. Arduino ya posee una funcion mas simple que le da el tiempo de pulso si es que no le molesta "esperar".

https://www.arduino.cc/en/Reference/PulseIn

Desconectado Archangels

  • PIC10
  • *
  • Mensajes: 27
Re:Como calcular cuanto tiempo ha pasado
« Respuesta #8 en: 01 de Junio de 2017, 16:38:19 »
Un par de condensadores y la resistencia de reset.

Puedes desarrollar con la placa y luego pasarlo a un micro con encapsulado tqfp.

Saludos.

Pues voy a intentar hacerlo con un atmega328 qué si no me equivoco es el del UNO, una última duda, si compro el chip sin bootloader, es dificil ponerlo teniendo ya una placa de uno en casa ?

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Como calcular cuanto tiempo ha pasado
« Respuesta #9 en: 02 de Junio de 2017, 10:57:40 »
No entiendo bien la pregunta.
Si quieres grabar un programa en un Atmega328 (o un bootloader), se puede hacer fácilmente con otro Arduino:

https://www.arduino.cc/en/Tutorial/ArduinoISP



O con cualquier otro programador externo para ATmel.

Saludos.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Como calcular cuanto tiempo ha pasado
« Respuesta #10 en: 02 de Junio de 2017, 11:04:49 »
En realidad, si no necesitas mucha precisión, ni siquiera te hace falta poner el cristal. Puedes trabajar con el oscilador interno del Atmega.

Las placas Arduino modernas tampoco tienen cristal, en realidad es un resonador cerámico. Peor que un cristal, pero mejor que el oscilador interno.
Algunos clones de Arduino UNO si que traen cristal o al menos hueco para soldarlo, en el Atmega328.

Saludos.

Desconectado Archangels

  • PIC10
  • *
  • Mensajes: 27
Re:Como calcular cuanto tiempo ha pasado
« Respuesta #11 en: 02 de Junio de 2017, 15:42:01 »
No entiendo bien la pregunta.
Si quieres grabar un programa en un Atmega328 (o un bootloader), se puede hacer fácilmente con otro Arduino:

https://www.arduino.cc/en/Tutorial/ArduinoISP



O con cualquier otro programador externo para ATmel.

Saludos.

Vale gracias por el esquema, yo pensaba qué tendría que sustituir en la placa un chip por el otro y luego poner el bootloader.

Muchas gracias de verdad !!

Desconectado Archangels

  • PIC10
  • *
  • Mensajes: 27
Re:Como calcular cuanto tiempo ha pasado
« Respuesta #12 en: 08 de Junio de 2017, 10:07:20 »
Estoy haciendo pruebas sobre una placa Arduino UNO utilizando el método de pulseIn(pin, HIGH); y tengo un problema, me es imposible probarlo porque no me cuenta bien los segundos, en cuanto acerco un poco el dedo al cable donde va conectado el botón se vuelve loco y alomejor en 1seg me da que ha estado pulsado durante 10s, como podría solucionar esto ? he intentado poner una resistencia a gnd para que no haga locuras pero sigue igual. La resistencia de 1k y estoy conectando el pulsador entre el pin 2 y 3.3v ( tambien he probado con el pin 4 y 7.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Como calcular cuanto tiempo ha pasado
« Respuesta #13 en: 08 de Junio de 2017, 18:22:44 »
¿Cómo es el programa y el esquema?

Desconectado Archangels

  • PIC10
  • *
  • Mensajes: 27
Re:Como calcular cuanto tiempo ha pasado
« Respuesta #14 en: 08 de Junio de 2017, 18:50:10 »
¿Cómo es el programa y el esquema?

Código: [Seleccionar]
const int btnV = 2;
int btnStatusV = 0;
unsigned long durBtnV;

void setup() {
  Serial.begin(115200);
  pinMode(btnV, INPUT);
  Serial.print("Setup Finalizado, continuando...\n");
}

void loop() {
  durBtnV = pulseIn(btnV, HIGH);
  Serial.print("durBtnV: ");
  Serial.print(durBtnV);
  Serial.print("\n");

  if (durBtnV >= 3000) {
    analogWrite(9, HIGH);
  }
}

En la placa tengo conectada directamente la resistencia desde el Pin 2 a GND ( si, llega bien ) y después uso un pulsador con cables soldados a las patillas e introduzco sus extremos entre el Pin 2 y el pin de 3.3v


 

anything