BasicMicro - Forums

www.basicmicro.com
It is currently Sun May 20, 2012 10:56 pm

All times are UTC - 8 hours [ DST ]




Post new topic Reply to topic  [ 1 post ] 
Author Message
 Post subject: Converting BS2 code to Atom 24
PostPosted: Mon Dec 15, 2008 4:47 am 
Hi All
I wonder if anyone could help with the enclosed code running on a Stamp BS2. I think the big problem is the Ir code timing but would be gratefull for any help.


' {$STAMP BS2}

declarations:

DIRS = %0000000000000001

i CON 254
clr CON 1
line1 CON 128
line2 CON 192
'baud CON 396+$4000 'SE Display - 9600 Baud
baud CON 84+$4000
lcd CON 11
IR_in CON 1
IR_detect VAR Bit
IR_pulse VAR Word(8)
IR_word VAR Byte
index VAR Byte
prev VAR Byte
counter VAR Nib
mute VAR Nib
tapemon VAR Nib
power VAR Nib
volume VAR Byte
setting VAR Byte
drc VAR Nib
new VAR Nib
old VAR Nib

'--------------------------------------------
initialize:

old.BIT0=IN2
old.BIT1=IN3

PAUSE 2000
volume = 0
SEROUT lcd,baud,[i,clr]
prev = 99
LOW 7
PAUSE 10
SHIFTOUT 6, 5, MSBFIRST, [volume8,volume8]
PAUSE 10
HIGH 7

'--------------------------------------------
main:

GOSUB encoder
GOSUB ir_scan

GOTO main

'--------------------------------------------
ir_scan:

IR_detect=IN1
IF IR_detect = 1 THEN end_ir_scan
GOSUB startbit
GOSUB get_pulse_stream
GOSUB decode
GOSUB function

end_ir_scan

RETURN

'--------------------------------------------
encoder:

new.BIT0=IN2
new.BIT1=IN3
IF new=old THEN end_encoder
drc=(new^old)&3
IF power = 0 THEN end_encoder
IF drc = 1 THEN countdown
IF drc = 2 THEN countup

countdown:
IF volume=0 THEN continue
volume = volume - 1
old=new
GOTO set_volume
GOTO end_encoder

countup:
IF volume=255 THEN continue
volume = volume + 1
old=new
GOTO set_volume
GOTO end_encoder

continue:
old=new
GOTO end_encoder

end_encoder:

RETURN

'--------------------------------------------
startbit:

FOR counter = 0 TO 15
PULSIN IR_in,0,IR_pulse(0)
IF IR_pulse(0) > 900 THEN startbit_detected
NEXT

startbit_detected

RETURN

'---------------------------------------------
get_pulse_stream:

find_stopbit:
PULSIN IR_in,1,IR_pulse(0)
IF IR_pulse(0) > 1400 AND IR_pulse(0) <> 0 THEN decodebits
GOTO find_stopbit

decodebits:
PULSIN IR_in,0,IR_pulse(0)
PULSIN IR_in,0,IR_pulse(1)
PULSIN IR_in,0,IR_pulse(2)
PULSIN IR_in,0,IR_pulse(3)
PULSIN IR_in,0,IR_pulse(4)
PULSIN IR_in,0,IR_pulse(5)
PULSIN IR_in,0,IR_pulse(6)
PULSIN IR_in,0,IR_pulse(7)

RETURN

'---------------------------------------------
decode:

FOR counter = 0 TO 7
LOOKDOWN IR_pulse(counter),< [400,800], IR_word.LOWBIT(counter)
NEXT
IF (IR_word > 191) THEN main 'ignore codes to high
IF (IR_word < 128) THEN main 'ignore code to low
IF (IR_word = 128) THEN valid_code 'one
IF (IR_word = 129) THEN valid_code 'two
IF (IR_word = 130) THEN valid_code 'three
IF (IR_word = 131) THEN valid_code 'four
IF (IR_word = 132) THEN valid_code 'five
IF (IR_word = 133) THEN valid_code 'six
IF (IR_word = 134) THEN valid_code 'seven
IF (IR_word = 135) THEN valid_code 'eight
IF (IR_word = 136) THEN valid_code 'nine
IF (IR_word = 137) THEN valid_code 'zero
IF (IR_word = 144) THEN valid_code 'channel up
IF (IR_word = 145) THEN valid_code 'channel dn
IF (IR_word = 146) THEN valid_code 'volume up
IF (IR_word = 147) THEN valid_code 'volume dn
IF (IR_word = 148) THEN valid_code 'mute
IF (IR_word = 149) THEN valid_code 'power
IF (IR_word = 187) THEN valid_code 'Back - Tapemon
IF (IR_word = 191) THEN valid_code 'Info
GOTO main

valid_code:
index=IR_word & %01111111

RETURN

'---------------------------------------------
set_volume:

setting = ABS((1 */ 8192) - (127 - ABS(128 */ volume)))
'debug " ", "Volume = ", dec setting, ".", dec1 setting, dec2 setting, " ", "dB", cr
LOW 7
PAUSE 10
SHIFTOUT 6, 5, MSBFIRST, [volume8,volume8]
PAUSE 10
HIGH 7
SEROUT lcd,baud,[i,192, "Volume"]
SEROUT lcd,baud,[i,201, "-", DEC setting,".",DEC1 setting,"dB"]

RETURN

'---------------------------------------------
function:

IF (index ^ 21 = 0) | (power = 0) THEN complete
IF (index < 10) THEN numb_keys
IF (index > 10) THEN func_keys

numb_keys:
LOOKDOWN index, [0,1,2,3,4,5,6,7,8,9], index
IF (index = prev) THEN complete
IF (index > 2) THEN complete
DIRS = %0100000000000001
prev = index
BRANCH index, [S0,S1,S2,S3,S4,S5,S6,S7,S8,S9]

func_keys:
LOOKDOWN index, [11,16,17,18,19,20,21,59,63], index
BRANCH index, [S10,S11,S12,S13,S14,S15,S16,S17,S18]

S0:
'debug "P10 - Input One", cr
SEROUT lcd,baud,[i,clr]
PAUSE 1
SEROUT lcd,baud,[i,128,"Button One"]
HIGH 10
GOTO complete

S1:
'debug "P11 - Input Two", cr
SEROUT lcd,baud,[i,clr]
PAUSE 1
SEROUT lcd,baud,[i,128,"Button Two"]
HIGH 11
GOTO complete

S2:
'debug "P12 - Input Three", cr
SEROUT lcd,baud,[i,clr]
PAUSE 1
SEROUT lcd,baud,[i,128,"Button Three"]
HIGH 12
GOTO complete

S3:
DEBUG "P12 - Input Three", CR
SEROUT lcd,baud,[i,clr]
PAUSE 1
SEROUT lcd,baud,[i,128,"Button Four"]
HIGH 13

GOTO complete

S4:
GOTO complete

S5:
GOTO complete

S6:
GOTO complete

S7:
GOTO complete

S8:
GOTO complete

S9:
GOTO complete

S10:
GOTO complete

S11:
index = prev + 1
PAUSE 250
SEROUT lcd,baud,[i,clr]
SEROUT lcd,baud,["Channel Up"]
GOTO numb_keys

S12:
index = prev - 1
PAUSE 250
SEROUT lcd,baud,[i,clr]
SEROUT lcd,baud,["Channel Down"]
GOTO numb_keys

S13:
IF (volume >= 255) THEN complete
volume = volume + 1
GOTO set_volume

GOTO complete

S14:
IF (volume <= 1) THEN complete
volume = volume - 1
GOTO set_volume

GOTO complete

S15:
mute = mute + 1
IF mute = 2 THEN mute_off
SEROUT lcd,baud,[i,line2,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
SEROUT lcd,baud,[i,192,"Mute"]
HIGH 8
'debug "mute on", cr
RETURN
mute_off:
mute = 0
SEROUT lcd,baud,[i,line2,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
SEROUT lcd,baud,[i,192, "Volume"]
SEROUT lcd,baud,[i,201, "-", DEC setting,".",DEC1 setting,"dB"]
LOW 8
'debug "mute off", cr
GOTO complete

S16:
power = power + 1
IF power = 2 THEN power_off
'debug "Power On", cr
SEROUT lcd,baud,[i,clr]
HIGH 8
PAUSE 1000
HIGH 14
SEROUT lcd,baud,[i,128,"Hello"]

prev = 0
PAUSE 1000
LOW 8
GOTO S0
power_off
'debug "Power Off", cr
SEROUT lcd, baud, [i,clr]
PAUSE 1
SEROUT lcd, baud, [i,128,"Good Bye"]
PAUSE 3000
SEROUT lcd, baud, [i,clr]
PAUSE 100
DIRS = %0000000000000001
volume = 0
LOW 7
PAUSE 10
SHIFTOUT 6, 5, MSBFIRST, [volume8,volume8]
PAUSE 10
HIGH 7
power = 0
RETURN

S17:
tapemon = tapemon + 1
IF tapemon = 2 THEN tapemon_off
'debug "Tapemon - On", cr
SEROUT lcd,baud,[i,line2,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
SEROUT lcd,baud,[i,192,"Tape Monitor"]
HIGH 9
GOTO complete
tapemon_off:
'debug "Tapemon - Off",cr
tapemon = 0
SEROUT lcd,baud,[i,line2,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
SEROUT lcd,baud,[i,192, "Volume"]
SEROUT lcd,baud,[i,201, "-", DEC setting,".",DEC1 setting,"dB"]
LOW 9
GOTO complete

S18:
GOTO complete

complete:

RETURN
END


Top
  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 1 post ] 

All times are UTC - 8 hours [ DST ]


Who is online

Users browsing this forum: Google [Bot] and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Jump to:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group

phpBB SEO