a_zakharov

Members
  • Публикации

    27
  • Зарегистрирован

  • Посещение

Репутация

1 Обычный

О a_zakharov

  • Звание
    Новенький

Информация

  • Город
    Сочи

Электроника

  • Стаж в электронике
    3-5 лет
  1. тьфу блин! Верно. Спасибо большое.
  2. Здравствуйте. Помогите разобраться с диммируемым драйвером для LED-ламп. Блок собран на микросхеме iW3617 (даташит: iW3617-iWatt.pdf). Блок выдает постоянные 350mA. Задача переделать его на 280-300mA. Имеется схема из даташита: и формула от туда же: Если я правильно понимаю, то нужно поменять всего 1 резистор, но где он на схеме? Правильно ли я понимаю, что это R14? Заранее спасибо.
  3. Помехи На Ws2812

    У меня в распоряжении появился простенький осциллограф, и тут я полез разбираться. Основную часть помех удалось устранить. Их источником был драйвер светодиодного светильника, установленного на той же линии 220V. Хоть я в нем и обнаружил на входе X2-фильтрующий конденсатор, но все равно при включении его в сеть - появляются ВЧ помехи в десятки вольт амплитудой. После отключения этого драйвера, картина на порядок улучшилась, но все равно время от времени, появляются мелкие артефакты. Воткнув осциллограф в сеть , я обнаружил вот такую картину(во вложении). Появляется такая штука раз в несколько секунд, я даже представить не могу, что может так гадить в сеть! Ну и плюс грешу на синфазные помехи, которые без заземления не увидеть, не убрать я не могу
  4. Помехи На Ws2812

    Насчет ферритовой втулки хорошая идея, попробую. А минус на профиль вешать пробовал - ни какого эффекта...
  5. Помехи На Ws2812

    Да, я всё время забываю что в России нет заземления в розетках А может попробовать занулить? Может быть... Но я думаю, что виной всему не сама синусоида 220В, а более высокочастотные составляющие, гуляютщие по сети...
  6. Помехи На Ws2812

    Все правильно, лед с встроенной микросхемой.
  7. Помехи На Ws2812

    Это так, но в здании отсутствует заземление, как таковое. Я уже об этом думал...
  8. Помехи На Ws2812

    Это однозначно помехи от кабеля 200В. Когда я подключаю блоки питания отдельными внешними проводами, а линия в профиле обесточена - все работает корректно, но стоит в это время дать питание на провод, идущий параллельно ленте - сразу проявляются помехи...
  9. Здравствуйте! Столкнулся с проблемой при прокладке светодиодной ленты на RGB-светодиодах WS2812. Для тех, кто не знает, это светодиод с индивидуальным цифровым управлением яркостью и цветом свечения. Управляющий сигнал частотой 800кГц, передается по одному проводу и кодируется отношением длительности наличия и отсутствия импульса. Так вот, лента у меня должна находиться в алюминиевом профиле как на картинке, и в этом же профиле проложен сетевой провод 220V. Проблема заключается в том, что когда на сетевом проводе присутствует напряжение, при подаче управляющего сигнала, лента начинает беспорядочно мигать. При этом управление осуществляется, но с явными искажениями, т.е. в целом каждый светодиод работает правильно, но моментами вспыхивает произвольным цветом. Сразу оговорюсь, что длина линии связи между диодами всего 11мм, и сам чип WS2812 устроен так, что он отрезает свой "кусок" входящих данных, а на выходе генерирует новый усиленый, что подсказывает, что помехи от силового провода влияют не на линию передачи данных, а на сами микросхемы. Объясните, пожалуйста, если я в чем-то не прав. И есть ли выход из данной ситуации.
  10. Собираю устройство, которое подключается к DMX-512 контроллеру, получает от него данные и отображает уровни каналов на дисплее. Использован двухстрочный символьный дисплей, подключенный через SPI-драйвер. В первой строке отображаются уровни каналов в виде столбиков, во второй - первый отображаемый на дисплее канал и общее количество каналов, на которые контроллер выдает данные. Есть возможность листать диапазон отображаемых каналов вдумя кнопками. Все собрал, прошил, и даже работает, но есть один косяк. В момент запуска микроконтроллера в первом отображаемом кадре вся информация верна, при отображении последующих кадров, arduino кудато-съедает несколько каналов. Т.е. если контроллер выдает 60 каналов, то в момент включения или перезагрузки arduino, отображается общее количество каналов 60 и первый канал на дисплее является действительно первым. Но сразу после смены кадров, отображается количество кадров 57, а первым отображается, в реальности пятый. Пробовал еще загонять сигнал на 30 каналов - тоже самое, только сначала все правильно, а потом показывает общее количество каналов 29, а на месте первого показывает вообще непонятно что. Все остальное работает без проблем - прокрутка листает. Да, кстати, если выдавать сигнал на 16 каналов, то отображается все коректно. У же целый день смотрю в код и не пойму в чем косяк. Может кто-нибудь свежим взглядом увидит... Вот код: #include <Conceptinetics.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #define DMX_SLAVE_CHANNELS 100 //ЕСЛИ БУДУТ ПРОБЛЕМЫ ТО УМЕНЬШИТЬ LiquidCrystal_I2C lcd(0x27,16,2); DMX_Slave dmx_slave ( DMX_SLAVE_CHANNELS ); unsigned long lastFrameReceivedTime; unsigned long lastFrameTranceivedTime; byte qa[8] = { B00000, B00000, B00000, B00000, B00000, B00000, B00000, B11111 }; byte ws[8] = { B00000, B00000, B00000, B00000, B00000, B00000, B11111, B11111 }; byte ed[8] = { B00000, B00000, B00000, B00000, B00000, B11111, B11111, B11111 }; byte rf[8] = { B00000, B00000, B00000, B00000, B11111, B11111, B11111, B11111 }; byte tg[8] = { B00000, B00000, B00000, B11111, B11111, B11111, B11111, B11111 }; byte yh[8] = { B00000, B00000, B11111, B11111, B11111, B11111, B11111, B11111 }; byte uj[8] = { B00000, B11111, B11111, B11111, B11111, B11111, B11111, B11111 }; byte ik[8] = { B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111 }; int lvAr[DMX_SLAVE_CHANNELS]; // Входящие значения DMX-512 каналов int outAr [16]; // Значения каналов, выводимые на дисплей int chRx; // количество принятых каналов /////////////////////!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! #define KEY_BUTTON_1_PIN A2 //пин к которому подключена панель управления int KeyButton1Value=0; //значение с панели управления long KeyButton1TimePress=0; //последнее время когда на панели не было нажатых кнопок long KeyButton1Latency=100000; //задержка перед считыванием состояния панели управления после нажатия int KeyButton1WasChecked=0; //метка означающая что нажатие кнопки на панели было обработано long KeyButton1RepeatLatency=1500000; //время после которого удерживание кнопки начинает засчитываться как многократные быстрые нажатия long KeyButton1RepeatTimePress=0; //вспомогательная переменная для обработки повторных нажатий long KeyButton1TimeFromPress=0; //переменная для хранения времени между временем когда не было зажатых кнопок и временем проверки long KeyBoardTime1=0; // long KeyBoardTime2=0; // Переменные для обработки времени для обработки событий клавиатуры long KeyBoardTimeInterval=25000; // int start = 0; // +1 номер канала, который выводится на экран первым void setup() { dmx_slave.enable (); dmx_slave.setStartAddress (1); dmx_slave.onReceiveComplete ( OnFrameReceiveComplete ); Wire.begin(); lcd.init(); lcd.backlight(); lcd.home(); lcd.createChar(0,qa); lcd.createChar(1,ws); lcd.createChar(2,ed); lcd.createChar(3,rf); lcd.createChar(4,tg); lcd.createChar(5,yh); lcd.createChar(6,uj); lcd.createChar(7,ik); lcd.clear(); pinMode (KEY_BUTTON_1_PIN, INPUT); pinMode (10, OUTPUT); pinMode (11, OUTPUT); pinMode (12, OUTPUT); pinMode (13, OUTPUT); } void loop() { digitalWrite(10, 1); // 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 //проверка таймера для обработки нажатий клавиатуры KeyBoardTime2=micros(); if ((KeyBoardTime2-KeyBoardTime1)>KeyBoardTimeInterval) { KeyBoardTime1=KeyBoardTime2; KeyBoardCalculate(); } digitalWrite(10, 0); // 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 digitalWrite(13, 1); // 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 if (lastFrameReceivedTime > lastFrameTranceivedTime){ printLevel (outAr); // Вывод значений на дисплей lastFrameTranceivedTime = millis(); } digitalWrite(13, 0); // 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 } void OnFrameReceiveComplete (unsigned short channelsReceived) { digitalWrite(11, 1); // 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 chRx = int(channelsReceived); for (int i=0; i<chRx; i++){ lvAr[i] = dmx_slave.getChannelValue (i+1); } for (int i=0; i<16; i++){ outAr[i]=lvAr[i+start]; } lastFrameReceivedTime = millis(); digitalWrite(11, 0); // 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 } void printLevel(int lv[16]) { digitalWrite(12, 1); // 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 byte dispLv[16]; for (int i=0; i<16; i++){ switch (lv[i]/32) { //// добавить регулировку чувствительности case 0: dispLv[i]=0; break; case 1: dispLv[i]=1; break; case 2: dispLv[i]=2; break; case 3: dispLv[i]=3; break; case 4: dispLv[i]=4; break; case 5: dispLv[i]=5; break; case 6: dispLv[i]=6; break; case 7: dispLv[i]=7; break; } } digitalWrite(12, 0); // 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 digitalWrite(12, 1); // 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 lcd.setCursor(0, 0); for (int i=0; i<16; i++){ lcd.write(dispLv[i]); } lcd.setCursor(0, 1); // lcd.print("^"); // Вывод общего количества lcd.print(" Total:"); // принятых каналов lcd.print(chRx); // lcd.setCursor(1, 1); // и номер первого канала на дисплее lcd.print(start+1); // digitalWrite(12, 0); // 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 } void UpPress() { if((start) < (chRx-15)) start++; } void DownPress() { if(start > 0) start--; } void ButtonPress() { if ((KeyButton1Value>150) and (KeyButton1Value<300)) { UpPress(); } if ((KeyButton1Value>350) and (KeyButton1Value<650)) { DownPress(); } } void KeyBoardCalculate() { //Часть отработки нажатия клавиши KeyButton1Value=analogRead(KEY_BUTTON_1_PIN); //если сигнал с кнопки нулевой то обнуляем метку обработки нажатия if ((KeyButton1Value<=50) or (KeyButton1Value>=1000)) { //Сохраняем время последнего сигнала без нажатой кнопки KeyButton1TimePress=micros(); KeyButton1WasChecked=0; KeyButton1RepeatTimePress=0; } KeyButton1TimeFromPress=micros()-KeyButton1TimePress; //исключаем шумы if ((KeyButton1Value>50) and (KeyButton1Value<1000)) { //отработка первого нажатия if ( ((KeyButton1TimeFromPress)>KeyButton1Latency) and (KeyButton1WasChecked==0)) { KeyButton1Value=analogRead(KEY_BUTTON_1_PIN); ButtonPress(); KeyButton1WasChecked=1; KeyButton1RepeatTimePress=0; } //отработка повторных нажатий if ( ((KeyButton1TimeFromPress)>(KeyButton1RepeatLatency+KeyButton1RepeatTimePress)) and (KeyButton1WasChecked==1)) { KeyButton1Value=analogRead(KEY_BUTTON_1_PIN); ButtonPress(); KeyButton1RepeatTimePress=KeyButton1RepeatTimePress+100000; } } }
  11. а как же в даташите на микросхему: Output voltage : 12V ???
  12. И в чем же, по вашему мнению, проблема в моей схеме? С удовольствием выслушал бы прогнозы о работе моей схемы!
  13. Да в принципе можно, конечно, но я решил, что так надежней, да и место на плате девать некуда было)))))
  14. Ну, в общем, подытожу тему, если кому интересно.. Окончательный вариант схемы: Платы от китайского производителя http://hqew.net: Устройство почти в сборе: Все работает отлично. Нагружал до 8А на канал - в динамических режимах, транзисторы, даже теплыми не становились! Спасибо всем, кто принял участие в этой теме. Одно только опечалило. Когда уже все было готово наткнулся на такое вот устройство: http://www.arlight.r...44w-018064.html Назначение тоже самое, компактные габариты, дифференциальная линия передачи данных, низкая стоимость готового устройства делает бессмысленным изобретать что-то свое в большинстве случаев - это плюсы. Но есть и минусы: мое устройство позволяет в теории подключать до 2000шт. последовательно, что дает более 6000 каналов против 170шт.(510 DMX-каналов), ну и гораздо большая выходная мощность. Китайцы, как всегда опередили...
  15. ну полевик полевику рознь... И такая частота мне здесь ни к чему...