1. Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.
    Dismiss Notice

Speedometer

Discussion in 'Microcontrollers' started by Kiko, Mar 8, 2007.

  1. Sputnik

    Sputnik New Member

    Joined:
    Sep 13, 2005
    Messages:
    20
    Likes:
    0
    Sorry, I think I got it. its in KILOMETERS, I was doing it for METERS

    Should it be calculated for DIAMETER or CIRCUMFERENCE of the wheel??
     
    Last edited: Apr 30, 2007
  2. Kiko

    Kiko New Member

    Joined:
    Apr 24, 2004
    Messages:
    79
    Likes:
    1
    Location:
    Brazil
    In your case.

    22in wheel diameter = 69.1152in circunference (2*PI*R)

    69.1152in = 0.001755526Km

    0.001755526Km * 3600 = 6,3198936

    Temp_Float=(Temp_Float*4)*6,3198936

    In the example above the number 4 multiple by counter period (250 or 1/4 of seconds)

    You have to multiple by 3600 because you have Km/sec and you want Km/h
     
  3. Sputnik

    Sputnik New Member

    Joined:
    Sep 13, 2005
    Messages:
    20
    Likes:
    0

    OK, thanks!! Im not very good at this conversion stuff.

    What I want to do is be able to select a wheel diameter from a menu (storing everything in variables) and do all the conversion on-the-fly.

    I have this as of now does it look correct to you, (wheel diameter of 25 for example)


    Code (text):
    WheelDiam = 25
            WheelCirc = 2 * 3.14 * WheelDiam / 2
            Wheelkilo = WheelCirc * 2.54e-5
            WheelConv = WheelKilo * 3600
    Here is my complete program. it will display a bargraph representing speed as well as the numeric representation. It also displays the time from a DS1302 RTC. It all works perfectly in Proteus, I just need to make sure I have the conversion stuff correct so it is accurate.

    Code (text):
     Device 16F877
        Declare XTAL 20
        ALL_DIGITAL = TRUE

        ' LCD DEFINES
        Declare LCD_TYPE 0
        Declare LCD_DTPIN PORTd.4
        Declare LCD_ENPIN PORTd.3
        Declare LCD_RSPIN PORTd.2
        Declare LCD_INTERFACE 4
        Declare LCD_LINES 2
       
        ' Speedo Variables **
        Dim KMH As Float
        DIM MPH AS Float
        dim dmph as Byte
        Dim Temp_Float As Float
        Dim KMHT As DWord
        Dim KMH_Last As DWord
        DIM WheelDiam as Float
        Dim WheelConv as Float
        dim WheelCirc as Float
        Dim WheelKilo as Float
       
        ' Bargraph Variables **
        Dim Bar_Val As  Byte                ' Value to be graphed.
        Dim Bars    As  Byte                ' Number of full ||| bars to draw.
        Dim Balance As  Byte                ' Balance left after all |||s are drawn.
        Dim Padding As  Byte                ' Number of spaces to fill width.
        Dim Balf    As  Byte                ' Is a 'Balance' character needed? (1=yes, 0=no).
        Dim Temp    As  Byte
       
        ' Bargraph Constants **
        Symbol  B_Wdth  =   32                  ' Max width in characters of bar.
        Symbol  Maxbar  =   B_Wdth * 3          ' Max bar counts.
        Symbol  Fullbar =   3                   ' ASCII value of ||| bar.
        Symbol  Basebar =   0                   ' ASCII value of 0 bar (blank).
        Symbol  I       =   254
        Symbol  Cgram   =   64
           
        ' Duplicate Bargraph variable definitions
        Dim B_Cnt   As  Bars            ' Counter (0-15) for EEPROM/bit pat load.
        Dim B_Row   As  Balance         ' Row of bit pattern.
        Dim B_Chr   As  Padding         ' Bit pattern read from EEPROM.

        ' Alias RTC pins
        Dim    RST     as     PORTA.2
        Dim    IO      as     PORTC.1
        Dim    SCLK    as     PORTC.3
           
        ' RTC variables
        Dim    rtcyear as     byte
        Dim    rtcday  as     byte
        Dim    rtcmonth as    byte
        Dim    rtcdate as     byte
        Dim    rtchr   as     byte
        Dim    rtcmin  as     byte
        Dim    rtcsec  as     byte
        Dim    rtccontrol as  byte
       
        DIM    BTNVAR AS BYTE
        dim    BTNVAR1 as byte
       

       
    Main:
        DelayMS 500
        Cls
         
            Print I,Cgram                   ' Point to character-generator RAM.
            For B_Cnt = 0 to 3
                Lookupl B_Cnt,[0,%10000,%10100,%10101],B_Chr ' Get the bit pattern.  
                Print 0
                For B_Row = 1 to 6
                    Print B_Chr             ' Write the pattern to LCD CG RAM.
                Next                        ' Next row
                Print 0
            Next                            ' Next Character pattern
           
           
            Low RST         ' Reset RTC
            Low SCLK

            ADCON1 = 7      ' PORTA and E digital
            Low PORTE.2     ' LCD R/W low = write
             
            ' Set initial time to 8:00:00AM 07/16/99
            rtcyear = $07
            rtcday = $06
            rtcmonth = $07
            rtcdate = $16
            rtchr = $11
            rtcmin = $16
            rtcsec = $56
            Gosub settime   ' Set the time
               
            TRISC.0 = 1
    WheelDiam = 25
       
    StartSpeed:

        cls    
          Print at 1,4, "SuperSpeed"
          Print at 2,2, "By: Eric Flynn"
          Delayms 1000
        CLS
        Print At 2,4, "MPh"
       
        KMHT = 0
       
        Start:
            WheelCirc = 2 * 3.14 * WheelDiam / 2
            Wheelkilo = WheelCirc * 2.54e-5
            WheelConv = WheelKilo * 3600
             
            Gosub gettime   ' Read the time from the RTC
             
            KMHT = Counter PORTC.0, 250
               
            If KMHT = 0 Then Goto Display  
            Temp_Float = KMHT
            Temp_Float = (Temp_Float * 4) * WheelConv
                KMH =  Temp_Float / 1000
            KMHT = KMH
           
       
           
        Display:
            If porta.1 = 1 then
            Goto SetupWheel
            Endif
             
        '   If KMH_Last <> KMHT Then              
        '       Print At 1, 1, DEC1 KMHT * 0.6213712
        '       KMH_Last = KMHT
        '   EndIf
           
            mph=KMHT * 0.6213712
            dmph=mph
             
            if dmph<10 then
                Print At 2, 2, " "
                Print At 2, 1, " "
                Print At 2, 3, DEC dmph
            endif
            if dmph<100 and dmph>=10 then
                Print At 2, 1, " "
                Print At 2, 2, DEC dmph
            endif
                if dmph>=100 then
                PRINT AT 2, 1, DEC dmph
            endif
           
        Bargraph:
                Bars = (dmph min MaxBar) / 6            ' One full bar for each 6 graph units.                 
                Balance = (dmph min Maxbar) //3     ' Balance is the remainder after a division by 3.        
                Balf = Balance min 1           
                Padding = B_Wdth - (Bars + Balf)        ' Number of spaces to fill bar width.
            Print At 1, 1, Rep Fullbar\Bars,Rep (Balance + Basebar)\Balf,Rep " " \Padding
             
            Print At 2, 12, hex2 rtchr, ":", hex2 rtcmin   ', ":", hex2 rtcsec
           
        GoTo Start
       
       
    'write time to RTC
    settime:
            RST = 1         ' Ready for transfer

            ' Enable write
            shout IO, SCLK, LSBFIRST, [$8e, 0]

            RST = 0         ' Reset RTC

            RST = 1         ' Ready for transfer

            ' Write all 8 RTC registers in burst mode
            shout IO, SCLK, LSBFIRST, [$be, rtcsec, rtcmin, rtchr, rtcdate, rtcmonth, rtcday, rtcyear, 0]

            RST = 0         ' Reset RTC
            Return            

    'read time from RTC
    gettime:
            RST = 1         ' Ready for transfer

            shout IO, SCLK, LSBFIRST, [$bf]      ' Read all 8 RTC registers in burst mode
            shin IO, SCLK, LSBPRE, [rtcsec, rtcmin, rtchr, rtcdate, rtcmonth, rtcday, rtcyear, rtccontrol]

            RST = 0         ' Reset RTC
            Return

    SetupWheel:
         cls
          Print at 1,1, "Wheel Diam."
         
          repeat
              If porta.4 = 1 then
              delayms 100      
              INc Wheeldiam
              endif  
               
              If porta.5 = 1 then
              delayms 100      
              Dec Wheeldiam
              endif    
              Print at 2,1, dec1 WheelDiam
          until porta.3 = 1
         
         Goto StartSpeed
     
  4. dave

    Dave New Member

    Joined:
    Jan 12, 1997
    Messages:
    -
    Likes:
    0


     
  5. Kiko

    Kiko New Member

    Joined:
    Apr 24, 2004
    Messages:
    79
    Likes:
    1
    Location:
    Brazil


    The conversion is correct... I'm doing another version of my project using a graphic LCD, so it can show a graphbar like yours and I'll post it very soon.
     
  6. Sputnik

    Sputnik New Member

    Joined:
    Sep 13, 2005
    Messages:
    20
    Likes:
    0
    Awesome, I wanted to use a Graphic LCD and use some cool graphics but im not very hip on how to use a GLCD for advanced graphics, just the simple charachter type usage and simple pixel plotting.


    I am also integrating a turn signal stop light system into this for use with LED tail lights. I may also integrate sort of an ECU using a pic as a co-processor.

    The turn/stop system has been done for a while, just need to integrate it all!!

    This way I can have a complete bike computer!!! I may even implement GPS.

    Its nice to have someone else who is working on the same thing, we can share ideas!!!

    Thanks!!!!!!!!!!!!!!
     
  7. Kiko

    Kiko New Member

    Joined:
    Apr 24, 2004
    Messages:
    79
    Likes:
    1
    Location:
    Brazil
    The project using GLCD is very simple for a while. It just shows speed, RPM e gear position, so I didn't post it yet because I'm having some problems with my GLCD pinout... And I have to learning about everything, because I'm not either an enginner and programmer. So, if you want to make some nice icons to use on GLCD try to use the LCDICONMAKER, it's a nice and easy program to deal with as well as FASTLCD to make some cool graphics. They are all freeware and small programs so I can send it to your e-mail if you want.
     
  8. Girish.krishnaiah

    Girish.krishnaiah New Member

    Joined:
    May 4, 2007
    Messages:
    1
    Likes:
    0
    help on speedometer and RPM etc

    Hi guys

    I am begineer to automotive field...
    I am intrested to know what is the kind of signal we get from speed sensors,RPM sensors,gear position sensors?
    Are they common with all the automobiles? is there any standard for the same
    please let me know any good informative website of the same!!

    What is the ECU? which i often here in thread? is the place from where all the sensor signals come out :).any useful site to understand automative electronics? please help me on this
    Thanks in advance
    kris
     
  9. Kiko

    Kiko New Member

    Joined:
    Apr 24, 2004
    Messages:
    79
    Likes:
    1
    Location:
    Brazil
    Hi Kris,

    Do a google search and you will find a lot of information on those subjects.

    Rgds
     
  10. gramo

    gramo New Member

    Joined:
    Oct 2, 2006
    Messages:
    1,221
    Likes:
    23
    Location:
    Newcastle, Australia
    Hey Kiko, what compiler are you using for your GLCD routines, and what type of PIC programmer do you have?
     
  11. Kiko

    Kiko New Member

    Joined:
    Apr 24, 2004
    Messages:
    79
    Likes:
    1
    Location:
    Brazil
  12. gramo

    gramo New Member

    Joined:
    Oct 2, 2006
    Messages:
    1,221
    Likes:
    23
    Location:
    Newcastle, Australia
    Doh, I wish I coulda told you about the PICKit 2, its only $34.95 from microchip!

    Owell, so your using Proton, you have a programmer that can handle 18F PIC's and you look like your getting the grip of things, perhaps your delve into GLCD's might be a bit easier when I put up my Swordfish examples for bitmaps/font's with GLCD's.

    Its 'similar' to Proton, but lets you go about things in a modular way. Proton is a very flat 'top down' type of programming, you'll see in a week or two, I'll keep you posted
     
  13. Kiko

    Kiko New Member

    Joined:
    Apr 24, 2004
    Messages:
    79
    Likes:
    1
    Location:
    Brazil
    Allrigh

    For those of you who wants to play with GLCD and do a speedometer, this is my code with schematic for my Suzuki Bike. I'm having problem to find a good GLCD down here in Brazil, I bought one but it needs a negative power supply for the contrast.

    I'll be glad to see your SF codes Gramo. Thank you
     

    Attached Files:

    Last edited: May 10, 2007
  14. gramo

    gramo New Member

    Joined:
    Oct 2, 2006
    Messages:
    1,221
    Likes:
    23
    Location:
    Newcastle, Australia
    Usally the -Vout Pin on the GLCD is for contrast, your's doesn't have one? Also known as Vee
     
  15. gramo

    gramo New Member

    Joined:
    Oct 2, 2006
    Messages:
    1,221
    Likes:
    23
    Location:
    Newcastle, Australia
  16. Kiko

    Kiko New Member

    Joined:
    Apr 24, 2004
    Messages:
    79
    Likes:
    1
    Location:
    Brazil
    It does have a -vout pin but for contrast I need to build an external negative power supply for it.

    pin
    1- GND
    2- VCC
    3 - Vo (CONTRAST)
    4 - D/I
    5 - R/W
    6 - E (ENABLE)
    7 - DO
    8 - D1
    9 - D2
    10 - D3
    11 - D4
    12 - D5
    13 - D6
    14 - D7
    15 - CS1
    16 - CS2
    17 - RST (RESET)
    18 - NC
    19 - BACK LIGHT (-)
    20 - BACK LIGHT (+)

    For contrast, I need do put a trimpot and use a -12V negative feed.

    Eg: -12v ------------------[POT]--------------------- + 5v

    Central pin from pot goes to LCD Vout (pin 3). That's what the vendor said and I can't find a datasheet for it.
     
  17. Sputnik

    Sputnik New Member

    Joined:
    Sep 13, 2005
    Messages:
    20
    Likes:
    0
    Hey Kiko, I cannot find the LCDICONMAKER program anywhere can you email it to me? here: misc AT fullmicros.com

    You should know what to do with the email addy!!


    I have made some progress on the whole project, I will post some stuff soon!!

    Thanks!!!
     
  18. Kiko

    Kiko New Member

    Joined:
    Apr 24, 2004
    Messages:
    79
    Likes:
    1
    Location:
    Brazil
    Attached is a program to make icon for your GLCD.
     

    Attached Files:

  19. Sputnik

    Sputnik New Member

    Joined:
    Sep 13, 2005
    Messages:
    20
    Likes:
    0

    Thank you!!!
     
  20. Sputnik

    Sputnik New Member

    Joined:
    Sep 13, 2005
    Messages:
    20
    Likes:
    0
    Hey Kiko, I tried your code and schematic in ISIS and I cannot get it to display properly!! The splash screen doesnt not show, and when it starts to show the actually working screen it is just a jumble in the lower right corner!!!

    What are your LCD settings in ISIS?
     
  21. Kiko

    Kiko New Member

    Joined:
    Apr 24, 2004
    Messages:
    79
    Likes:
    1
    Location:
    Brazil
    Set LCD clock frequency to 20mhz.

    Rgds
     

Share This Page