![]() |
Forum Index : Microcontroller and PC projects : SSD1289: conversion to 8-bit operation
Author | Message | ||||
matherp Guru ![]() Joined: 11/12/2012 Location: United KingdomPosts: 10066 |
The 3.2" 240 x 320 SSD1289 displays are nice, cheap, e.g. and have a proper touch sensor and SDcard slot. However, as shipped they need a 16-bit parallel databus which means they can't be used on the 28-pin uM2 and are inconvenient on the 44 and 64-pin variants. There is though a simple way of changing them to 8-bit which makes them much more usable on the uM2(+) First you need to gently lever the display from the PCB at the end away from the cable - it is only held on by double sided tape. Towards the top of the flexible connector there are spaces for two small resistors R4 and R5 (just visible in the picture). You will find R4 is made and R5 isn't, as in the picture. To convert to 8-bit operation merely move the resistor from R4 to R5, easy enough with a fine soldering iron. Then you can run the display in 8-bit mode. Example loadable driver for all variants of uM2(+)below: OPTION EXPLICIT OPTION DEFAULT None PRINT "SSD1289 8-bit CFunction Driver Example" 'Initialise the Display Driver ' Function Display.Open(D0%,D1%,D2%,D3%,D4%,D5%,D6%,D7%,RS%,WR%,RST%,Orient%) ' NB Tie CS Low and tie RD high ' Orient% is 1 for landscape, 2 for Portrait orientation, 3 for reverse landscape, 4 for reverse portrait dim Orientation%=2 dim Retrn%=Display.Open(25,26,27,36,37,38,2,3,21,22,19,Orientation%) ' Display the driver version number print "Driver version is ",Display.Ver() 'Use Font 2 and scale x2 Font 2,2 'Yellow FG, Dark Blue BG Colour &HFFFF00,&H000066 'Clearscreen CLS 'Draw a Red Frame Box 0,0,MM.HRes-4,MM.VRes-4,4,&HFF0000,-1 Text MM.HRES\2-60,(MM.VRes/2)-100,"SSD1289" Text MM.HRES\2-65,(MM.VRes/2)+70,STR$(MM.HRes)+" "+STR$(MM.VRes) Text MM.Hres\2 - 10,(MM.VRes/2)+70,"x" DIM I% 'Countdown FOR I%=9 TO 0 STEP -1 Text (MM.Hres/2)-40, (MM.VRes/2)-45,STR$(I%),,1,2,&H00FF00,&H000066 PAUSE 900 NEXT I% 'Change Orientation to Portrait to show that calling 'Display.Open again in a program is legal Orientation%=1 Retrn%=Display.Open(25,26,27,36,37,38,2,3,21,22,19,Orientation%) GUI Test Display 'Close the driver Retrn%=Display.Close() END '**********Append this code and below onto the end of your MMBasic program*********** ' ' Copyright (c) Peter Mather 2015 ' ' Initialise the Display Driver for SSD1289 controlled TFT LCD Panel in 8-bit mode ' i.e. RGB565. ' ' Display.Open initialises the loadable CFunction driver so that you can use all of the ' MMBasic graphic commands in your program. ' ' D0% ~ D7% are the pin numbers for the data bus to the display ' RS% is pin number of RS signal ' WR% is pin number of WR signal ' RST% is pin number of Reset signal ' Orient% PORTRAIT=0,RPORTRAIT=1,LANDSCAPE=2,RLANDSCAPE=3 ' ' After Calling Display.Open, any of the usual MM Graphic commands may be used ' in your MMBasic program, eg BOX, TEXT, LINE, CIRCLE etc ' ' Ver 1.02 2015-08-17 Initial Release ' '********************************************************************************** FUNCTION Display.Open(D0%,D1%,D2%,D3%,D4%,D5%,D6%,D7%,RS%,WR%,RST%,Orient%,Size!) as integer LOCAL Pindefs%(20) LOCAL DisplayMetrics%(4) LOCAL CFuncAddr% LOCAL Retrn% 'Open Driver Function, 0=Open, 1=Close, 2=Ver LOCAL DriverFunc%=0 PinDefs%(0)=D0%:PinDefs%(1)=D1%:PinDefs%(2)=D2%:PinDefs%(3)=D3% PinDefs%(4)=D4%:PinDefs%(5)=D5%:PinDefs%(6)=D6%:PinDefs%(7)=D7% PinDefs%(8)=RS% PinDefs%(9)=WR% PinDefs%(10)=RST% DisplayMetrics%(0)=Orient% CFuncAddr%=PEEK(CFUNADDR Driver_SSD1289_8) Retrn%=Driver_SSD1289_8(DriverFunc%,CFuncAddr%,PinDefs%(),DisplayMetrics%()) Display.Open=Retrn% 'Check Return codes SELECT CASE Retrn% CASE 0 EXIT FUNCTION CASE 1 ERROR "Driver_SSD1289.Open : "+STR$(Retrn%)+" : Driver Already Open - use CPU Restart" CASE ELSE ERROR "Driver_SSD1289.Open : "+STR$(Retrn%)+" : Unknown Error" END SELECT END SUB '********************************************************************************** ' Close the display driver '********************************************************************************** FUNCTION Display.Close() AS FLOAT local Retrn%=Driver_SSD1289_8(1) Display.Close=Retrn% 'Check Return codes SELECT CASE Retrn% CASE 0 EXIT FUNCTION CASE 1 PRINT "Warning: Driver_SSD1289.Close : "+STR$(Retrn%)+" : Driver Already Closed" EXIT FUNCTION CASE ELSE ERROR "Driver_SSD1289.Close : "+STR$(Retrn%)+" : Unknown Error" END SELECT end FUNCTION FUNCTION Display.Ver() AS FLOAT LOCAL Retrn%=Driver_SSD1289_8(2) Display.Ver=Retrn% / 100 END FUNCTION ' 'C:\Users\Peter\Dropbox\MPLABXProjects\SSD1289Loadable.X\dist\default\production\Driver_SSD1289.bas ' 'Driver_SSD1289 2015-08-20 13:08:29 UTC Author:Peter with CFuncGen Ver 2.1.1.0 ' CFunction Driver_SSD1289_8 0000025E 'Write16Bits 3c029d00 8c42008c 30830100 10600006 8c420000 8c4300c0 8c450080 ac650000 10000005 30830200 8c430100 8c450080 ac650000 30830200 50600006 8c430104 8c4300c4 8c450084 ac650000 10000004 30830400 8c450084 ac650000 30830400 50600006 8c430108 8c4300c8 8c450088 ac650000 10000004 30830800 8c450088 ac650000 30830800 50600006 8c43010c 8c4300cc 8c45008c ac650000 10000004 30831000 8c45008c ac650000 30831000 50600006 8c430110 8c4300d0 8c450090 ac650000 10000004 30832000 8c450090 ac650000 30832000 50600006 8c430114 8c4300d4 8c450094 ac650000 10000004 30834000 8c450094 ac650000 30834000 50600006 8c430118 8c4300d8 8c450098 ac650000 10000004 30838000 8c450098 ac650000 30838000 50600006 8c43011c 8c4300dc 8c45009c ac650000 10000004 8c430054 8c45009c ac650000 8c430054 8c45004c ac650000 8c430050 8c45004c ac650000 30830001 50600006 8c430100 8c4300c0 8c450080 ac650000 10000004 30830002 8c450080 ac650000 30830002 50600006 8c430104 8c4300c4 8c450084 ac650000 10000004 30830004 8c450084 ac650000 30830004 50600006 8c430108 8c4300c8 8c450088 ac650000 10000004 30830008 8c450088 ac650000 30830008 50600006 8c43010c 8c4300cc 8c45008c ac650000 10000004 30830010 8c45008c ac650000 30830010 50600006 8c430110 8c4300d0 8c450090 ac650000 10000004 30830020 8c450090 ac650000 30830020 50600006 8c430114 8c4300d4 8c450094 ac650000 10000004 30830040 8c450094 ac650000 30830040 50600006 8c430118 8c4300d8 8c450098 ac650000 10000004 30840080 8c450098 ac650000 30840080 50800006 8c43011c 8c4300dc 8c44009c ac640000 10000004 8c430054 8c44009c ac640000 8c430054 8c44004c ac640000 8c430050 8c42004c ac620000 03e00008 00000000 'writeRegister 27bdffe0 afbf001c afb10018 afb00014 00a08821 3c029d00 8c42008c 8c500000 8e020048 8e030040 ac430000 0411FF43 00000000 8e020044 8e030040 ac430000 02202021 0411FF3D 00000000 8fbf001c 8fb10018 8fb00014 03e00008 27bd0020 'defineregion 27bdffd8 afbf0024 afb40020 afb3001c afb20018 afb10014 afb00010 2488ffff 01063021 24a8ffff 01073821 3c089d00 8d08008c 8d100000 8e090000 24080002 15280008 24080004 00801821 00c01021 00a09021 00e08821 00a0a021 10000019 00809821 1528000c 24080001 8e020004 2442ffff 00461823 00441023 8e110008 2631ffff 02279023 02258823 0220a021 10000017 00409821 1528000b 24080003 8e020004 2442ffff 00471823 00451023 00809021 00c08821 0080a021 1000000c 00409821 24080003 1528000a 00021200 00a01821 00e01021 8e110008 2631ffff 02269023 02248823 0220a021 00a09821 00021200 24040044 00432821 0411FFA8 00000000 24040045 02402821 0411FFA4 00000000 24040046 02202821 0411FFA0 00000000 2404004e 02602821 0411FF9C 00000000 2404004f 02802821 0411FF98 00000000 8e020048 8e030040 ac430000 24040022 0411FEE1 00000000 8e020044 8e030040 ac430000 8fbf0024 8fb40020 8fb3001c 8fb20018 8fb10014 8fb00010 03e00008 27bd0028 'DrawRectangle_SSD1289 27bdffe0 afbf001c afb20018 afb10014 afb00010 0086102a 14400004 8fb00030 00801021 00c02021 00403021 00a7102a 14400005 28820000 00a01021 00e02821 00403821 28820000 0002200b 3c029d00 8c420094 8c420000 0082402b 2443ffff 0068200a 28c30000 0003300b 00c2182b 2442ffff 0043300a 28a20000 0002280b 3c029d00 8c420098 8c430000 00a3402b 2462ffff 0048280a 28e20000 0002380b 00e01021 00e3382b 2463ffff 0067100a 24070001 00e41823 00663021 00e53823 00e23821 70e69002 0411FF6B 00000000 7e0220c0 00108a03 3231f800 00518825 00108143 321007e0 12400009 02308825 2650ffff 2412ffff 02202021 0411FE95 00000000 2610ffff 1612fffc 02202021 8fbf001c 8fb20018 8fb10014 8fb00010 03e00008 27bd0020 'DrawBitmap_SSD1289 27bdff90 afbf006c afbe0068 afb70064 afb60060 afb5005c afb40058 afb30054 afb20050 afb1004c afb00048 afa40070 00a08021 afa60078 afa7007c 8fb20080 8fa40084 3c029d00 8c42008c 8c420000 8c450000 30a50001 10a00005 8fa30088 8c530008 8c420004 10000004 afa2002c 8c530004 8c420008 afa2002c 7c8520c0 00041203 3042f800 00a21025 00042143 308407e0 00442025 afa40020 7c6420c0 00031203 3042f800 00821025 00031943 306307e0 00431825 afa30024 8fa40070 02002821 8fa20078 72423002 8fa2007c 72423802 0411FF1E 00000000 8fa3007c 18600067 8fbf006c afb20018 afb00030 8fa20078 afa2003c 00021823 afa30040 8fa3007c 00620018 00001012 afa20038 afa00014 10000056 afa00034 06000013 0213102b 50400012 26310001 06a20010 26310001 52e0000e 26310001 93c20000 8fa30010 00431024 10400006 8fa40024 8fa40020 0411FE35 00000000 10000004 26310001 0411FE31 00000000 26310001 1632ffea 26100001 26940001 8fa20018 8fa30078 12830016 02c2b021 8fa30014 02831021 24430007 285e0000 007e100b 0002f0c3 8fa2008c 005ef021 8fa2001c 00541823 000317c3 00021742 00621821 30630007 00621023 24030001 00431004 afa20010 02c08021 1000ffd0 00008821 8fa20028 24420001 afa20028 14520007 26b50001 1000000c 8fa20034 afa00028 8fa30038 2463ffff afa3001c 8fa20078 1840fff3 8fb60070 0000a021 8fa3002c 1000ffda 02a3b82b 24420001 afa20034 8fa30030 8fa20018 00621821 afa30030 8fa30014 8fa2003c 00621821 afa30014 8fa30038 8fa20040 00621821 afa30038 8fa30034 8fa2007c 10620005 8fbf006c 1e40ffe2 8fb50030 1000ffeb 8fa20034 8fbe0068 8fb70064 8fb60060 8fb5005c 8fb40058 8fb30054 8fb20050 8fb1004c 8fb00048 03e00008 27bd0070 'CloseDriver 27bdffd8 afbf0024 afb30020 afb2001c afb10018 afb00014 3c029d00 8c42008c 8c500000 02009821 1200002c 24020001 3c119d00 8e220048 8e030014 ac430000 8e22004c 8e03001c ac430000 8e220094 ac400000 8e220098 ac400000 8e220044 0040f809 02002021 8e220010 8e040140 00002821 0040f809 00003021 8e220010 8e040144 00002821 0040f809 00003021 8e220010 8e040148 00002821 0040f809 00003021 26120020 8e220010 8e04014c 00002821 0040f809 00003021 26100004 5612fffa 8e220010 ae600020 3c029d00 8c42008c ac400000 00001021 8fbf0024 8fb30020 8fb2001c 8fb10018 8fb00014 03e00008 27bd0028 'main 27bdffc0 afbf003c afbe0038 afb70034 afb60030 afb5002c afb40028 afb30024 afb20020 afb1001c afb00018 00a0b821 00c0a821 00e0f021 8c820000 24030001 14430008 8c840004 14800007 24030002 0411FFAD 00000000 00402021 10000187 00022fc3 24030002 14430003 3c029d00 10800181 24040066 8c42008c 8c420000 10400009 00409821 8c430020 24040001 3c02dead 3442c001 14620178 00002821 1000000c 02a08821 3c109d00 8e02003c 0040f809 24040200 00409821 8e02008c ac530000 3c02dead 3442c001 ae620020 02a08821 02609021 0000a021 3c109d00 24160001 8e020028 0040f809 8e240000 00561004 ae420080 8e020024 8e240000 0040f809 24050006 ae4200c0 8e020024 8e240000 0040f809 24050005 ae420100 8e020010 8e240000 24050008 0040f809 00003021 8e020014 8e240000 0040f809 00002821 8e220000 ae42014c 26940001 26310008 24020008 1682ffe2 26520004 3c109d00 8e020028 0040f809 8ea40040 24110001 00511004 ae620040 8e020024 8ea40040 0040f809 24050006 ae620044 8e020024 8ea40040 0040f809 24050005 ae620048 8e020010 8ea40040 24050008 0040f809 00003021 8ea20040 ae620140 8e620044 8e630040 ac430000 8e020028 0040f809 8ea40048 00511004 ae62004c 8e020024 8ea40048 0040f809 24050006 ae620050 8e020024 8ea40048 0040f809 24050005 ae620054 8e020010 8ea40048 24050008 0040f809 00003021 8ea20048 ae620144 8e620050 8e63004c ac430000 8e020010 8ea40050 24050008 0040f809 00003021 8e020014 8ea40050 0040f809 24050001 8ea20050 ae620148 3c029d00 24420978 3c039d00 246304ac 0062202b 10800005 00621823 8ee40000 00641821 10000004 ae630010 8ee40000 00641821 ae630010 3c039d00 246305d4 0062202b 10800005 00621023 8ee40000 00441021 10000004 ae620018 8ee40000 00441021 ae620018 8fc20000 ae620000 26720004 240200f0 ae620004 26710008 24020140 ae620008 3c109d00 8e020090 8e630000 a0430015 8e020014 8ea40050 0040f809 24050001 8e020004 0040f809 24042710 8e020014 8ea40050 0040f809 00002821 8e020004 0040f809 24042710 8e020014 8ea40050 0040f809 24050001 8e020004 0040f809 24042710 00002021 24050001 0411FD7E 00000000 24040003 3405a8a4 0411FD7A 00000000 2404000c 00002821 0411FD76 00000000 2404000d 2405080c 0411FD72 00000000 2404000e 24052b00 0411FD6E 00000000 2404001e 240500b7 0411FD6A 00000000 24040001 24052b3f 0411FD66 00000000 24040002 24050600 0411FD62 00000000 24040010 00002821 0411FD5E 00000000 24040011 24056070 0411FD5A 00000000 24040005 00002821 0411FD56 00000000 24040006 00002821 0411FD52 00000000 24040016 3405ef1c 0411FD4E 00000000 24040017 24050003 0411FD4A 00000000 24040007 24050233 0411FD46 00000000 2404000b 00002821 0411FD42 00000000 2404000f 00002821 0411FD3E 00000000 24040041 00002821 0411FD3A 00000000 24040042 00002821 0411FD36 00000000 24040048 00002821 0411FD32 00000000 24040049 2405013f 0411FD2E 00000000 2404004a 00002821 0411FD2A 00000000 2404004b 00002821 0411FD26 00000000 24040030 24050707 0411FD22 00000000 24040031 24050204 0411FD1E 00000000 24040032 24050204 0411FD1A 00000000 24040033 24050502 0411FD16 00000000 24040034 24050507 0411FD12 00000000 24040035 24050204 0411FD0E 00000000 24040036 24050204 0411FD0A 00000000 24040037 24050502 0411FD06 00000000 2404003a 24050302 0411FD02 00000000 2404003b 24050302 0411FCFE 00000000 24040023 00002821 0411FCFA 00000000 24040024 00002821 0411FCF6 00000000 24040025 34058000 0411FCF2 00000000 8e620000 24030004 10430009 24056040 24030001 10430006 24056068 38450003 24036070 24046058 0085180a 00602821 24040011 0411FCE3 00000000 8e620000 30420001 10400008 3c029d00 8c430098 8e440000 ac640000 8c420094 8e230000 10000007 ac430000 8c430094 8e440000 ac640000 8c420098 8e230000 ac430000 3c109d00 8e020048 8c420000 ae620014 8e02004c 8c420000 ae62001c 8e020048 8e630010 ac430000 8e020048 8e030094 8c660000 8e030098 8c670000 afa00010 8c420000 00002021 00002821 24c6ffff 0040f809 24e7ffff 8e02004c 8e630018 ac430000 00002021 10000002 00002821 00002821 00801021 00a01821 8fbf003c 8fbe0038 8fb70034 8fb60030 8fb5002c 8fb40028 8fb30024 8fb20020 8fb1001c 8fb00018 03e00008 27bd0040 End CFunction 'MIPS32 M4K |
||||
vegipete![]() Guru ![]() Joined: 29/01/2013 Location: CanadaPosts: 1122 |
Good grief that's a tiny resistor. What is it, an 0402? I presume after the change to 8 bit mode, it won't work with the Armite. Is there an update in the pipeline? Visit Vegipete's *Mite Library for cool programs. |
||||
disco4now![]() Guru ![]() Joined: 18/12/2014 Location: AustraliaPosts: 971 |
Hi, Can anyone hazard a guess at what the value of R4 is. Mine has disappeared forever into the carpet. Regards Gerry Latest F4 Latest H7 FotS |
||||
matherp Guru ![]() Joined: 11/12/2012 Location: United KingdomPosts: 10066 |
0 ohm |
||||
MicroBlocks![]() Guru ![]() Joined: 12/05/2012 Location: ThailandPosts: 2209 |
![]() So just a solder blob and fixed. ![]() Microblocks. Build with logic. |
||||
disco4now![]() Guru ![]() Joined: 18/12/2014 Location: AustraliaPosts: 971 |
Thanks for the replies. I had some small SMD resistors (82ohm and about the size of a flea) from a practice soldering kit I got off ebay when I started the SMD adventure, so presuming the value did not matter that much I gave it ago. I could not get it to go after about five attempts at soldering the flea on, using about 3 or 4 as I discarded them after they stuck to the tip of the iron and got hot. I gave up and went to bed in the end, resigned to another dead display. This morning checked the wiring, well B0 and B1 reversed. Now works like a charm. So me mucking about around R4 R5 area with a few attempts did not destroy it. It is running on a pimped Skinnymite, just needed to adjust the pins in Peter's code at the two appearances of this line. 'Retrn%=Display.Open(25,26,27,36,37,38,2,3,21,22,19,Orientation%) '44 pin MX170 Retrn%=Display.Open(60,61,62,63,64,1,2,3,27,24,28,Orientation%) '64pin MX470 The other connections on the SSD1289 to make it go. GND to GND CS to GND RD --> 3.3V LED-A --> 3.3V VCC --> 3.3V plus T-DO,T-DIN, T-CLK to pins 47,5,4 for the touch SPI plus T-IRQ and T-CS to pins that match the OPTION TOUCH command. Regards Gerry Latest F4 Latest H7 FotS |
||||
vegipete![]() Guru ![]() Joined: 29/01/2013 Location: CanadaPosts: 1122 |
Memory is a marvelous thing - except when you don't have it. I'm missing a detail to make the program at the top of this thread work. I've done the mode change and connected all the wiring on a PIC32MX170 28 pin Micromite. (For reference, use LCD pins DB0 to DB7 for the 8 bit data bus, connected to your choice of I/O pins. Connect WR, RS and REST to I/O pins too. That's 11 in total. Connect CS to ground and RD to 3.3V, as per disco4now. I didn't bother to bypass the voltage regulator on the LCD board because the measured output was 3.0 volts - close enough.) When I run the program, everything works except the command "GUI Test Display", which fails with "Error: Display not configured". So some how I have to tell the Micromite that a display is actually there and working... Option? Library? Startup? I don't know. The command "option lcdpanel user,320,240" doesn't do anything useful for me. Visit Vegipete's *Mite Library for cool programs. |
||||
matherp Guru ![]() Joined: 11/12/2012 Location: United KingdomPosts: 10066 |
Some time ago Geoff made a change to the way displays are detected. This stopped the GUI TEST command working for old drivers but everything else should still work. Just try CLS RGB(anything) instead |
||||
vegipete![]() Guru ![]() Joined: 29/01/2013 Location: CanadaPosts: 1122 |
Good to know. Other commands seem to work fine. Thanks. Visit Vegipete's *Mite Library for cool programs. |
||||
vegipete![]() Guru ![]() Joined: 29/01/2013 Location: CanadaPosts: 1122 |
Next issue is the touch screen. I set "OPTION TOUCH 2,16" (as I've connected it: pin 2 to T_CS, pin 16 to T_IRQ.) When I try to "GUI CALIBRATE", I get "Error: Display not configured" again. Same if I try to run it in a basic program. Should I try older Micromite firmware? Visit Vegipete's *Mite Library for cool programs. |
||||
disco4now![]() Guru ![]() Joined: 18/12/2014 Location: AustraliaPosts: 971 |
I think you need DISPLAY_TYPE set to 20. The test below is applied. if(Option.DISPLAY_TYPE == 0) error("Display not configured"); You can do it with POKE byte peek(WORD &H9D000090) + 20,20 if its not setup by the driver. Here is something I used on an MX470 so I could used the BACKLIGHT command on a Non SSD1963 LCDPANEL. Temporarily set to an SSD1963 to apply the backlight and then put it it back to correct value. sub BL(dat as integer) 'make it an SSD1963 momentarily to allow backlight command POKE byte peek(WORD &H9D000090) + 20,5 backlight dat POKE byte peek(WORD &H9D000090) + 20,20 end sub Latest F4 Latest H7 FotS |
||||
vegipete![]() Guru ![]() Joined: 29/01/2013 Location: CanadaPosts: 1122 |
Interesting incantation. Alas, it has no effect with my '170. That location has the value 2684355464 which doesn't change by poking. Knowledge acquisition continues ... Visit Vegipete's *Mite Library for cool programs. |
||||
matherp Guru ![]() Joined: 11/12/2012 Location: United KingdomPosts: 10066 |
Sorry can't find the source for this driver so unable to update |
||||
vegipete![]() Guru ![]() Joined: 29/01/2013 Location: CanadaPosts: 1122 |
Is this relevant? =================== Is there a list of 8 and 16 bit drivers for the MM+ (yes, plus) family for 480x320 panels? Visit Vegipete's *Mite Library for cool programs. |
||||
thwill![]() Guru ![]() Joined: 16/09/2019 Location: United KingdomPosts: 4251 |
Sorry to hijack @vegipete, but I PM'd you about the competition a couple of days ago. Can you get back to me one way or the other. Thx, Tom MMBasic for Linux, Game*Mite, CMM2 Welcome Tape, Creaky old text adventures |
||||
matherp Guru ![]() Joined: 11/12/2012 Location: United KingdomPosts: 10066 |
No, I've got that one. Only supports the 44 and 64-pin MM which have a full 8-bit port available whereas the 28-pin has to use pins of more than one port |
||||
![]() |
![]() |
The Back Shed's forum code is written, and hosted, in Australia. | © JAQ Software 2025 |