Home
JAQForum Ver 24.01
Log In or Join  
Active Topics
Local Time 23:30 03 Aug 2025 Privacy Policy
Jump to

Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.

Forum Index : Microcontroller and PC projects : Headless MX170 controller

     Page 2 of 2    
Author Message
MikeO
Senior Member

Joined: 11/09/2011
Location: Australia
Posts: 275
Posted: 03:54am 10 Jan 2018
Copy link to clipboard 
Print this post

PCBs arrived , built one and tested OK.






Made an error, annoying! , chose the incorrect pattern for the Flash, too small so redid the gerbers , made a couple of position changes and added some more functions.

Added SD Card support from the LCD assy
Added Battery/supply voltage divider to monitor voltage, useful if Solar powered.
Added Link selection for above functions plus the Flash, so can be isolated when not used.

New Layout and new gerbers



Edited by MikeO 2018-01-11
Codenquilts
 
MikeO
Senior Member

Joined: 11/09/2011
Location: Australia
Posts: 275
Posted: 09:40am 13 Jan 2018
Copy link to clipboard 
Print this post

A further update due to discovering a couple of trace errors anyway a further opportunity for an extra.

Console connector (was J1) increased from 3 to 8 pins, used to bring out the SPI and the I2C bus for expansion, now labeled J2.
Made a SOIC version as well as DIP for the MX170.








Version is now 1.3

Mike


Codenquilts
 
MikeO
Senior Member

Joined: 11/09/2011
Location: Australia
Posts: 275
Posted: 07:38am 20 Jan 2018
Copy link to clipboard 
Print this post

Here is the first completed project for use with the 8 port controller pcb.
I have updated the original Irrigation controller here to use the new board and also made it so it will run optionally in the headless mode (it will detect No Display).

Listing of the main program is below and a complete hex file at the end which include the library and Options setup.







'http://www.codenquilts.com.au
'Michael Ogden June 2016
'screen functions Geoff Graham
'water flow code - TassyJim
'Greenhouse and Irrigation controller
'v1.2 fixed problem with Run/Stop toggling itself.
'Using MXWifi2.9 or 170MXwifi Library code
'v1.4 Change to Headless controller, renamed Hwtixx.bas
'Using MXWifi3.2 (no MX170 SD support)
'removed I/O decoder Relay driver, now using direct output drive
'removed ntp support (RTC installed)
'v1.5 added NTP correction
'v1.6 add "reset" command
'v1.7 chg normalised some ext command names
'v2.00 Jan 2018 **** first version using optional display or Headless *****
'add MM.STARTUP to allow setting of wifi variables sent to ESP8266
'add setup page for 2 cycle times per zone

Option Explicit
Option Default Integer
Option autorun On

sub MM.STARTUP
'set Nowifi=1 if no ESP8266
dim integer Nowifi=0
dim w170name$="Your SSID"
dim w170pass$="Your password"
dim w170node$="ESP_8port"
end sub


'Constants
CONST STRB=24: SETPIN STRB,DOUT:PIN(STRB)=1 'CONFIGURE DISPLAY LATCH PIN
'const node$="ESP_8port" 'this device
const serv$="ESP_Svr" 'device to send to
Const aux$="" 'some other device to send to
const Sver$="Ver 2.1"
Const NumofMonth$="JAN,FEB,MAR,APR,MAY,JUN,JLY,AUG,SEP,OCT,NOV,DEC"
Dim wholedate$
'Define I/O
SETPIN 17, CIN 'House Flow
SETPIN 18, CIN 'GHouse Flow
'
'Alarms Led relay 8


'Global variables


Dim Integer key_coord(5, 5)
Dim String key_caption(5)
Dim Integer c
''Flag Variable

'0=err
'1=timeout
'2=Relay memory
'3=display update (content)
'4=Alarms On
'5=Alarms Off
'7=
'8=ntp
'9=busy
'10=override
'11=Watersensors
'12=SaveToFlash
'13=TankFill
'14=Log
'15=
'20=Ready 'Ready flag
relay(0) ' ensure all relays are off

Dim Integer idpdata(10) 'general array
Dim string results(11) length 10 'data results array
'1=Ghouse temp
'2=ghouse Hum
'3=rain
'4=Tank Level
'5=House Flow
'6=GHouse Flow
'7=Tank Level
'8=GHouse Flow
'9=Total Tank Flow
'10=24hr Usage

Dim Secs
dim preset,x,Errorflag
dim ErrorMsg$
dim AlarmTime,NO_CLS,backup


'Print "Irrigation Ctrl "+sver$

'cpu 48
'intialise I/O

Var Restore
print "Backup status:";backup
'intialise modules

'Initialise Arrays

' restore the settings. If this is the first time set the defaults

If backup = 0 Then
backup=1
results(10)="0"
'initial configuration
'usage:port#,description,W=Water Cycle function/En=enabled other function,_
'# of timed cycles,days of the week,Cycle On time,Cycle Off time, Next Cycle pair .., Next Cycle pair

cfgdata(1)="Z1-Bed.1,W,0,0123456,08:00,08:20,00:00,00:00"
cfgdata(2)="Z2-Bed.2,W,0,0123456,08:00,08:30,00:00,00:00"
cfgdata(3)="Z3-Bed.3,W,0,0123456,00:00,00:00,00:00,00:00"
cfgdata(4)="Z4-Bed.4,W,0,0123456,00:00,00:00,00:00,00:00"
cfgdata(5)="Z5-Not assigned"
cfgdata(6)="Z6-Not assigned"
cfgdata(7)="Z7-Not assigned"
cfgdata(8)="Z8-Not assigned"
'end of Ports configuration next two lines are for other items and read by the system as required
cfgdata(9)="9,Usage-House and Garden,0,0"
cfgdata(10)="10,Max Daily Usage,500"
Var Save backup,results(),cfgdata()
EndIf


for x=1 to 11
print "Results:";x;" ";results(x)
next
for x=1 to 10
print "Config:";x;" ";cfgdata(x)
next


'interupts
Settick 1000 ,T1,1 'establish seconds "Tick Timer"
'flag(3)=1 'content update REM when **** No Display
flag(8)=1 'NTP flag Rem when *** RTC installed ***


'debug=1
'*** start main program loop
flag(20)=1 'ready flag
Do
'StartTime = Timer
Watchdog 60000 '1min

'******* Display Addin *************
'setup main screen and check for touch

Do While Touch(x) <> -1

Loop

' draw the main menu options
if nodisp=0 then 'OK when no display
if NO_CLS=0 then CLS
if preset=0 then
Text 80, 10,"RLY1-8" , CM, 1,1, RGB(white)
showrelays

DrawButtonOnly 3, "ZONE",245,155,70

if flag(10)=0 then
DrawButtonOnly 0, "STOP!",5,155,90
else
DrawButtonOnly 0, " RUN ",5,155,90
end if
No_CLS=1

else
For x=1 To 8 'clear relay leds
Circle 100+x*25,10, 5, 0, 1, 0, rgb(black)
next
Text MM.HRes/2, 10,"Menu " + parse$(cfgdata(preset),1) , CM, 1,2, RGB(white)

DrawButtonOnly 4, "SET",245,105,70
DrawButtonOnly 0, "< ",5,155,70
DrawButtonOnly 1, "ON",85,155,70
DrawButtonOnly 2, "OFF",165,155,70
DrawButtonOnly 3, "ZONE",245,155,70
end if
Line 0, 25, MM.HRes, 25, 1, RGB(210, 210, 210)
Line 0, 175, MM.HRes, 175, 1, RGB(210, 210, 210)


if errorflag=1 then
Text MM.HRes/2,220, errormsg$,c , 1, 1, RGB(RED)
else
Text MM.HRES/2,220, "Irrigation Ctrl "+sver$,c , 1, 1, RGB(white)
endif
' get the selected button and take action based on the button
'print "main loop"
end if

if nodisp=1 then 'Ignore no display
CheckButtonPress(0, 0)
else
Select Case CheckButtonPress(0, 4)
if nodisp=0 then 'Ignore when no display
Case 0
if preset=0 then
'print "case zero"
if flag(10)=0 then 'if in free run
relay(0)
flag(10)=1 'set Override flag
else
flag(10)=0 'set Override flag
end if
else
PReset=0
end if
Case 1
if flag(10)=0 or preset=8 then relay(preset,1) 'relay on only in RUN or for Greenhouse Fan
Case 2
relay(preset,0)
Case 3
No_CLS=0 'clear CLS flag to allow clear screen
preset=preset+1
if preset>8 then
preset=0
end if
case 4
getoptions
End Select
flag(3)=1 'ensure screen update
end if

'******* Display Addin *************
' 'Print "Loop elapsed time"; Timer-StartTime

Loop
'***** End main program loop
End


' get the first page of options
Sub GetOptions
cls
flag(3)=0
local float s1,s2,nbr
local ha$,hb$
Do While Touch(x) <> -1 : Loop
Do
CLS
Text MM.HRes/2, 10,"Set " + parse$(cfgdata(preset),1) , CM, 1,2, RGB(white)
Line 0, 25, MM.HRes, 25, 1, RGB(210, 210, 210)
Line 0, 175, MM.HRes, 175, 1, RGB(210, 210, 210)
DrawOption 0, RGB(240, 240, 240), "Time On (24hr)",45, s1, "hrs"
DrawOption 1, RGB(240, 240, 240), "Time Off (24hr)",105, s2, "hrs"

DrawButtonOnly 2, "Cycle1",5,155,110
DrawButtonOnly 3, "Cycle2",130,155,110
DrawButtonOnly 4, "Exit",245,155,70

'draw the FINISHED butt on at the bottom of the screen



' get the selected button and take action based on the button
Select Case CheckButtonPress(0, 4)
Case 0
s1=0
GetFloat "Time On(hrs)", s1

if s1>2400 then s1=0

Case 1
s2=0
GetFloat "Time On(hrs)", s2

if s2>2400 then s2=0

case 2
ha$=tohrs$(s1)
hb$=tohrs$(s2)
cfgdata(preset)=replaceitem$(cfgdata(preset),ha$,5)
cfgdata(preset)=replaceitem$(cfgdata(preset),hb$,6)
exit sub
case 3
ha$=tohrs$(s1)
hb$=tohrs$(s2)
cfgdata(preset)=replaceitem$(cfgdata(preset),ha$,7)
cfgdata(preset)=replaceitem$(cfgdata(preset),hb$,8)
exit sub
case 4
flag(3)=1 'ensure screen update
exit sub
End Select
Loop

End Sub

function fromHrs(h$)as float
fromhrs=val(left$(h$,2)+right$(h$,2))
'print fromhrs
end function

function tohrs$(h4 as float)
local h1$
h1$=str$(h4,4,0,"0")
tohrs$=left$(h1$,2)+":"+right$(h1$,2)
end function

function ReplaceItem$(s$,f$,FieldNumber,d$)
Local String stringArg$
Local Integer intOldY,intY,intX
'print s$;" ";fieldnumber;" ";d$
if d$="" then
d$=","
endif
StringArg$ = S$ + d$
intOldY = 1:intX=0:intY=0
ReplaceItem$ = ""
do While intY < Len(StringArg$) And intX < FieldNumber
intY = Instr(intOldY, StringArg$, d$)
intX = intX + 1
If intX = FieldNumber Then
replaceitem$ =left$(stringarg$,intoldy-2)+ ","+f$+","+ mid$(stringarg$,inty+1)
print replaceitem$
Endif
intOldY = intY + 1
loop
'print s$; intx; inty; intoldy
'print fieldnumber;" ";parse$
End function

'************* CheckButtonPress Function ***********
' check if a button has been touch and animate the button's image
' returns the buttin number
Function CheckButtonPress(startn As Integer, endn As Integer) As Integer
Local Integer keydwn, xt, yellowt, n,r
keydwn = 0
flag(1)=30 'set flag if not in main page waiting for input
'' keep looping while waiting for a press and release
Do
'print "buttonpress loop"

'***** mxWiFi Hook ****
if userprocessflag=1 then
print "Userprocess"
StartTime = Timer
UserProcess
UserProcessFlag=0
xbsend "udp.send:|"+from$+"|"+chr$(4)+"|"
Print "Processing elapsed time"; Timer-StartTime
Watchdog 60000 'ensure watchdog is set to long time out again
continue do 'skip to a new loop immediately , there may be more external processing to do
endif
'***** End mxWiFi Hook ****

'check flags
'print "checkbutton loop"
if flag(4)=1 then 'Alarms On
testalarms(0)
FLAG(4)=0
end if

if flag(5)=1 then 'Alarms Off
testalarms(1)
FLAG(5)=0
end if

'return to main page
If flag(1)=0 and nodisp=0 Then
PReset=0 'switch to main page after pressflag period
flag(3)=1 'ensure screen update
checkbuttonpress=-1
print "checkbuttonpress:";checkbuttonpress
exit function
end If

if flag(13)>60 then 'Tank Fill delay reached so (60 sec delay)
relay(3,1) 'enable tank fill relay
end if

if flag(12)=1 then
SaveToFlash
flag(12)=0 'single write to flash only
end if


if flag(11)=1 then 'watersensors
WaterSensors
FLAG(11)=0
print "24Hr Water usage/Limit:";Val(results(10));"/";Val(parse$(cfgdata(10),2))
end if

If Val(results(10))>Val(parse$(cfgdata(10),2)) Then
'set overuse flag
flag(10)=1
end if


if flag(14)=1 then
addtolog bin$(flag(2),8)+","+results(7)+","+results(8)+","+results(9)+","+results(10)+","+str$(flag(10)),"6"
flag(14)=0
end if

'check page presets for screen updating etc are done here
if flag(3)=1 and nodisp=0 then
select case preset
case 0
updateMain
case 1
updatecycle(1)
case 2
updatecycle(2)
case 3
updatecycle(3)
case 4
updatecycle(4)
'etc ports added here
'
end select
if preset=0 then showrelays
end if
'************** End of Flags ****



if nodisp=0 then
'Touch pad processing
If Touch(x) <> -1 And Not keydwn Then
' we have a touch
xt = Touch(x)
yellowt = Touch(y)
' scan the array key_coord() to see if the touch was within the
' boundaries of a button
For n = startn To endn
If xt > key_coord(n,0) And xt < key_coord(n,0) + key_coord(n,2) And yellowt > key_coord(n,1) And yellowt < key_coord(n,1) + key_coord(n,3) Then
' we have a button press
' draw the button as pressed

DrawButton n, 1
keydwn = 1
Exit For
EndIf
Next n
EndIf

' if a button is currently down check if it has been released
If Touch(x) = -1 And keydwn Then
' yes, the button has been released
' draw the button as normal (ie, not pressed)
DrawButton n, 0
CheckButtonPress = n
' return with the button's number
print "checkbuttonpress:";checkbuttonpress
Exit Function
EndIf
end if
Loop
End Function
******* End of CheckButtonPress function ************



'T1 - 1second Tick interrupt
'set up some time flags
Sub T1
local x
secs=secs+1 'update seconds timer
if secs => 86400 then '24 hrs reached
secs = 0 'reset counter
results(10)="0" 'reset 24hr usage
FLAG(8)=1 'set NTP flag , for RTC correction
EndIf
If flag(1)>0 Then flag(1)=flag(1)-1
if Flag(13)>0 then flag(13)=flag(13)-1 'count down tank fill timeout delay
Text 105,35, wholedate$ + " " + time$,L , 1, 1, RGB(green)

if secs mod 25 = 0 Then 'every 25 secs
if flag(8)=1 then
print "Try to get NTP data"
xbsend "time:" 'try to get NTP time data
end if
end if

if secs mod 5 = 0 Then
'FLAG(3)=1 'content update
endif

if secs mod 10 = 0 Then
FLAG(11)=1 'read water sensors
EndIf

if secs mod 30 = 0 Then
FLAG(14)=1 'Log update
endif

if secs mod 7200 = 0 then 'every 120 mins
FLAG(8)=1 'set NTP flag , have RTC
FLAG(12)=1 'set SaveToFlash flag
endif

if secs mod 15 = 0 then 'every 15 secs
if flag(4)=0 then FLAG(4)=1 'Check Alarms On
endif
if secs mod 17 = 0 then 'every 17 secs
if flag(5)=0 then FLAG(5)=1 'Check Alarms Off
endif
End Sub



'*************** Specific Subs/Functions **********

'update the main screen data
sub updatemain
Text 5,55, "Tank "+ results(7)+ "L" ,L , 1, 1, RGB(green)
Text 5,75, "Usage - House/Garden "+ results(9)+ "L" ,L , 1, 1, RGB(green)
Text 5,95, "Usage - Greenhouse "+ results(8)+ "L" ,L , 1, 1, RGB(green)

end sub

sub updatecycle(cz)
local bin$="1,2,4,8,16,32,64,128"
Text 5,55, "Days of Week (Sun=0) " + parse$(cfgdata(cz),4),L , 1, 1, RGB(White)
Text 5,75, "Cycle1 On:"+ parse$(cfgdata(cz),5) + " Off:" + parse$(cfgdata(cz),6),L , 1, 1, RGB(green)
Text 5,95, "Cycle2 On:"+ parse$(cfgdata(cz),7) + " Off:" + parse$(cfgdata(cz),8) ,L , 1, 1, RGB(green)
'Text 5,115, "Cycle1 On:"+ parse$(cfgdata(cz),9) + " Off:" + parse$(cfgdata(cz),10) ,L , 1, 1, RGB(green)
if (val(parse$(bin$,cz)) and flag(2)) >0 then
Text 5,135, "Watering NOW! "
else
Text 5,135, "Watering Off "
end if
end sub

SUB WaterSensors
local integer flow1,flow2,range1
flow1=PIN(17)
flow2=PIN(18)
'flow2=19003 'bench testing
print "Flows ";flow1;" ";flow2
results(8)=str$(val(results(8))+(flow1/330 MOD 1000000),3,0," ")' ghouse
results(9)=str$(val(results(9))+(flow2/330 MOD 1000000),3,0," ")' tank
results(10)=str$(val(results(10))+(flow2/330 MOD 1000000),3,0," ")' 24hrs use
'reset flows
SETPIN 17, CIN 'House Flow
SETPIN 18, CIN 'GHouse Flow
range1=DISTANCE(10,16)' house tank
results(7)=str$(((270 - range1)*42),3,0," ") '~10080 full
END Sub

sub usage
results(8)=parse$(cfgdata(9),2)
results(9)=parse$(cfgdata(9),3)
end sub

Sub SavetoFlash
Print "Saving to Flash"
Var save cfgdata(),results()
End Sub

'Test Alarms against time and weekday
sub TestAlarms(Off%) As integer
local Integer MinuteTime,z,cr,nr
local day$
print "Local Date/Time is ";date$;" ";time$
StartTime = Timer
'Get first two letters of weekday to compare
day$=str$(GetDOW(SDT("","","DT")))
MinuteTime = sdt("","","m")
'print day$;" ";minutetime
' TestAlarms
'if off%=1 then increment times pos by 1 for off time
print "test for alarms"
if flag(8)=1 then exit sub 'dont test if Time flag is set
For z=1 to 8
prelay(8,50) 'Alarms Led
select case parse$(cfgdata(z),2)
case "W" 'watering alarm cycles
cr=0
Print cfgdata(z)
nr= Val(parse$(cfgdata(z),3))
print "repeats:";nr
Do while cr<nr 'cycle through start and finish times upto the # of cycle repeats
if instr(parse$(cfgdata(z),4),day$)>0 then
'check On Time for 00:00 if so then exit
If sdt("",parse$(cfgdata(z),5+(cr*2)+0),"m") =0 Then
print "Zero time alarm , Time Alarm OFF"
relay(z,0)
else
print "time Now?Alarm Time:";minutetime;"/"; sdt("",parse$(cfgdata(z),5+(cr*2)+off%),"m") 'offset is position+(repeats*2)+on or off(0 or 1)
If MinuteTime = sdt("",parse$(cfgdata(z),5+(cr*2)+off%),"m") Then
if off%=0 And flag(10)=0 Then 'if not in override
print "Time Alarm ON"
relay(z,1)
else
print "Time Alarm OFF"
relay(z,0)
end if
end if
end if
end if
cr=cr + 1 'increment repeat counter
Loop
case else
'if not using watering cycles set specific actions for each relay
'these are added here

end select


Next
Print "Alarm Loop elapsed time"; Timer-StartTime

End sub


'External command processing sub Routine if required
sub extCmd
local temp$,ext$,rl%
print "External Commands:";from$;" ";cmd$;" ";cfg$;" ";strin$
select case cmd$
case "reset"
secs = 0 'reset counter
results(10)="0" 'reset 24hr usage
FLAG(8)=1 'set NTP flag , for RTC correction
print "Reset counters and RTC correction"
case "ntp"
wholedate$=parse$(strin$,1," ")+" "+parse$(strin$,3," ")+" "+parse$(strin$,2," ")+" "+parse$(strin$,5," ")
if wholedate$<>"" then
flag(8)=0 'reset NTP flag
on error skip
time$=left$(parse$(strin$,4," "),5)
print time$
print wholedate$
temp$=ucase$(parse$(strin$,2," "))
date$=parse$(strin$,3," ")+"-"+Str$(moy(temp$),2)+"-"+parse$(strin$,5," ")
print date$
If IsDST()=1 Then IncTime
'time$="23:59:00" 'test for midnight
end if
case "Log"
if flag(20)=0 then exit sub 'not ready
results(1)=parse$(strin$,9)
results(2)=parse$(strin$,10)
results(3)=parse$(strin$,5)
case "uMsavetoflash"
SavetoFlash
case "uMusage"
usage
case "uMconfig"
For res=1 To cfgnum
Print cfgdata(res)
xbsend "udp.send:|"+from$+"|Config|"+cfgdata(res)
WaitforReady
Next
case "uMwconfig"
cfgdata(val(cfg$))=strin$
case "uMrconfig"
xbsend "udp.send:|"+from$+"|Config|"+cfgdata(val(cfg$))
WaitforReady
case "uMmrconfig"
print "Send Msg Read Config "
WaitforReady
xbsend "msgsend:"+ cfgdata(val(cfg$))+":"
WaitforReady
'relays
case "uMstop"
relay(0) 'turn off all relays
print "All relays off"
'prelay(7,500)
case "uMon"
rl%=val(cfg$)
select case rl%
case 1,2,4,5,6,7,8
relay(rl%,1)
print "Relay ";rl%;" on"
'prelay(8,500)
end select
case "uMoff"
rl%=val(cfg$)
select case rl%
case 1,2,4,5,6,7,8
relay(rl%,0)
print "Relay ";rl%;" off"
'prelay(8,500)
end select
end Select
end sub


'i/o EXT relay driver p=port#, o=1=On, default no value=off
sub relay(p,o)
local J
local bin$="1,2,4,8,16,32,64,128"
if p=0 then
flag(2)=0 'reset all relays and relay memory flag
else
if o=1 Then 'switch relay On
flag(2)=flag(2) or val(parse$(bin$,P)) 'add new relay
Else 'switch relay Off
flag(2)=flag(2) and (flag(2) xor val(parse$(bin$,P))) 'minus relay
end if
end if
'switch relay
SPI OPEN 500000,0,8
PIN(STRB)=0
PAUSE 1
j=SPI(Flag(2)) 'switch relays
SPI CLOSE
PIN(STRB)=1
end Sub

'Usage prelay(port#,pulse in ms), pulse min 0 = 30ms(execute time)
sub prelay(p,l)
local bin$="1,2,4,8,16,32,64,128"
if (val(parse$(bin$,p)) and flag(2)) >0 then 'toggle low
relay(p,0)
pause l
relay(p,1)
else 'then toggle high
relay(p,1)
pause l
relay(p,0)
end if
end sub

Sub ShowRelays
Local p
local bin$="1,2,4,8,16,32,64,128"
For p=1 To 8
if (val(parse$(bin$,p)) and flag(2)) >0 then
Circle 100+p*25,10, 5, 0, 1, 0, RGB(green)
else
Circle 100+p*25,10, 5, 0, 1, 0, rgb(red)
end If
next
End Sub



sub AddToLog(msg$,cnt$)
if cnt$="" then cnt$="0"
print "AddtoLogMsg:";msg$;" Count:";cnt$
'xbsend "udp.send:|ESP_Irrig|Log|"+cnt$+"|"+date$+","+TIME$+","+ msg$
xbsend "udp.cast:|"+serv$+":|"+w170node$+"|Log|"+cnt$+"|"+msg$
WaitforReady 'reset flag
pause 1000 'settle time
xbsend "msgsend:|"+serv$+":|"+w170node$+"|Log|"+cnt$+"|"+msg$
WaitforReady 'reset flag
end sub

CFunction DISTANCE(integer, integer) float
0000002D 27BDFFF8 AFBF0004 00852023 03E42021 ACC40000 8FBF0004 03E00008
27BD0008 27BDFFE0 AFBF001C 00002021 3C059D00 24A50040 27A60010 0411FFF1
00000000 8FA30010 3C029D00 8C4200BC 3C049D00 24840310 0040F809 00832021
8FBF001C 03E00008 27BD0020 000410C0 00041A00 00621823 00031180 00431823
00641821 00031980 3C029D00 8C420000 3C047735 34849400 8C420000 0082001B
004001F4 00002012 0064001B 008001F4 03E00008 00001012
27BDFFD8 AFBF0024 AFB40020 AFB3001C AFB20018 AFB10014 AFB00010 00809021
3C029D00 8C420000 8C430000 3C020098 34429680 0062102B 10400003 00A08821
0411FFCA 00000000 8E220000 14400003 3C109D00 8E420000 AE220000 8E020010
8E240000 24050002 0040F809 2406000E 8E02001C 8E440000 0040F809 24050005
8E020010 8E440000 24050008 0040F809 00003021 8E02001C 8E440000 0040F809
24050006 8E020004 0040F809 24040014 8E02001C 8E440000 0040F809 24050005
8E020004 0040F809 24040032 8E020010 8E240000 24050002 0040F809 2406000E
8E020004 0040F809 24040032 0411FFB1 24040005 00409821 0000A021 40944800
00008021 10000005 3C129D00 40104800 0270102B 1440001E 24050002 8E420020
0040F809 8E240000 1440FFF8 24040064 10000025 00000000 40104800 0270102B
14400013 24050002 8E420020 0040F809 8E240000 1040FFF8 24040020 1000001F
00000000 40104800 0270102B 14400008 24050001 8E420020 0040F809 8E240000
1440FFF8 00000000 1000001A 3C119D00 00052823 3C029D00 8C420080 00A02021
0040F809 00052FC3 8FBF0024 8FB40020 8FB3001C 8FB20018 8FB10014 8FB00010
03E00008 27BD0028 0411FF7A 00000000 00409821 1000FFDC 3C129D00 0411FF75
00000000 00409821 40944800 1000FFE1 3C129D00 8E320064 8E220000 3C037735
34639400 8C420000 0062001B 004001F4 00001012 72028002 24021696 0202001B
004001F4 00002012 8E220080 0040F809 00002821 00408021 8E220080 2404000A
0040F809 00002821 02002021 0240F809 00402821 1000FFD5 8FBF0024
20555043 65657073 6F742064 6F6C206F 000A0D77
End CFunction




Complete Hex file




Codenquilts
 
MikeO
Senior Member

Joined: 11/09/2011
Location: Australia
Posts: 275
Posted: 06:56am 21 Jan 2018
Copy link to clipboard 
Print this post

I have 10 of the ver 1.2 boards of the 8 port uMite controller available if anyone wants one. Ver 1.2 had 3 silly mistakes, two of which are easily fixable with a simple cut and wire the third just remove a component leg. I would hate to see them go to waste , I am happy to send them anywhere for AU$3.00 per shipment. PM me if you want one or more.




I have also made a Pin Out Matrix to assist in pin usage for the board.
The real PDF is on my server here




Mike

Codenquilts
 
     Page 2 of 2    
Print this page


To reply to this topic, you need to log in.

The Back Shed's forum code is written, and hosted, in Australia.
© JAQ Software 2025