我試圖通過attiny85接受通過I2C發送的命令來調暗燈泡。我的問題是燈泡幾乎不變暗,並且閃爍很多。Attiny85用於調光燈泡的AC相位控制
我的電路在這裏可以看到: Attiny85 dimming circuit controlled over I2C
光隔離器(以及因此三端雙向可控硅)經由引腳2(AKA PB3,AKA PCINT3)和AC控制零交叉檢測在銷3進行( AKA PB4,AKA PCINT4)Attiny85
該代碼使用引腳變化中斷使能,而不是單個外部中斷使能,因爲外部中斷引腳是引腳7(又名PB2),用作I2C通信的SCL。
使用8MHz的內部時鐘,定時器/計數器預分頻器爲1024.這意味着我有一個有效的輸入範圍(見代碼中的level
變量)大約爲0-65。我的交流電源是美國(60Hz)。
#include <avr/interrupt.h>
#include <avr/io.h>
#include <TinyWireS.h>
#define PULSE 4 //trigger pulse width (counts)
#define I2C_SLAVE_ADDR 0x4 // the 7-bit address (remember to change this when adapting this example)
byte trigger = 3;
byte detector = 4;
byte level = 50;
byte maxLevel = 65;
byte minLevel = 0;
void setup() {
TinyWireS.begin(I2C_SLAVE_ADDR); // join i2c network
TinyWireS.onRequest(requestEvent); //setup i2c requester
digitalWrite(detector, HIGH); //enable pull-up resistor
pinMode(trigger, OUTPUT);// Set AC Load pin as output
TCCR1 = 0; //stop timer
OCR1A = level; //initialize the comparator
TIMSK = _BV(OCIE1A) | _BV(TOIE1); //interrupt on Compare Match A and enable timer overflow interrupt
GIMSK = 0b00100000; //Enable pin change interrupt
PCMSK = 0b00010000; //PB4, physical pin 3 PCINT4
TCCR1 = B00001011; //Prescale the timer
sei(); // Turn on interrupts
}
ISR(PCINT0_vect){ //interrupt looking for zero crossing
TCNT1 = 0; //reset timer - count from zero
OCR1A = level;
TCCR1 = B00001011;// prescaler on 1024, see table 12-5 of the tiny85 datasheet
}
ISR(TIMER1_COMPA_vect){ //comparator match
digitalWrite(trigger,HIGH); //set triac gate to high
TCNT1 = 255-PULSE; //trigger pulse width for a few cycles for triac to latch on. 255 bc the counter can only count up to 255
}
ISR(TIMER1_OVF_vect){ //timer1 overflow
digitalWrite(trigger,LOW); //turn off triac gate
TCCR1 = 0; //disable timer stop unintended triggers
}
void loop() {}
void requestEvent(){
if (TinyWireS.available()) {
level = TinyWireS.receive();
if (level > maxLevel) {
level = maxLevel;
}
else if (level < minLevel){
level = minLevel;
}
}
TinyWireS.send(OCR1A);
}
我試過各種燈泡,沒有任何工作比另一個更好。
這裏是在示波器上的零交叉檢測器(黃色)和觸發(藍色),因爲我把它不同的調光級別Bad phone video
我想感謝所有和任何幫助的視頻。謝謝。
只是快速的答覆。你試過什麼樣的燈泡?白熾燈和鹵素燈泡是可調光的,LED和熒光燈(氖燈和CFL)不是。此外,我會添加一個緩衝網...然後..爲什麼輸出黃色波浪單端? – frarugi87
白熾燈和可調光LED。 是的,我想過緩衝器,我現在只是沒有手上的零件。我認爲這會有所幫助,但我認爲這不會改變我目前的問題。 – thread9000
黃色是來自零交叉檢測器的響應。這是什麼被喂入attiny85。 – thread9000