Duet3D Logo Duet3D
    • Tags
    • Documentation
    • Order
    • Register
    • Login

    Logic Level shifter for 12864 display on Duet 2 Wifi

    Scheduled Pinned Locked Moved
    Duet Hardware and wiring
    11
    200
    16.9k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A Former User?
      A Former User @oliof
      last edited by

      @oliof said in Logic Level shifter for 12864 display on Duet 2 Wifi:

      without SD card slot so maybe that's going to be a bit simpler

      Probably not going to make much difference having an empty slot vs no slot, if there is a need for the logic it would be to avoid confusing the lcd with spi traffic the duet would make regardless of the physical slot (but without having studied the code in detail I'd expect it to be only at boot to detect sd cards, daughter and expansion boards, unless one of those are present ofc). And if the lcd has a proper spi interface it should ignore mosi/sck when cs isn't asserted so idk.

      dc42undefined 1 Reply Last reply Reply Quote 0
      • dc42undefined
        dc42 administrators @A Former User
        last edited by dc42

        @bearer said in Logic Level shifter for 12864 display on Duet 2 Wifi:

        And if the lcd has a proper spi interface it should ignore mosi/sck when cs isn't asserted so idk.

        That's what one would expect; however the V4.0 ST7920 datasheet says on page 29:

        When chip select (CS) is low, ST7920 serial clock counter and serial data will be reset. Serial transfer counter is set
        to the first bit and data register is cleared. After CS is “L”, any further change on SID or SCLK is not allowed. It is
        recommended to keep SCLK at “L” and SID at the last status before set CS to “L”. For a minimal system with only
        one ST7920 and one MPU, only SCLK and SID pins are necessary. CS pin should pull to high.

        That's why we gate SCLK with CS on the Maestro.

        Duet WiFi hardware designer and firmware engineer
        Please do not ask me for Duet support via PM or email, use the forum
        http://www.escher3d.com, https://miscsolutions.wordpress.com

        A Former User? 1 Reply Last reply Reply Quote 0
        • A Former User?
          A Former User @dc42
          last edited by

          @dc42 said in Logic Level shifter for 12864 display on Duet 2 Wifi:

          That's why we gate SCLK with CS on the Maestro.

          Thanks for confirming! Suspected as much from the design, 2 for 1 with the and gate, probably timing (or Gremlins) preventing the txs0108 module achieving the same thing.

          Will poke it some more another day or perhaps sneak a 74hct08 in on the next part order.

          A Former User? 1 Reply Last reply Reply Quote 0
          • A Former User?
            A Former User @A Former User
            last edited by A Former User

            @bearer said in Logic Level shifter for 12864 display on Duet 2 Wifi:

            probably timing (or Gremlins) preventing the txs0108 module achieving the same thing.

            not 100% sure where the gremlings are/were but ( <- dodgy USB cable and unstable 5v)
            It works! Duet2Wifi + TXS0108 + RepRapDiscount Smart Controller (or geeetech clone with the headers corrected in any case). Confirms patch against 2.05 and schematic at least.
            2020-04-16 17_02_30_d2w_12864-2.jpg

            M918
            12864 display is configured, pulses-per-click is 2
            M115
            FIRMWARE_NAME: RepRapFirmware for Duet 2 WiFi/Ethernet FIRMWARE_VERSION: 2.05.x LCD ELECTRONICS: Duet WiFi 1.02 or later FIRMWARE_DATE: 2020-04-16b4
            

            forecast changed its mind no sunshine today >.<

            edit: i would propose swapping lcd_cs to from PortDPin(21) / lcdconn.10 to PortAPin(7) / sdconn.7 as it would enable a single 10 way ribbon cable to function as just a display + sd reader (but no buttons/beep). Or maybe utxd0, urxd0 and spi0_cs could be used if the reader isn't present or needed.

            (edit2: yes, i'm aware the duet is missing some parts)

            1 Reply Last reply Reply Quote 1
            • A Former User?
              A Former User
              last edited by

              @dc42 are there any conventions or limitations to

              # define MAIN_VERSION "2.05"
              # define DATE "2020-04-14b3"
              i see 3.01-RC7 gets a conditional
              # define VERSION_SUFFIX " (CAN0)"

              is that the way to go for various mischief? (i.e. mlx90614 too long a string to add?)

              1 Reply Last reply Reply Quote 0
              • dc42undefined
                dc42 administrators
                last edited by

                Yes I suggest you use a version suffix. I agree that mlx90614 is rather long. It's also obscure, at least to me. What does it mean?

                Duet WiFi hardware designer and firmware engineer
                Please do not ask me for Duet support via PM or email, use the forum
                http://www.escher3d.com, https://miscsolutions.wordpress.com

                A Former User? 1 Reply Last reply Reply Quote 0
                • A Former User?
                  A Former User @dc42
                  last edited by

                  @dc42 said in Logic Level shifter for 12864 display on Duet 2 Wifi:

                  What does it mean?

                  unless i got it wrong its one of the non-contact spi temp sensors left over from an EV charger build. might find its way into a printer if this pandemic thing drags out..

                  but its aslo about the length of a short commit id so was wondering if there is a hard limit that i didn't see in my limited search. i don't expect to share any binaries but figure clearly tagging them in case of issues would be good.

                  1 Reply Last reply Reply Quote 0
                  • A Former User?
                    A Former User @A Former User
                    last edited by A Former User

                    @bearer said in Logic Level shifter for 12864 display on Duet 2 Wifi:

                    Edit: WIP RRF3 patch

                    huh, must have missed it earlier:/

                    ..bin/ld: Duet2CombinedFirmware.elf section `.ARM.exidx' will not fit in region `rom'
                    ..bin/ld: region `rom' overflowed by 4900 bytes
                    

                    oh well, RRF2 for now.

                    edit @ oliof: clearer picture of the wiring with some labels, do note I swapped two pins from the blogpost

                    diff --git a/src/DuetNG/Pins_DuetNG.h b/src/DuetNG/Pins_DuetNG.h
                    index a9c30059..620d14ef 100644
                    --- a/src/DuetNG/Pins_DuetNG.h
                    +++ b/src/DuetNG/Pins_DuetNG.h
                    @@ -28,7 +28,7 @@ constexpr size_t NumFirmwareUpdateModules = 4;                // 3 modules, plus one for manua
                     #define SUPPORT_IOBITS                 1                                       // set to support P parameter in G0/G1 commands
                     #define SUPPORT_DHT_SENSOR             1                                       // set nonzero to support DHT temperature/humidity sensors
                     #define SUPPORT_WORKPLACE_COORDINATES  1                                       // set nonzero to support G10 L2 and G53..59
                    -#define SUPPORT_12864_LCD              0                                       // set nonzero to support 12864 LCD and rotary encoder
                    +#define SUPPORT_12864_LCD              1                                       // set nonzero to support 12864 LCD and rotary encoder
                     #define SUPPORT_OBJECT_MODEL           1
                     #define SUPPORT_FTP                    1
                     #define SUPPORT_TELNET                 1
                    @@ -37,11 +37,11 @@ constexpr size_t NumFirmwareUpdateModules = 4;              // 3 modules, plus one for manua
                    
                     // The physical capabilities of the machine
                    
                    -constexpr size_t NumDirectDrivers = 12;                                // The maximum number of drives supported directly by the electronics
                    +constexpr size_t NumDirectDrivers = 11;                                // The maximum number of drives supported directly by the electronics
                     constexpr size_t MaxTotalDrivers = NumDirectDrivers;                   // The maximum number of drives including CAN expansion
                     constexpr size_t MaxSmartDrivers = 10;                                 // The maximum number of smart drivers
                    
                    -constexpr size_t NumEndstops = 12;                                     // The number of inputs we have for endstops, filament sensors etc.
                    +constexpr size_t NumEndstops = 11;                                     // The number of inputs we have for endstops, filament sensors etc.
                     constexpr size_t NumHeaters = 8;                                       // The number of heaters in the machine
                     constexpr size_t NumExtraHeaterProtections = 8;                        // The number of extra heater protection instances
                     constexpr size_t NumThermistorInputs = 8;
                    @@ -72,9 +72,29 @@ constexpr Pin AdditionalIoExpansionStart = 220;              // Pin numbers 220-235 are on t
                    
                     // DRIVES
                     constexpr Pin GlobalTmc2660EnablePin = 38;                     // The pin that drives ENN of all TMC2660 drivers on production boards (on pre-production boards they are grounded)
                    -constexpr Pin ENABLE_PINS[NumDirectDrivers] = { 78, 41, 42, 49, 57, 87, 88, 89, 90, 31, 82, 60 };
                    -constexpr Pin STEP_PINS[NumDirectDrivers] = { 70, 71, 72, 69, 68, 66, 65, 64, 67, 91, 84, 85 };
                    -constexpr Pin DIRECTION_PINS[NumDirectDrivers] = { 75, 76, 77, 01, 73, 92, 86, 80, 81, 32, 83, 25 };
                    +constexpr Pin ENABLE_PINS[NumDirectDrivers] = { 78, 41, 42, 49, 57, 87, 88, 89, 90, 31, 82};
                    +constexpr Pin STEP_PINS[NumDirectDrivers] = { 70, 71, 72, 69, 68, 66, 65, 64, 67, 91, 84};
                    +constexpr Pin DIRECTION_PINS[NumDirectDrivers] = { 75, 76, 77, 01, 73, 92, 86, 80, 81, 32, 83};
                    +
                    +// 12864 LCD
                    +// The ST7920 datasheet specifies minimum clock cycle time 400ns @ Vdd=4.5V, min. clock width 200ns high and 20ns low.
                    +// This assumes that the Vih specification is met, which is 0.7 * Vcc = 3.5V @ Vcc=5V
                    +// The Duet Maestro level shifts all 3 LCD signals to 5V, so we meet the Vih specification and can reliably run at 2MHz.
                    +// For other electronics, there are reports that operation with 3.3V LCD signals may work if you reduce the clock frequency.
                    +// ST7920 doesn't allow SCK/MISO signals when CS is not asserted, therefore the AND gate on the Maestro
                    +constexpr uint32_t LcdSpiClockFrequency = 2000000;     // 2.0MHz            -- Top View --
                    +constexpr Pin LcdCSPin = 7;      //connsd.7   --> gate -> exp1.4            |            |
                    +constexpr Pin LcdBeepPin = 60;   //connlcd.4           -> exp1.1            |  10*  *9   |
                    +constexpr Pin EncoderPinA = 85;  //connlcd.8           -> exp2.5            |            |
                    +constexpr Pin EncoderPinB = 25;  //connlcd.6           -> exp2.3            |   8*  *7  _|
                    +constexpr Pin EncoderPinSw = 8;  //connlcd.10           -> exp1.2           |          |
                    +                                 //adittional spi wiring:                   |   6*  *5 |
                    +                                 //connsd.6            <- exp2.1 (SD MISO)  |          |_
                    +                                 //connsd.5   --> gate -> exp1.3 (LCD MOSI) |   4*  *3   |
                    +                                 //            `->     -> exp2.6 (SD MOSI)  |            |
                    +                                 //connsd.4   --> gate -> exp1.5 (LCD SCK)  |   2*  #1   |
                    +                                 //            `->     -> exp2.2 (SD SCK)   |            |
                    +                                 //connsd.3            -> exp2.4 (SD CS)    --------------
                    
                     // Pin assignments etc. using USART1 in SPI mode
                     Usart * const USART_TMC2660 = USART1;
                    @@ -92,7 +112,7 @@ constexpr Pin DueX_INT = 17;                                         // DueX interrupt pin = PA17 (was E6_STOP)
                     // Endstops
                     // RepRapFirmware only has a single endstop per axis.
                     // Gcode defines if it is a max ("high end") or min ("low end") endstop and sets if it is active HIGH or LOW.
                    -constexpr Pin END_STOP_PINS[NumEndstops] = { 46, 02, 93, 74, 48, 96, 97, 98, 99, 17, 39, 8 };
                    +constexpr Pin END_STOP_PINS[NumEndstops] = { 46, 02, 93, 74, 48, 96, 97, 98, 99, 17, 39};
                     constexpr Pin DUEX_END_STOP_PINS[5] = { 200, 203, 202, 201, 213 };                             // these replace endstops 5-9 if a DueX is present
                    
                     // HEATERS
                    diff --git a/src/Version.h b/src/Version.h
                    index ac15bf0a..81082397 100644
                    --- a/src/Version.h
                    +++ b/src/Version.h
                    @@ -11,7 +11,7 @@
                    
                     #ifndef VERSION
                     #ifdef RTOS
                    -# define MAIN_VERSION  "2.05.1"
                    +# define MAIN_VERSION  "2.05.1+LCD"
                     #else
                     # define MAIN_VERSION  "1.26.1"
                     #endif
                    @@ -20,7 +20,7 @@
                     #endif
                    
                     #ifndef DATE
                    -# define DATE "2020-02-09b1"
                    +# define DATE "2020-04-16b8"
                     #endif
                    
                     #define AUTHORS "reprappro, dc42, chrishamm, t3p3, dnewman, printm3d"
                    

                    (apply patch with git apply --ignore-whitespace lcd12864.patch as whitespace was tweaked for display)
                    2020-04-17 00_03_36-Clipboard.jpg
                    And schematic; i only wired up the blue lines on the drawing.
                    cf0f5dbd-9107-466b-adbe-28448fb1b843-image.png

                    1 Reply Last reply Reply Quote 1
                    • oliofundefined
                      oliof
                      last edited by

                      Got a delivery of ten boards with 74HCT08 on them just now. Tomorrow I'll need to solder on a bunch of headers ...IMG_20200418_202017.jpg

                      <>RatRig V-Minion Fly Super5Pro RRF<> V-Core 3.1 IDEX k*****r <> RatRig V-Minion SKR 2 Marlin<>

                      A Former User? 1 Reply Last reply Reply Quote 0
                      • A Former User?
                        A Former User @oliof
                        last edited by A Former User

                        @oliof said in Logic Level shifter for 12864 display on Duet 2 Wifi:

                        Got a delivery of ten boards with 74HCT08 on them just now.

                        wow thats fast! if thats from the original schematic in the blog post beware pin1 (the square pin) isn't really pin1 on all of those headers; read the description of how to orient the notches on the headers/idc's. (eyeballing it i'd say its H1 and H2 that are reversed, but do check the description)

                        1 Reply Last reply Reply Quote 0
                        • oliofundefined
                          oliof
                          last edited by

                          Indeed, 3 weeks turnaround isn't too bad (-:

                          It's the unchanged schematics and I will be careful!

                          In my pursuit for a small board to hide alon a cable length I may have left too little clearance for the headers.

                          A revision is likely inevitable, and then I'd go for your fixed layout if it's finalized by then.

                          <>RatRig V-Minion Fly Super5Pro RRF<> V-Core 3.1 IDEX k*****r <> RatRig V-Minion SKR 2 Marlin<>

                          A Former User? 3 Replies Last reply Reply Quote 0
                          • A Former User?
                            A Former User @oliof
                            last edited by A Former User

                            @oliof said in Logic Level shifter for 12864 display on Duet 2 Wifi:

                            3 weeks

                            ah, didn't realize you ordered them a that long ago, seemed like 3 days to me 😛
                            (3 weeks is still quite good considering; I will likely need a break from banging my head against BLE 5 so can look over the 74hct08 layout one of these days np)
                            c1fe2d78-abb1-41e8-a650-1fa45a4fa5a0-image.png

                            1 Reply Last reply Reply Quote 0
                            • A Former User?
                              A Former User @oliof
                              last edited by

                              @oliof said in Logic Level shifter for 12864 display on Duet 2 Wifi:

                              I will be careful!

                              quick tip is to measure ground on the duet to ground on the lcd12864 before powering up, if continuity good ods, and grounds are usually easy to spot making it an quick and easy test for reversed wires.

                              1 Reply Last reply Reply Quote 0
                              • A Former User?
                                A Former User @oliof
                                last edited by

                                @oliof said in Logic Level shifter for 12864 display on Duet 2 Wifi:

                                I may have left too little clearance for the headers.

                                option 2 is to cut off the 10 way IDC on the ribbon and replace with a 2x5 dupont style housing, or as I often end up, cutting down a 2x40 or laminating any combination of smaller housings (just make sure to align the release catch on the outside if you need to make alterations)

                                1 Reply Last reply Reply Quote 0
                                • oliofundefined
                                  oliof
                                  last edited by

                                  good tip on the dupont housing, as I have those in the house and my crimp success rate with duponts is above 80% (-:

                                  <>RatRig V-Minion Fly Super5Pro RRF<> V-Core 3.1 IDEX k*****r <> RatRig V-Minion SKR 2 Marlin<>

                                  1 Reply Last reply Reply Quote 0
                                  • oliofundefined
                                    oliof
                                    last edited by

                                    @bearer enabling the LCD12864 feature for DuetNG in RepRapFirmware3 does not grow the size beyond rom, or at least I do not get an error message ... I still need to suss out the pin assignments though.

                                    <>RatRig V-Minion Fly Super5Pro RRF<> V-Core 3.1 IDEX k*****r <> RatRig V-Minion SKR 2 Marlin<>

                                    A Former User? dc42undefined 2 Replies Last reply Reply Quote 0
                                    • A Former User?
                                      A Former User @oliof
                                      last edited by A Former User

                                      @oliof I thought it built ok the first time, but can't seem to reproduce the success.

                                      feel free to try the changes I think I used..

                                      index 11d2bdfc..1a8948c5 100644
                                      --- a/src/DuetNG/Pins_DuetNG.h
                                      +++ b/src/DuetNG/Pins_DuetNG.h
                                      @@ -40,7 +40,7 @@ constexpr size_t NumFirmwareUpdateModules = 4;                // 3 modules, plus one for manua
                                       #define SUPPORT_IOBITS                 1                                       // set to support P parameter in G0/G1 commands
                                       #define SUPPORT_DHT_SENSOR             1                                       // set nonzero to support DHT temperature/humidity sensors
                                       #define SUPPORT_WORKPLACE_COORDINATES  1                       // set nonzero to support G10 L2 and G53..59
                                      -#define SUPPORT_12864_LCD              0                                       // set nonzero to support 12864 LCD and rotary encoder
                                      +#define SUPPORT_12864_LCD              1                                       // set nonzero to support 12864 LCD and rotary encoder
                                       #define SUPPORT_OBJECT_MODEL   1
                                       #define SUPPORT_FTP                            1
                                       #define SUPPORT_TELNET                 1
                                      @@ -53,7 +53,7 @@ constexpr size_t NumFirmwareUpdateModules = 4;                // 3 modules, plus one for manua
                                      
                                       // The physical capabilities of the machine
                                      
                                      -constexpr size_t NumDirectDrivers = 12;                                // The maximum number of drives supported directly by the electronics
                                      +constexpr size_t NumDirectDrivers = 11;                                // The maximum number of drives supported directly by the electronics
                                       constexpr size_t MaxSmartDrivers = 10;                         // The maximum number of smart drivers
                                      
                                       constexpr size_t MaxSensors = 32;
                                      @@ -112,18 +112,18 @@ constexpr Pin ENABLE_PINS[NumDirectDrivers] =
                                       {
                                              PortDPin(14), PortCPin(9), PortCPin(10), PortCPin(17), PortCPin(25),    // Duet
                                              PortDPin(23), PortDPin(24), PortDPin(25), PortDPin(26), PortBPin(14),   // DueX5
                                      -       PortDPin(18), PortCPin(28)
                                                      // CONN_LCD
                                      +       PortDPin(18),
                                                      // CONN_LCD  PortCPin(28)=EncoderPinB
                                       };
                                       constexpr Pin STEP_PINS[NumDirectDrivers] =
                                       {
                                              PortDPin(6), PortDPin(7), PortDPin(8), PortDPin(5), PortDPin(4),                // Duet
                                              PortDPin(2), PortDPin(1), PortDPin(0), PortDPin(3), PortDPin(27),               // DueX5
                                      -       PortDPin(20), PortDPin(21)
                                                      // CONN_LCD
                                      +       PortDPin(20)
                                                              // CONN_LCD PortDPin(21)=LcdCSPin
                                       };
                                       constexpr Pin DIRECTION_PINS[NumDirectDrivers] =
                                       {      PortDPin(11), PortDPin(12), PortDPin(13), PortAPin(1), PortDPin(9),             // Duet
                                              PortDPin(28), PortDPin(22), PortDPin(16), PortDPin(17), PortCPin(0),    // DueX5
                                      -       PortDPin(19), PortAPin(25)
                                                      // CONN_LCD
                                      +       PortDPin(19)
                                                              // CONN_LCD  PortAPin(25)=EncoderPinA
                                       };
                                      
                                       // Pin assignments etc. using USART1 in SPI mode
                                      @@ -187,6 +187,25 @@ constexpr Pin SdWriteProtectPins[NumSdCards] = { NoPin, NoPin };
                                       constexpr Pin SdSpiCSPins[1] = { PortCPin(24) };
                                       constexpr uint32_t ExpectedSdCardSpeed = 20000000;
                                      
                                      +// 12864 LCD
                                      +// The ST7920 datasheet specifies minimum clock cycle time 400ns @ Vdd=4.5V, min. clock width 200ns high and 20ns low.
                                      +// This assumes that the Vih specification is met, which is 0.7 * Vcc = 3.5V @ Vcc=5V
                                      +// The Duet Maestro level shifts all 3 LCD signals to 5V, so we meet the Vih specification and can reliably run at 2MHz.
                                      +// For other electronics, there are reports that operation with 3.3V LCD signals may work if you reduce the clock frequency.
                                      +constexpr uint32_t LcdSpiClockFrequency = 2000000;             // 2.0MHz
                                      +constexpr Pin LcdCSPin = PortDPin(21);      //connlcd.10 --> gate -> exp2.4
                                      +constexpr Pin LcdBeepPin = PortAPin(8);     //connlcd.4           -> exp1.1
                                      +constexpr Pin EncoderPinA = PortAPin(25);   //connlcd.8           -> exp2.5
                                      +constexpr Pin EncoderPinB = PortCPin(28);   //connlcd.6           -> exp2.3
                                      +constexpr Pin EncoderPinSw = PortAPin(7);   //connsd.7            -> exp1.2
                                      +                                            //adittional spi wiring:
                                      +                                            //connsd.6            <- exp2.1
                                      +                                            //connsd.5   --> gate -> exp1.3
                                      +                                            //            `->     -> exp2.6
                                      +                                            //connsd.4   --> gate -> exp1.5
                                      +                                            //            `->     -> exp2.2
                                      +                                            //connsd.3            -> exp2.4
                                      +
                                       // Enum to represent allowed types of pin access
                                       // We don't have a separate bit for servo, because Duet PWM-capable ports can be used for servos if they are on the Duet main board
                                       enum class PinCapability: uint8_t
                                      @@ -291,8 +310,8 @@ constexpr PinEntry PinTable[] =
                                              { Z_PROBE_MOD_PIN, PinCapability::write, "zprobe.mod" },
                                              { ATX_POWER_PIN, PinCapability::write,  "pson" },
                                              { PortCPin(7),  PinCapability::rw,              "connlcd.encb,connlcd.3" },
                                      -       { PortAPin(8),  PinCapability::rw,              "connlcd.enca,connlcd.4" },
                                      -       { PortAPin(7),  PinCapability::rw,              "connsd.encsw,connsd.7" },
                                      +       //{ PortAPin(8),        PinCapability::rw,              "connlcd.enca,connlcd.4" }, //LCD Beep
                                      +       //{ PortAPin(7),        PinCapability::rw,              "connsd.encsw,connsd.7" }, //EncoderPinSw
                                              { PortBPin(6),  PinCapability::rw,              "exp.pb6,exp.29,duex.pb6" },
                                              { 211,                  PinCapability::rwpwm,   "duex.gp1" },
                                              { 210,                  PinCapability::rwpwm,   "duex.gp2" },
                                      diff --git a/src/Version.h b/src/Version.h
                                      index 54caf0df..cf783708 100644
                                      --- a/src/Version.h
                                      +++ b/src/Version.h
                                      @@ -9,7 +9,7 @@
                                       #define SRC_VERSION_H_
                                      
                                       #ifndef VERSION
                                      -# define MAIN_VERSION  "3.01-RC8"
                                      +# define MAIN_VERSION  "3.01-RC8 LCD"
                                       # ifdef USE_CAN0
                                       #  define VERSION_SUFFIX       " (CAN0)"
                                       # else
                                      @@ -19,7 +19,7 @@
                                       #endif
                                      
                                       #ifndef DATE
                                      -# define DATE "2020-04-17b4"
                                      +# define DATE "2020-04-20b1"
                                       #endif
                                      
                                       #define AUTHORS "reprappro, dc42, chrishamm, t3p3, dnewman, printm3d"
                                      

                                      but it doesn't build at all unless the pins are defined?

                                      oliofundefined 1 Reply Last reply Reply Quote 0
                                      • dc42undefined
                                        dc42 administrators @oliof
                                        last edited by dc42

                                        @oliof said in Logic Level shifter for 12864 display on Duet 2 Wifi:

                                        @bearer enabling the LCD12864 feature for DuetNG in RepRapFirmware3 does not grow the size beyond rom, or at least I do not get an error message ... I still need to suss out the pin assignments though.

                                        The standard v3.01-dev branch build of Duet2CombinedFirmware has 19kB free. The 12864 code on the Duet Maestro build takes up 0x24E0 bytes of readonly data, 0x2840 bytes of code, 0x144 exception table and 0x130 exception index. Total 0x5F94, which is nearly 24K. So unless I have missed anything, it is too large by about 5Kb, which agrees with the message.

                                        I've just managed to reduce the size of the standard 3.02 binary by 4.5kb, so now you are only about 0.5kb short. This will be in the next commit. You will need to update the CoreNG and freeRTOS projects as well as the RepRapFirmware project.

                                        Possible ways to make it fit (EDITED):

                                        • You could save 5kb space by removing the large font
                                        • Compile the less critical parts of the firmware with option -Os instead of -O2
                                        • Remove one of the less-used kinematics classes when 12864 support is enabled
                                        • Remove the old 3/4/5-point bed compensation (I will probably do this myself soon anyway)
                                        • Remove the support for async moves (see SUPPORT_ASYNC_MOVES) or IOBITS (SUPPORT_IOBITS) or scanner
                                        • Separate the WiFi and Ethernet support into separate firmware binaries, as they were before I combined them.

                                        Duet WiFi hardware designer and firmware engineer
                                        Please do not ask me for Duet support via PM or email, use the forum
                                        http://www.escher3d.com, https://miscsolutions.wordpress.com

                                        1 Reply Last reply Reply Quote 0
                                        • dc42undefined
                                          dc42 administrators
                                          last edited by

                                          Update: I just tried a build with the 12864 display enabled. It overflowed by 28 bytes! So it's close to fitting.

                                          Duet WiFi hardware designer and firmware engineer
                                          Please do not ask me for Duet support via PM or email, use the forum
                                          http://www.escher3d.com, https://miscsolutions.wordpress.com

                                          1 Reply Last reply Reply Quote 0
                                          • A Former User?
                                            A Former User
                                            last edited by

                                            just occured to me, would adding both say DIP and SOIC footprint cause issues with signaling? if not, maybe it could lower the diy threshold a little, although SOIC shouldn't really be an issue for the beginner.
                                            eb50fac4-4ace-4b60-a784-4abba24b70b7-image.png

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Unless otherwise noted, all forum content is licensed under CC-BY-SA