diff --git a/CHANGELOG b/CHANGELOG index 25a206d..f1aeec4 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,18 @@ 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: Hardware: diff --git a/README.md b/README.md index d80c065..9c89e42 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -Denon PMA-770 (and others) Arduino Control +![HiFiLOGIX](images/logo.jpg "HiFiLOGIX") +Arduino Control for Your Vintage Stereo # 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.3 - Removed ShiftReset function. Replaced with reset circuit onboard. 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 +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 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 @@ -38,7 +46,7 @@ remote control function. # 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). [![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 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 -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. +As of Version 0.1.4 we now support the SSD1306 based 128x32 OLED Display. 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 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 [![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 -represented by the standard arrangement of LEDs with current-limiting resistors. This is literally all that's required during -development since I'm already very familiar with the 2803 as a driver. +This is the most current prototype featuring a 128x32 OLED and a ULN2003 driving actual relays. It is known as hardware +revision 1.3. 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. @@ -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) +[OLED, Relay Control, and HiFiLOGIX] (https://youtu.be/vn3nhpWjckw) + # License Copyright 2020 Jay Moore diff --git a/hifilogix.ino b/hifilogix.ino index dfa7dd0..10fca51 100644 --- a/hifilogix.ino +++ b/hifilogix.ino @@ -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 -#include +#include #include +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 clockPin = 9; int dataPin = 12; int IRin = 7; int srEnable = 5; int matrix = A0; - byte out = 0; int mx = 0; IRrecv remote(IRin); 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() { digitalWrite(latchPin, LOW); @@ -40,57 +57,63 @@ void DontCrossTheStreams() void setTape2() { DontCrossTheStreams(); - bitSet(out,7); + bitSet(out,6); updateShiftRegister(); - lcd.setCursor(7, 1); - lcd.print("TAPE-2 "); + u8g2.clearBuffer(); + u8g2.drawStr(10,30,"TAPE-2"); + u8g2.sendBuffer(); } void setTape1() { DontCrossTheStreams(); - bitSet(out,6); + bitSet(out,5); updateShiftRegister(); - lcd.setCursor(7, 1); - lcd.print("TAPE-1 "); + u8g2.clearBuffer(); + u8g2.drawStr(10,30,"TAPE-1"); + u8g2.sendBuffer(); } void setAUX() { DontCrossTheStreams(); - bitSet(out,5); + bitSet(out,4); updateShiftRegister(); - lcd.setCursor(7, 1); - lcd.print("AUX "); + u8g2.clearBuffer(); + u8g2.drawStr(32,30,"AUX"); + u8g2.sendBuffer(); } void setTune() { DontCrossTheStreams(); - bitSet(out,4); + bitSet(out,3); updateShiftRegister(); - lcd.setCursor(7, 1); - lcd.print("TUNER "); + u8g2.clearBuffer(); + u8g2.drawStr(18,30,"TUNER"); + u8g2.sendBuffer(); } void setPh1() { DontCrossTheStreams(); - bitSet(out,3); - bitSet(out,0); + bitSet(out,2); + bitSet(out,1); updateShiftRegister(); - lcd.setCursor(7, 1); - lcd.print("PHONO-1 "); + u8g2.clearBuffer(); + u8g2.drawStr(1,30,"PHONO-2"); + u8g2.sendBuffer(); } void setPh2() { DontCrossTheStreams(); - bitSet(out,3); - bitSet(out,1); + bitSet(out,2); + bitSet(out,0); updateShiftRegister(); - lcd.setCursor(7, 1); - lcd.print("PHONO-2 "); + u8g2.clearBuffer(); + u8g2.drawStr(1,30,"PHONO-1"); + u8g2.sendBuffer(); } void setup() @@ -99,16 +122,11 @@ void setup() pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(srEnable, OUTPUT); + u8g2.begin(); remote.enableIRIn(); - bitSet(out,5); - lcd.init(); - lcd.backlight(); - lcd.home(); - lcd.setCursor(0, 0); - lcd.print("Denon PMA-770"); - lcd.setCursor(0, 1); - lcd.print("Input: AUX"); - updateShiftRegister(); + logo(); + delay(2000); + setAUX(); digitalWrite(srEnable,LOW); } @@ -144,4 +162,4 @@ if (remote.decode(&ircode)) { remote.resume(); } delay(200); -} \ No newline at end of file +} diff --git a/images/logo.jpg b/images/logo.jpg new file mode 100644 index 0000000..381449f Binary files /dev/null and b/images/logo.jpg differ diff --git a/images/prototype.jpg b/images/prototype.jpg index ef61339..f29d3d0 100644 Binary files a/images/prototype.jpg and b/images/prototype.jpg differ diff --git a/images/schematic.png b/images/schematic.png index bd51690..20574e3 100644 Binary files a/images/schematic.png and b/images/schematic.png differ diff --git a/images/schematicmsall.png b/images/schematicmsall.png new file mode 100644 index 0000000..dda4d75 Binary files /dev/null and b/images/schematicmsall.png differ diff --git a/images/schematicsmall.png b/images/schematicsmall.png deleted file mode 100644 index 1e6f605..0000000 Binary files a/images/schematicsmall.png and /dev/null differ