#picaxe 18m2 ' AXE132 8Bit marks
#terminal 38400
' DB7 = B.7
' DB6 = B.6
' DB5 = B.5
' DB4 = B.4
' DB3 = B.3
' DB2 = B.2
' DB1 = B.1
' DB0 = B.0
SYMBOL Rx = C.5
SYMBOL E = C.6
SYMBOL RS = C.7
SYMBOL senddata = pinsb
SYMBOL index = b0
SYMBOL Hours =W2
SYMBOL H00=W3
SYMBOL CALIB_ADC10 = W4
SYMBOL supplytest = b27
SETFREQ M32 ' time in 0.5sec increments
dirsB = %11111111
dirsC = %11001111
Initialise:
DO : CALIBADC10 CALIB_ADC10 : LOOP until CALIB_ADC10 < 220 ' Reach 4.76v (1047.5/220)
FOR index = 0 to 7
LOOKUP index, ($38,$38,$38,$08,$01,$02,$06,$0C),senddata : PULSOUT E,1 ' Initialise LCD/OLED
'(8bit/2line/5x8)*3(Display Off)(Clear Display)(Return Home)(Entry Mode Set)(Display On)
NEXT index : PAUSE 10
Display:
LOW RS ' commandmode
senddata = 128 : PULSOUT E,1 ' (128-147) Line 1 Cursor Position
HIGH RS ' charactermode
FOR index = 0 TO 15
LOOKUP index,("18M2 Picaxe! ",b12,b11,b10),senddata : PULSOUT E,1
NEXT index
PAUSE 10000
CALIBADC10 CALIB_ADC10 : supplytest=CALIB_ADC10+10 :sertxd(#CALIB_ADC10,32,#supplytest,cr)'supplyV=1047.5/supplytest
LOW RS ' commandmode
senddata = $01 : PULSOUT E,1 : PAUSE 12 ' Clear Display
Start:
read 0,word H00 : read 2,word Hours : Time=H00
HourMeter:
LOW RS ' commandmode
senddata = 192 : PULSOUT E,1 ' (192-211) Line 2 Cursor Position
HIGH RS ' charactermode
IF time = 7200 then : Time=0 : INC Hours : IF Hours=10000 THEN :Hours=0: ENDIF : write 2,word Hours : ENDIF
BinToAscii Hours,b13,b13,b12,b11,b10
FOR index = 0 TO 11 ' sending characters
LOOKUP index,("Hours : ",b13,b12,b11,b10),senddata : PULSOUT E,1
NEXT index
CALIBADC10 CALIB_ADC10 : IF CALIB_ADC10 >supplytest THEN remember 'attempt to detect poweroff
H00=time*5/36
BinToAscii H00,b12,b11,b10
FOR index = 0 TO 3 ' sending characters
LOOKUP index,(".",b12,b11,b10),senddata : PULSOUT E,1
NEXT index
CALIBADC10 CALIB_ADC10 : IF CALIB_ADC10 >supplytest THEN remember
goto hourmeter
Remember:
write 0,word Time