#ssd1306 — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #ssd1306, aggregated by home.social.
-
Создаем I2C Master Controller на Verilog. Burst-транзакции и дисплей SSD1306
Продолжим совершенствование нашего I2C-контроллера и расширение спектра применимости. В этот раз сделаем возможность burst-транзакций и выведем картинку SSD1306. Для этого необходимо детально разобрать механизм функционирования OLED-дисплея SSD1306 и сделать аппаратный контроллер с burst-передачей по I2C, и в качестве примера сделать генерацию визуализацию 3D-куба и текста. Получился ОЧЕНЬ объемный материал с объяснением всех механик примененных для решения данной задачи. И вся логика - сугубо в железе, без процессора, без микрокода и чисто в ПЛИС. Всем кто интересуется кодингом под Verilog - добро пожаловать под кат!
https://habr.com/ru/companies/beget/articles/1028178/
#Verilog #i2c_master_controller #i2c #ssd1306 #OLEDдисплей #FPGA #Фреймбуфер #I2C_burst_writer
-
Создаем I2C Master Controller на Verilog. Burst-транзакции и дисплей SSD1306
Продолжим совершенствование нашего I2C-контроллера и расширение спектра применимости. В этот раз сделаем возможность burst-транзакций и выведем картинку SSD1306. Для этого необходимо детально разобрать механизм функционирования OLED-дисплея SSD1306 и сделать аппаратный контроллер с burst-передачей по I2C, и в качестве примера сделать генерацию визуализацию 3D-куба и текста. Получился ОЧЕНЬ объемный материал с объяснением всех механик примененных для решения данной задачи. И вся логика - сугубо в железе, без процессора, без микрокода и чисто в ПЛИС. Всем кто интересуется кодингом под Verilog - добро пожаловать под кат!
https://habr.com/ru/companies/beget/articles/1028178/
#Verilog #i2c_master_controller #i2c #ssd1306 #OLEDдисплей #FPGA #Фреймбуфер #I2C_burst_writer
-
Создаем I2C Master Controller на Verilog. Burst-транзакции и дисплей SSD1306
Продолжим совершенствование нашего I2C-контроллера и расширение спектра применимости. В этот раз сделаем возможность burst-транзакций и выведем картинку SSD1306. Для этого необходимо детально разобрать механизм функционирования OLED-дисплея SSD1306 и сделать аппаратный контроллер с burst-передачей по I2C, и в качестве примера сделать генерацию визуализацию 3D-куба и текста. Получился ОЧЕНЬ объемный материал с объяснением всех механик примененных для решения данной задачи. И вся логика - сугубо в железе, без процессора, без микрокода и чисто в ПЛИС. Всем кто интересуется кодингом под Verilog - добро пожаловать под кат!
https://habr.com/ru/companies/beget/articles/1028178/
#Verilog #i2c_master_controller #i2c #ssd1306 #OLEDдисплей #FPGA #Фреймбуфер #I2C_burst_writer
-
Создаем I2C Master Controller на Verilog. Burst-транзакции и дисплей SSD1306
Продолжим совершенствование нашего I2C-контроллера и расширение спектра применимости. В этот раз сделаем возможность burst-транзакций и выведем картинку SSD1306. Для этого необходимо детально разобрать механизм функционирования OLED-дисплея SSD1306 и сделать аппаратный контроллер с burst-передачей по I2C, и в качестве примера сделать генерацию визуализацию 3D-куба и текста. Получился ОЧЕНЬ объемный материал с объяснением всех механик примененных для решения данной задачи. И вся логика - сугубо в железе, без процессора, без микрокода и чисто в ПЛИС. Всем кто интересуется кодингом под Verilog - добро пожаловать под кат!
https://habr.com/ru/companies/beget/articles/1028178/
#Verilog #i2c_master_controller #i2c #ssd1306 #OLEDдисплей #FPGA #Фреймбуфер #I2C_burst_writer
-
MiniDexed Raspberry Pi IO Board V2 Build Guide
Here are the build notes for my MiniDexed Raspberry Pi IO Board V2 Design. The previous version can be found here:
- Version 1: MiniDexed Raspberry Pi IO Board.
- SSD1306 Version: MiniDexed Raspberry Pi IO Board – Part 2
- HD44780 Version: MiniDexed Raspberry Pi IO Board – Part 3
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to electronics and microcontrollers, see the Getting Started pages.
Bill of Materials
- MiniDexed SSD1306 IO Board V2 PCB (GitHub link below)
- 1x SSD1306 OLED 132×64 display, pin order SDA, SCL, VCC, GND (see notes below on voltage levels)
- 1x GY-PCM5102 module
- 1x H11L1 optoisolator
- 1x 1N4148 or 1N914 signal diode
- Resistors: 1x 220Ω, 1x 470Ω
- Capacitors: 3x 100nF, 5x 10nF
- EITHER: 2x 3.5mm stereo TRS sockets (see PCB and photos for footprints)
- OR:1x 3.5mm stereo TRS socket and 1 5-pin DIN socket (see PCB and photos for footprints)
- 2x tactile buttons: 6x6x12 mm (suggested, see notes)
- 1x switched rotary encoder (see PCB and photos for footprint)
- 1x 2×20 GPIO extended header socket
- Pin headers
- Optional: 1x 6 pin DIP socket
Some SSD1306 OLED displays require 3V supplies and some require 5V. This requires a 5V version, but then there might be issues interfacing it to a Raspberry Pi if the display doesn’t include level shifters for the I2C lines.
There is a detailed discussion of what to look out for here: MiniDexed Raspberry Pi IO Board – Part 2.
Build Steps
Taking a typical “low to high” soldering approach, this is the suggested order of assembly:
- Diode and resistors.
- DIP socket (if used) or optoisolator (if not).
- TRS socket(s).
- Disc capacitors.
- GY-PCM5102.
- 2×20 way extended GPIO header.
- OLED display (maybe – see notes).
- Tactile buttons.
- Rotary encoder.
- DIN socket (if used).
Here are some build photos and additional notes.
Normally I would recommend the use of a DIP socket to protect the chips used, but in this instance, if this board is to be used with a case it may be that a DIP socket raises the optoisolator too high.
For once, I opted to skip the use of the DIP socket and soldered the optoisolator directly to the PCB. But the photo below shows a build in progress using the socket.
The MIDI IN socket is a dual footprint TRS or DIN mount. I’m using TRS here, so that is soldered on at the same time as the other TRS socket. If using DIN, then that should probably be the last thing to be soldered.
Unlike the previous board, this one uses the audio output pins of the GY-PCM5102 module. The simplest way to mount the module is the fix the pins as shown below and then fit the module over the top.
Not all the pins need to be connected, but the photo shows the minimum number required and their position.
Warning: The GY-PCM5102 may require some solder jumpers setting prior to installation. Full details of what is required can be found on the Clumsy MIDI pages here (see the important note about the “DAC solder bridges”): https://github.com/gmcn42/clumsyMIDI.
I’m suggesting 12mm high 6x6mm tactile buttons (that is 12mm total height, so around 8mm button height) but the exact height will depend on the encoder used and where any case would sit height wise with the encoder, display and buttons accessible.
Although I’m not using the extended pins of an extended GPIO header, they are slightly taller than a non-extended header which is useful here. I’ve just cut off the excess pin lengths once fixed on. Being able to cut off the outer row of pins also makes soldering the inner row a bit easier.
I’ve used longer pins for the display which allows me to set the height to a suitable level to fit with the height of the encoder and buttons. I’ve soldered them to the PCB and will add the display and trim the pins down to size once I know how tall I want to make it.
Here is a side-on view. As just mentioned, I’ve soldered the long pins in place for the display but won’t solder the display itself in place until I know the exact height I’ll need. As can be seen below it is unlikely to need the full height of the longer pins.
The completed board looks something like this. There are optional pin headers for the two buttons either in addition to or instead of the buttons themselves, but I’m not using them here.
Testing
I recommend performing the general tests described here: PCBs.
PCB Errata
There are no known issues with this PCB at this time.
Enhancements:
- None
MiniDexed Configuration
The MiniDexed configuration is unchanged from the first version of the board. Details can be found here: MiniDexed Raspberry Pi IO Board – Part 2.
3D Printed Case
There is now a version of my MiniDexed 3D Printed Cases for this version of the PCB when fitted with the MIDI TRS socket and used with a RPi 3A+.
Closing Thoughts
I’m really pleased with this update. It already feels a lot slicker than the first version.
It remains to be seen if this is easier to design a case for, but at the very least, not having a large gap for a MIDI DIN socket I’m sure will be an improvement1
Kevin
-
MiniDexed Raspberry Pi IO Board V2 Build Guide
Here are the build notes for my MiniDexed Raspberry Pi IO Board V2 Design. The previous version can be found here:
- Version 1: MiniDexed Raspberry Pi IO Board.
- SSD1306 Version: MiniDexed Raspberry Pi IO Board – Part 2
- HD44780 Version: MiniDexed Raspberry Pi IO Board – Part 3
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to electronics and microcontrollers, see the Getting Started pages.
Bill of Materials
- MiniDexed SSD1306 IO Board V2 PCB (GitHub link below)
- 1x SSD1306 OLED 132×64 display, pin order SDA, SCL, VCC, GND (see notes below on voltage levels)
- 1x GY-PCM5102 module
- 1x H11L1 optoisolator
- 1x 1N4148 or 1N914 signal diode
- Resistors: 1x 220Ω, 1x 470Ω
- Capacitors: 3x 100nF, 5x 10nF
- EITHER: 2x 3.5mm stereo TRS sockets (see PCB and photos for footprints)
- OR:1x 3.5mm stereo TRS socket and 1 5-pin DIN socket (see PCB and photos for footprints)
- 2x tactile buttons: 6x6x12 mm (suggested, see notes)
- 1x switched rotary encoder (see PCB and photos for footprint)
- 1x 2×20 GPIO extended header socket
- Pin headers
- Optional: 1x 6 pin DIP socket
Some SSD1306 OLED displays require 3V supplies and some require 5V. This requires a 5V version, but then there might be issues interfacing it to a Raspberry Pi if the display doesn’t include level shifters for the I2C lines.
There is a detailed discussion of what to look out for here: MiniDexed Raspberry Pi IO Board – Part 2.
Build Steps
Taking a typical “low to high” soldering approach, this is the suggested order of assembly:
- Diode and resistors.
- DIP socket (if used) or optoisolator (if not).
- TRS socket(s).
- Disc capacitors.
- GY-PCM5102.
- 2×20 way extended GPIO header.
- OLED display (maybe – see notes).
- Tactile buttons.
- Rotary encoder.
- DIN socket (if used).
Here are some build photos and additional notes.
Normally I would recommend the use of a DIP socket to protect the chips used, but in this instance, if this board is to be used with a case it may be that a DIP socket raises the optoisolator too high.
For once, I opted to skip the use of the DIP socket and soldered the optoisolator directly to the PCB. But the photo below shows a build in progress using the socket.
The MIDI IN socket is a dual footprint TRS or DIN mount. I’m using TRS here, so that is soldered on at the same time as the other TRS socket. If using DIN, then that should probably be the last thing to be soldered.
Unlike the previous board, this one uses the audio output pins of the GY-PCM5102 module. The simplest way to mount the module is the fix the pins as shown below and then fit the module over the top.
Not all the pins need to be connected, but the photo shows the minimum number required and their position.
Warning: The GY-PCM5102 may require some solder jumpers setting prior to installation. Full details of what is required can be found on the Clumsy MIDI pages here (see the important note about the “DAC solder bridges”): https://github.com/gmcn42/clumsyMIDI.
I’m suggesting 12mm high 6x6mm tactile buttons (that is 12mm total height, so around 8mm button height) but the exact height will depend on the encoder used and where any case would sit height wise with the encoder, display and buttons accessible.
Although I’m not using the extended pins of an extended GPIO header, they are slightly taller than a non-extended header which is useful here. I’ve just cut off the excess pin lengths once fixed on. Being able to cut off the outer row of pins also makes soldering the inner row a bit easier.
I’ve used longer pins for the display which allows me to set the height to a suitable level to fit with the height of the encoder and buttons. I’ve soldered them to the PCB and will add the display and trim the pins down to size once I know how tall I want to make it.
Here is a side-on view. As just mentioned, I’ve soldered the long pins in place for the display but won’t solder the display itself in place until I know the exact height I’ll need. As can be seen below it is unlikely to need the full height of the longer pins.
The completed board looks something like this. There are optional pin headers for the two buttons either in addition to or instead of the buttons themselves, but I’m not using them here.
Testing
I recommend performing the general tests described here: PCBs.
PCB Errata
There are no known issues with this PCB at this time.
Enhancements:
- None
MiniDexed Configuration
The MiniDexed configuration is unchanged from the first version of the board. Details can be found here: MiniDexed Raspberry Pi IO Board – Part 2.
3D Printed Case
There is now a version of my MiniDexed 3D Printed Cases for this version of the PCB when fitted with the MIDI TRS socket and used with a RPi 3A+.
Closing Thoughts
I’m really pleased with this update. It already feels a lot slicker than the first version.
It remains to be seen if this is easier to design a case for, but at the very least, not having a large gap for a MIDI DIN socket I’m sure will be an improvement1
Kevin
-
MiniDexed Raspberry Pi IO Board V2 Build Guide
Here are the build notes for my MiniDexed Raspberry Pi IO Board V2 Design. The previous version can be found here:
- Version 1: MiniDexed Raspberry Pi IO Board.
- SSD1306 Version: MiniDexed Raspberry Pi IO Board – Part 2
- HD44780 Version: MiniDexed Raspberry Pi IO Board – Part 3
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to electronics and microcontrollers, see the Getting Started pages.
Bill of Materials
- MiniDexed SSD1306 IO Board V2 PCB (GitHub link below)
- 1x SSD1306 OLED 132×64 display, pin order SDA, SCL, VCC, GND (see notes below on voltage levels)
- 1x GY-PCM5102 module
- 1x H11L1 optoisolator
- 1x 1N4148 or 1N914 signal diode
- Resistors: 1x 220Ω, 1x 470Ω
- Capacitors: 3x 100nF, 5x 10nF
- EITHER: 2x 3.5mm stereo TRS sockets (see PCB and photos for footprints)
- OR:1x 3.5mm stereo TRS socket and 1 5-pin DIN socket (see PCB and photos for footprints)
- 2x tactile buttons: 6x6x12 mm (suggested, see notes)
- 1x switched rotary encoder (see PCB and photos for footprint)
- 1x 2×20 GPIO extended header socket
- Pin headers
- Optional: 1x 6 pin DIP socket
Some SSD1306 OLED displays require 3V supplies and some require 5V. This requires a 5V version, but then there might be issues interfacing it to a Raspberry Pi if the display doesn’t include level shifters for the I2C lines.
There is a detailed discussion of what to look out for here: MiniDexed Raspberry Pi IO Board – Part 2.
Build Steps
Taking a typical “low to high” soldering approach, this is the suggested order of assembly:
- Diode and resistors.
- DIP socket (if used) or optoisolator (if not).
- TRS socket(s).
- Disc capacitors.
- GY-PCM5102.
- 2×20 way extended GPIO header.
- OLED display (maybe – see notes).
- Tactile buttons.
- Rotary encoder.
- DIN socket (if used).
Here are some build photos and additional notes.
Normally I would recommend the use of a DIP socket to protect the chips used, but in this instance, if this board is to be used with a case it may be that a DIP socket raises the optoisolator too high.
For once, I opted to skip the use of the DIP socket and soldered the optoisolator directly to the PCB. But the photo below shows a build in progress using the socket.
The MIDI IN socket is a dual footprint TRS or DIN mount. I’m using TRS here, so that is soldered on at the same time as the other TRS socket. If using DIN, then that should probably be the last thing to be soldered.
Unlike the previous board, this one uses the audio output pins of the GY-PCM5102 module. The simplest way to mount the module is the fix the pins as shown below and then fit the module over the top.
Not all the pins need to be connected, but the photo shows the minimum number required and their position.
Warning: The GY-PCM5102 may require some solder jumpers setting prior to installation. Full details of what is required can be found on the Clumsy MIDI pages here (see the important note about the “DAC solder bridges”): https://github.com/gmcn42/clumsyMIDI.
I’m suggesting 12mm high 6x6mm tactile buttons (that is 12mm total height, so around 8mm button height) but the exact height will depend on the encoder used and where any case would sit height wise with the encoder, display and buttons accessible.
Although I’m not using the extended pins of an extended GPIO header, they are slightly taller than a non-extended header which is useful here. I’ve just cut off the excess pin lengths once fixed on. Being able to cut off the outer row of pins also makes soldering the inner row a bit easier.
I’ve used longer pins for the display which allows me to set the height to a suitable level to fit with the height of the encoder and buttons. I’ve soldered them to the PCB and will add the display and trim the pins down to size once I know how tall I want to make it.
Here is a side-on view. As just mentioned, I’ve soldered the long pins in place for the display but won’t solder the display itself in place until I know the exact height I’ll need. As can be seen below it is unlikely to need the full height of the longer pins.
The completed board looks something like this. There are optional pin headers for the two buttons either in addition to or instead of the buttons themselves, but I’m not using them here.
Testing
I recommend performing the general tests described here: PCBs.
PCB Errata
There are no known issues with this PCB at this time.
Enhancements:
- None
MiniDexed Configuration
The MiniDexed configuration is unchanged from the first version of the board. Details can be found here: MiniDexed Raspberry Pi IO Board – Part 2.
3D Printed Case
There is now a version of my MiniDexed 3D Printed Cases for this version of the PCB when fitted with the MIDI TRS socket and used with a RPi 3A+.
Closing Thoughts
I’m really pleased with this update. It already feels a lot slicker than the first version.
It remains to be seen if this is easier to design a case for, but at the very least, not having a large gap for a MIDI DIN socket I’m sure will be an improvement1
Kevin
-
MiniDexed Raspberry Pi IO Board V2 Design
My two MiniDexed PCBs were some of the earliest ones I made and so I’ve wondered about revisiting them for a while now.
This is a respin of the SSD1306 version of the IO board that is, hopefully, slightly nicer to build a case around!
Here is the link to the original PCB: MiniDexed Raspberry Pi IO Board. There is the original version for the Raspberry Pi V1: MiniDexed Raspberry Pi V1 IO Board and scattered around the blog are boards for a Pi Zero, a RPi 400, a TX816 style device, a dual Pi version, and a version for a Pi5 that supports quad stereo audio output, among other things.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers and single board computers, see the Getting Started pages.
Basic Requirements
As a bare minimum I’m after a revision of the SSD1306 version of the board that is slightly more case-builder friendly than the original.
I’d also like to add or change the following:
- MIDI TRS.
- Better audio output socket.
- Fix the minor errata from the original board.
It still has to fit within a normal “HAT” type footprint for a Raspberry Pi as I’d like to be using it with a Pi 3A+ again.
I’d also like to arrange the connectors to be on the same side as much as possible.
The Circuit
This is the same schematic as before with the addition of a TRS audio output direct from the PCM5102 module. I’ve also fixed a few of the non-functional errata such as some erroneous component values.
The GPIO map remains unchanged, although “SELECT” is now labelled “BACK”:
PCB Design
I’ve updated the MIDI socket footprint to my dual DIN-TRS footprint. I’m probably going to use the TRS version myself, but it is nice to keep DIN as an option. I’ve had to move the buttons to allow for a second TRS socket for the audio output and have consequently moved the GY-PCM5102 module back away from the edge of the board.
With this arrangement all of the IO is now on the same side of the board apart from the RPi’s own USB (and ethernet if using a B+ version).
Getting the height of the components correct will be a bit fiddly as the display and buttons will be determined by the height of the encoder’s body.
As I keep forgetting which GPIO is used for what, I’ve added details on the underside of the PCB.
As the GY-PCM5102 has an analog GND to support the analog OUT, I thought it might be prudent to keep that part of the PCB GND isolated from the main digital areas. But I’ve also seen that two GND planes separated by a thin non-conducting strip also has another name – “antenna”…
This is where my experience meets peak ignorance, so I’ll have to see how it goes and if I end up reconnecting everything, then I’ll patch something through somehow
Closing Thoughts
Ultimately I won’t know if this is any easier to use than the V1 board until I start designing a new case. But the addition of MIDI TRS at least removes the need for accommodating a large DIN socket on the board and having all the connectors on the same side will be better I think.
I have wondered about a Pi Zero version that could have DIN sockets on the underside of the PCB, mirroring what I did for the HD44780 version of my original board.
I might still give that a try as that would make for quite a nice compact unit too.
Kevin
-
MiniDexed Raspberry Pi IO Board V2 Design
My two MiniDexed PCBs were some of the earliest ones I made and so I’ve wondered about revisiting them for a while now.
This is a respin of the SSD1306 version of the IO board that is, hopefully, slightly nicer to build a case around!
Here is the link to the original PCB: MiniDexed Raspberry Pi IO Board. There is the original version for the Raspberry Pi V1: MiniDexed Raspberry Pi V1 IO Board and scattered around the blog are boards for a Pi Zero, a RPi 400, a TX816 style device, a dual Pi version, and a version for a Pi5 that supports quad stereo audio output, among other things.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers and single board computers, see the Getting Started pages.
Basic Requirements
As a bare minimum I’m after a revision of the SSD1306 version of the board that is slightly more case-builder friendly than the original.
I’d also like to add or change the following:
- MIDI TRS.
- Better audio output socket.
- Fix the minor errata from the original board.
It still has to fit within a normal “HAT” type footprint for a Raspberry Pi as I’d like to be using it with a Pi 3A+ again.
I’d also like to arrange the connectors to be on the same side as much as possible.
The Circuit
This is the same schematic as before with the addition of a TRS audio output direct from the PCM5102 module. I’ve also fixed a few of the non-functional errata such as some erroneous component values.
The GPIO map remains unchanged, although “SELECT” is now labelled “BACK”:
PCB Design
I’ve updated the MIDI socket footprint to my dual DIN-TRS footprint. I’m probably going to use the TRS version myself, but it is nice to keep DIN as an option. I’ve had to move the buttons to allow for a second TRS socket for the audio output and have consequently moved the GY-PCM5102 module back away from the edge of the board.
With this arrangement all of the IO is now on the same side of the board apart from the RPi’s own USB (and ethernet if using a B+ version).
Getting the height of the components correct will be a bit fiddly as the display and buttons will be determined by the height of the encoder’s body.
As I keep forgetting which GPIO is used for what, I’ve added details on the underside of the PCB.
As the GY-PCM5102 has an analog GND to support the analog OUT, I thought it might be prudent to keep that part of the PCB GND isolated from the main digital areas. But I’ve also seen that two GND planes separated by a thin non-conducting strip also has another name – “antenna”…
This is where my experience meets peak ignorance, so I’ll have to see how it goes and if I end up reconnecting everything, then I’ll patch something through somehow
Closing Thoughts
Ultimately I won’t know if this is any easier to use than the V1 board until I start designing a new case. But the addition of MIDI TRS at least removes the need for accommodating a large DIN socket on the board and having all the connectors on the same side will be better I think.
I have wondered about a Pi Zero version that could have DIN sockets on the underside of the PCB, mirroring what I did for the HD44780 version of my original board.
I might still give that a try as that would make for quite a nice compact unit too.
Kevin
-
MiniDexed Raspberry Pi IO Board V2 Design
My two MiniDexed PCBs were some of the earliest ones I made and so I’ve wondered about revisiting them for a while now.
This is a respin of the SSD1306 version of the IO board that is, hopefully, slightly nicer to build a case around!
Here is the link to the original PCB: MiniDexed Raspberry Pi IO Board. There is the original version for the Raspberry Pi V1: MiniDexed Raspberry Pi V1 IO Board and scattered around the blog are boards for a Pi Zero, a RPi 400, a TX816 style device, a dual Pi version, and a version for a Pi5 that supports quad stereo audio output, among other things.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers and single board computers, see the Getting Started pages.
Basic Requirements
As a bare minimum I’m after a revision of the SSD1306 version of the board that is slightly more case-builder friendly than the original.
I’d also like to add or change the following:
- MIDI TRS.
- Better audio output socket.
- Fix the minor errata from the original board.
It still has to fit within a normal “HAT” type footprint for a Raspberry Pi as I’d like to be using it with a Pi 3A+ again.
I’d also like to arrange the connectors to be on the same side as much as possible.
The Circuit
This is the same schematic as before with the addition of a TRS audio output direct from the PCM5102 module. I’ve also fixed a few of the non-functional errata such as some erroneous component values.
The GPIO map remains unchanged, although “SELECT” is now labelled “BACK”:
PCB Design
I’ve updated the MIDI socket footprint to my dual DIN-TRS footprint. I’m probably going to use the TRS version myself, but it is nice to keep DIN as an option. I’ve had to move the buttons to allow for a second TRS socket for the audio output and have consequently moved the GY-PCM5102 module back away from the edge of the board.
With this arrangement all of the IO is now on the same side of the board apart from the RPi’s own USB (and ethernet if using a B+ version).
Getting the height of the components correct will be a bit fiddly as the display and buttons will be determined by the height of the encoder’s body.
As I keep forgetting which GPIO is used for what, I’ve added details on the underside of the PCB.
As the GY-PCM5102 has an analog GND to support the analog OUT, I thought it might be prudent to keep that part of the PCB GND isolated from the main digital areas. But I’ve also seen that two GND planes separated by a thin non-conducting strip also has another name – “antenna”…
This is where my experience meets peak ignorance, so I’ll have to see how it goes and if I end up reconnecting everything, then I’ll patch something through somehow
Closing Thoughts
Ultimately I won’t know if this is any easier to use than the V1 board until I start designing a new case. But the addition of MIDI TRS at least removes the need for accommodating a large DIN socket on the board and having all the connectors on the same side will be better I think.
I have wondered about a Pi Zero version that could have DIN sockets on the underside of the PCB, mirroring what I did for the HD44780 version of my original board.
I might still give that a try as that would make for quite a nice compact unit too.
Kevin
-
So, I finished making my fluid sim gift on ESP32!
https://corteximplant.com/@zeyus/114095311805576694
Please excuse my nails, I was literally working with bitumen and managed to clean it off my hands, but it started to hurt scrubbing
Sorce code (including 3d printed case design): https://git.cyberwa.re/zeyus/FLIP-ESP32-I2C-OLED
#esp32 #flipfluids #fluidsim #fluidsimulation #3dprint #oled #ssd1306 #imu #mpu #electronics #embeddedsystems #embedded #arduino
-
So, I finished making my fluid sim gift on ESP32!
https://corteximplant.com/@zeyus/114095311805576694
Please excuse my nails, I was literally working with bitumen and managed to clean it off my hands, but it started to hurt scrubbing
Sorce code (including 3d printed case design): https://git.cyberwa.re/zeyus/FLIP-ESP32-I2C-OLED
#esp32 #flipfluids #fluidsim #fluidsimulation #3dprint #oled #ssd1306 #imu #mpu #electronics #embeddedsystems #embedded #arduino
-
So, I finished making my fluid sim gift on ESP32!
https://corteximplant.com/@zeyus/114095311805576694
Please excuse my nails, I was literally working with bitumen and managed to clean it off my hands, but it started to hurt scrubbing
Sorce code (including 3d printed case design): https://git.cyberwa.re/zeyus/FLIP-ESP32-I2C-OLED
#esp32 #flipfluids #fluidsim #fluidsimulation #3dprint #oled #ssd1306 #imu #mpu #electronics #embeddedsystems #embedded #arduino
-
So, I finished making my fluid sim gift on ESP32!
https://corteximplant.com/@zeyus/114095311805576694
Please excuse my nails, I was literally working with bitumen and managed to clean it off my hands, but it started to hurt scrubbing
Sorce code (including 3d printed case design): https://git.cyberwa.re/zeyus/FLIP-ESP32-I2C-OLED
#esp32 #flipfluids #fluidsim #fluidsimulation #3dprint #oled #ssd1306 #imu #mpu #electronics #embeddedsystems #embedded #arduino
-
So, I finished making my fluid sim gift on ESP32!
https://corteximplant.com/@zeyus/114095311805576694
Please excuse my nails, I was literally working with bitumen and managed to clean it off my hands, but it started to hurt scrubbing
Sorce code (including 3d printed case design): https://git.cyberwa.re/zeyus/FLIP-ESP32-I2C-OLED
#esp32 #flipfluids #fluidsim #fluidsimulation #3dprint #oled #ssd1306 #imu #mpu #electronics #embeddedsystems #embedded #arduino
-
-
-
-
-
-
-
-
-
-
-
Библиотека для OLED1306 с русским языком на RPi
Здравствуйте люди! Я сделал библиотеку под названием "SillyOled" для работы с OLED-дисплеями SSD1306 через I2C и SPI. Библиотека может показывать текст, фигуры, бит-мапы, а также управлять дисплеем. Вот главные особенности:
https://habr.com/ru/articles/933328/
#oledдисплей #ssd1306 #raspberry_pi_pico #thonny #python #библиотека
-
Библиотека для OLED1306 с русским языком на RPi
Здравствуйте люди! Я сделал библиотеку под названием "SillyOled" для работы с OLED-дисплеями SSD1306 через I2C и SPI. Библиотека может показывать текст, фигуры, бит-мапы, а также управлять дисплеем. Вот главные особенности:
https://habr.com/ru/articles/933328/
#oledдисплей #ssd1306 #raspberry_pi_pico #thonny #python #библиотека
-
Библиотека для OLED1306 с русским языком на RPi
Здравствуйте люди! Я сделал библиотеку под названием "SillyOled" для работы с OLED-дисплеями SSD1306 через I2C и SPI. Библиотека может показывать текст, фигуры, бит-мапы, а также управлять дисплеем. Вот главные особенности:
https://habr.com/ru/articles/933328/
#oledдисплей #ssd1306 #raspberry_pi_pico #thonny #python #библиотека
-
Библиотека для OLED1306 с русским языком на RPi
Здравствуйте люди! Я сделал библиотеку под названием "SillyOled" для работы с OLED-дисплеями SSD1306 через I2C и SPI. Библиотека может показывать текст, фигуры, бит-мапы, а также управлять дисплеем. Вот главные особенности:
https://habr.com/ru/articles/933328/
#oledдисплей #ssd1306 #raspberry_pi_pico #thonny #python #библиотека
-
Картинки не мої і взяті тут:
https://www.moonbench.xyz/projects/1-bit-oled-art-gallery/
Потрібно ще попрацювати з сувом пікселів, але мені результат уже подобається :blobcatcoffee:
-
Картинки не мої і взяті тут:
https://www.moonbench.xyz/projects/1-bit-oled-art-gallery/
Потрібно ще попрацювати з сувом пікселів, але мені результат уже подобається :blobcatcoffee:
-
Картинки не мої і взяті тут:
https://www.moonbench.xyz/projects/1-bit-oled-art-gallery/
Потрібно ще попрацювати з сувом пікселів, але мені результат уже подобається :blobcatcoffee:
-
Картинки не мої і взяті тут:
https://www.moonbench.xyz/projects/1-bit-oled-art-gallery/
Потрібно ще попрацювати з сувом пікселів, але мені результат уже подобається :blobcatcoffee:
-
Картинки не мої і взяті тут:
https://www.moonbench.xyz/projects/1-bit-oled-art-gallery/
Потрібно ще попрацювати з сувом пікселів, але мені результат уже подобається :blobcatcoffee:
-
Small Microcontroller Displays
I found myself wanting several small displays connected to a microcontroller, so was doing a bit of a trade-off between various options, and was starting to lose track, so this post collects some of those thoughts together.
It is not meant to be a comprehensive discussion of choosing small displays for projects, but more of a reflection on the displays I already have kicking around in my parts boxes!
Most displays tend to be categorised by the driver chip they use. And then by the bus type used for their connection. So that is how I’ve grouped them here.
A really good reference for many of the displays shown here is: https://www.lcdwiki.com/Main_Page
I2C SSD1306 OLED
This is usually my “go to” set of small displays. They are generally well supported and pretty easy to use.
I generally have two variants to choose from:
On the left is the 0.91″ 128×32 OLED SSD1306 and on the right is the 0.96″ 128×54 OLED SSD1306. Common properties of both displays:
- Monochrome – white or blue.
- I2C interface.
- Usually 5V powered, but some include level shifters to allow 3V3 logic.
- Usually includes I2C pull-ups. Might be to VCC level so be wary if using a 3V3 MCU but powering from 5V – always check the voltage level prior to connecting.
- 128×32 usually a fixed I2C address (0x3C). 128×64 usually allows selection between 0x3C and 0x3D.
- There are variants with VCC and GND swapped, and other variants with SDA and SCL swapped.
Software support:
- The “go to” library for Arduino is the Adafruit_SSD1306 library, which assumes the use of the Adafruit_GFX library too.
- But there are lots of alternative libraries too, for example u8glib.
- Well supported in Circuitpython or Micropython.
- More here: Arduino Nano Every I2C and SPI Displays.
Typical Connections:
- VCC/GND (see note below re VCC vs logic levels).
- SCL/SDA – I2C pins on the MCU.
Known “gotchas”:
- Requires a chunk of memory allocated on start-up on Arduino, which can fail if there isn’t enough dynamic memory left and make a sketch hang.
- Can’t be written to from an interrupt routine (e.g. a timer).
- Low-level I2C Wire library on Arduino is blocking.
- Can sometimes be a little slow compared to alternatives.
- Limited I2C address options, so multiple display use is limited (and also increase the memory issues).
- As already mentioned, any I2C pull-ups may be pulled up to the VCC level or might be level shifted, so it is always worth checking if planning to use with a 3V3 microcontroller.
Summary:
- Cheap, pretty easy to use, and fairly universal if you want a single, small, monochrome display for simple outputs.
Other I2C Variants
There are some variants of the SSD1306 that sometimes pops up too for slightly larger displays:
- SSD1315 – apparently can simply be treated as a SSD1306 and mostly it works ok.
- SH1106 – very similar niche to SSD1306 but requires it owns driver support.
SPI ST7735/89/96 TFT
Whereas the SSD1306 I2C is pretty ubiquitous for monochrome displays, I’ve tended to find that SPI ST77xx displays fill a similar niche for small, full colour, non-touch, TFT displays. And there are loads of variations on the theme when it comes to these displays.
The 7735 supports lower resolution, smaller displays, typically up to 170×320, with the 7789 for those of 240×240 or 240×320 and similar. There is also a ST7796 which I believe uses the same driver libraries for a higher 320×480 display.
Two 7735 Displays:
These two ST7735 displays that I have are labelled:
- TFT 0.96″ 80×160 SPI ST7735
- TFT 1.8″ 128×160 SPI ST7735
These ST7789 display I have is labelled:
- TFT 1.3″ 240×240 SPI ST7789
I also have a display that was bought as a ST7789 labelled “TFT 2.8″ 240×320 SPI” which comes with a touch screen, but I can’t get this to work.
Common properties:
- SPI interface: data (SDA/MOSI/COPI), clock (SCK/SCLK), chip select (CS), data/command (SR/DC), possibly a reset.
- Typically 65536 colours, usually encoded as 5-6-5 bit RGB patterns.
- Have to check for 3V3 or 5V operation depending on the datasheet of the driver chip and design of the module.
Software support:
- Adafruit SST77x Library supports ST7735 and ST7789, once again also requiring Adafruit_GFX.
- Arduino_GFX Library supports a whole range of displays and microcontrollers, including the ST77xx devices.
- TFT_eSPI for Raspberry Pi Pico, ESP32 and others.
- MCUFRIEND_kbv for Arduino and “MCUFRIEND” type displays. Wide range of TFT display drivers supported.
- Tiny TFT Library for ATTiny85 and Compact TFT Library for a range of MCUs by David Johnson-Davies (technoblogy)
- https://github.com/bitbank2/bb_spi_lcd. Standalone library for ST7735, ST7789 and others, with a set of pre-configured “named” displays.
- More here: Arduino and a Cheap TFT Display.
Typical Connections:
- VCC/GND
- CLK/SDA – SPI Clock and Data (Data OUT from MCU – i.e. MOSI/COPI)
- RES – Reset
- DC, RS – Data/Command Register Select
- CS – Chip Select
Known Gotchas:
- Working out if RS means reset of the data/command pin; and not mixing up SCL/SDA with I2C!
- Some might include a backlight control pin too for dimming or turning it off. With this not connected the display was a maximum brightness.
- I’ve also seen talk that many of these modules themselves run at 3V3, so whilst they may include a regulator for 5V to 3V3 for power, they don’t always include level shifting for the signal pins. It seems unclear (to me at least at the moment) if it is ok to use these with a 5V microcontroller (although I have done…).
- Some of these displays are “inverted” colour wise. The use 16-bit 5-6-5 format colours, but some are RGB, some are BGR and there might be other variants too.
- Sometimes the initialiser for the library requires a SPI_MODE setting. My ST7789 240×240 required the Adafruit ST7789 initialisation as follows:
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>
#include <SPI.h>
#define TFT_CS 10 // (not used)
#define TFT_RST 9
#define TFT_DC 8
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
void setup() {
tft.init(240, 240, SPI_MODE2);
}Note, unlike the monochrome displays, these have their own pixel framebuffer so memory use is much more efficient, even when used as a full colour display.
Summary:
- Cheap, pretty easy to use once the voltage levels and the pin labelling are worked out. Well supported by a number of libraries; but does require more pins for 4-wire SPI. Might need some messing around to get the right colour definitions. Otherwise a good choice if you just want a cheap, colour display with no touch.
OLED SH1122 SPI
There are actually both I2C and SPI versions of SH1122 displays, but I’m considering the SPI version here. The display I have is a 256×64, monochrome OLED display.
Software Support:
- U8G2 library:https://github.com/olikraus/u8g2
- Use the SH1122 constructors: https://github.com/olikraus/u8g2/wiki/u8g2setupcpp#sh1122-256×64
Example:
U8G2_SH1122_256X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
Typical Connections:
- VCC/GND – mine states it can support either 3V or 5V power
- CLK/SDA – SPI Clock and Data (Data OUT from MCU – i.e. MOSI/COPI)
- RES – Reset
- DC, RS – Data/Command Register Select
- CS – Chip Select
The _F_ constructor requires a full frame-buffer so is unlikely to work on resource constrained devices (e.g. the Arduino Uno/Nano). The _1_ constructor provides a pageable interface which allows for the updating of the display in pages, which takes longer but allows it to be used with more devices.
There are also software SPI versions that allow the use of any GPIO pins.
Summary:
- A pretty neat board if these physical dimensions match what is required.
- There are a whole pile of example sketches in the U8G2/page_buffer directory.
ILI9341/9488 TFT
Cheap larger displays are often driven by one of the ILI9341 or ILI9488 chips. The former supports 240×320 in full (16-bit) colour whereas the 9488 tends to support larger displays of up to 320×480 in full (24-bit) colour. Both support either a parallel (at least 8, 9, 16-bit) or serial (3 or 4 wire SPI) bus interface.
I don’t have a lot of detailed information for this post yet, but instead will refer to:
The ILI9341 is well supported by the Adafruit graphic libraries, but the ILI9488 is likely to require something else, as described in the above post.
These displays are often used with touch support and will often expect to run at 3V3 logic levels.
LCD 1602 HD44780
This is another very common monochrome, but text only, display. They have a 4 or 8-bit parallel interface, but it is also quite common to use the with an I2C “backpack” based on the PCF8574 I2C IO expander. Boards can be cheaply bought with or without a backpack, and the backpacks are available separately too for retro fitting to displays without them.
They are often called “1602” displays as they are two rows of 16 characters. By using custom blocks it is possible to have some simple graphics. There are LCD2004 modules too with four rows of 20 characters.
They often come with a choice of backlight colours. White or red are particularly striking! There are some variants that come with an additional I2C controller chip built in to control the backlight and some even come with a full RGB backlight capability.
Typical Connections:
- VCC/GND
- Data – either 4 or 8 bit modes support
- E, RW, RS – enable, read/write, register select.
- Backlight V+/GND – level is often fixed using a resistor.
There are core Arduino libraries to support the most basic versions of these displays:
- LiquidCrystal
- LiquidCrystal_I2C
Typical Gotchas:
- The I2C backpacks often include pull-ups to VCC, yet many of these displays require 5V even if used with a 3V3 microcontroller. One option is to remove the pull-ups and add external pull-ups to 3V3.
- If there are only blocks on the display then the communications isn’t working properly – check SDA/SCL or the control lines.
- If there is nothing on the display or the text is obscured by blocks behind it, then the contrast is either too low or too high. I2C backpacks have a potentiometer to adjust the contrast.
- More complex versions require an additional I2C setup phase, e.g. to turn on the backlight, which isn’t supported by the standard libraries.
Summary:
- Very useful if a large, high/adjustable contrast, text-only display is required.
Others
So I don’t forget when considering the above, I also have:
- GC9A01 based 240×240 1.28″ circular SPI display like this one: https://www.waveshare.com/wiki/1.28inch_LCD_Module. Note: cheaper versions of this won’t include level shifting and will expect to run at 3V3.
- ESP32 boards with built-in displays: ESP32-C3 0.42 OLED
- ESP32 “Cheap Yellow Display” boards, details here: https://github.com/witnessmenow/ESP32-Cheap-Yellow-Display
- Range of small displays from Pimoroni, Waveshare and others for use with the Raspberry Pi Pico.
- Waveshare small HDMI displays for use with a Raspberry Pi.
I’ll add to the list for my own reference as I remember other odds and ends.
Kevin
#hd44780 #ili9341 #ili9488 #include #lcd1602 #oled #ssd1306 #st7735 #st7789 #tft