mirror of
https://github.com/erik-toth/audio-synth.git
synced 2025-12-06 11:20:02 +00:00
DAC Software Test
- Korrekte Software: Nur noch kleiner offset max. -+5mV
This commit is contained in:
@@ -9,12 +9,19 @@
|
||||
|
||||
#define DAC_MAX 4095
|
||||
#define DAC_MIN 0
|
||||
#define VREF_mV 5000
|
||||
#define VREF_mV 2048
|
||||
|
||||
#define VREF_CONF_IN_USE MCP4728_VREF_INTERNAL
|
||||
|
||||
#define PIN_BTN 40
|
||||
|
||||
Adafruit_MCP4728 mcp;
|
||||
|
||||
static uint16_t value_mV = VREF_mV;
|
||||
|
||||
bool button_state_old = false;
|
||||
bool button_state_now = false;
|
||||
|
||||
uint16_t voltage(uint16_t mV)
|
||||
{
|
||||
return map(mV, 0, VREF_mV, DAC_MIN, DAC_MAX);
|
||||
@@ -24,21 +31,29 @@ void setup()
|
||||
{
|
||||
Serial.begin(BAUDRATE);
|
||||
delay(1000);
|
||||
Serial.print("\n\r--- ESP32-S3 + MCP4728 DAC Test ---");
|
||||
Serial.print("\n\rMCP4728 DAC Test");
|
||||
|
||||
Wire.begin(I2C_SDA, I2C_SCL);
|
||||
Wire.setClock(I2C_FREQ);
|
||||
|
||||
pinMode(PIN_BTN, INPUT);
|
||||
|
||||
Serial.print("\n\rInitialisiere MCP4728...");
|
||||
uint8_t attempts = 0;
|
||||
while (!mcp.begin())
|
||||
{
|
||||
if(attempts > 20)
|
||||
{
|
||||
Serial.print("\n\rError: Es konnte nach 20 Versuchen kein IC gefunden werden. Überprüfe die Verkabelung und starte den ESP neu!");
|
||||
for(;;);
|
||||
}
|
||||
Serial.print(".");
|
||||
delay(100);
|
||||
attempts++;
|
||||
}
|
||||
Serial.print("\n\rErfolgreich verbunden!");
|
||||
|
||||
mcp.setChannelValue(MCP4728_CHANNEL_A, 0, MCP4728_VREF_INTERNAL, MCP4728_GAIN_2X);
|
||||
mcp.setChannelValue(MCP4728_CHANNEL_A, 4095, VREF_CONF_IN_USE);
|
||||
Serial.print("\n\rDAC-Kanal A auf 0 gesetzt");
|
||||
delay(1000);
|
||||
}
|
||||
@@ -46,12 +61,22 @@ void setup()
|
||||
|
||||
void loop()
|
||||
{
|
||||
value_mV = 200;
|
||||
bool success = mcp.setChannelValue(MCP4728_CHANNEL_A, voltage(value_mV));
|
||||
button_state_now = digitalRead(PIN_BTN);
|
||||
if (button_state_now != button_state_old)
|
||||
{
|
||||
delay(10); // debounce delay
|
||||
button_state_now = digitalRead(PIN_BTN);
|
||||
if (button_state_now != button_state_old)
|
||||
{
|
||||
button_state_old = button_state_now;
|
||||
if (button_state_now == HIGH)
|
||||
{
|
||||
if(value_mV < 2000) value_mV += (1000/12);
|
||||
if(value_mV >= 2000) value_mV = 0;
|
||||
|
||||
if (success) Serial.printf("DAC A = %u -> mV: %u\r\n", voltage(value_mV), value_mV);
|
||||
else Serial.println("Schreibfehler am MCP4728!");
|
||||
delay(200);
|
||||
|
||||
//value_mV = value_mV > 0 ? value_mV/2 : VREF_mV;
|
||||
if (mcp.setChannelValue(MCP4728_CHANNEL_A, voltage(value_mV), VREF_CONF_IN_USE)) Serial.printf("DAC A = %u -> mV: %u\r\n", voltage(value_mV), value_mV);
|
||||
else Serial.println("Error: Neuer MCP4728 Wert konnte nicht gesetzt werden!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user