For a more detailed description please take a look at the Part 1: MPDMv7.5 AC Dimmer devboard overview
MPDMv7.5 AC Dimmer devboard is also available on Tindie Store
A very simple MPDMv7.5 Arduino IDE driver example:
const int vcntPin = 13; // the pin that the MPDMv4 VCNT pin is attached to
const int ON = 16; // digital ON/OFF pin
byte brightness = 75; // Brightness value (VCNT)
// 10-bit resolution for PWM: 0->1023
// VCNT defined interval: 0->850
void setup()
{
// initialize the serial communication + NO LINE ENDING:
Serial.begin(9600);
// initialize the ledPin as an output:
pinMode(vcntPin, OUTPUT);
// initialize digital ON/OFF pin as an output.
pinMode(ON, OUTPUT);
// set default brightness value
analogWrite(vcntPin, brightness);
//default Dimmer ON
digitalWrite(ON, HIGH); // turn the AC Dimmer ON (HIGH is the voltage level)
delay(500); // wait for 1/2 second
//default Dimmer OFF
// digitalWrite(ON, LOW); // turn the AC Dimmer OFF by making the voltage LOW
// delay(500); // wait for a second
Serial.println("MPDMv7.5 init done.\n Input your dimming level (1-89) ");
}
void loop() {
// check if data has been sent from the computer:
if (Serial.available()) {
// read the most recent byte (need to be from 1 to VCNT MAX (89 for 105W ECO Halogen lightbulb, 240VAC/50Hz)) + NO LINE ENDING!
brightness = Serial.parseInt();
Serial.print("Command received : ");
Serial.println(brightness);
// set the brightness of the lightbulb:
if (brightness > 89)
{
brightness = 89; //define your own upper VCNT voltage control interval here
}
if (brightness == 0) //turn OFF
{
digitalWrite(ON, LOW); // turn the AC Dimmer OFF by making the voltage LOW
// delay(500); // wait for 1/2 second
}
else
{
analogWrite(vcntPin, brightness*10);
digitalWrite(ON, HIGH); // turn the AC Dimmer ON (HIGH is the voltage level)
//delay(500); // wait for 1/2 second
}
}
}
2 Comments
oori · April 12, 2018 at 1:03 pm
Thanks. Would be happy to see:
1. Extended version with 12bit DAC and ESP8266
2. Your Arduino’s board settings (assuming USBProg).
oori · April 12, 2018 at 1:30 pm
I’ll reply myself to #1:
—-
#include
const int i2cAddress = 96;
void setup() {
Wire.begin();
}
void dim(float v) {
int cmdv = (4096*v);
int cmdh = cmdv >> 8;
int cmdl = cmdv – ( cmdh << 8 );
Wire.beginTransmission(i2cAddress);
Wire.write(cmdh);
Wire.write(cmdl);
Wire.endTransmission();
}
—-