Shop OBEX P1 Docs P2 Docs Learn Events
Project issue — Parallax Forums

Project issue

jknightandkarrjknightandkarr Posts: 234
edited 2010-04-28 16:15 in Propeller 1
Here's my program first of all.

{{Vehical Speedometer Display. 
8K or 4K Pulses Per Mile sending units 
Displays Kph=Kilometers Per Hour or Mph=Miles Per Hour 
By: Joe R on March 16th, 2010 
}} 
CON 
_clkmode =xtal1+pll16x 'system clock 
_xinfreq=5_000_000 'set 80 Mhz 
isEnabled = %0001 
VAR 
long LowDigitPin, HighDigitPin 'The pins for specifying digits. 
'Must be contiguous 
'HighDigitPin can be from 0 to 7 more than LowDigitPin 
long Seg0Pin, Seg8Pin 'The pins for the segments. 
'Must be contiguous 
'Segment 8 is the decimal point 
long flags 
long myStack[noparse][[/noparse]10] 
long runningCogID 
long myValue 'Value to be displayed 
long vss 'Vehical Speed Sensor Input 
long Mph 'Display In Miles Per Hour 
PUB Speed(dLow, digits, s0, enabled)|kph 
'' Start the display 
'' Parameters: 
'' dLow - the pin number of the least significant digit 
'' digits - the number of digits to display (up to 8) 
'' s0 - the pin number of segment 0 
'' enabled - the initial enabled state 
dira[noparse][[/noparse]13]:=0 'Set pin 13 as input 
repeat 
Dira[noparse][[/noparse]12]:=0 'Start counting vss signal 
ctra:=0 
ctra:=(%01010<<26)|(%001<<23)|(0<<9)|(12) 
frqa:=1 
phsa:=0 
waitcnt(80_000_000+cnt) 
vss:=phsa 'Send speed sensor value on. 
ctra:=0 
'vss:=67 'Temporary Speed sensor value 
If ina[noparse][[/noparse]13]==0 'Look for Pin13 for 1 or 0 
Mph:=vss*9 'Calibrate for 4000ppm sender if pin 13=Low 
else 
Mph:=vss*9/2 'Calibrate for 8000ppm Sensor if pin 13=High 
If ina[noparse][[/noparse]14]==1 'Check for Mph or Kph setting 
Kph:=Mph*1_609_344/1_000_000 'Display speed in Kph 
else 
Kph:=Mph*1 'Display speed in Mph 
myValue := Kph 'Copy Kph to myValue 
LowDigitPin := 8 
HighDigitPin := 8 + ((4 - 1) <# 7) 'Limit to eight digits 
Seg0Pin := 0 
Seg8Pin := 0 + 7 
dira[noparse][[/noparse]Seg0Pin..Seg8Pin]~~ 'Set segment pins to outputs 
dira[noparse][[/noparse]LowDigitPin..HighDigitPin]~~ 'Set digit pins to outputs 
outa[noparse][[/noparse]Seg0Pin..Seg8Pin]~ 'Turn off all segments 
dira[noparse][[/noparse]LowDigitPin..HighDigitPin]~~ 'Turn off all digits 
' if enabled 'Set initial enabled state 
flags |= isEnabled 
'else 
'flags~ 
stop 
runningCogID := cognew(ShowValue, @myStack) + 1 
PUB Stop 
'' Stop the display 
if runningCogID 
cogstop(runningCogID~ - 1) 
PUB Enable 
'' Enable the display 
flags |= isEnabled 
PUB Disable 
'' Disable the display 
flags &= !isEnabled 

PUB SetValue(theValue) 
'' Set the value to display 
myValue := theValue 
PRI ShowValue | digPos, divisor, displayValue 
' ShowValue runs in its own cog and continually updates the display 
dira[noparse][[/noparse]Seg0Pin..Seg8Pin]~~ 'Set segment pins to outputs 
dira[noparse][[/noparse]LowDigitPin..HighDigitPin]~~ 'Set digit pins to outputs 
repeat 
if flags & isEnabled 
displayValue := myValue 'take snapshot of myValue so it can't be changed 
' while it is being displayed 
divisor := 1 'divisor is used to isolate a digit to display 
repeat digPos from 0 to HighDigitPin - LowDigitPin 'only display as many digits as there are pins 
outa[noparse][[/noparse]Seg0Pin..Seg8Pin]~ 'clear the segments to avoid flicker 
outa[noparse][[/noparse]LowDigitPin..HighDigitPin] := byte[noparse][[/noparse]@DigSel + digPos] 'enable the next digit 
outa[noparse][[/noparse]Seg0Pin..Seg8Pin] := byte[noparse][[/noparse]@Digit0 + displayValue / divisor // 10] 'display the digit 
waitcnt (clkfreq / 10_000 + cnt) 'the delay value can be tweaked to adjust 
' display brightness 
divisor *= 10 
else 
outa[noparse][[/noparse]LowDigitPin..HighDigitPin]~~ 'disable all digits 
waitcnt (clkfreq / 10 + cnt) 'wait 1/10 second before checking again 

DAT 
'Common cathode 7-segment displays are activated by bringing the cathode to ground 
DigSel byte %11111110 
byte %11111101 
byte %11111011 
byte %11110111 
byte %11101111 
byte %11011111 
byte %10111111 
byte %01111111 
'.GFEDCBA 
Digit0 byte %00111111 
Digit1 byte %00000110 
Digit2 byte %01011011 
Digit3 byte %01001111 
Digit4 byte %01100110 
Digit5 byte %01101101 
Digit6 byte %01111101 
Digit7 byte %00000111 
Digit8 byte %01111111 
Digit9 byte %01100111



My problem is, vss:=67 give me the desired display, but when I disable it to use

Dira[noparse][[/noparse]12]:=0 'Start counting vss signal

ctra:=0

ctra:=(%01010<<26)|(%001<<23)|(0<<9)|(12)

frqa:=1

phsa:=0

waitcnt(80_000_000+cnt)

vss:=phsa 'Send speed sensor value on.

ctra:=0



All I get is random numbers from my speedsensor & the speedbuffer system, which is from an 89' Trans-Am 700R4, the numbers continue even with my speed sensor stopped. I got an analog electric speedometer from a Firebird I have hooked up with the propeller, so the speedsensor & buffer works fine. I tried looking the counter program over, but I don't quite fully understand the programming. I got it from the BS2 Functions list from the propeller object exchange. What's my problem?



Joe

▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
I'm going insaine. It's SOOOOOO much fun. lol

Post Edited (jknightandkarr) : 4/28/2010 6:27:53 AM GMT

Comments

  • jknightandkarrjknightandkarr Posts: 234
    edited 2010-04-28 06:33
    http://www.newarkknights.net/speedometer.zip

    Ok, I don't know why the code option took out all my extra indentations, so rather then fight with it all nite, I'll just post the program directly.

    Joe

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    I'm going insaine. It's SOOOOOO much fun. lol
  • BeanBean Posts: 8,129
    edited 2010-04-28 11:33
    Joe,
    Yeah it takes the formatting out sometimes. It's a pain.

    Without looking at your code, I would bet that you are getting electrical noise that is causing the random value.

    Are you running the Propeller from the car battery ?

    Can you post a schematic of your buffer ?

    Bean

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Use BASIC on the Propeller with the speed of assembly language.
    PropBASIC thread http://forums.parallax.com/showthread.php?p=867134

    March 2010 Nuts and Volts article·http://www.parallax.com/Portals/0/Downloads/docs/cols/nv/prop/col/nvp5.pdf
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    There are two rules in life:
    · 1) Never divulge all information
  • jknightandkarrjknightandkarr Posts: 234
    edited 2010-04-28 12:02
    Bean said...
    Joe,
    Yeah it takes the formatting out sometimes. It's a pain.

    Without looking at your code, I would bet that you are getting electrical noise that is causing the random value.

    Are you running the Propeller from the car battery ?

    Can you post a schematic of your buffer ?

    Bean
    I'm running the test off of the PPDB, 12V·transformer to wall outlet.
    Buffer......I can try, depends if I can·figure·that or not. ·It's a factory GM speed sensor buffer from·like 85& up·Trans-Am/Camaro, so it depends if I can find out what the·components that are on it are. It's a solid state unit, but I'll work on that now.

    Joe

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    I'm going insaine. It's SOOOOOO much fun. lol

    Post Edited (jknightandkarr) : 4/28/2010 12:14:51 PM GMT
  • jknightandkarrjknightandkarr Posts: 234
    edited 2010-04-28 12:56
    I don't think I can give a scematic on that, there's 6 yellow unknown components, about small diode sized, caps maybe? 1 ic chip with

    6758 H
    CS 8609 H

    on it & one large yellow component with 336K printed on it. I tried to look for scematics on the net, but no luck. It's a 4000 Pulse per mile to the speedometer & 2000 ppm to the cruise control, & unknown value to the ecm, 4K again I think. My book don't tell this value. This is about all the info I can give at this time. on the Buffer

    Joe

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    I'm going insaine. It's SOOOOOO much fun. lol
  • BeanBean Posts: 8,129
    edited 2010-04-28 14:27
    Oh, I thought the buffer was something that you had built.

    What voltage levels does the buffer output ? I hope you are not running 12V pulses directly into a propeller pin ??? That would be bad.

    You will probably need a filter between the buffer output and the propeller pin. Maybe just a resistor and a cap would do it.

    Bean

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Use BASIC on the Propeller with the speed of assembly language.
    PropBASIC thread http://forums.parallax.com/showthread.php?p=867134

    March 2010 Nuts and Volts article·http://www.parallax.com/Portals/0/Downloads/docs/cols/nv/prop/col/nvp5.pdf
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    There are two rules in life:
    · 1) Never divulge all information
  • jknightandkarrjknightandkarr Posts: 234
    edited 2010-04-28 16:06
    No It's a stock buffer. It's required to run the stock speedometer cluster I have. Help to calibrate & compaire readings. No, It's like 4.5 volts. What values would work on those or would any value pretty much work?

    Joe

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    I'm going insaine. It's SOOOOOO much fun. lol
  • mctriviamctrivia Posts: 3,772
    edited 2010-04-28 16:15
    the prop uses 3.3V supply so you should lower the voltage first. either use a series resister and let the clamping diodes take the load or make a voltage divider out of a 10k resistor and a 20k resistor. the 20k goes in paralel with the prop pin and ground.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Lots of propeller based products in stock at affordable prices.

    Free shipping on orders over $100 and a Free LCD screen for orders over $200. Today Only(April 28th, 2010)

    propmodule.com will be closed May 1-10th. Orders made in that time will be shipped on the 11th.
Sign In or Register to comment.