Autor Tema: Velocímetro con Pic16f877  (Leído 28755 veces)

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

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Velocímetro con Pic16f877
« Respuesta #30 en: 29 de Febrero de 2012, 18:58:03 »
Saludos marco_zappia

Citar
Totalmente de  acuerdo con todo, excepto por la cuenta:

V = (2*pi*r)/( 0.000256*(255*desbordes + Valor del TMR0 actual))   (1.6)

yo creo que ahí te confundiste y como mensionaste anteriormente en tiempo el timer se desborda cada 65.536 ms, por lo que la cuenta yo creo que deberia ser si la estas trabajando en segundos

V = (2*pi*r)/( 0.000256*(desbordes*0.065536  + Valor del TMR0 actual)) 

Creo que como esta la ecuación 1.6 esta bien, nota la constante 0.000256 que posee implicitamente el valor de prescaler del timer, pero el timer se sigue desbordando cada 256 conteos. La única diferencia es que cada conteo esta dividido (en este caso) en 255 ciclos del timer. Por tal razón la constante 0.000256 esta por fuera del producto y la variable desbordes se multiplica por 255.
Un saludo desde Pereira - Colombia

Desconectado alechivo

  • PIC10
  • *
  • Mensajes: 2
Re: Velocímetro con Pic16f877
« Respuesta #31 en: 10 de Mayo de 2012, 16:06:36 »
Chenao te felicito por la iniciativa y muy buen proyecto.
Ahora opinando sobre tu desarrollo, lo que no entiendo es a la hora de que realiza el overflow donde llama la interrupción??? ya que hay un método q creaste llamado "void desborde()" que es q te cuenta los pulsos y renicia el tmr0, pero el mismo nunca interviene.
Te agredeceria mucho tu respuesta.
Saludos.

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Velocímetro con Pic16f877
« Respuesta #32 en: 19 de Mayo de 2012, 22:03:32 »
Hola alechivo

Que pena no responder antes. Con respecto a la consulta el microcontrolador necesariamente tiene que ejecutar la rutina de interrupción para así medir el período de la señal de entrada, la parte del código que se encarga de realizar dicha tarea se muestra acontinuación, ten en cuenta que como la rutina es una función de interrupción no hay necesidad de llamarla desde el main() si no que se ejecuta una vez ocurra el evento que la generá pero es deber del programador habilitarla y especificar el procedimiento de trabajo una vez ocurra. No sé si quedo clara la duda cualquier cosa pregunta que si puedo con mucho gusto contesto  ;-).

Código: [Seleccionar]
#int_rtcc
void desborde()
         {

          desbor= desbor + 1;
          de = desbor;
          set_timer0(0);
         }

Un saludo desde Pereira - Colombia

Desconectado atsarcris

  • PIC10
  • *
  • Mensajes: 2
Re: Velocímetro con Pic16f877
« Respuesta #33 en: 05 de Enero de 2013, 01:20:56 »
Hola que tal, soy nuevo en el foro y quisiera saber algo referente al tema planteado del velocímetro, lo que yo quiero hacer es contar el número de vueltas realizado por una rueda en un segundo y multiplicarlo por 60 para obtener las rpm, bien esto lo estoy haciendo con el TIMER0 usando el pin RA4, el código que uso es el siguiente:


#include <16F877a.h>
#use delay (clock=4000000)
#byte timer0=0x01// REGISTRO  DEL TIMER 0
#byte port_b=0x06// REGISTRO DEL PUERTO B
#byte port_c=0x07 /*REGISTRO DEL PUERTO C*/

               /* BITS DEL OPTION_REG*/
#bit rbpu =0x81.7
#bit intedg=0x81.6
#bit tocs=0x81.5
#bit tose=0x81.4
#bit psa=0x81.3
#bit ps2=0x81.2
#bit ps1=0x81.1
#bit ps0=0x81.0


#include <lcd.c>

               /*VARIABLES*/

int rps, x=0;
char velocidad;

void main()
{

lcd_init();                   // Inicia LCD
lcd_putc(" RPM = \n"); 
delay_us(100);


 rbpu=1;//
 intedg=0;//
 tocs=1; // TRANSICIÓN EN EL PIN T0CKI ES DECIR COMO CONTADOR
 tose=1;// INCREMENTO EN BAJO A ALTO POR EL PIN T0CKI
 psa=1; // EL PREESCALER ES ASIGNADO POR EL MODULO DEL TIMER 0
   /* VALOR DE LA TASA DE BIT PARA EL  PRESCALER 111 = 1:256 */
 ps2=1;
 ps1=1;
 ps0=1;
while(1){
      /*CONTEO DE PULSOS ENTRADA RAB*/
 timer0=0;
 delay_ms(1000); // LEE LOS PULSOS EN UN SEGUNDO
 x=timer0;  // VARIABLE QUE CONTIENE LOS PULSOS
      /* PASO LOS PULSOS EN FUNCIÓN DE KM/H */
 velocidad=60*x;


 
   lcd_gotoxy(7,2);            //posicion en el LCD
   printf(lcd_putc,"%u",velocidad);
   delay_ms (500);
      }
}


efectivamente me cuenta los pulsos generados y los visualizo en la lcd como se muestra en las imágenes, pero si estos pulsos pasan de cuatro no me visualiza el valor que quiero, es decir para los cuatro pulsos me enseña el valor de 240 lo cual es correcto y para cinco me enseña el valor de  44, supongo debido a que 256 + 44 = 300 lo cual es correcto también pero quiero que me enseñe el valor "300", no el valor de "44"

Agradezco la ayuda prestada, un fuerte abrazo y mil bendiciones


Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Velocímetro con Pic16f877
« Respuesta #34 en: 05 de Enero de 2013, 09:49:26 »
El error es que estas trabajando con variables de 8bits y solo llegas a poder mostrar el numero 255, todo numero superior te lo trunca y acomoda como decis vos, y te muestra el 44 para 300 rpm.

Tienes que usar una variable de 16 bits porque char es para 8 bits.
Y cuando usas el printf creo que debes usar %d en ves de %u.

El TMR0 te llega a contar 4 vueltas por segundo? No vas a tener problema por ese lado, el tema es que dejas el micro ocupado durante 1 segundo para que cuente los pulsos y esto te da que solo puedes refrescar el valor de velocidad cada  1 segundo.

Yo cambiaría la idea del programa para que midiera el tiempo entre pulsos y así puedes tener mayor refresco del valor de velocidad. Para eso vas a tener que usar la interrupción por RA4.

Por ahí en el programa pones KM/H, creo te refieres a RPM, no?
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado atsarcris

  • PIC10
  • *
  • Mensajes: 2
Re: Velocímetro con Pic16f877
« Respuesta #35 en: 09 de Enero de 2013, 00:05:42 »
muchas gracias por tú respuesta willynovi, he de hacer caso a lo que dices, me parece de mayor utilidad como lo propones... después te cuento como me fue ... buen día, buena semana, buen mes, buen año y muy pero muy buena vida  :)

Desconectado jairosaw

  • PIC10
  • *
  • Mensajes: 3
Re: Velocímetro con Pic16f877
« Respuesta #36 en: 24 de Julio de 2013, 01:33:52 »
Ola chenao,, interesante tu proyecto lo simule pero tengo una duda, el auto en el que pretendo instalar el velocimetro tiene un radio 0.375m por lo que modifique ami proposito la formula: velocidad = (33134/total_t); hasta ahi bn, el carro ya posee un sensor: el cual con un osciloscopio medi y con la ayuda del gps de mi celular vi que por 10km/h tenia una frecuencia de 9 hz, a 20km/h -- 18hz y asi sucesivamente.. en la simulacion le ingrese 9hz por el pin B0 pero me da 59km/h.. ?
« Última modificación: 24 de Julio de 2013, 01:46:57 por jairosaw »

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Velocímetro con Pic16f877
« Respuesta #37 en: 24 de Julio de 2013, 13:48:04 »

Hola jairosaw

Citar
velocidad = (33134/total_t)

La verdad no entiendo de donde sacas el valor de 33134.

Para poder ayudarte debes poner más información, es decir, el predivisor de frecuencias que esta utilizando, la frecuencia de oscilador etc. Debido a que el modelo matemático describe la velocidad se encuentra en función de estos parámetros. Por otro lado, que sensor estas utilizando para medir el tiempo de cada revolución.
Un saludo desde Pereira - Colombia

Desconectado jairosaw

  • PIC10
  • *
  • Mensajes: 3
Re: Velocímetro con Pic16f877
« Respuesta #38 en: 25 de Julio de 2013, 00:39:04 »
Gracias por responder chenao,, yo utilizo la formula que planteaste "V = (88358*r) / (255*desbordes + Valor del TMR0 actual)       (1.Cool " como mi radio es 0.375metros, lo que hice fue  "V = (88358*0.375) / (255*desbordes + Valor del TMR0 actual)  " eso me queda = "V = (33134) / (255*desbordes + Valor del TMR0 actual)" por eso velocidad = (33134/total_t); es decir lo unico que hice fue tocar esa formula puesto q ahi va implicito lo del radio de la llanta y mi radio es distinto por eso queda asi, el sensor que utlizo es propio del auto,, lo unico que se es q por 10 km/h (utlizando gps de mi celular) me da una frecuencia de 9hz (utilizando un osciloscopio) el radio de la de llanta es de 0.375 mt.

Desconectado jairosaw

  • PIC10
  • *
  • Mensajes: 3
Re: Velocímetro con Pic16f877
« Respuesta #39 en: 25 de Julio de 2013, 10:01:20 »

Gracias por responder chenao,, yo utilizo la formula que planteaste
"V = (88358*r) / (255*desbordes + Valor del TMR0 actual)       (1.Cool   
" como mi radio es 0.375metros, lo que hice fue  "V = (88358*0.375) / (255*desbordes + Valor del TMR0 actual)  " eso me queda = "V = (33134) / (255*desbordes + Valor del TMR0 actual)" por eso velocidad = (33134/total_t); es decir lo unico que hice fue tocar esa formula puesto q ahi va implicito lo del radio de la llanta y mi radio es distinto por eso queda asi, el sensor que utlizo es propio del auto,, lo unico que se es q por 10 km/h (utlizando gps de mi celular) me da una frecuencia de 9hz (utilizando un osciloscopio) el radio de la de llanta es de 0.375 mt.

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Velocímetro con Pic16f877
« Respuesta #40 en: 25 de Julio de 2013, 13:58:41 »
Recuerda que la expresión V = (88358*r) / (255*desbordes + Valor del TMR0 actual) fue desarrollada para un frecuencia de oscilador de 4MHz, seria bueno que pusieras el soft, Ahora con respecto al sensor me parece raro la medida que entrega porque más o menos a 7Hz se debe mover el auto a unos 60 - 80 Km.

Lo recomendable es que pongas el soft y como segundo investigues el sensor que estas utilizando.
« Última modificación: 25 de Julio de 2013, 14:01:11 por Chenao »
Un saludo desde Pereira - Colombia


 

anything