LED Machine Tach For Tired Eyes


Closed Thread
Results 1 to 34 of 34

Hybrid View

  1. #1
    Join Date
    Aug 2006
    Location
    Look, behind you.
    Posts
    2,818


    Did you find this post helpful? Yes | No

    Default

    Hello again,
    M E Labs has a lot of code samples, many of you have examples there, and here is a sample from mister_e that I believe will do what I need without all the overhead associated to using latches. I am posting it here as the download from ME Labs has some cut paste errors, specificly duplicate IF THEN loop which upset my compiler's little tummy I modified mister_e's code only enough to port it to a 16F628A, . . . Great piece of work Steve ! Thank You !
    Code:
    ' Pulse counter
    ' =============
    '
    ' File name : Count_Display.bas
    ' Company : Mister E
    ' Programmer : Steve Monfette
    ' Date : 27/12/2004
    ' Device : PIC16F84A-20/P
    '
    '
    ' This program display to 3 x 7 segments dislay the result of
    ' pulses count on PORTA.4 pin/sec.
    '
    ' Hardware connection :
    ' ---------------------
    '      1. 3 X 7 segments display on PORTB<7:0>
    '      2. 3 X PNP transistor on PORTA<3:0> to drive common anode
    '         of each 7 segments display
    '
    '
    ' Programming mode and PIC define
    ' -------------------------------
    '
    @ __config _HS_OSC & _WDT_ON & _PWRTE_ON & _LVP_OFF
    CMCON=7       ' ADDED FOR PIC16F628A   
    DEFINE OSC 20 ' use 20 MHZ oscillator
    
    
        ' I/O Definition
        ' --------------
        '
    TRISA = %11111000 ' PORTA  : <2:0> outputs to common Anode of 7 segment
                          '                1. PORTA.0 More significant
                          '                2. PORTA.2 Less significant
                          '        : PORTA.4 input for signal
                          '
    TRISB = 0         ' PORTB connected to 7 segments
                      '       B0 : segment a
                      '       B1 : segment b
                      '       B2 : segment c
                      '       B3 : segment d
                      '       B4 : segment e
                      '       B5 : segment f
                      '       B6 : segment g
                      '       B7 : segment decimal dot
                          
    
    ' Internal EEPROM definition
    ' --------------------------
    '
    data @0,192,249,164,176,153,146,130,248,128,144 ' table to convert
                                                    ' numbers to 7 segments
                                                    ' pattern output when
                                                    ' drive invert
                                                        
    
    
    ' Interrupt and register definition
    ' ---------------------------------
    
    OPTION_REG = %1111000   ' TMR0 clock source : RA4/T0CKI
                            ' increment on low to high transition
                            ' Prescaler assign to WDT
                            ' WDT rate 1:1
                            '
    INTCON = %10100000      ' Enable global interrupt
                            ' Disable EE write interrupt
                            ' Enable TMR0 overflow interrupt
    
            
        ' Variable definition
        ' -------------------
        '
    DisplayPort  var PORTB   ' Port for 7 Segments
    ClockInput   var PORTA.4 ' Input pin for signal
    _7Seg1       con 14      ' enable more significant 7 segment display
    _7Seg2       con 13      ' enable mid significant 7 segment display
    _7Seg3       con 11      ' enable less significant 7 segment display
    Digit_1          var byte    ' Hundreds digit
    Digit_2          var byte    ' Tenth digit
    Digit_3          var byte    ' Unit digit
    ToBeDisplay  var word    ' Result of count to be send to 7 segment display
    Display      var byte    ' Temp variable
    DisplayLoop  var byte    '
    Delay        var word    ' Variable for Delay loop
    OverFlowVar  var word        '
    Thousands    var bit         ' Flag for count >= 1000 & < 10 000
    TenThousands var bit         ' Flag for count >= 10 000
    
        ' Variable and software initialisation
        ' ------------------------------------
        '
    tobedisplay = 0 ' set initial value of count
    TMR0 = 0        ' reset prescaller
    On interrupt GoTo SetVarToBeDisplay
        
    MainLoop:
    
        ' MainLoop
        ' ---------
        '
        ' 1. display the result of the count on RA4 pin
        ' 2. refresh display
        ' 3. reset Timer0
        ' 4. reload prescaler.
        '
        ' Duration of the procedure : 1 sec
        '           fine tuned by DelayBetweenEachDisplay Sub
        '
        ' Looping 1 sec and get results of the pulse count in
        ' TMR0 + OverFlowVar
        '
    DisplayRefresh:
            '
        ' Testing amount of count
        ' -----------------------
        '
        ' Get the result of count and place decimal point flag
        ' on the according 7 segments
        '
        If tobedisplay>= 1000 Then
        tobedisplay = tobedisplay / 10
        Else
            tenthousands = 0
               thousands = 1
    EndIf
         
        '
        ' convert digit to 7 segment output pattern
        ' -----------------------------------------
    display=ToBeDisplay dig 2 ' Read hundreds digit
    read display, digit_1     ' Convert hundreds
         if thousands==1 then digit_1=digit_1 & $7F ' enable decimal dot
                                                       ' by clearing PORTB.7
    
        display=ToBeDisplay dig 1 ' Read tenths digit
        read display, digit_2     ' Convert tens
            if tenthousands==1 then digit_2=digit_2 & $7F ' enable decimal dot                          '
                                                      ' by clearing PORTB.7
                                                      
            display=ToBeDisplay dig 0 ' Read units digit
            read display, digit_3     ' Convert units
        '
        '
        ' Send digit to 7 segments
        ' ------------------------
        For displayloop = 0 To 111 ' loop for about 1 sec
    
            ' display hundreds
            ' ----------------
            PORTA=_7seg1        ' enable hundreds 7 segment
            displayport = digit_1 ' display
            GoSub DelayBetweenEachDigit
            
            ' display tenth
            ' -------------
            PORTA=_7seg2        ' enable tenth 7 segment
            displayport = digit_2 ' display
            GoSub DelayBetweenEachDigit
            
            ' display units
            ' -------------
            PORTA=_7seg3        ' enable unit 7 segment
            displayport = digit_3 ' display
            GoSub DelayBetweenEachDigit
            
        Next
        tobedisplay = OverFlowVar + TMR0
        OverFlowVar = 0 ' Reset OverFlowVar
        TMR0 = 0        ' reset prescaller
        GoTo DisplayRefresh
    
    
    DelayBetweenEachDigit:
    
        ' DelayBetweenEachDigit
        ' ---------------------
        ' Produce delay of about 3 mSec
        '
        ' Fine tuned with MPLAB StopWatch to get MainLoop = 1 sec
        '
            For delay = 1 To 307
                @ nop
            Next
            @ nop
            @ nop
            @ nop
            @ nop
            @ nop
            @ nop
            @ nop
        Return
    
    
        disable
    SetVarToBeDisplay:
        '
        ' SetVarToBeDisplay
        ' -----------------
        ' interrupt routine of TMR0 overflow
        '
        ' Reset prescaller
        ' Reset overflow flag
        '
        OverFlowVar = OverFlowVar + 256
        INTCON.2 = 0 ' clear overflow flag
        TMR0 = 0     ' reload TMR0
        Resume
        enable
    
    END
    If you do not believe in MAGIC, Consider how currency has value simply by printing it, and is then traded for real assets.
    .
    Gold is the money of kings, silver is the money of gentlemen, barter is the money of peasants - but debt is the money of slaves
    .
    There simply is no "Happy Spam" If you do it you will disappear from this forum.

  2. #2
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    That's a "Straw", I'm a "Camel", and my back is broken.

    2 days of work, and as I'm posting it I see ... "Nevermind, I'll use mister-e's program".
    Arrrrghhh.

    Enjoy.
    DT

  3. #3
    Join Date
    Aug 2006
    Location
    Look, behind you.
    Posts
    2,818


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Darrel Taylor View Post
    That's a "Straw", I'm a "Camel", and my back is broken.

    2 days of work, and as I'm posting it I see ... "Nevermind, I'll use mister-e's program".
    Arrrrghhh.

    Enjoy.
    No NO NO NO Don't be that way Darrel, I really want to see what you have come up with! You and Mister_e, Melanie, and a few others all write really sweet code, and I am humbled, that you have made this effort. I thought you were standing by to see what I could come up with (I know, there I go thinkin' again). I just really thought this example needed to be "showcased"as a lot of NOOBS may have tried unsucessfuly to use it, due to aforementioned . . . misprint? For sure I have no intent to offend Professor Rex Nexus Taylor of the Crownhill University. I'm like an old hound dog with a bone, keep on shakin' it and shakin' it till I get the marrow out of it, now for steak . . . as for you being a Camel, yea like Secretariate was huh?
    Last edited by Archangel; - 21st June 2008 at 12:45. Reason: recap
    If you do not believe in MAGIC, Consider how currency has value simply by printing it, and is then traded for real assets.
    .
    Gold is the money of kings, silver is the money of gentlemen, barter is the money of peasants - but debt is the money of slaves
    .
    There simply is no "Happy Spam" If you do it you will disappear from this forum.

  4. #4
    Join Date
    Aug 2006
    Location
    Look, behind you.
    Posts
    2,818


    Did you find this post helpful? Yes | No

    Default

    Threads left open are useless to others, so I will post what I came up with.
    Code:
    @MyConfig = _HS_OSC  & _LVP_OFF & _WDT_OFF & _CP_OFF
    @MyConfig = MyConfig & _BODEN_OFF & _MCLRE_ON & _PWRTE_ON  
    @ __CONFIG   MyConfig
    '===================== Set Defines ===================================
    '*
    DEFINE OSC 20
    '==================== Set up registers ===============================
    '                   
    INCLUDE "MODEDEFS.BAS"
    CMCON  = 7          ' Shut off comparators
    TRISA  = %00010000  ' Set PORTA to all outputs A.4 
    TRISB  = %00000000  ' Set PORTB Outputs  
    PortA = $20         ' Set all Port A outputs low           
    PORTB = 0           ' Set all Port B outputs low                      
    '
    '=====================Set Constants ================================
    'no constants as yet
    '
    '===================== Alias Ports =================================
    '
    TacInput var PORTA.4 ' Input pin for T0CKI -  Tach In
    '
    SDO      VAR PortB.0              ' 7 Segment Data  Out
    SCLK     var PortB.1              ' 7 Segment Clock Out
    DLE      var portB.2              ' 7 Segment Latch Enable
    '===================== Declare Variables =============================
    Digit_1          var byte    ' Thousands digit
    Digit_2          var byte    ' Hundreds  digit
    Digit_3          var byte    ' Tens      digit
    Digit_4          var byte    ' Units     digit
    DIGIT_OUTPUT     VAR BYTE    ' Storage for each digit before lookup
    CounterTotal     var word    ' Someplace to count input pulses
    Displays         VAR WORD    ' Storage while Countertotal gets cleared
    '===================== Zero Digits ====================================
    Digit_1 = 0
    Digit_2 = 0
    Digit_3 = 0
    Digit_4 = 0
    '===================== EEPROM DATA ===================================
    DATA @ 0,126,48,109,121,51,91,95,112,127,123   'DIGITS WITHOUT DECIMAL
    
    ;DATA @ 10,254,176,237,249,179,219,223,240,255,243 'DIGITS WITH DECIMAL
    
    '=========================== Main Loop ==============================
    LOOP:
    COUNT PortA.4,1000,CounterTotal
    '
    DISPLAYS=0
    DISPLAYS=(DISPLAYS+CounterTotal) ' load OverflowTotal into displays
    
    displays=(displays*60) ' change this formula to agree with encoder
                           ' Formula is for 1 PPR, 30 for 2 PPR, 15 for 4 PPR
                           ' 10 for 6 PPM, ET-AL, OR TURN THEM AROUND 2 FOR 30
                           ' 3 for 20,4 for 15,5 for 12, 6 for 10
    gosub Display
    CounterTotal=0                
    '
    GOTO LOOP
    '
    '=========================== Subroutines ============================
    Display:  
    '
    DIGIT_OUTPUT = DISPLAYS dig 0 ' Load Thousands Digit
    READ DIGIT_OUTPUT, DIGIT_1    ' Convert and Load Thousands Variable
    DIGIT_OUTPUT = DISPLAYS DIG 1 ' Load Hundreds  Digit
    READ DIGIT_OUTPUT, DIGIT_2    ' Convert and Load Hundreds Variable
    DIGIT_OUTPUT = DISPLAYS DIG 2 ' Load Tens of Units Digit
    READ DIGIT_OUTPUT, DIGIT_3    ' Convert and Load Tens  Variable
    DIGIT_OUTPUT = DISPLAYS dig 3 ' Load Ones of Units Digit
    READ DIGIT_OUTPUT, DIGIT_4    ' Convert and Load Units Variable
    '
    shiftout SDO,SCLK,4,[DIGIT_1\8,DIGIT_2\8,DIGIT_3\8,DIGIT_4\8]
    pulsout DLE, 500 
    pause 125
    '
    return
    '
    END
    This Works on the bench , I have yet to try it on the machine as I am still making parts for it.
    If you do not believe in MAGIC, Consider how currency has value simply by printing it, and is then traded for real assets.
    .
    Gold is the money of kings, silver is the money of gentlemen, barter is the money of peasants - but debt is the money of slaves
    .
    There simply is no "Happy Spam" If you do it you will disappear from this forum.

  5. #5
    Join Date
    Aug 2006
    Location
    Look, behind you.
    Posts
    2,818


    Did you find this post helpful? Yes | No

    Default

    A second more complicated unit using a bargraph in addition to numbers is posted in attachment below:
    Attached Files Attached Files
    If you do not believe in MAGIC, Consider how currency has value simply by printing it, and is then traded for real assets.
    .
    Gold is the money of kings, silver is the money of gentlemen, barter is the money of peasants - but debt is the money of slaves
    .
    There simply is no "Happy Spam" If you do it you will disappear from this forum.

  6. #6
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,653


    Did you find this post helpful? Yes | No

    Question

    Hi, Joe

    from your program ... may I think you use "something like" a MAX 7219 Serial LedDriver ???

    Alain
    Last edited by Acetronics2; - 20th October 2008 at 10:23.
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

  7. #7
    Join Date
    Aug 2006
    Location
    Look, behind you.
    Posts
    2,818


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Acetronics View Post
    Hi, Joe

    from your program ... may I think you use "something like" a MAX 7219 Serial LedDriver ???

    Alain
    Hi Alain,
    I used this: http://cgi.ebay.com/ws/eBayISAPI.dll...MEWA:IT&ih=022
    and this
    http://cgi.ebay.com/40-segment-2-54m...d=p3911.c0.m14
    The price was right.
    Last edited by Archangel; - 20th October 2008 at 10:38.
    If you do not believe in MAGIC, Consider how currency has value simply by printing it, and is then traded for real assets.
    .
    Gold is the money of kings, silver is the money of gentlemen, barter is the money of peasants - but debt is the money of slaves
    .
    There simply is no "Happy Spam" If you do it you will disappear from this forum.

Similar Threads

  1. Conway's Game Of Life
    By wellyboot in forum mel PIC BASIC Pro
    Replies: 45
    Last Post: - 28th May 2020, 07:14
  2. Free Project - 245 LED Display
    By T.Jackson in forum Code Examples
    Replies: 221
    Last Post: - 16th August 2009, 05:59
  3. new and need help
    By smeghead in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 3rd November 2008, 21:19
  4. LCD will not start
    By btaylor in forum mel PIC BASIC Pro
    Replies: 49
    Last Post: - 24th May 2007, 03:30
  5. LED Tach Sources?
    By Netjammer in forum mel PIC BASIC Pro
    Replies: 6
    Last Post: - 17th October 2004, 04:47

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts