Проблема с выводом PWM-сигналом на ATtiny45

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Eirin, 30 май 2013.

  1. Deliaz

    Deliaz Нуб

    Если Вы обратили внимание, то там на Аттини заливают стандартный ардиуино-скетч Blink. Тогда может и с analogWrite сработает?
     
  2. ИгорьК

    ИгорьК Оракул Модератор

    Не сработает. В самых первых постах этой ветки говорилось о том, что у тиньки только два канала для такой работы. Почитайте внимательно первые сообщения.
     
  3. Megakoteyka

    Megakoteyka Оракул Модератор

    Не очень давно на форуме было большое обсуждение на тему "как вывести pwm на 3 ноги attiny". Там настройка идет через регистры, но ничего особо сложного нет. Возможно, там найдется ответ.
     
  4. ИгорьК

    ИгорьК Оракул Модератор

    Вот в этой ветке и обсуждалось. Через регистры выводится, а методами ардуино только на две ноги.
     
  5. Deliaz

    Deliaz Нуб

    Боюсь в регистрах утону и не успею к сроку.
    Но в любом случае обязательно попробую!
     
  6. ИгорьК

    ИгорьК Оракул Модератор

    Я же в 23 посте дал полный код лампы настроения. Завтра скомпилирую его вам, а вы просто залейте - наверняка есть способ. Коль вопрос времени. Но это для 45/85, если у вас 13 надо будет кое что проверить. Возможно таймеры 13 просто не позволят это сделать. Или позволят, но код придется править.
     
    Последнее редактирование: 15 дек 2013
  7. Deliaz

    Deliaz Нуб

    ИгорьК, спасибо Вам за помощь! Но прошу, не тратьте на меня время.
    Как я говорил ранее, у меня сейчас на руках ничего нет, кроме паяльника :) На будущей недели заберу все ардуинки и диоды обратно, и тогда попробую Ваш код и примеры из интернета. Обязательно отпишусь об успехах.
    p.s. аттини у меня даже еще не куплены. Планирую вот приобрести 13-45-85... что будет под-рукой.
     
  8. ИгорьК

    ИгорьК Оракул Модератор

    Что будет не стоит покупать и вот почему. Доподлинно известно, что 45/85 имеют подходящий объем памяти и необходимые таймеры для ШИМ. А вот что с памятью и таймерами 13 - попробуйте разобраться перед покупкой. Как минимум без всякой микросхемы надо написать и скомпилировать программу, понять ее размер и следовательно возможность быть записанной в память, и особо это касается 13.
     
  9. fr0ster

    fr0ster Гик

    1 Скетчи для ардуино, если не использовать Serial и того, чего в ATtiny нет, льются на тиньки и работают. Причем льются из АрдуиноИДЕ, во всяком случае на тиньки 45-85. Естественно надо лить через программатор или ардуинку в роли программатора.
    2 Аппаратный ШИМ для управления RGB к примеру на ATtiny45-85 возможен, код я приводил, там два таймера в режиме PWM(ШИМ на аглицком) могут дергать 3 ножками, что и требуется доказать.
    3 На ATtiny13 таймер один, потому на тиньке13 RGB можно использовать софтовый ШИМ. Вообще реализовав софтовый ШИМ можно дергать все доступные ножки, а не только две.
    4 Существует библиотека, которая реализует некоторое подмножество ардуиновской библиотеки для ATtiny13. Типа analogWrite digitalWrite и тд.
    5 Кроме АтмелСтудио и АрдуиноИДЕ код чудесно пишетс, компилится и шьется Eclipse с плагинами. На сайте ардуины есть CodeBlocks настроенный под атмелл и ардуино конкретно.
     
  10. Deliaz

    Deliaz Нуб

    Добрый день.
    Добрался до тиньки: купил 45ю.

    fr0ster, Ваш код из поста #8 отлично работает. Спасибо!

    ИгорьК, и Вам спасибо! С мелочными правками отлично запустил Ваш код.
    У меня только один вопрос: пока не совсем понял, почему иногда цвет «сбрасывается»? В большинстве случаев цвет меняется плавно, но иногда бывает рывком.
     
  11. acos

    acos Официальный гик Администратор

    А рывком меняется на одно и то же значение или на разные? Reset к Vcc подтянут, или в воздухе висит? Может просто на reset помеха приходит и тинька перезагружается. Чтоб такого не происходило reset надо подтягивать к питанию резистором на 10 кОм. Можно и больше)
     
    Последнее редактирование: 19 дек 2013
  12. Deliaz

    Deliaz Нуб

    На разные. Видимо особенность алгоритма.
     
  13. Deliaz

    Deliaz Нуб

    Спасибо всем за помощь.
    Написал свой алгоритм. В нем цвет выбирается случайным образом и плавно меняется.

    Код (Text):
    // DEFINES
    // PINS
    #define R 4
    #define G 1
    #define B 0
    // TIMES
    #define delayTime 3000
    // VALS
    #define maxVal 250

    // VARS
    int duration = 30;
    int curR=0, curG=0, curB=0;
    int lastMode=0;


    void setup(){
      randomSeed(analogRead(3));
    }

    void loop(){
      randomSeed(analogRead(3));

      int mode = random(8);

      if(mode != lastMode) {
        lastMode = mode;
     
        switch(mode) {
        case 0: // Не горит
          setRGB(0,0,0);
          break;
        case 1: // Красный
          setRGB(maxVal,0,0);
          break;
        case 2: // Зеленый
          setRGB(0,maxVal,0);
          break;
        case 3: // Синий
          setRGB(0,0,maxVal);
          break;
        case 4: // Желтый
          setRGB(maxVal,maxVal,0);
          break;
        case 5: // Фиолетовый
          setRGB(maxVal,0,maxVal);
          break;
        case 6: // Голубой
          setRGB(0,maxVal,maxVal);
          break;
        case 7: // Белый
          setRGB(maxVal,maxVal,maxVal);
          break;
        }
      }
    }

    void setRGB(int maxR, int maxG, int maxB) {

      for(int val=0;val<=maxVal;val++) {
        if(curR < maxR) { analogWrite(R, val); }
        else if(curR > maxR) { analogWrite(R, maxVal - val); }
     
        if(curG < maxG) { analogWrite(G, val); }
        else if(curG > maxG) { analogWrite(G, maxVal - val); }
     
        if(curB < maxB) { analogWrite(B, val); }
        else if(curB > maxB) { analogWrite(B, maxVal - val); }

         
        delay(duration);
      }
      // Запомнили как текущие для следующего цвета
      curR = maxR; curG = maxG; curB = maxB;

      // Задержка цвета
      delay(delayTime);
    }
     
    Все отлично работает от 9V кроны + LM317.
     
  14. fr0ster

    fr0ster Гик

    Я так понимаю, у вас плавно зажигается и гаснет случайно выбранный цвет.
    Интересный вариант :) Правда не универсальный. Я бы все же разделил код на две функции, одна устанавливает свечение светодиода, вторая отвечает за изменение яркости.
     
  15. Deliaz

    Deliaz Нуб

    Не совсем.
    Следующий цвет выбирается случайно, это да. Но лампа не обязательно затухает, а чаще всего плавно меняет с текущего цвета на следующий, выбранный случайно (выглядит классно). Она может потухнуть, но это как один из вариантов «цвета».
     
  16. KostYK

    KostYK Нуб

    Скоро Новый Год, Китайские свечи перегорели (5 ламп на 48v 3w e10 на "Али" с ума сошли.. денег мульен хотят за них...)
    Вот код, корректно отрабатывает независимые три PWM на тиньке 85. Заливал через Arduino ISP.

    Код (C++):
    /* Трехканальные свечи к Новому Году
       Для ATTINY85 установки (1MHz, internal, BOD disabled)
       3,5,6 нога к светодиодам */
    /

    int ledPins[] = {0,1,4}; // Назначаем пины выходов PWM
    int pinCount = 3; // Указываем количество задействованных пинов (см. строку выше)
    int timer = 100; // Указываем задержку после очередной установки яркости светодиодов
    void setup()
    {
      // Установка заданных пинов в режим выхода
      for (int thisPin = 0; thisPin < pinCount; thisPin++)  {
        pinMode(ledPins[thisPin], OUTPUT);    
      }
    }

    void loop()
    {
      // Цикл установки  яркости LED для заданных каналов
      for (int thisPin = 0; thisPin < pinCount; thisPin++)  {
        analogWrite (ledPins[thisPin], random(120) + 135);
      }
      // Задержка (свечение) после установки яркости
      delay(random(timer));
    }
    Раз Два Три, Свечечка, гори!!!!

    Может кому и сгодится.

    P.S. Можно и RGB подключить.
     
    Последнее редактирование: 15 дек 2017