Для отлавливания нуля достаточно 1-го вывода , а димировать можно хоть 20 каналов.
По твоей ссылке схема на 120 вольт и 60 Гц, так что не совсем подходит для наших условий
Для отлавливания нуля достаточно 1-го вывода , а димировать можно хоть 20 каналов.
По твоей ссылке схема на 120 вольт и 60 Гц, так что не совсем подходит для наших условий
Последний раз редактировалось Chip; 18.11.2011 в 14:13.
Планирую использовать регистр 74hc595... Его скорости будет достаточно для регулирования яркости этим методом?
Последний раз редактировалось knyaz2020; 20.11.2011 в 17:13.
Я не совсем понял вопроса
Ну хочу, чтобы яркость менялась при использовании ключа 74hc595
но что-то не получается...
PHP код:
int data = 16;
int latch = 17;
int clock = 18;
//Used for single LED manipulation
int ledState = 0;
const int ON = HIGH;
const int OFF = LOW;
// int dimmer1Pin = 10; //output to opto triac (MOC 3010/3020)
volatile int freqAdjTime = 10; //set to 10 for 50 Hz, and 8 for 60 Hz
volatile long nextOnTime = 0; // variable for storing a time (in millis) for when to fire the output next
volatile int outputValue; // Varialble for storing the output value 0-255
//unsigned int inputValue; // Variable for storing input value (ie. a potentiometer)
long lastMillis; // for timing purposes
void setup()
{
pinMode(data, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(latch, OUTPUT);
attachInterrupt(0, zero, RISING); //Attachment of zero crossing detection, which means the interrupt rutine "zero" is called each 20 millis
}
void loop()
{
if (nextOnTime < millis()) { //is it time to set pin on?
changeLED(2,ON); // then set it
delay(2); // wait a bit to be sure the triac is on
changeLED(2,OFF); // turn of the trigger to be sure it is not trigger in the very beginning of next halfperiod
}
// A loop that slowly increases outputvalue
if (millis()-lastMillis > 250 ) { //increase output each fourth of a second
outputValue++; //increase outputvalue by one
//Check if max is reached
if (outputValue > 255) { // output = maximum
outputValue = 0; // set output to zero
}
}
}
void zero()
{
// set a volatile variable with the millis value + (the value of the desired output (0-255) multiplied by the freq adj time)
nextOnTime = millis() + (freqAdjTime * outputValue); //how long will this calculation take? too long to enable low output??
}
void updateLEDs(int value){
digitalWrite(latch, LOW); //Pulls the chips latch low
shiftOut(data, clock, MSBFIRST, value); //Shifts out the 8 bits to the shift register
digitalWrite(latch, HIGH); //Pulls the latch high displaying the data
}
//These are used in the bitwise math that we use to change individual LEDs
//For more details [url]http://en.wikipedia.org/wiki/Bitwise_operation[/url]
int bits[] = {B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000};
int masks[] = {B11111110, B11111101, B11111011, B11110111, B11101111, B11011111, B10111111, B01111111};
/*
* changeLED(int led, int state) - changes an individual LED
* LEDs are 0 to 7 and state is either 0 - OFF or 1 - ON
*/
void changeLED(int led, int state){
ledState = ledState & masks[led]; //clears ledState of the bit we are addressing
if(state == ON){ledState = ledState | bits[led];} //if the bit is on we will add it to ledState
updateLEDs(ledState); //send the new LED state to the shift register
}
Последний раз редактировалось Chip; 20.11.2011 в 18:58.
Так ты в регистр отправляешь всегда значение data=16
Это почему? Вот так:
светодиод мигает, т.э. регистр работает как нужно...changeLED(2,ON);
delay(200);
changeLED(2,OFF);
delay(200);
Т.э. changeLED(2,ON); аналогично digitalWrite(dimmer1Pin, HIGH);
Последний раз редактировалось knyaz2020; 20.11.2011 в 19:05.
Я про регистр 74hc595
так говорю же, что регистр переключает светодиоды нормально.
В выше приведенной программе сделано так, что функция changeLED(2,ON); аналогична функции digitalWrite(dimmer1Pin, HIGH);
т.э. светодиодами можно управлять аналогичкак как и без регистра.
не работает почему-то подпрограмма диммера...
Проверь срабатывает прерывание при прохождении через ноль
а как такое можно проверить?
Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)