14 комментариев

  1. Влад говорит:

    Не удается скомпилировать скетч.
    core\pins_arduino.c.o (symbol from plugin): In function `_turnOnPWM’: (.text+0x0): multiple definition of `__vector_3′
    sketch\1.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here collect2.exe: error: ld returned 1 exit status
    exit status 1
    Ошибка компиляции для платы ATtiny13.

    Компилируется, если закомментировать ISR(TIM0_OVF_vect)

    • OSBoy говорит:

      Вы компилируете, как я понимаю, в среде Arduino IDE? Так на вскидку не скажу точно, из-за чего так, но там могут быть свои нюансы. Попробуйте установить AVR Studio (Atmel Studio, Microchip Studio), создать в ней проект на Си, скопировать этот код туда и попробовать скомпилировать в ней. Я обычно пользуюсь AVR Studio 4 версии. Она достаточно старая, но не тяжёлая и мне её вполне достаточно для моих целей.

      • Влад говорит:

        Спасибо большое за ответ! Да, я компилирую в Arduino IDE. Все примеры, которые вы опубликовывали, прекрасно работают … кроме этого. Как оказалось, стоит лишь использовать обращение к TIM0_OVF_vect, ни один скетч, содержащий эту строку не компилируется. Скорее всего, это проблема в самой IDE. Попробую AVR Studio 4 …

        • OSBoy говорит:

          Возможно, TIM0_OVF_vect уже занят в какой-нибудь встроенной библиотеке Arduino IDE, например, для организации задержек (delay) или что-нибудь в этом роде. Попробуйте полазить по настройкам проекта и самой среды Arduino IDE — возможно получится где-то поотключать неиспользуемые библиотеки, чтобы не мешали.

  2. Salim говорит:

    Автор профи! Практически всё работает на прерываниях, код оптимизирован на все 100. Сам только учусь, и многое почерпнул из Ваших исходников. Спасибо!

  3. Kamu говорит:

    Здравствуйте. Не могу понять, почему в протеусе прошивка работает, а в железе нет. Подскажите в чём причина. Прошивку заливал на отладочную плату собранную по Вашей схеме. Другие примеры с ШИМ на плате работают. Только в примере регулятора ШИМ с использованием АЦП в коде есть опечатка.

    • OSBoy говорит:

      Так какой пример не работает — этот, с кнопками? Или тот что с АЦП? Я в Протеусе их не пробовал, сразу опробовал в железе и оба прекрасно работают. И почему Вы решили, что опечатка в коде? Компилируются оба примера без ошибок, тем более в Протеусе, сами говорите, что работают нормально… Может у Вас в железе какая-то проблема? Чем компилируете?

      • Kamu говорит:

        Извиняюсь, опечатка в бегущем огне volatile _Bool direction = 0.
        Не работает ШИМ с кнопками. При нажатии кнопки на входе PB4 сразу загорается светодиод на выходе PB0. Гаснет только при сбросе микроконтроллера. Компилирую с помощью atmel studio 6,2.

        • OSBoy говорит:

          Код ШИМ с кнопками я, как будет возможность, попробую ещё раз на отладочной плате протестировать.
          А что не так с «volatile _Bool direction = 0» ? У Вас компилятор на тип переменной _Bool ругается? Если у Вас в студии 6.2 проект на C++, попробуйте заменить «_Bool» на «bool», хотя по идее должно и так, и так работать. Я в 4 студии компилирую, код на С написан и всё отлично работает. Если что, типы переменных _Bool или bool определены в стандартной библиотеке stdbool.h для С и С++ соответственно.

          • Kamu говорит:

            Да, при компиляции программа выдавала ошибку. Заменил на bool ошибка пропала.

      • Alex говорит:

        Спасибо за подсказку и код! Вчера в протеусе все опробовал. шикарно.
        А можно ли переделать этот код на два шим внутри одного микроконтроллера, используя скажем Tiny2313.
        4 кнопки (две на регулировку оборотов кулера и две на регулировку температуры). Не будет ли проблем с прерываниями, да и вообще еще каких аномалий?
        *Достался строй_фен со сломанной платой управления (понимаю что дешевле купить на Али).

        • OSBoy говорит:

          Учитывая, что на Tiny2313 два таймера — думаю, что проблем не должно возникнуть, если сделать по аналогии. Хотя в принципе, думаю, что можно даже попробовать обойтись одним таймером на tiny13, используя вместо кнопок — две крутилки потенциометров и подавая с них напряжение на два входа АЦП. Например, для выходов ШИМ тогда можно использовать ноги OC0A (PB0) и OC0B (PB1), а для АЦП входов — ноги ADC3 (PB3) и ADC2 (PB4). А дальше дело техники — главное чтобы код в 1кБ влез.

Оставить комментарий