Code for the DDDAC LCD display
The code below is for reading or "copy and paste" But you can also download my saved file for the Arduino EDO controller software :-)
The actual Code:
// DDDAC WaveIO LCD Panel version 5.0 2013-06-01 by Doede Douma
/*
===========================================================================
This Project does read out from the LED indicators WaveIO in the DDDAC1794
This is what the LCD (2x16 Display) should show:
First 8 seconds Boot Message:
___DDDAC1794____
_by_Doede_Douma_
Than in LOOP:
Host_active_____ Music_playing___ No_Host_________ __LOW_Battery!__
Power on:_12.08V 352.8_kHz_11.83V Power on:_12.31V Warning:__11.03V
Battery low when VB < 11.4 Volt
===========================================================================
LCD circuit:
typical Arduino standard
LCD "RW" pin to GND
LCD "RS" pin to digital pin 7 -------------------------------------D07
LCD "Enable" pin to digital pin 6 -------------------------------------D06
LCD D4 pin to digital pin 5 -------------------------------------D05
LCD D5 pin to digital pin 4 -------------------------------------D04
LCD D6 pin to digital pin 3 -------------------------------------D03
LCD D7 pin to digital pin 2 -------------------------------------D02
===========================================================================
WaveIO Pins
J9 Pinheader controls the LEDs for following signals:
L1 = 44.1 KHz connect to digital pin 8 ------------------------D08
L2 = 48 KHz connect to digital pin 9 ------------------------D09
L3 = 88.2 KHz connect to digital pin 10 -----------------------D10
L4 = 96 KHz connect to digital pin 11 -----------------------D11
L5 = 176.4 KHz connect to digital pin 12 -----------------------D12
L6 = 192 KHz connect to digital pin 13 -----------------------D13
L7 = Host Active connect to analog pin 5 (not enough d-pins) -----A05
L8 = Audio Streaming connect to analog pin 4 (not enough d-pins) -----A04
===========================================================================
DDDAC mainboard:
VB12 Volt connect to analog pin 0 -------------------------A00
!!!!!!!!! Use Voltage divider of 10k in series and 3k3 to GND !!!!!!!!!!
===========================================================================
Logical Boolean operators needed for upgraded firmware 333
L3&5 = 352.8KHz
L4&6 = 384 KHz
===========================================================================
Description signals:
Host Active when the card is plugged into the USB port and is recognized.
Audio Streaming is enabled when there's streaming over USB.
Wen incoming sample rate is changed, Streaming is disabled for ~1 sec.
This signal could be used to MUTE the analog output if required
Use normal LEDs (that can sink 8mA or less to lit).
===========================================================================
Circuit:
Connect L1-7 from WaveIO. Do NOT use the LEDs
Connect Arduino to 5 Volt supply from WaveIO or use power supply
Connect WaveIO as described above
Connect LCD as to standard Arduino application
Connect 12 Volt power supply from mainboard to A0 Divided by 4 ( !!!!! )
===========================================================================
Possible Next steps:
Temperature inside chassis?
like this:
0123456789012345
Music_playing___
352.8kHz___38deg
===========================================================================
*/
// Actual DDDAC1794 Sketch starts here:
#include <LiquidCrystal.h> // include the LCD library code:
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // standard Arduino application
// set pin numbers for WaveIO and Power supply readings:
const int L1_44 = 8;
const int L2_48 = 9;
const int L3_88 = 10;
const int L4_96 = 11;
const int L5_176 = 12;
const int L6_192 = 13;
const int L7_host = A5; // using analog input
const int L8_audio = A4; // using analog input
const int VB_12volt = A0; // using analog input
void setup() {
// set PinModes for WaveIO and Power supply readings:
pinMode(L1_44, INPUT);
pinMode(L2_48, INPUT);
pinMode(L3_88, INPUT);
pinMode(L4_96, INPUT);
pinMode(L5_176, INPUT);
pinMode(L6_192, INPUT);
pinMode(L7_host, INPUT);
pinMode(L8_audio, INPUT);
pinMode(VB_12volt, INPUT);
// set up the LCD's number of columns and rows plus show Boot Message:
lcd.begin(16, 2);
lcd.print(" DDDAC1794 "); // boot message
lcd.setCursor(0, 1); // boot message
lcd.print(" by Doede Douma "); // boot message
delay(6000);
}
// Structure Flow:
// Check VB if <11.40 Volt => warning message and loop ends
// Else: check host active or not and display power on & VB voltage
// Else: Check for Music; if no music do nothing
// Check if Music is TRUE and only than read kHz and display
void loop() {
int An_level = 200; // used to check at analog input. 200= ~1V
int reading = analogRead(VB_12volt); // read 12V power supply
float voltage = map (reading,0,1023,0,2023); // map reading to max 20V - 2023 in my system. start with 2000
voltage/= 100;
lcd.setCursor(10,1);
lcd.print(voltage);
lcd.print("V ");
if(voltage<11.40){ // check if battery is too low
lcd.setCursor(0,0);
lcd.print(" LOW Battery! ");
lcd.setCursor(0,1);
lcd.print("Warning: ");
}
else{
if(analogRead(L7_host)>An_level && analogRead(L8_audio)<An_level){ // check if host is active
lcd.setCursor(0,0); // AND music is off
lcd.print("Host active ");
lcd.setCursor(0,1);
lcd.print("Power on: ");
}
else if(analogRead(L7_host)<An_level) { // Host inactive, always this message
lcd.setCursor(0,0);
lcd.print("No Host ");
lcd.setCursor(0,1);
lcd.print("Power on: ");
}
if(analogRead(L8_audio)>An_level) { // check if Music is active
lcd.setCursor(0,0); // overwrite Host message...
lcd.print("Music playing ");
lcd.setCursor(0,1); //now start reading kHz rates
if(digitalRead(L1_44) == HIGH)
lcd.print("44.1 KHz ");
if(digitalRead(L2_48) == HIGH)
lcd.print("48 KHz ");
if(digitalRead(L3_88) == HIGH && digitalRead(L5_176) == LOW) //88 True - 176 False
lcd.print("88.2 KHz ");
if(digitalRead(L4_96) == HIGH && digitalRead(L6_192) == LOW) //96 True - 192 False
lcd.print("96 KHz ");
if(digitalRead(L5_176) == HIGH && digitalRead(L3_88) == LOW) //176 True - 88 False
lcd.print("176.4 KHz ");
if(digitalRead(L6_192) == HIGH && digitalRead(L4_96) == LOW) //192 True - 96 False
lcd.print("192 KHz ");
if(digitalRead(L3_88) == HIGH && digitalRead(L5_176) == HIGH) //88 True - 176 True
lcd.print("352.8 KHz ");
if(digitalRead(L4_96) == HIGH && digitalRead(L6_192) == HIGH) //96 True - 192 True
lcd.print("384 KHz ");
}
}
delay(200); // 5 times per second update
} // loop ends here
|