mirror of
https://github.com/erik-toth/audio-synth.git
synced 2025-12-06 08:00:02 +00:00
83 lines
1.8 KiB
C++
83 lines
1.8 KiB
C++
#include <Wire.h>
|
|
#include <Adafruit_MCP4728.h>
|
|
|
|
#define BAUDRATE 115200
|
|
|
|
#define I2C_SDA 15
|
|
#define I2C_SCL 16
|
|
#define I2C_FREQ 400000
|
|
|
|
#define DAC_MAX 4095
|
|
#define DAC_MIN 0
|
|
#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);
|
|
}
|
|
|
|
void setup()
|
|
{
|
|
Serial.begin(BAUDRATE);
|
|
delay(1000);
|
|
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, 4095, VREF_CONF_IN_USE);
|
|
Serial.print("\n\rDAC-Kanal A auf 0 gesetzt");
|
|
delay(1000);
|
|
}
|
|
|
|
|
|
void loop()
|
|
{
|
|
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 (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!");
|
|
}
|
|
}
|
|
}
|
|
}
|