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.
		
		
		
		
		
			
		
			
				
	
	
		
			204 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Plaintext
		
	
			
		
		
	
	
			204 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Plaintext
		
	
CHANGELOG:
 | 
						|
 | 
						|
Version 0.2.0:
 | 
						|
 | 
						|
	Software:
 | 
						|
		EEPROM Support out of beta. Added hardware interrupt routine for it.
 | 
						|
			Using the EEPROM is now the default action for the software, meaning the beta version
 | 
						|
			has gone away. This sketch absolutely makes use of the EEPROM as part of it's boot
 | 
						|
			routine. It will overwrite data on first boot and loads the "default" input every
 | 
						|
			boot. The update is done via an interrupt. More on that will be explained later as
 | 
						|
			it will require some power-supply hacking I'll have to design. 
 | 
						|
 | 
						|
Version 0.1.9:
 | 
						|
 | 
						|
	Software:
 | 
						|
		PROGMEM now stores the input name table.
 | 
						|
			I moved the input table to program space. This saves some ram I might need later.
 | 
						|
			
 | 
						|
		EEPROM Code Commented Out In Non-Beta
 | 
						|
			The EEPROM beta code now exists in the non-beta; but it comes commented out. This
 | 
						|
			is done for the lazy people that don't like/want/know-how to edit code.
 | 
						|
			
 | 
						|
	Hardware:
 | 
						|
		Power-On Reset circuit on 595 removed.
 | 
						|
			The POR circuit originally held the shift-register reset low long for a brief second
 | 
						|
			to clear the random start-up state. This was because the old method of controlling the
 | 
						|
			outputs on the chip resulted in the outputs turning on during the ATMega's initalization.
 | 
						|
			(They go from high-impedance to low before the code takes over.) But with the new blanking
 | 
						|
			circuit that's not a problem; it keeps both the 2003 and 595's outputs off untill it goes
 | 
						|
			logic high in the software. The three components from the POR are now gone, the pull-up on
 | 
						|
			the 595's enable line changed to a 1k, and the transistor and additional resistor added for
 | 
						|
			the switch/inverter. It basically reduces overall count by just one component; but it makes
 | 
						|
			the thing behave better than I expected.
 | 
						|
			
 | 
						|
			I'm sure in a lot of situtations this is a bad idea; but since the 595 doesn't seem to care
 | 
						|
			if it has the reset circuit and the rest of our circuit doesn't care what or if the 595 boots
 | 
						|
			in a scrambled state...why have it? Since we clock data in to it before pulling blanking high
 | 
						|
			it won't output incorrect data.
 | 
						|
 | 
						|
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.
 | 
						|
	 |