[sudo-discuss] multiple lamp dimming with a single arduino
robb
sf99er at gmail.com
Wed Aug 24 22:51:51 PDT 2016
and there are 5 timers on the mega...
:/
On Wed, Aug 24, 2016 at 10:40 PM, robb <sf99er at gmail.com> wrote:
> weird i was just about to compose an email about one other possible
> solution:
> As long you create a new 'board' entry in the arduino boards.txt file
> showing the 20Mhz Fclock value the time based functions should work fine as
> they use the Fclock value defined in that board selection to setup the
> proper timing value for timer0. Same with the hardware serial baud rate
> calculations used in serial.begin function.
>
> On Wed, Aug 24, 2016 at 10:38 PM, Jake <jake at spaz.org> wrote:
>
>> robb,
>>
>> since we got the zero-crossing detection working, now it's a matter of
>> deciding how many lamps to control with a single arduino. I believe this
>> instructable shows software that doesn't rely on the chip's timer being
>> tied to the triac control pins, meaning that it could be used to control 8
>> or more triacs with a single plain arduino.
>>
>> http://www.instructables.com/id/3-channel-Dimmerfader-for-Ar
>> duino-or-other-microco/?ALLSTEPS
>>
>> /*
>> AC Light Control
>> Ryan McLaughlin <ryanjmclaughlin at gmail.com>
>> with slight modifications
>> */
>>
>> #include <TimerOne.h> // http://www.arduino.cc/playgrou
>> nd/Code/Timer1
>> #define PINS 3
>> volatile int pinCount[PINS]; // make volatile to make available in
>> interrupt
>> volatile boolean zero_cross=0; // Boolean to store a "switch" to tell us
>> if we have crossed zero
>> int AC_pins[] = {3,4,5}; // Stup the pin numbers
>> int AC_dim[PINS]; // Holds Dimming levels (0-128) 0 = on,
>> 128 = 0ff
>> int freqStep = 78; // Set the delay for the frequency of
>> power (65 for 60Hz, 78 for 50Hz) per step (using 128 steps)
>> // freqStep may need some adjustment
>> depending on your power the formula
>> // you need to us is
>> (500000/AC_freq)/NumSteps = freqStep
>>
>> void setup() {
>> for(int a=0; a < PINS; a++) { //set the pins to output
>> pinMode(AC_pins[a],OUTPUT);
>> pinCount[a] = 0; // keeps track of the time in the cycle
>> AC_dim[a] = 0; // dimming level set to zero
>> }
>> attachInterrupt(0, zero_cross_detect, FALLING); // Attach Interrupt to
>> Pin 2 (interrupt 0) for Zero Cross Detection
>> Serial.begin(9600);
>> Timer1.initialize(freqStep); // Initialize TimerOne
>> library for the freq we need
>> Timer1.attachInterrupt(dim_check, freqStep); // Use the TimerOne
>> Library to attach an interrupt
>> // to the function we
>> use to check to see if it is
>> // the right time to
>> fire the triac. This function
>> // will now run every
>> freqStep in microseconds.
>> }
>>
>> void zero_cross_detect() { // function to be fired at the zero
>> crossing
>> zero_cross = 1; // set flag to tell dimming function
>> zero cross has occured
>> } // End zero_cross_detect
>>
>> void dim_check() { // Function will fire the triac at
>> the proper time
>> if(zero_cross == 1) { // First check to make sure the
>> zero-cross has happened else do nothing
>> for(int a=0; a < PINS; a++) {
>> if(pinCount[a] >= AC_dim[a]) { // Check and see if i has
>> reached the dimming value we want
>> digitalWrite(AC_pins[a], HIGH); // Fire the Triac
>> delayMicroseconds(5); // Pause briefly to ensure the
>> triac turned on
>> digitalWrite(AC_pins[a], LOW); // Turn off the Triac gate
>> (Triac will turn off at the next zero cross)
>> pinCount[a] = 0; // Reset the accumulator
>> zero_cross = 0; // Reset the zero_cross so it
>> may be turned on again at the next zero_cross_detect
>> } else {
>> pinCount[a]++; // If the dimming value has not
>> been reached, incriment the counter
>> }
>> }
>> }
>> }
>>
>>
>> void loop() {
>> // This is simply making all outputs cycle through bright-dark, out of
>> time with each other.
>> for(int i=0; i<127; i ++) {
>> for(int a=0; a < PINS; a++) {
>> int ii = i+42; //this is the bit that puts the
>> blinking lights out of sync with one another
>> if(ii > 127) ii -= 127;
>> AC_dim[a] = ii;
>> }
>> delay(50);
>> }
>> }
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://sudoroom.org/pipermail/sudo-discuss/attachments/20160824/2d47d351/attachment.html>
More information about the sudo-discuss
mailing list