Autor Tema: MEDIDOR DE RPM's  (Leído 2044 veces)

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

Desconectado arrugas

  • PIC10
  • *
  • Mensajes: 5
MEDIDOR DE RPM's
« en: 18 de Febrero de 2011, 15:19:31 »
saludos    soy novato en bascom   asi q acudo a ud    estoy en planes de hacer un velocimetro pa la bici
y bueno navegando encontre este codigo   quiero  me mida los rpm, lo demas  que Deseo agregar ya lo tengo   claro
ESPECIFICAMENTE PARA ESTE CODIGO   cuales deberian ser los cambios  para que funcione pepa  con ATMEGA 16
trabajando con el reloj interno del atmega a 1mhz
los calcilos en este  codigo no estoy muy claro     les agradesco un monto on su ayuda
pd: si tienen   algun otro ejempo en bascom  para el velocimetro  no me vendria mal   gracias





'  file: RevCtr.BAS
'---------------------------------------------------------------------------

'  the opto is attached to ICP pin
'  Timer 1 is setup to count clock pulses between interruptions on this pin
'  Timer1 is a 16 bit counter and will count up to 65535
'  A second overflow interrupt is triggered if the counter overflows 65535
'  this is tracked also
'  The calculation for rpm
'     = clock frequency *60 / number of counted clock pulses
'  The calculation for number of counted clock pulses is
'     = T1Capture + OverflowCounter*65536
'  Note the clock frequency may be different to the crystal frequency
'     there is a prescaler or divider which can be set to 1,8,64,256 or
'1024
'
'---------------------------------------------------------------------------

'   configure hardware
'---------------------------------------------------------------------------

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

Config Timer1 = Timer , Prescale = 8 , Capture Edge = Rising , Noice Cancel = 1
On Capture1 Isr_cap1
On Ovf1 Isr_ovf1
Enable Capture1
Enable Ovf1
Enable Interrupts

Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.1 , Db6 = Porta.2 , Db7 = Porta.3 , E = Porta.5 , Rs = Porta.4
Config Lcd = 16 * 2                                         ' configure lcd screen


'---------------------------------------------------------------------------

'   configure variables
'---------------------------------------------------------------------------


Dim Clks_per_min As Long
Dim Overflow As Long
Dim Clks_cntd As Long
Dim Rpm As Long
Dim T1overflow_ctr As Byte

'dimension word variable to hold the value of the capture register
Dim T1capture As Word , Oldcount As Word
T1overflow_ctr = 0


'---------------------------------------------------------------------------

'  code
'---------------------------------------------------------------------------

Waitms 250
Cursor Off Noblink
Cls
Clks_per_min = 921600 * 60                                  ' clock freq =crystal freq / prescale *60
Clks_cntd = 1                                               ' just make sure we never divide by 0
Do
   If T1capture <> Oldcount Then                            ' only update if the data is new
      Oldcount = T1capture                                  ' get the counted pulses
      Clks_cntd = Oldcount                                  ' put into 32bit variable
     ' Locate 1 , 1
      'Lcd Overflow ; "      "

      Overflow = Overflow * 65536                           ' any over flow
      'Locate 1 , 10
      'Lcd Clks_cntd ; "        "

      Clks_cntd = Clks_cntd + Overflow                      ' add the overflow to the counted pulses
      'Locate 1 , 20
      'Lcd Clks_cntd ; "        "

      Rpm = Clks_per_min / Clks_cntd
      Locate 2 , 1
      Lcd Rpm ; "         "
      Waitms 250                                            ' only check 4 times per second
   End If
Loop

End


'---------------------------------------------------------------------------

' Interrupt routines
' first save the counter value and reset counter
' then save the overflow count and reset it
'---------------------------------------------------------------------------

Isr_cap1:
   T1capture = Capture1                                     ' get the value in the timer
   Timer1 = 0                                               ' clear the timer value
   Overflow = T1overflow_ctr                                ' get the overflowcounter value
   T1overflow_ctr = 0                                       ' reset overflow counter
Return


Isr_ovf1:
   Incr T1overflow_ctr                                      ' increment our counter
Return

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4785
Re: MEDIDOR DE RPM's
« Respuesta #1 en: 18 de Febrero de 2011, 16:12:00 »
¿Me puede dar datos con que micro esta hecho el programa? y quizas tenga el esquemas, ya que hay componente(Opto acoplador)  etc. etc.
los calculos estan hecho de acuerdo al cristal y trabajando con el timer1 16bit , cada vez que el Timer1 se sobre pasa de 65535.
Claro que hay otros ejemplo aun mas facil , bcon 2 sensores, si eres nuevos es mejor que comienze con cosas facil.
Saludos

Desconectado arrugas

  • PIC10
  • *
  • Mensajes: 5
Re: MEDIDOR DE RPM's
« Respuesta #2 en: 18 de Febrero de 2011, 17:05:15 »
saludos  este es el prog original  

bueno el circuito no lo tengo    pero me parece  que no hay ningun problema  por que esta claramente
en el programa que pines se esta utilizando  y en que  
bueno la verdad se ensamblador  asi que no ando perdido para nada   solo que me   :5]  con tanto tiempo
invertido , y en cuanto a bascom  ya estoy aprendiendo asi que tampoco ando perdido ya  tengo un libro pepa para estudiar
aunque recien inicie  ayer  ese libro me aclara todo    con todo lo he de publicar para todos

---------------------------
para este proyecto quiero utilizar componentes que tengo   (atmega16,sensores de efecto hall,lcd,  creo que es lo basico  y si es el caso  un cristal 4 8 16 o 20 mhz o usar el oscilador interno  O ME CONVIENE USAR OTRO TIPO DE CRISTAL POR QUE ES SEGURO QUE NO LO ENCUENTRE  )
------
bueno eeste es codigo original  hice algunos cambios  pero  :shock:  en los calculos   ayudame en eso  

------------
sabes q tambien se basic en PIC  y existe una instruccion count portb.0,2000,servo que asumi que tambien lo tenia bascom pero a la hora de la hora  naranjas

-----------
EN CUANTO AL CIRCUITO QUE ME DICES  ME GUSTARIA VERLO PA VER QUE NOMAS TIENE    
TE AGRADEZCO TU AYUDA   Y   ADJUNTO EL LINK DEL LIBRO EN BASCOM  CON EJEMPLOS CHEVERES  LES RECOMIENDO



'------------------------------------------------------------------
' Title Block
' Author:   B.Collis
' Date:     14 Aug 2003
' File Name: RevCtr1.bas
'------------------------------------------------------------------
' Program Description:
'     Display RPM revs per minute on the LCD
' Program Features:
'     outer do-loop
'     for-next control
'  Timer 1 is setup to count clock pulses between interruptions on this pin
'  Timer1 is a 16 bit counter and will count up to 65535
'  A second overflow interrupt is triggered if the counter overflows 65535
'  this is tracked also
'  The calculation for rpm
'     = clock frequency *60 / number of counted clock pulses
'  The calculation for number of counted clock pulses is
'     = T1Capture + OverflowCounter*65536
'  Note the clock frequency may be different to the crystal frequency
'     there is a prescaler or divider which can be set to 1,8,64,256 or ,1024
' Hardware Features:
'     LCD on portc - note the use of 4 bit mode and only 2 control lines
'     Opto reflector on ICP portd.6
'------------------------------------------------------------------
' Compiler Directives (these tell Bascom things about our hardware)
$crystal = 8000000                      'the crystal we are using
$regfile = "m8535.dat"                  'the micro we are using
'------------------------------------------------------------------
' Hardware Setups
'     setup ICP
Config Timer1 = Timer , Prescale = 8 , Capture Edge = Rising , Noice Cancel = 1
On Capture1 Isr_cap1
On Ovf1 Isr_ovf1
Enable Capture1
Enable Ovf1
Enable Interrupts
'     setup LCD
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0
Config Lcd = 40 * 2                     'configure lcd screen
' Harware Aliases
'  Initialise ports so hardware starts correctly
'------------------------------------------------------------------
'  Declare Constants


'------------------------------------------------------------------
'  Declare Variables
Dim Clks_per_min As Long
Dim Overflow As Long
Dim Clks_cntd As Long
Dim Rpm As Long
Dim T1overflow_ctr As Byte

'dimension word variable to hold the value of the capture register
Dim T1capture As Word , Oldcount As Word
' 11. Initialise Variables
T1overflow_ctr = 0


'------------------------------------------------------------------
' 12. Program starts here
Waitms 250
Cursor Off Noblink
Cls
Lcd "rev ctr ver1 B.Collis 2003"
Wait 2
Cls
Clks_per_min = 1000000 * 60             ' clock freq = crystal freq / prescale *60
Clks_cntd = 1                           ' just make sure we never divide by 0
Do
   Locate 2 , 30
   Lcd "Revctr"
   If T1capture <> Oldcount Then        ' only update if the data is new
      Oldcount = T1capture              ' get the counted pulses
      Clks_cntd = Oldcount              ' put into 32 bit variable
      Locate 1 , 1
      Lcd Overflow ; "*      "

      Overflow = Overflow * 65536       ' any over flow
      Locate 1 , 10
      Lcd Clks_cntd ; "*        "

      Clks_cntd = Clks_cntd + Overflow  'add overflow to counted pulses
      Locate 1 , 20
      Lcd Clks_cntd ; "*        "

      Rpm = Clks_per_min / Clks_cntd
      Locate 2 , 1
      Lcd Rpm ; "*         "
      Waitms 255                        ' only check 4 times per second
   End If
Loop

End

'------------------------------------------------------------------
' Subroutines

'------------------------------------------------------------------
'  Interrupts' first save the counter value and reset counter
' then save the overflow count and reset it
Isr_cap1:
   T1capture = Capture1                 ' get the value in the timer
   Timer1 = 0                           ' clear the timer value
   Overflow = T1overflow_ctr            ' get the overflowcounter value
   T1overflow_ctr = 0                   ' reset overflow counter
Return


Isr_ovf1:
   Incr T1overflow_ctr                  ' increment our counter
Return
« Última modificación: 18 de Febrero de 2011, 17:45:54 por stk500 »

Desconectado arrugas

  • PIC10
  • *
  • Mensajes: 5
Re: MEDIDOR DE RPM's
« Respuesta #3 en: 18 de Febrero de 2011, 17:54:27 »
ESTA TRABAJANDO A 2 HZ y fuciona,  los comentarios se los puede cambiar al gusto
el reto es  usar el oscilador interno  asi que pilas al primer comedido q me acole
parece  q a la final no hay que hacer   casi nada de cambios
solo es con el  calculo  del oscilador externo

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4785
Re: MEDIDOR DE RPM's
« Respuesta #4 en: 18 de Febrero de 2011, 18:03:08 »
Esta seguro que ese libro no es Copyright, si es asi te aconsejo no lo ponga y si lo es te aconsejo lea las normas de nuestros foros, esta prohibido poner codigo,programa,libros etc etc con derechos de autor.
pues viendo el codigo usa un Atmega8535 que es pin compartible con el Atmega16 y Atmega32, la unica diferencia son su capacidad RAM, otras cosas es, en tu primer codigo pusite un cristal de 1Mhz y el autor ha hecho los calculos con 8Mhz, asi si lo que que quiere cambiar los tiempo solo debe hacer las calculaciones de acuerdo al cristal que use.
yo hasta ahora no he hecho nada con sensores, pero si tu te esfuerza estudiar el codigo y por aqui poner tus dudas te puedo o podemos echarte una mano, asi que planea como lo va hacer, con esquemas y tu codigo y ya podiamos hablar y orientarte.

Saludos

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4785
Re: MEDIDOR DE RPM's
« Respuesta #5 en: 18 de Febrero de 2011, 18:07:43 »
ESTA TRABAJANDO A 2 HZ y fuciona,  los comentarios se los puede cambiar al gusto
el reto es  usar el oscilador interno  asi que pilas al primer comedido q me acole
parece  q a la final no hay que hacer   casi nada de cambios
solo es con el  calculo  del oscilador externo
mientras escribia usted me contestaba, 

pero los calculos estan hechos para un Cristal de 8Mhz, si pone otros diferente ya no te van a cuadrar los calculos, tampoco nos dice que resultados va sacar cambiando el cristal.
que es lo que quiere hacer explicaste bien y por favor no use texto de regionalismom escribe Castellanos puros asi se comprenderemos mejor.
Saludos

Desconectado ferlop

  • PIC10
  • *
  • Mensajes: 1
Re:MEDIDOR DE RPM's
« Respuesta #6 en: 07 de Enero de 2017, 20:29:21 »
Está interesante el código para esta aplicación.
¿Cómo se llama el libro y el autor del que se obtuviste el código?
¿Está disponible en formato digital para su compra?

Desconectado Genaro Miranda

  • PIC10
  • *
  • Mensajes: 40
Re: MEDIDOR DE RPM's
« Respuesta #7 en: 08 de Enero de 2017, 00:05:14 »
Esta seguro que ese libro no es Copyright, si es asi te aconsejo no lo ponga y si lo es te aconsejo lea las normas de nuestros foros, esta prohibido poner codigo,programa,libros etc etc con derechos de autor.
pues viendo el codigo usa un Atmega8535 que es pin compartible con el Atmega16 y Atmega32, la unica diferencia son su capacidad RAM, otras cosas es, en tu primer codigo pusite un cristal de 1Mhz y el autor ha hecho los calculos con 8Mhz, asi si lo que que quiere cambiar los tiempo solo debe hacer las calculaciones de acuerdo al cristal que use.
yo hasta ahora no he hecho nada con sensores, pero si tu te esfuerza estudiar el codigo y por aqui poner tus dudas te puedo o podemos echarte una mano, asi que planea como lo va hacer, con esquemas y tu codigo y ya podiamos hablar y orientarte.

Saludos
Hola!!
Porque 2 Hz de donde saco este calculo?
Es 488 Hz para un 1 mhz y prescalamiento de 8 para de 8 bit. :-/

Desconectado Genaro Miranda

  • PIC10
  • *
  • Mensajes: 40
Re: MEDIDOR DE RPM's
« Respuesta #8 en: 08 de Enero de 2017, 00:08:20 »
¿Me puede dar datos con que micro esta hecho el programa? y quizas tenga el esquemas, ya que hay componente(Opto acoplador)  etc. etc.
los calculos estan hecho de acuerdo al cristal y trabajando con el timer1 16bit , cada vez que el Timer1 se sobre pasa de 65535.
Claro que hay otros ejemplo aun mas facil , bcon 2 sensores, si eres nuevos es mejor que comienze con cosas facil.
Saludos
Para atmega 16 los puedes usar para 1,2,4, y 8 Mhz interno.
y para externa cristal 16 o 20 Mhz.