Autor Tema: velocimetro y odometro para una bicicleta  (Leído 5516 veces)

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

Desconectado borreguito

  • PIC10
  • *
  • Mensajes: 3
velocimetro y odometro para una bicicleta
« en: 29 de Mayo de 2011, 13:06:51 »
 :-/

saludos gente, estaba buscando realizar un odometro y velocimetro para  una bicicleta .....
la idea es usar  dos timers del ATMEGA16  uno como contador y otro como timer  para contar los pulsos  q entran al micro en un segundo trabajando con
el oscilador externo de 1MHZ
tanto la velocidad como la distancia  deben mostrarse por un lc 2*16   :lol:

encontre este codigo que parece q funciona  segun el criterio, realice algunos cambios  para mi caso .......

el problema  esta que  no se como  asignar valor al preescaler para obtener 1 seg para q me genere las interrupciones  y q me ayuden a depurar 
posibles problema    :oops:   


cualquier ayuda   mil gracias








 '                    1.8 meter x 3.14 (PI) = 5.652 meter per revolution
'5.652 / 32 = 0.176625 meter per pulse
'0.176625 x 60 (sec/min) x 60 (min/hour) = 635.85 meters per hour
'635.85 / 1000 = 0.63585 Km/hr/pulse
'or
'1 / 0.63585 = 1.5727 pulses/km/hr

'Hookup your pulse input to T1 (Timer1/Counter1 input)
'Hookup 32.768 KHZ xtal T2 source, no need for the dallas external clock
'Hookup LCD

'Program lines below:
'*************************************************************************
'  r=0.32m                 2*3.14*0.32 = 2 meter per revolution
'2 / 1 = 2 meter per pulse                un pulso por revolucion
'2 x 60 (sec/min) x 60 (min/hour) = 7200 meters per hour                para mi caso
'7200 / 1000 = 7.2 Km/hr/pulse
'or
'1 / 7.2 = 0.13888 pulses/km/hr
'************************************************************************

$regfile = "m16def.dat"
$crystal = 1000000
$baud = 9600

Dim Speed As Word
Dim Speed_$ As String * 5
Config Timer1 = Counter , Edge = Falling , Prescale = 1
Config Timer2 = Timer , Async = On , Prescale = 128         ' ------>cambiar preescaler para 1mhz

On Timer2 Timer2_isr
Enable Interrupts
Enable Timer2

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2

'Main Program
Cursor Off Noblink
Cls

Do
Speed_$ = Str(speed)
Speed_$ = Format(speed_$ , " 0.0")                          'There are two space between the double quote and the first zero
Locate 1 , 1
Lcd "Speed is " ; Speed_$ ; " Km/hr"
Dist_$ = Str(dist)
Dist_$ = Format(dist_$ , " 0.0")
Locate 1 , 1
Lcd "Dist is " ; Dist_$ ; " Km/hr"
Wait 1                                                      'Do nothing for 1 second
Loop
End


'ISR
Timer2_isr:
Speed = Counter1
Counter1 = 0
Speed = Speed * 7.2
Return

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: velocimetro y odometro para una bicicleta
« Respuesta #1 en: 29 de Mayo de 2011, 14:21:21 »
Te ayudaria, pero si esta usando un codigo que no es hecho por ti, no estamos en nada, solo te aconsejo que lea Tutorial de bascom de como configurar el Timer.
porque aunque cambie el control de timer en este codigo no te va servir de nada. ya que los tiempos ahi estan marcados solo para ese programa.

Desconectado borreguito

  • PIC10
  • *
  • Mensajes: 3
Re: velocimetro y odometro para una bicicleta
« Respuesta #2 en: 29 de Mayo de 2011, 21:27:12 »
la verdad los cambios ya los hice   lo que falta por hacer  es como calcular el prescaler    para 1 mhz 
y en el camino me di cuenta   de algunas burradas       en fin este es el codigo   modificado   


$regfile = "m16def.dat"
$crystal = 1000000
$baud = 9600

Dim Speed As Word
Dim Speed_$ As String * 5
Dim Dist As Word
Dim Dist_$ As String * 5
Config Timer1 = Counter , Edge = Falling , Prescale = 1
Config Timer2 = Timer , Async = On , Prescale = 128         ' ------>cambiar preescaler para 1mhz

On Timer2 Timer2_isr
Enable Interrupts
Enable Timer2

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2

'Main Program
Cursor Off Noblink
Cls

Do
Speed_$ = Str(speed)
Speed_$ = Format(speed_$ , " 0.0")                          'There are two space between the double quote and the first zero
Locate 1 , 1
Lcd "Speed is " ; Speed_$ ; " Km/hr"
Dist_$ = Str(dist)
Dist_$ = Format(dist_$ , " 0.0")
Locate 2 , 1
Lcd "Dist is " ; Dist_$ ; " Km"
Wait 1                                                      'Do nothing for 1 second
Loop
End


'ISR
Timer2_isr:
Speed = Counter1
Counter1 = 0
Speed = Speed * 7.2
Dist = Speed * 0.002                                        'para kilometros
Return

Desconectado borreguito

  • PIC10
  • *
  • Mensajes: 3
Re: velocimetro y odometro para una bicicleta
« Respuesta #3 en: 29 de Mayo de 2011, 21:33:27 »


OJO Q TODAVÍA SIGO  CON EL PROBLEMA DE CALCULAR EL PREESCALER   :  )

Desconectado cristian_elect

  • PIC18
  • ****
  • Mensajes: 453
Re: velocimetro y odometro para una bicicleta
« Respuesta #4 en: 31 de Mayo de 2011, 01:17:38 »
Hay que probar en el simulador.
Has una prueba para timer de 8bits .
se graba como valor de inicio timer2=6 con un preescalador a 32.
A 125 desbordes de timer da 1seg.
(250*32)*125=1000000.