You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

167 lines
6.2 KiB
Plaintext

CHANGELOG:
Version 0.1.8:
Software:
No longer clear the shift register.
Originally I did this to make sure the register was cleared...because I honestly wasn't 100% sure what was
going on. I looked at some examples...did some things...and got excited when it worked. In complete total
hindsight....I actually didn't need to do this. Originally I did it "just to be sure" it got cleared...and
for a while since I wasn't exactly sure what the shift-register functions fully did; I just left it. The
change I made in 0.1.6 of adding arguments to DontCrossTheStreams seemed to make a lot of things fall in to
place...and it turns out that when I finally got to the point of deciding to try adding EEPROM support..that
change made the entire thing easier to implement. 0.1.7 practically rewrote the whole loop, which lead to me
doing it to the rest of the code.
Three functions removed.
clearShiftRegister was removed to already mentioned redundancy. updateShiftRegister had it's few lines of
code moved to DontCrossTheStreams. logo() had it's code moved from it's own function to just directly into
the setup function. With this change, DontCrossTheStreams has morphed from it's original function of just
setting the shift register to all 0, in to being the entire process of changing inputs. Though I did figure
out that functions really didn't add much bloat. Between 0.1.7 and 0.1.8 I only shaved 22 bytes off the
original compile size.
I have no clue what it takes to optimize C. I barely know it.
srEnable renamed to blanking.
This better represents what it does. While this is probably more notoriously known in regards to CRT
operation; I'm a pinball guy by trade and the term is used quite a bit on the solid-state/digital
machines.
EEPROM Beta:
Remember how I said someday the default boot wouldn't be static? Well, I've done it. This beta version uses
3 bytes of EEPROM space to store the last used input as well as one additional byte to indicate if default
information exists and to load if it it does, or write it if it doesn't. It currently uses bytes 1020 - 1023,
the end of the EEROM on my ATMega 328. 1020 stores the byte for the shift register, 1021 stores the x offset
for the display, 1022 stores the index pointer to the name, and 1023 stores a "T" if it's written settings.
Right now, it will update those addresses on each input change; and read those settings on boot to pass to
DontTouchTheStreams.
While I toyed around with the idea of something like FRAM to avoid the lifetime limitations and just write
each source change; I've decided I'm going to give the Arduino a lot of capacitance on it's power supply,
attach a sense circuit to the main power supply, and just write those values when it detects a power-off.
The code only updates if necessary; so if you power it off on the same input it was powered-up at, it won't
write. In theory...if you write to this thing twice a day it will take close to 100 years to hit the write
limit.
But I haven't implemented that in hardware...though I have some ideas. Until I do this is considered a beta
version that won't burn the EEPROM out like writing to it in loop; but still does so every single input
change.
It is written off the 0.1.8 code.
Hardware:
No changes; but eliminating the reset circuit on the dev prototype has caused zero ill effects with the blanking.
Version 0.1.7:
Main:
Decided to try and comment changes better.
This at least gives a minor insight in to why I did it. I'll mark comments added later with an asterisk.
Software:
Practically rewrote the main loop.
Instead of all the switch/case bullshit, I just dump to a variable and make that part of the
conditional IF statements.
Bitmapped the logo.
Fonts are large. The 98x24 bitmap was smaller.
Version 0.1.6:
Software:
Removed a bunch of functions in favor of passing arguments to function.
The indvidual functions for setting each input and setting the LCD have largely been combined
in to one since I figured out how to use arguments. Additional stuff changed/added to accomodate
this.*
Version 0.1.5:
Hardware
Removed 2003 ground from 595 enable line. (That was a stupid idea that thankfully didn't blow up.)
I calculated the relays to be 40mA each. Sinking that much current from an IO pin is pushing it, let alone
the fact I need two relays for phono inputs.
Added logic invterter to drive the 595 enable and 2003 ground. (Transistor can sink more current).
The 2N2222 is rated for like...800mA or something; wayyyy more than I need. In retrospect, this would have been
a better solution overall than the reset circuit on the 595. Will I change it? I'll have to play with it.
Software:
Flipped srEnable logic to drive logic inveter added to board.
Version 0.1.4:
Main:
Project is now called HiFiLOGIX
Hardware:
Tied ULN2003/2803 ground to 595's enable line
Even with the shift register quiet during boot, the darlington array isn't; and pull-down
resistors don't seem to help. But I soon realize this is a stupid idea.
Replaced 1602 display with SSD1306 128x32 OLED
Software:
Added code to drive OLED display.
Removed 1602 display code.
Version 0.1.3:
Hardware:
Added power-on reset RC circuit to control 595 master reset.
Removed 595 master reset from Arduino control.
Software:
Removed 595 master reset commands.
Version 0.1.2:
Hardware:
Wired 595 output enable and reset to Arduino control.
Software:
Added output and reset commands for 595.
Version 0.1.1:
Hardware:
Added KY-022 IR module (1838 IR sensor with integrated resistor+led)
Software:
Added basic support for IR remote control.
Version 0.1
Hardware:
Added I2C 16x2 LCD Display
Software:
Added support for display.
Version Alpha2.1
Software:
Created routine to shift all 0s to 595.
Added two-relay switching for Phono-1
Added Phono-2 routine.
Version Alpha2
Software:
Fixed shift register bug from Alpha1.
Removed serial monitor debugging.
Cleaned up main loop if statement.
Version Alpha1
Hardware:
Initial build. Just switches and LEDs on a 595.
Software:
Initial offical release. Totally broken.