Created
February 22, 2016 14:48
-
-
Save me-no-dev/2e185a909000f6ac9605 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define TRIAC_PIN 5 | |
#define ZERO_CROSS_PIN 4 | |
#define DEBOUNCE_TIME 9000 //9ms - 10ms is the pulse period | |
static uint32_t lastPulse = 0; | |
static uint16_t period = 5000; //5ms - 50% for each half wave | |
void ICACHE_RAM_ATTR onTimerISR(){ | |
if(GPIP(TRIAC_PIN)){//OUTPUT is HIGH | |
GPOC = (1 << TRIAC_PIN);//low | |
timer1_write(60);//12us | |
} else GPOS = (1 << TRIAC_PIN);//high | |
} | |
void ICACHE_RAM_ATTR onPinISR(){ | |
uint32_t now = micros(); | |
if(now - lastPulse < DEBOUNCE_TIME) return; | |
lastPulse = now; | |
GPOS = (1 << TRIAC_PIN);//high | |
timer1_write(period * 5); | |
} | |
void setup(){ | |
pinMode(TRIAC_PIN, OUTPUT); | |
pinMode(ZERO_CROSS_PIN, INPUT); | |
GPOS = (1 << TRIAC_PIN);//high | |
timer1_attachInterrupt(onTimerISR); | |
timer1_enable(TIM_DIV16, TIM_EDGE, TIM_SINGLE); | |
attachInterrupt(ZERO_CROSS_PIN, onPinISR, RISING); | |
} |
@devyte , I think we can use the same onTimerISR()
function to control 2 triacs as both lamps would be having the same zero crossing?
can i use interrupts instead of timers
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks devyte!