Switched to SSD1306 OLED. Now HiFiLOGIX.

master
Jay 4 years ago
parent de5dabe862
commit 2cc0f562f7

@ -1,5 +1,18 @@
CHANGELOG: CHANGELOG:
Version 0.1.4:
Main:
Project is now called HiFiLOGIX
Hardware:
Tied ULN2003/2803 ground to 595's enable line
Replaced 1602 display with SSD1306 128x32 OLED
Software:
Added code to drive OLED display.
Removed 1602 display code.
Version 0.1.3: Version 0.1.3:
Hardware: Hardware:

@ -1,4 +1,5 @@
Denon PMA-770 (and others) Arduino Control ![HiFiLOGIX](images/logo.jpg "HiFiLOGIX")
Arduino Control for Your Vintage Stereo
# History # History
@ -9,11 +10,18 @@ Denon PMA-770 (and others) Arduino Control
30-Dec-2019: Version 0.1.2 - Controls ShiftReset and OutputEnable on 595 to prevent random start-up state. 30-Dec-2019: Version 0.1.2 - Controls ShiftReset and OutputEnable on 595 to prevent random start-up state.
30-Dec-2019: Version 0.1.3 - Removed ShiftReset function. Replaced with reset circuit onboard. 30-Dec-2019: Version 0.1.3 - Removed ShiftReset function. Replaced with reset circuit onboard.
01-Jan-2020: Added license, media, and proper README. 01-Jan-2020: Added license, media, and proper README.
04-Jan-2020: Version 0.1.4 - Changed project name. Removed 1602 display code. Added 128x32 OLED code
```` ````
# About # About
HiFiLOGIX is an Arduino Sketch to add modern logic control to vintage analog stereo systems. It is being
built and developed around my own personal vintage amplifier; the Denon PMA-770. It is written by a guy
who knows a lot about analog audio circuits and virtually nothing about Arduino.
# About the PMA-770 & Why This Exists
The Denon PMA-770 is a high-end integrated amplfier from the early 80's capable of the usual 100 watts into The Denon PMA-770 is a high-end integrated amplfier from the early 80's capable of the usual 100 watts into
8 ohms; and somewhere in the neighborhood of 120 to 140 in to a 4 ohm load. It's a DC coupled amplifier of 8 ohms; and somewhere in the neighborhood of 120 to 140 in to a 4 ohm load. It's a DC coupled amplifier of
"Direct-A" topology. It's got 3 pairs of output transistors, no capacitors in the audio path, and it sounds "Direct-A" topology. It's got 3 pairs of output transistors, no capacitors in the audio path, and it sounds
@ -38,7 +46,7 @@ remote control function.
# Hardware # Hardware
The basic idea is parallel the actuator contacts of 5 DPDT (or DPST) relays and flip them on one at a time (two The basic idea is parallel the actuator contacts of DPDT (or DPST) relays and flip them on one at a time (two
for phono). for phono).
[![Schematic of hardware](/images/schematicsmall.png)](/images/schematic.png) [![Schematic of hardware](/images/schematicsmall.png)](/images/schematic.png)
@ -67,22 +75,26 @@ the phono-stage.
An 1838 IR sensor is used for remote control function. An additional utility may be written to help with this going forward An 1838 IR sensor is used for remote control function. An additional utility may be written to help with this going forward
but it's possible I may wind up writing a routine for "self-programming". but it's possible I may wind up writing a routine for "self-programming".
Currently I am using an I2C 1602 display just for development purposes. This will be replaced with a 128x32 I2C OLED display As of Version 0.1.4 we now support the SSD1306 based 128x32 OLED Display.
in the future. This display is just a little larger than the display in the Denon; so it shouldn't be any issue to mount it
and format everything to appear in the actual visible space. It is not shown on the schematic; however it is just connected
to 5V, GND, SDA, and SCL lines.
In the future I will be adding some kind of NVRam storage. This will facilitate actually storing configuration options, remote In the future I will be adding some kind of NVRam storage. This will facilitate actually storing configuration options, remote
programming codes, and to store the last-used input. I may also use this to store graphic data for the OLED display to programming codes, and to store the last-used input. I may also use this to store graphic data for the OLED display to
emulate the original segmented font display of the Denon. emulate the original segmented font display of the Denon.
# Software
This sketch requires the following libaries:
- IRRemote (https://github.com/z3t0/Arduino-IRremote)
- U8G2 Display Driver (https://github.com/olikraus/u8g2)
Please install them via Library Manager or however you install libaries. Check indvidual project pages for LICENSE info.
# Media # Media
[![Picture of prototype rig](/images/prototype.jpg "Prototype")*Prototype & Development Build* [![Picture of prototype rig](/images/prototype.jpg "Prototype")*Prototype & Development Build*
This is a previous revision of the hardware before the power-on reset circuit was added to the 74HC595. The parallel data is This is the most current prototype featuring a 128x32 OLED and a ULN2003 driving actual relays. It is known as hardware
represented by the standard arrangement of LEDs with current-limiting resistors. This is literally all that's required during revision 1.3.
development since I'm already very familiar with the 2803 as a driver.
I'm horrible at making videos in general...but I still made an attempt to show things off. Youtube embedding is apparently I'm horrible at making videos in general...but I still made an attempt to show things off. Youtube embedding is apparently
broken and I don't feel like putting a gig worth of video in the repository, so you'll just have to use links. broken and I don't feel like putting a gig worth of video in the repository, so you'll just have to use links.
@ -91,6 +103,8 @@ broken and I don't feel like putting a gig worth of video in the repository, so
[Now I've Got A Remote Control](https://www.youtube.com/watch?v=I30OaMii4l4) [Now I've Got A Remote Control](https://www.youtube.com/watch?v=I30OaMii4l4)
[OLED, Relay Control, and HiFiLOGIX] (https://youtu.be/vn3nhpWjckw)
# License # License
Copyright 2020 Jay Moore Copyright 2020 Jay Moore

@ -1,28 +1,45 @@
/* /*
PMA770Relay 0.1.3 HiFiLOGIX 0.1.4
dewdude@gmail.com - 30-12-2019 dewdude@gmail.com - 04-JAN-2020
*/ */
#include <Wire.h> #include <Wire.h>
#include <LiquidCrystal_I2C.h> #include <U8g2lib.h>
#include <IRremote.h> #include <IRremote.h>
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0);
// const char *inputs[] = {"TAPE-2","TAPE-1","AUX","TUNER","PHONO-2","PHONO-1"};
// int i = 0;
int latchPin = 11; int latchPin = 11;
int clockPin = 9; int clockPin = 9;
int dataPin = 12; int dataPin = 12;
int IRin = 7; int IRin = 7;
int srEnable = 5; int srEnable = 5;
int matrix = A0; int matrix = A0;
byte out = 0; byte out = 0;
int mx = 0; int mx = 0;
IRrecv remote(IRin); IRrecv remote(IRin);
decode_results ircode; decode_results ircode;
LiquidCrystal_I2C lcd(0x27,16,2); void logo() {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_fewture_tr);
u8g2.drawStr(15,14,"HiFiLOGIX");
u8g2.setFont(u8g2_font_freedoomr10_tu);
u8g2.drawStr(14,30,"DENON PMA-770");
u8g2.sendBuffer();
u8g2.setFont(u8g2_font_logisoso28_tr);
}
/* void inputdisp() {
u8g2.clearBuffer();
u8g2.drawStr(x,30,inputs[i]);
u8g2.sendBuffer();
}
*/
void updateShiftRegister() void updateShiftRegister()
{ {
digitalWrite(latchPin, LOW); digitalWrite(latchPin, LOW);
@ -40,57 +57,63 @@ void DontCrossTheStreams()
void setTape2() void setTape2()
{ {
DontCrossTheStreams(); DontCrossTheStreams();
bitSet(out,7); bitSet(out,6);
updateShiftRegister(); updateShiftRegister();
lcd.setCursor(7, 1); u8g2.clearBuffer();
lcd.print("TAPE-2 "); u8g2.drawStr(10,30,"TAPE-2");
u8g2.sendBuffer();
} }
void setTape1() void setTape1()
{ {
DontCrossTheStreams(); DontCrossTheStreams();
bitSet(out,6); bitSet(out,5);
updateShiftRegister(); updateShiftRegister();
lcd.setCursor(7, 1); u8g2.clearBuffer();
lcd.print("TAPE-1 "); u8g2.drawStr(10,30,"TAPE-1");
u8g2.sendBuffer();
} }
void setAUX() void setAUX()
{ {
DontCrossTheStreams(); DontCrossTheStreams();
bitSet(out,5); bitSet(out,4);
updateShiftRegister(); updateShiftRegister();
lcd.setCursor(7, 1); u8g2.clearBuffer();
lcd.print("AUX "); u8g2.drawStr(32,30,"AUX");
u8g2.sendBuffer();
} }
void setTune() void setTune()
{ {
DontCrossTheStreams(); DontCrossTheStreams();
bitSet(out,4); bitSet(out,3);
updateShiftRegister(); updateShiftRegister();
lcd.setCursor(7, 1); u8g2.clearBuffer();
lcd.print("TUNER "); u8g2.drawStr(18,30,"TUNER");
u8g2.sendBuffer();
} }
void setPh1() void setPh1()
{ {
DontCrossTheStreams(); DontCrossTheStreams();
bitSet(out,3); bitSet(out,2);
bitSet(out,0); bitSet(out,1);
updateShiftRegister(); updateShiftRegister();
lcd.setCursor(7, 1); u8g2.clearBuffer();
lcd.print("PHONO-1 "); u8g2.drawStr(1,30,"PHONO-2");
u8g2.sendBuffer();
} }
void setPh2() void setPh2()
{ {
DontCrossTheStreams(); DontCrossTheStreams();
bitSet(out,3); bitSet(out,2);
bitSet(out,1); bitSet(out,0);
updateShiftRegister(); updateShiftRegister();
lcd.setCursor(7, 1); u8g2.clearBuffer();
lcd.print("PHONO-2 "); u8g2.drawStr(1,30,"PHONO-1");
u8g2.sendBuffer();
} }
void setup() void setup()
@ -99,16 +122,11 @@ void setup()
pinMode(dataPin, OUTPUT); pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT); pinMode(clockPin, OUTPUT);
pinMode(srEnable, OUTPUT); pinMode(srEnable, OUTPUT);
u8g2.begin();
remote.enableIRIn(); remote.enableIRIn();
bitSet(out,5); logo();
lcd.init(); delay(2000);
lcd.backlight(); setAUX();
lcd.home();
lcd.setCursor(0, 0);
lcd.print("Denon PMA-770");
lcd.setCursor(0, 1);
lcd.print("Input: AUX");
updateShiftRegister();
digitalWrite(srEnable,LOW); digitalWrite(srEnable,LOW);
} }
@ -144,4 +162,4 @@ if (remote.decode(&ircode)) {
remote.resume(); remote.resume();
} }
delay(200); delay(200);
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 314 KiB

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Loading…
Cancel
Save