Отдельно код смотрите ниже.
- Вложения
-
- attiny13_PWM_new.rar
- Новый вариант. Добавлено вкл/выкл и другое (см. ниже по топику)
- (46.42 КБ) 605 скачиваний
-
- attiny13_3PWM.zip
- (48.28 КБ) 495 скачиваний
Спасибо. Как на зло, бился месяц (ну это хобби, так что не непрерывно) и не получалось. Решил запостить... и блин сам дошел до этого.ARV писал(а):добавьте в конце программы while(1); сразу после sei(); - бесконечный цикл. а то сейчас у вас программа пролетает за мгновение, а в конце функции main запрещаются прерывания и происходит зацикливание, т.е. все ваши старания идут псу под хвост.
и бога ради, поубирайте reti() из обработчиков прерываний!!! ну надо же мало-мало читать доки...
ждем не дождемсяILIS писал(а):Скоро выложу программу 3 ШИМ на тини 13 с регулируемой скважностью кнопками
Спасибо за советы. Я вообще на C# и C++ пишу. Так что с програмированием микрух сталкиваюсь впервые.ARV писал(а):бегло поглядел код... вижу ряд слабых мест.
1. ресурс EEPROM - 100000 записей. то есть если изменять каждую секунду, хватит на сутки. но честно говоря, не представляю себе устройство, в котором каждую секунду меняют настройки. это я к тому, что нет особого смысла "чередовать ячейки" для продления срока службы EEPROM - ну в 20 раз вы увеличите срок, это кардинально поменяет ситуацию?
2. макросы для установки битов стоит оформлять в стиле WinAVR, раз уж вы пользуетесь этим компилятором. т.е. вместо 1<<5 писать _BV(5).
3. не увидел собственно многоканального ШИМ. один канал у вас в основном цикле методом опроса реализуется - это не фонтан. рекомендую подумать над тем, как в единственном обработчике прерывания от таймера реализовать все 3 канала ШИМ (можно и больше, но не останется портов под кнопки).
4. не увидел подавления дребезга кнопок. вряд ли ваш вариант будет работать хорошо в реальном железе.
5. если "абсолютно идентично для остальных кнопок" - это стоит оформить в виде функции - и читабельность кода повысится, и работать хуже не станет.
6. вместо трех операторов-макросов CLR_B стоит использовать единственный оператор записи в порт - сразу все три бита и "погасить".
Именно так ) Старался все там описать, но согласен - разгребать чужие грабли....ARV писал(а):круто...
я делал проектик "электронная свеча" - не желаете взглянуть на исходник? на моем сайте свободно лежит. мне кажется, кое-что оттуда вы могли бы почерпнуть полезное... в плане реализации многоканального ШИМ
а по алгоритму управления - как вам такой вариант: три кнопки - три светодиода. краткое нажатие кнопки включает/выключает соответствующий светодиод. долгое нажатие при включенном начинает менять яркость, после отпускания направления изменения яркости меняется на противоположное, т.е. при следующем долгом нажатии яркость пойдет в другую сторону. я не вникал - может, у вас именно так... тогда извините. но по коду это понять сложно.