Transmitting Garbage
Okay, here is my kegarator program to date. However, Stamplot and debug (TR's DBTerm) just wont display any data (good data; DBterm just shows ????). I have a resonator in ( didn't before) so, can anyone tell what's wrong? Do you have to format the data like you do when you print ascii on a LCD?
Any Ideas? If I do have to format the data, is it the same routine?
Thanks
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Shawn Lowe
When all else fails.....procrastinate!
' =========================================================================
'
' File...... Kegarator_v1.0.SXB
' Purpose... Tempurature controller for homebrew kegs
' Author.... Shawn Lowe
' E-mail.... [url=mailto:livinlowe2006@yahoo.com]livinlowe2006@yahoo.com[/url]
' Started...
' Updated...
'
' =========================================================================
' -------------------------------------------------------------------------
' Program Description
' -------------------------------------------------------------------------
'
' Reads value from an ADC0831 that is connected to a LM34 Tempurature Sensor
' Note that the SpeedMult feature is used with SHIFTIN to bump the clock
' speed up to ~332 kBits/sec (ADC0831 max is 400). This value will control a
' RC-4 board from EFX-TEK in order to control the compressor on a freezer to
' regulate tempurature on homebrew in Cornilius Kegs.
' -------------------------------------------------------------------------
' Revision Notes:
' 1.0 -- Basic functionality
' -------------------------------------------------------------------------
' Device Settings
' -------------------------------------------------------------------------
DEVICE SX28, OSCHS2, TURBO, STACKX, OPTIONX
FREQ 20_000_000
ID "beercool"
' -------------------------------------------------------------------------
' IO Pins
' -------------------------------------------------------------------------
Cpin PIN RA.2 OUTPUT ' shift clock
Dpin PIN RA.1 INPUT ' shift data
CS PIN RA.0 OUTPUT ' chip select
TX PIN RB.1 OUTPUT ' transmit to PC / Stampplot
RC4 PIN RB.0 OUTPUT ' transmit to RC4
' -------------------------------------------------------------------------
' Variables
' -------------------------------------------------------------------------
temperature VAR Byte ' main variable
tmpB1 VAR Byte ' working variables
tmpB2 VAR Byte
tmpW1 VAR Word
' -------------------------------------------------------------------------
' Constants
' -------------------------------------------------------------------------
IsOn CON 1
IsOff CON 0
App_Mod_On CON %1000 ' not currently used
App_Mod_Off CON %0000
BaudMode CON "OT38400"
CR CON 13
' =========================================================================
PROGRAM Start
' =========================================================================
' -------------------------------------------------------------------------
' Subroutine Declarations
' -------------------------------------------------------------------------
DELAY_MS SUB 1, 2 ' delay in milliseconds
TX_BYTE SUB 1 ' transmit a byte
TX_STR SUB 2 ' transmit a string
TX_BYTE_PC SUB 1 ' transmit a byte
TX_STR_PC SUB 2 ' transmit a string
RESET_RC4 SUB 0 ' reset the RC-4
SET_RC4 SUB 1 ' set RC-4 relays
Get_ADC SUB 0,1 ' get adc reading
' -------------------------------------------------------------------------
' Program Code
' -------------------------------------------------------------------------
Start:
DELAY_MS 250 ' let RC-4 power up
RESET_RC4
HIGH CS ' make CS output, no ADC
LOW Cpin ' make clock 0-1-0
Main:
temperature = Get_ADC
'watch temperature, 8, udec
TX_BYTE_PC temperature
TX_BYTE_PC CR
TX_STR_PC "TEST"
If temperature >= 38 then
SET_RC4 %1000
EndIf
If temperature <= 34 then
SET_RC4 %0000
EndIf
DELAY_MS 500
'BREAK
GOTO Main
' -------------------------------------------------------------------------
' Subroutine Declarations
' -------------------------------------------------------------------------
' Use: aVar = GET_ADC
' -- reads ADC0831 and places value into 'tmprtr'
FUNC Get_ADC
CS = 0 ' activate ADC0831
SHIFTIN Dpin, Cpin, MSBPOST, tmpB1\1, 4 ' start conversion
SHIFTIN Dpin, Cpin, MSBPOST, tmpB1, 4 ' shift in the data
CS = 1 ' deactivate ADC0831
RETURN tmpB1
ENDFUNC
' -------------------------------------------------------------------------
' Use: DELAY_MS duration
' -- replaces PAUSE
SUB DELAY_MS
IF __PARAMCNT = 1 THEN
tmpW1 = __PARAM1
ELSE
tmpW1 = __WPARAM12
ENDIF
PAUSE tmpW1
ENDSUB
' -------------------------------------------------------------------------
' Use: TX_STR [noparse][[/noparse]string | label]
' -- "string" is an embedded string constant
' -- "label" is DATA statement label for stored z-String
SUB TX_STR
tmpW1 = __WPARAM12 ' get address of string
DO
READINC tmpW1, tmpB1 ' read a character
IF tmpB1 = 0 THEN EXIT ' if 0, string complete
TX_BYTE tmpB1 ' send character
LOOP
ENDSUB
' -------------------------------------------------------------------------
' Use: TX_BYTE byteVal
' -- transmit "byteVal" at "BaudMode" on pin "RC4"
SUB TX_BYTE
SEROUT RC4, BaudMode, __PARAM1
ENDSUB
' -------------------------------------------------------------------------
' Use: TX_STR [noparse][[/noparse]string | label]
' -- "string" is an embedded string constant
' -- "label" is DATA statement label for stored z-String
SUB TX_STR_PC
tmpW1 = __WPARAM12 ' get address of string
DO
READINC tmpW1, tmpB1 ' read a character
IF tmpB1 = 0 THEN EXIT ' if 0, string complete
TX_BYTE_PC tmpB1 ' send character
LOOP
ENDSUB
' -------------------------------------------------------------------------
' Use: TX_BYTE_PC byteVal
' -- transmit "byteVal" at "BaudMode" on pin "TX"
' -------------------------------------------------------------------------
SUB TX_BYTE_PC
SEROUT TX, BaudMode, __PARAM1
ENDSUB
' -------------------------------------------------------------------------
' Use: RESET_RC4
' -- resets RC4 to ensure things aren't on that shouldn't be at power up
SUB RESET_RC4
TX_STR "!!!!!!RC4" ' header (ensure sync)
TX_BYTE %00 ' address
TX_BYTE "X" ' reset command
ENDSUB
' -------------------------------------------------------------------------
' Use: SET_RC4 relayBits
' -- turns on specified relays ( kegerator will only use one)
SUB SET_RC4
tmpB2 = __PARAM1 ' get relay bits
TX_STR "!RC4" ' header
TX_BYTE %00 ' address
TX_BYTE "S" ' set command
TX_BYTE tmpB2 ' relay bits
ENDSUB
Any Ideas? If I do have to format the data, is it the same routine?
Thanks
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Shawn Lowe
When all else fails.....procrastinate!

Comments
I am going through an (efx-tek) serial inverter. I am also going through a usb to serial adapter, and I can see the sx sending data by the led on the usb 2 ser adapter
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Shawn Lowe
When all else fails.....procrastinate!
I applied 12V power to the inverter, still nothing. I changed from OT38400 to T38400, zip. Should I try N38400?
Thanks
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Shawn Lowe
When all else fails.....procrastinate!
See the attached programs -- both are working when tested with HyperTerminal. I've taken some liberties and updated your code to more efficent routines.
When using the Serial Inverter you have to power it AND have a pull-up on the TX pin. Also, when defining pins that are OT mode you need to make them an input and then write one to the pin so you don't get a false start.
You can go directly into the USB-to-Serial converter. You need to change the PC baud mode to N38400, remove the and redefine the pin. I've attached a second version of the program that works that way.
If you happen to be using a Prop-SX as your controller you can use RA.3 as your TX pin in True mode -- will make connections easier.
[noparse][[/noparse]Edit] File corrected for SX/B 1.51.03 -- see below.
Post Edited (JonnyMac) : 8/31/2008 6:02:17 PM GMT
Sorry its taken so long for me to get to this, I really apprieciate your help, but work has been crazy! Anyway, the compiler is having heartache about the TXS_RC4 sub, and I'm not fully aware of what your additions do so I can't tell what it's problem is.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Shawn Lowe
When all else fails.....procrastinate!