Logic Level shifter for 12864 display on Duet 2 Wifi
-
I've been working on the code in RRF 3.2 to vary the number of drivers depending on whether a display is configured or not. In the process, I finalised the pin assignments for Duet WiFi to the Fysetc mini 12864 display, as follows.
constexpr Pin EncoderPinB = PortCPin(7); // connlcd.3 -> exp2.6 constexpr Pin EncoderPinA = PortAPin(8); // connlcd.4 -> exp2.8 constexpr Pin LcdNeopixelPin = PortDPin(18); // connlcd.5 -> exp1.5 constexpr Pin LcdResetPin = PortCPin(28); // connlcd.6 -> exp1.6 constexpr Pin LcdA0Pin = PortDPin(19); // connlcd.7 -> exp1.7 constexpr Pin LcdCSPin = PortAPin(25); // connlcd.8 -> exp1.8 constexpr Pin EncoderPinSw = PortDPin(20); // connlcd.9 -> exp1.9 constexpr Pin LcdBeepPin = PortDPin(21); // connlcd.10 -> exp1.10 // Additional spi wiring for FYSETC Mini 12864 display: // connlcd.2 (gnd) -> exp1.2 // connsd.1 (+5V) -> exp1.1 // connsd.2 (gnd) -> exp2.2 // connsd.3 (SD CS) -> exp2.7 // connsd.4 (sck) -> exp2.9 // connsd.5 (mosi) -> exp2.5 // connsd.6 (miso) -> exp2.10
-
Sounds promising. I have one of these displays gathering dust
-
Hi @dc42
I've optimized and simplified the code further in my repo and managed to save a few hundred bytes.
Also, the ST7565 display now works without additional logic components, inverting the LCD_CS with a 74xx00 is not necessary anymore. I've used the exp_0 pin for DC and the exp_1 pin for CS now. My display accepts the logic levels perfectly.
I should be able to save another 60 bytes or so, but I have to first work out an issue that I uncovered when I start drawing columns pixel by pixel.
-
@Schmart where'd one find your patch, and what does the new wiring look like? Inquiring minds want to know ...
-
@dc42: I created a pull request of my changes today, and I tested:
- ST7920 display type 1
- ST7565 display type 2 that uses EXP_1 for active low CD
- ST7565 display type 3 which needs a NAND inverter IC to invert the LCD_CS towards the display
Also implemented a couple of optimizations, solved a few bugs and simplified the Flush routine.
I see some room for further size reduction of the firmware, but that would probably make some parts of the code a little slower. What's your stance on that?
-
Hi @oliof, back from fishing?
The changes are in the following repo and branch.
https://github.com/SchmartMaker/RepRapFirmware/tree/ST7565I have a binary firmware for the Maestro here:
https://1drv.ms/u/s!Au1g8fW6BaQzioADewiHDAxzQ_Adlg?e=KuNYOBWhat's the board you're using? I'm asking, because the firmware build for the Duet Wifi and Duet Ethernet is still a little too large for the flash memory of these boards unfortunately.
-
@oliof I'll see if I can hack the wiring picture so that it reflects the new option that doesn't require the 74xx00.
-
I have a Duet2Wifi, but I can easily remove stuff I don't need (I did remove Hangprinter when trying the level shifter approach).
-
@oliof This is the wiring I used without the inverter.
So to be clear and safe, this is very specific wiring to connect the Duet 2 Maestro to a Creality ST7565-based MiniPanel display @3.3v logic levels.
The pinout of displays made vary wildly, and the connectors on display-side may need to be reversed (the plastic shroud rotated 180 degrees). Also, the firmware adaptations I made in my fork are relatively easy to change for the Duet 2 Wifi, but I believe you would need to make changes in the Pins.h specific to the board and maybe also in Display.cpp (for now).
Edit: Since @oliof is using the exact same Creality MiniPanel display from the CR-20, I have adjusted the diagram to match the exact orientation of the display connectors on that specific display. The tab goes on the side of pin #1.
-
@Schmart said in Logic Level shifter for 12864 display on Duet 2 Wifi:
The pinout of displays made vary wildly, and the connectors on display-side may need to be reversed (the plastic shroud rotated 180 degrees). Also, the firmware adaptations I made in my fork are relatively easy to change for the Duet 2 Wifi, but I believe you would need to make changes in the Pins.h specific to the board and maybe also in Display.cpp (for now).
I have a Creality minipanel I want to use, so we're in the clear there. I'll check how Pins.h need to be adapted if I get around to it before this lands in 3.2 or beyond.
-
@oliof That would be so cool if you'd get it working as well. I'm not at my computer anymore, but I believe I'm using ‘M918 P2 E4 F2000000‘ in my config.g.
-
Please note, the wiring diagram posted by @Schmart above is not the wiring arrangement that will be supported in RRF 3.2. The wiring arrangement in 3.2 is listed in this post https://forum.duet3d.com/post/157139.
-
@dc42 I saw the post, it wasn't clear to me if this was for the Duet 2 Wifi/Ethernet only or also for the Maestro?
-
@Schmart I'd assume it will be the same for either.
-
@Schmart said in Logic Level shifter for 12864 display on Duet 2 Wifi:
@dc42 I saw the post, it wasn't clear to me if this was for the Duet 2 Wifi/Ethernet only or also for the Maestro?
It's for Duet WiFi/Ethernet. For the Maestro, I chose pin exp.pa21 to connect A0 to (same as in your diagram). To avoid having to invert the CS signal in hardware, I am considering requiring CS of a 7567-based display to be connected to exp.pa22.
-
@dc42 Can you please confirm if that wire arrangement ( https://forum.duet3d.com/post/157139.) will work not only for the MINI LCD 12864 but also for a standart LCD 12864, mine is a BigtreeTech. Many thanks! If that's the case from lines 11 to 17 I must connect them only if I want the LCD 12864 SD Card support, right? If I prefer the one on the panel due I only need to connect the LCD 12864 to ConnLCD on the Duet 2 Wifi, right?
-
@antlob Hello! Anybody? Please help!
-
@antlob I can confirm that the BTT TFT2.4 12864 emulation works on the Duet Maestro which indicates it's an ST7920 and will need a logic level shifter (and a custom firmware build) for the Duet2 Wifi. Unless you share more details about the 12864 you have we cannot give you a straight answer.
-
@oliof Thanks for the reply. I have the following display . For what I've seen in forums is an ST7920 but don't know how to be certain, the display is soldered to a backplate and don't have access to the chip. So, assuming that I have the correct one, should I follow scheck's diagram? And also seems like I have to compile version RRF 3.02 dev, right? Would it work, in principle? But, if by any chance you already have the *.bin file it would really help me. Many thanks again for your time. My current RRF version is 3.1.1 as suggested by @dc42.
-
RRF 3.2 only supports the 7565 and 7567 on Duet 2 Wifi by my understanding (I might be wrong there). You need to do Markus Scheck's or @bearer's) diagram.
I don't have the firmware file from my experimentation around anymore, but bearer's code excerpts above should get you going.