Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
ac dimming
16-12-2014, 03:33 AM,
#1
ac dimming
this code is for the arduino, i would like to convert this to pinguino. Any help would be appreciated.
thank you
fred


/
Code:
/*
AC Light Control

Updated by Robert Twomey <rtwomey@u.washington.edu>

Changed zero-crossing detection to look for RISING edge rather
than falling.  (originally it was only chopping the negative half
of the AC wave form).

Also changed the dim_check() to turn on the Triac, leaving it on
until the zero_cross_detect() turn's it off.

Adapted from sketch by Ryan McLaughlin <ryanjmclaughlin@gmail.com>
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1230333861/30

*/

#include <TimerOne.h>           // Avaiable from http://www.arduino.cc/playground/Code/Timer1

volatile int i=0;               // Variable to use as a counter
volatile boolean zero_cross=0;  // Boolean to store a "switch" to tell us if we have crossed zero
int AC_pin = 11;                // Output to Opto Triac
int dim = 0;                    // Dimming level (0-128)  0 = on, 128 = 0ff
int inc=1;                      // counting up or down, 1=up, -1=down

int freqStep = 65;    // This is the delay-per-brightness step in microseconds.
// It is calculated based on the frequency of your voltage supply (50Hz or 60Hz)
// and the number of brightness steps you want.
//
// The only tricky part is that the chopper circuit chops the AC wave twice per
// cycle, once on the positive half and once at the negative half. This meeans
// the chopping happens at 120Hz for a 60Hz supply or 100Hz for a 50Hz supply.

// To calculate freqStep you divide the length of one full half-wave of the power
// cycle (in microseconds) by the number of brightness steps.
//
// (1000000 uS / 120 Hz) / 128 brightness steps = 65 uS / brightness step
//
// 1000000 us / 120 Hz = 8333 uS, length of one half-wave.

void setup() {                                      // Begin setup
 pinMode(AC_pin, OUTPUT);                          // Set the Triac pin as output
 attachInterrupt(0, zero_cross_detect, RISING);   // Attach an Interupt to Pin 2 (interupt 0) for Zero Cross Detection
 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() {    
 zero_cross = true;               // set the boolean to true to tell our dimming function that a zero cross has occured
 i=0;
 digitalWrite(AC_pin, LOW);       // turn off TRIAC (and AC)
}                                

// Turn on the TRIAC at the appropriate time
void dim_check() {                  
 if(zero_cross == true) {              
   if(i>=dim) {                    
     digitalWrite(AC_pin, HIGH); // turn on light      
     i=0;  // reset time step counter                        
     zero_cross = false; //reset zero cross detection
   }
   else {
     i++; // increment time step counter                    
   }                                
 }                                  
}                                  

void loop() {                        
 dim+=inc;
 if((dim>=128) || (dim<=0))
   inc*=-1;
 delay(19);
}
Reply
16-12-2014, 09:04 AM,
#2
RE: ac dimming
Hi

For which kind of board you want convert the program?? P8 or P32??


Bye Bye, Moreno
Reply
16-12-2014, 11:35 AM,
#3
RE: ac dimming
I would like to convert for p8
Thanks fred
Reply
16-12-2014, 03:32 PM,
#4
RE: ac dimming
Hi

Sorry but I know only P32 interrupt which are quite different from P8.

In any case P8 Interrupts handling are very similar to Arduino.

You can use as sample the example examples\08.Interrupt\OnChange.pde which use OnTimer0 and OnChangePin0


Bye Bye, Moreno
Reply
16-12-2014, 04:16 PM,
#5
RE: ac dimming
(16-12-2014, 03:32 PM)moreno Wrote: Hi

Sorry but I know only P32 interrupt which are quite different from P8.

In any case P8 Interrupts handling are very similar to Arduino.

You can use as sample the example examples\08.Interrupt\OnChange.pde which use OnTimer0 and OnChangePin0


Bye Bye, Moreno

OK  i will try it thank you
fred
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)