diff --git a/pkg/mt12864a/mt12864a.go b/pkg/mt12864a/mt12864a.go index afc9a48..e3bee1d 100644 --- a/pkg/mt12864a/mt12864a.go +++ b/pkg/mt12864a/mt12864a.go @@ -9,6 +9,7 @@ import ( ) const ( + enablePrintPins = false adressWriteTimeout = 140 * time.Nanosecond dataStrobeTimeout = 250 * time.Nanosecond // (Data transfer) maxWaitCycles = 100 @@ -60,18 +61,18 @@ func New(logger *log.Logger) (Device, error) { d := mt12864a{ logger: logger, - pinA0: rpio.Pin(7), - pinRW: rpio.Pin(11), - pinE: rpio.Pin(13), + pinA0: rpio.Pin(18), + pinRW: rpio.Pin(17), + pinE: rpio.Pin(27), - pinDB0: rpio.Pin(15), - pinDB1: rpio.Pin(19), - pinDB2: rpio.Pin(21), - pinDB3: rpio.Pin(23), - pinDB4: rpio.Pin(27), - pinDB5: rpio.Pin(32), - pinDB6: rpio.Pin(31), - pinDB7: rpio.Pin(33), + pinDB0: rpio.Pin(22), + pinDB1: rpio.Pin(10), + pinDB2: rpio.Pin(9), // From 21 + pinDB3: rpio.Pin(11), + pinDB4: rpio.Pin(12), + pinDB5: rpio.Pin(16), // From 32 + pinDB6: rpio.Pin(20), // From 31 + pinDB7: rpio.Pin(13), // From 33 // Reverted // pinDB7: rpio.Pin(15), @@ -83,12 +84,11 @@ func New(logger *log.Logger) (Device, error) { // pinDB1: rpio.Pin(31), // pinDB0: rpio.Pin(33), - pinE1: rpio.Pin(35), - pinE2: rpio.Pin(37), - pinRES: rpio.Pin(40), + pinE1: rpio.Pin(19), + pinE2: rpio.Pin(26), + pinRES: rpio.Pin(21), } d.AllOutput() - d.PrintPins() return &d, nil } @@ -97,21 +97,58 @@ func (d *mt12864a) Close() error { return rpio.Close() } +// func (d *mt12864a) SetPixel() { +// +// } + +/* +void Pset(byte x, byte y, bit c) {//Записать одну точку в индикатор (координата 0,0 в левом верхнем углу индикатора) + byte c8;//Временное хранение считаного из индикатора байта + byte m8;//Маска нужного бита в байте + if ((x>127)||(y>63)) return;//Выход за пределы индикатора + if (x<64) {//Выводить в левую половину индикатора + WriteCodeL(0xB8|(y>>3));//Установить нужную страницу индикатора + WriteCodeL(0x40|x);//Установить адрес нужного байта + c8=ReadDataL();//Фиктивное чтение + c8=ReadDataL();//Чтение нужного байта из индикатора + m8=1<<(y&0x07);//Вычислить маску нужного бита в байте + if (c==1) //Зажигать точку? + c8|=m8//Установить нужный бит в байте + else //Или гасить точку? + c8&=~m8;//Сбросить нужный бит в байте + WriteCodeL(0x40|x);//Снова установить адрес нужного байта + WriteDataL(c8);//Записать изменённый байт обратно в индикатор + } else {//Выводить в правую половину индикатора + WriteCodeR(0xB8|(y>>3));//Установить нужную страницу индикатора + WriteCodeR(0x40|(x-64));//Установить адрес нужного байта + c8=ReadDataR();//Фиктивное чтение + c8=ReadDataR();//Чтение нужного байта из индикатора + m8=1<<(y&0x07);//Вычислить маску нужного бита в байте + if (c==1) //Зажигать точку? + c8|=m8//Установить нужный бит в байте + else //Или гасить точку? + c8&=~m8;//Сбросить нужный бит в байте + WriteCodeR(0x40|(x-64));//Снова установить адрес нужного байта + WriteDataR(c8);//Записать изменённый байт обратно в индикатор + } + } +*/ + func (d *mt12864a) PowerOn() { - d.pinA0.PullOff() - d.pinRW.PullOff() - d.pinE.PullOff() - d.pinDB0.PullOff() - d.pinDB1.PullOff() - d.pinDB2.PullOff() - d.pinDB3.PullOff() - d.pinDB4.PullOff() - d.pinDB5.PullOff() - d.pinDB6.PullOff() - d.pinDB7.PullOff() - d.pinE1.PullOff() - d.pinE2.PullOff() - d.pinRES.PullOff() + // d.pinA0.PullOff() + // d.pinRW.PullOff() + // d.pinE.PullOff() + // d.pinDB0.PullOff() + // d.pinDB1.PullOff() + // d.pinDB2.PullOff() + // d.pinDB3.PullOff() + // d.pinDB4.PullOff() + // d.pinDB5.PullOff() + // d.pinDB6.PullOff() + // d.pinDB7.PullOff() + // d.pinE1.PullOff() + // d.pinE2.PullOff() + // d.pinRES.PullOff() d.pinA0.Low() d.pinRW.Low() @@ -127,24 +164,29 @@ func (d *mt12864a) PowerOn() { d.pinE1.Low() d.pinE2.Low() d.pinRES.Low() - + d.logger.Println("All low ") d.PrintPins() d.logger.Println("Power on") - d.PrintPins() d.pinE.Low() - d.PrintPins() d.pinRES.Low() - d.PrintPins() time.Sleep(time.Microsecond) d.pinRES.High() time.Sleep(10 * time.Microsecond) - d.PrintPins() - d.logger.Println("Display on") - d.WriteCodeL(0x3F) // Display on + d.PrintPins() d.logger.Println("Top line to 0") d.WriteCodeL(0xC0) // Top line to 0 + d.WriteCodeR(0xC0) // Top line to 0 d.PrintPins() + d.logger.Println("Display on") + d.WriteCodeL(0x3F) // Display on + d.waitReady(1, 0) + d.waitReady(0, 1) + d.WriteCodeR(0x3F) // Display on + d.waitReady(1, 0) + d.waitReady(0, 1) + d.PrintPins() + } // Write codes @@ -227,6 +269,14 @@ func (d *mt12864a) writeByte(b byte, cd, l, r rpio.State) { time.Sleep(dataStrobeTimeout) // Strobe end d.pinE.Low() + d.pinDB0.Low() + d.pinDB1.Low() + d.pinDB2.Low() + d.pinDB3.Low() + d.pinDB4.Low() + d.pinDB5.Low() + d.pinDB6.Low() + d.pinDB7.Low() time.Sleep(time.Millisecond - dataStrobeTimeout - adressWriteTimeout) } @@ -262,6 +312,15 @@ func (d *mt12864a) writeByteArray(b []byte, cd, l, r rpio.State) { time.Sleep(dataStrobeTimeout) // Strobe end d.pinE.Low() + d.pinDB0.Low() + d.pinDB1.Low() + d.pinDB2.Low() + d.pinDB3.Low() + d.pinDB4.Low() + d.pinDB5.Low() + d.pinDB6.Low() + d.pinDB7.Low() + time.Sleep(time.Millisecond - dataStrobeTimeout - adressWriteTimeout) } @@ -350,6 +409,7 @@ func (d *mt12864a) waitReady(l, r rpio.State) { for counter < maxWaitCycles { d.busInput() // Set bus to input if d.pinDB7.Read() != rpio.High { + d.logger.Printf("BUS:%d%d%d%d%d%d%d%d\n", d.pinDB0.Read(), d.pinDB1.Read(), d.pinDB2.Read(), d.pinDB3.Read(), d.pinDB4.Read(), d.pinDB5.Read(), d.pinDB6.Read(), d.pinDB7.Read()) break } d.PrintPins() @@ -365,6 +425,9 @@ func (d *mt12864a) waitReady(l, r rpio.State) { } func (d *mt12864a) PrintPins() { + if !enablePrintPins { + return + } d.AllInput() d.logger.Printf("A0:%d RW:%d E:%d BUS:%d%d%d%d%d%d%d%d E1:%d E2:%d RES:%d\n", d.pinA0.Read(), d.pinRW.Read(), d.pinE.Read(), d.pinDB0.Read(), d.pinDB1.Read(), d.pinDB2.Read(), d.pinDB3.Read(), d.pinDB4.Read(), d.pinDB5.Read(), d.pinDB6.Read(), d.pinDB7.Read(), d.pinE1.Read(), d.pinE2.Read(), d.pinRES.Read()) d.AllOutput() diff --git a/readme.md b/readme.md index 546b907..d57f5a4 100644 --- a/readme.md +++ b/readme.md @@ -1,35 +1,41 @@ ## ssd1306 res: 128x32 + iface: i2c + u: 3v -pins: + +pins (physical): 1. VCC => 1 2. GND => 9 3. SCK => 3 4. SDA => 5 ## MT-12864A -[Doc](https://www.melt.com.ru/docs/MT-12864A.pdf) +[Documentation](https://www.melt.com.ru/docs/MT-12864A.pdf) + res: 128x64 + u: 3v -pins: - 1. GND => 9 - 2. UCC => 17 - 3. U0 -W - 4. A0 => 7 - 5. R/W => 11 - 6. E => 13 - 7. DB0 => 15 - 8. DB1 => 19 - 9. DB2 => 21 - 10. DB3 => 23 - 11. DB4 => 27 - 12. DB5 => (29 does not work) => - 13. DB6 => 31 - 14. DB7 => 33 - 15. E1 => 35 - 16. E2 => 37 - 17. RES => 40 + +pins(default - GPIO): + 1. GND => 9(physical) + 2. UCC => 17(physical) + 3. U0 - + 4. A0 => 18 + 5. R/W => 17 + 6. E => 27 + 7. DB0 =>22 + 8. DB1 => 10 + 9. DB2 => 9 + 10. DB3 => 11 + 11. DB4 => 12 + 12. DB5 => 16 + 13. DB6 => 20 + 14. DB7 => 13 + 15. E1 => 19 + 16. E2 => 26 + 17. RES => 21 18. Uee => rheostat => U0 (contrast settings) 19. A (light+) ?? 20. K (light-) ??