Merge pull request #111 from g0wfv/develop
Add support for HD44780 when connected via PCF8574 I2C
This commit is contained in:
commit
ef0ebb4d49
6 changed files with 115 additions and 17 deletions
34
HD44780.cpp
34
HD44780.cpp
|
@ -206,6 +206,10 @@ bool CHD44780::open()
|
||||||
adafruitLCDSetup();
|
adafruitLCDSetup();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef PCF8574_DISPLAY
|
||||||
|
pcf8574LCDSetup();
|
||||||
|
#endif
|
||||||
|
|
||||||
m_fd = ::lcdInit(m_rows, m_cols, 4, m_rb, m_strb, m_d0, m_d1, m_d2, m_d3, 0, 0, 0, 0);
|
m_fd = ::lcdInit(m_rows, m_cols, 4, m_rb, m_strb, m_d0, m_d1, m_d2, m_d3, 0, 0, 0, 0);
|
||||||
if (m_fd == -1) {
|
if (m_fd == -1) {
|
||||||
LogError("Unable to open the HD44780");
|
LogError("Unable to open the HD44780");
|
||||||
|
@ -245,6 +249,13 @@ void CHD44780::adafruitLCDSetup()
|
||||||
// Control signals
|
// Control signals
|
||||||
::pinMode(AF_RW, OUTPUT);
|
::pinMode(AF_RW, OUTPUT);
|
||||||
::digitalWrite(AF_RW, LOW);
|
::digitalWrite(AF_RW, LOW);
|
||||||
|
|
||||||
|
m_rb = AF_RS;
|
||||||
|
m_strb = AF_E;
|
||||||
|
m_d0 = AF_D0;
|
||||||
|
m_d1 = AF_D1;
|
||||||
|
m_d2 = AF_D2;
|
||||||
|
m_d3 = AF_D3;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHD44780::adafruitLCDColour(ADAFRUIT_COLOUR colour)
|
void CHD44780::adafruitLCDColour(ADAFRUIT_COLOUR colour)
|
||||||
|
@ -296,6 +307,29 @@ void CHD44780::adafruitLCDColour(ADAFRUIT_COLOUR colour)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef PCF8574_DISPLAY
|
||||||
|
void CHD44780::pcf8574LCDSetup()
|
||||||
|
{
|
||||||
|
// Initalize PFC8574
|
||||||
|
::pcf8574Setup(AF_BASE, PCF8574);
|
||||||
|
|
||||||
|
// Turn on backlight
|
||||||
|
::pinMode (AF_BL, OUTPUT);
|
||||||
|
::digitalWrite (AF_BL, 1);
|
||||||
|
|
||||||
|
// Set LCD to write mode.
|
||||||
|
::pinMode (AF_RW, OUTPUT);
|
||||||
|
::digitalWrite (AF_RW, 0);
|
||||||
|
|
||||||
|
m_rb = AF_RS;
|
||||||
|
m_strb = AF_E;
|
||||||
|
m_d0 = AF_D0;
|
||||||
|
m_d1 = AF_D1;
|
||||||
|
m_d2 = AF_D2;
|
||||||
|
m_d3 = AF_D3;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void CHD44780::setIdleInt()
|
void CHD44780::setIdleInt()
|
||||||
{
|
{
|
||||||
m_dmrScrollTimer1.stop(); // Stop the scroll timer on slot 1
|
m_dmrScrollTimer1.stop(); // Stop the scroll timer on slot 1
|
||||||
|
|
40
HD44780.h
40
HD44780.h
|
@ -26,6 +26,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <mcp23017.h>
|
#include <mcp23017.h>
|
||||||
|
#include <pcf8574.h>
|
||||||
|
|
||||||
enum ADAFRUIT_COLOUR {
|
enum ADAFRUIT_COLOUR {
|
||||||
AC_OFF,
|
AC_OFF,
|
||||||
|
@ -41,15 +42,50 @@ enum ADAFRUIT_COLOUR {
|
||||||
// Defines for the Adafruit Pi LCD interface board
|
// Defines for the Adafruit Pi LCD interface board
|
||||||
#ifdef ADAFRUIT_DISPLAY
|
#ifdef ADAFRUIT_DISPLAY
|
||||||
#define AF_BASE 100
|
#define AF_BASE 100
|
||||||
|
|
||||||
|
/* Not yet used defines (for possible future use)
|
||||||
|
*
|
||||||
|
* #define AF_SELECT (AF_BASE + 0)
|
||||||
|
* #define AF_RIGHT (AF_BASE + 1)
|
||||||
|
* #define AF_DOWN (AF_BASE + 2)
|
||||||
|
* #define AF_UP (AF_BASE + 3)
|
||||||
|
* #define AF_LEFT (AF_BASE + 4)
|
||||||
|
*/
|
||||||
|
|
||||||
#define AF_RED (AF_BASE + 6)
|
#define AF_RED (AF_BASE + 6)
|
||||||
#define AF_GREEN (AF_BASE + 7)
|
#define AF_GREEN (AF_BASE + 7)
|
||||||
#define AF_BLUE (AF_BASE + 8)
|
#define AF_BLUE (AF_BASE + 8)
|
||||||
|
|
||||||
|
#define AF_D3 (AF_BASE + 9)
|
||||||
|
#define AF_D2 (AF_BASE + 10)
|
||||||
|
#define AF_D1 (AF_BASE + 11)
|
||||||
|
#define AF_D0 (AF_BASE + 12)
|
||||||
|
#define AF_E (AF_BASE + 13)
|
||||||
#define AF_RW (AF_BASE + 14)
|
#define AF_RW (AF_BASE + 14)
|
||||||
|
#define AF_RS (AF_BASE + 15)
|
||||||
|
|
||||||
#define AF_ON LOW
|
#define AF_ON LOW
|
||||||
#define AF_OFF HIGH
|
#define AF_OFF HIGH
|
||||||
|
|
||||||
#define MCP23017 0x20
|
#define MCP23017 0x20
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Define for HD44780 connected via a PCF8574 GPIO extender
|
||||||
|
#ifdef PCF8574_DISPLAY
|
||||||
|
#define AF_BASE 100
|
||||||
|
|
||||||
|
#define AF_RS (AF_BASE + 0)
|
||||||
|
#define AF_RW (AF_BASE + 1)
|
||||||
|
#define AF_E (AF_BASE + 2)
|
||||||
|
#define AF_BL (AF_BASE + 3)
|
||||||
|
#define AF_D0 (AF_BASE + 4)
|
||||||
|
#define AF_D1 (AF_BASE + 5)
|
||||||
|
#define AF_D2 (AF_BASE + 6)
|
||||||
|
#define AF_D3 (AF_BASE + 7)
|
||||||
|
|
||||||
|
#define PCF8574 0x27
|
||||||
|
#endif
|
||||||
|
|
||||||
class CHD44780 : public CDisplay
|
class CHD44780 : public CDisplay
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -105,6 +141,10 @@ private:
|
||||||
void adafruitLCDSetup();
|
void adafruitLCDSetup();
|
||||||
void adafruitLCDColour(ADAFRUIT_COLOUR colour);
|
void adafruitLCDColour(ADAFRUIT_COLOUR colour);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef PCF8574_DISPLAY
|
||||||
|
void pcf8574LCDSetup();
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -6,4 +6,4 @@ to implement functions for larger screens.
|
||||||
|
|
||||||
Here's a list of things I would like to accomplish in the near future ...
|
Here's a list of things I would like to accomplish in the near future ...
|
||||||
|
|
||||||
- Scroll long source and destination IDs on small screens.
|
- Nothing planned at this time! Any suggestions?
|
||||||
|
|
|
@ -110,8 +110,6 @@ Columns=16
|
||||||
# rs, strb, d0, d1, d2, d3
|
# rs, strb, d0, d1, d2, d3
|
||||||
# For basic HD44780 displays
|
# For basic HD44780 displays
|
||||||
Pins=11,10,0,1,2,3
|
Pins=11,10,0,1,2,3
|
||||||
# For Adafruit i2c HD44780
|
|
||||||
# Pins=115,113,112,111,110,109
|
|
||||||
|
|
||||||
# PWM backlight
|
# PWM backlight
|
||||||
PWM=0
|
PWM=0
|
||||||
|
|
24
Makefile.Pi.PCF8574
Normal file
24
Makefile.Pi.PCF8574
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# This makefile is for use with the Raspberry Pi when using an HD44780 compatible display. The wiringpi library is needed.
|
||||||
|
# Support for the HD44780 connected via a PCF8574 8-bit GPIO expander IC
|
||||||
|
CC = gcc
|
||||||
|
CXX = g++
|
||||||
|
CFLAGS = -g -O3 -Wall -std=c++0x -pthread -DHD44780 -DPCF8574_DISPLAY -I/usr/local/include
|
||||||
|
LIBS = -lwiringPi -lwiringPiDev -lpthread
|
||||||
|
LDFLAGS = -g -L/usr/local/lib
|
||||||
|
|
||||||
|
OBJECTS = \
|
||||||
|
AMBEFEC.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedLC.o DMRFullLC.o DMRIPSC.o DMRLookup.o DMRLC.o \
|
||||||
|
DMRShortLC.o DMRSlot.o DMRSlotType.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o Golay24128.o Hamming.o HD44780.o Log.o MMDVMHost.o \
|
||||||
|
Modem.o Nextion.o NullDisplay.o QR1676.o RS129.o SerialController.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o Timer.o UDPSocket.o Utils.o YSFControl.o \
|
||||||
|
YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o
|
||||||
|
|
||||||
|
all: MMDVMHost
|
||||||
|
|
||||||
|
MMDVMHost: $(OBJECTS)
|
||||||
|
$(CXX) $(OBJECTS) $(CFLAGS) $(LIBS) -o MMDVMHost
|
||||||
|
|
||||||
|
%.o: %.cpp
|
||||||
|
$(CXX) $(CFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) MMDVMHost *.o *.d *.bak *~
|
|
@ -5,8 +5,10 @@ It supports D-Star, DMR, and System Fusion.
|
||||||
It builds on 32-bit and 64-bit Linux as well as on Windows using VS2015 on x86 and x64. It can optionally control various Displays. Currently these are:
|
It builds on 32-bit and 64-bit Linux as well as on Windows using VS2015 on x86 and x64. It can optionally control various Displays. Currently these are:
|
||||||
|
|
||||||
- HD44780 (sizes 2x16, 2x40, 4x16, 4x20)
|
- HD44780 (sizes 2x16, 2x40, 4x16, 4x20)
|
||||||
|
- Support for HD44780 via 4 bit GPIO connection (user selectable pins)
|
||||||
|
- Adafruit 16x2 LCD+Keypad Kits (I2C)
|
||||||
|
- Connection via PCF8574 GPIO Extender (I2C)
|
||||||
- Nextion TFTs (sizes 2.4", 3.2" and 3.5")
|
- Nextion TFTs (sizes 2.4", 3.2" and 3.5")
|
||||||
- Adafruit 16x2 LCD+Keypad Kits
|
|
||||||
- TFT displays sold by Hobbytronics in UK
|
- TFT displays sold by Hobbytronics in UK
|
||||||
- OLED 128x64 (SSD1306)
|
- OLED 128x64 (SSD1306)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue