'AXE110 PICAXE-18X - New Datalogger Mission Program
'Automatically generated by Wizard
'LED will flash green as readings are taken.
'Data can be retrieved after mission (LED red) by Datalink tool (F9).
'Use Datalink options: Baud rate - 4800, Sensors - 1, Send G - Enabled
' *******************
' ***** Options *****
' *******************
'Title -
'Date - 30/11/2008
'Time - 19:17:55
'Options Selected
'Sensors:
'Sensor 0 - Not used
'Sensor 1 - Sensor 1
'Sensor 2 - Not used
'Sensor 7 - Not used
'Memory:
'No of readings = 60
'1 x 24LC256
'Outputs:
'Bi-colour LED
'SPE002 Piezo sounder
'Logging Period:
'Pause command
'Hours: 0 Mins: 0 Secs: 1
' ********************
' ***** Symbols *****
' ********************
'Symbol definitions
symbol data0 = b0
symbol data1 = b1
symbol data2 = b2
symbol data7 = b3
symbol top_address = w2 '(b4 + b5)
symbol address = w3 '(b6 + b7)
symbol temp_word = w4 '(b8 + b9)
symbol temp_byte = b10
symbol hours = b11
symbol mins = b12
symbol secs = b13
symbol day = b0
symbol month = b1
symbol COM = 44 'comma
symbol RET = 13 'carriage return
symbol LFEED = 10 'line feed
'Preload sensor names and title into data memory
EEPROM 0,(0,0)
EEPROM 16,("Light")
EEPROM 32,("Sensor 1")
EEPROM 48,("Sensor 2")
EEPROM 64,("Temperature")
EEPROM 80,(" ")
' ***************************
' ***** Initialisation *****
' ***************************
init:
high 5 ' write protect eeprom
'reload the last address from data memory
read 0,b6
read 1,b7
' *********************************
' ***** Main loop - read data *****
' *********************************
'Now read each sensor
main:
high 3 ' flash LED
readadc 1,data1
low 3 ' end of flash LED
sound 0,(50,50) ' make a piezo beep
' *****************************
' ***** Now Save the Data *****
' *****************************
'Now save the data
save_data:
low 5 ' write enable eeprom
'Single 24LC256. Input0 from address 0, input1 from address 4096
'Single 24LC256. Input2 from address 8192, input7 from address 12288
if address > 4095 then memory_full
i2cslave %10100000, i2cslow, i2cword
temp_word = address + 4096 writei2c temp_word,(data1)
pause 10
readi2c temp_word,(temp_byte)
if temp_byte <> data1 then ee_error
'increment address and save in data memory
inc_address:
high 5 ' write protect eeprom
let address = address + 1
write 0,b6
write 1,b7
if address > 60 then memory_full
' ***********************
' ***** Time Delays *****
' ***********************
'Now do time delay
'Secs:
pause 1000
' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! <<< EDIT THIS LINE
'now do next reading
goto main
' *************************
' ***** Error Routine *****
' *************************
'Memory error - flash LED red/green'
ee_error:
high 2
low 3
pause 500
low 2
high 3
pause 500
goto ee_error
' ***********************
' ***** Memory Full *****
' ***********************
'Memory is full - LED red'
memory_full:
high 2
' ****************************
' ***** Datalink Routine *****
' ****************************
'Datalink routine to transmit data
read_init:
high 5 ' write protect eeprom
let address = 0
'Get top address from data memory (w2=b4+b5)
read 0,b4
read 1,b5
'Wait for G character sent from software
serin 6, N4800, ("G") 'Wait for GO signal
'Transmit the titles
serout 7,N4800,("Address",COM,"Sensor 1",COM," ",RET,LFEED)
'Now read the data
read_data:
'Single 24LC256. Input0 from address 0, input1 from address 4096
'Single 24LC256. Input2 from address 8192, input7 from address 12288
if address > 4095 then all_done
i2cslave %10100000, i2cslow, i2cword
temp_word = address + 4096
readi2c temp_word,(data1)
'transmit data
tx_data:
serout 7,N4800,(#address,COM,#data1,RET,LFEED)
let address = address + 1
if address = top_address then all_done
goto read_data
'finished so send NULL
all_done:
serout 7,N4800,(0)
goto read_init