Страница 1 из 1
AVR Studio и прерывания для Tiny13 (3 ШИМ на одной Tiny13)
Добавлено: Вт сен 01, 2009 10:03:21
ILIS
А вообще, я не жадный - вот весь проект в протеусе и AVR Studio 4.16
Отдельно код смотрите ниже.
Добавлено: Вт сен 01, 2009 11:00:04
ARV
добавьте в конце программы while(1); сразу после sei(); - бесконечный цикл. а то сейчас у вас программа пролетает за мгновение, а в конце функции main запрещаются прерывания и происходит зацикливание, т.е. все ваши старания идут псу под хвост.
и бога ради, поубирайте reti() из обработчиков прерываний!!! ну надо же мало-мало читать доки...
Добавлено: Вт сен 01, 2009 11:18:14
ILIS
ARV писал(а):добавьте в конце программы while(1); сразу после sei(); - бесконечный цикл. а то сейчас у вас программа пролетает за мгновение, а в конце функции main запрещаются прерывания и происходит зацикливание, т.е. все ваши старания идут псу под хвост.
и бога ради, поубирайте reti() из обработчиков прерываний!!! ну надо же мало-мало читать доки...
Спасибо. Как на зло, бился месяц (ну это хобби, так что не непрерывно) и не получалось. Решил запостить... и блин сам дошел до этого.
Вы все верно говорите. Скоро выложу программу 3 ШИМ на тини 13 с регулируемой скважностью кнопками

Добавлено: Вт сен 01, 2009 11:24:24
ARV
ILIS писал(а):Скоро выложу программу 3 ШИМ на тини 13 с регулируемой скважностью кнопками

ждем не дождемся

Добавлено: Вт сен 01, 2009 12:05:05
ILIS
3 ШИМ на Tiny13 с регулируемой скважностью кнопками
Надеюсь не сильно намудрил )
в код не влезло - в атаче. Весь проект в первом посте.
Добавлено: Вт сен 01, 2009 13:53:46
ARV
бегло поглядел код... вижу ряд слабых мест.
1. ресурс EEPROM - 100000 записей. то есть если изменять каждую секунду, хватит на сутки. но честно говоря, не представляю себе устройство, в котором каждую секунду меняют настройки. это я к тому, что нет особого смысла "чередовать ячейки" для продления срока службы EEPROM - ну в 20 раз вы увеличите срок, это кардинально поменяет ситуацию?
2. макросы для установки битов стоит оформлять в стиле WinAVR, раз уж вы пользуетесь этим компилятором. т.е. вместо 1<<5 писать _BV(5).
3. не увидел собственно многоканального ШИМ. один канал у вас в основном цикле методом опроса реализуется - это не фонтан. рекомендую подумать над тем, как в единственном обработчике прерывания от таймера реализовать все 3 канала ШИМ (можно и больше, но не останется портов под кнопки).
4. не увидел подавления дребезга кнопок. вряд ли ваш вариант будет работать хорошо в реальном железе.
5. если "абсолютно идентично для остальных кнопок" - это стоит оформить в виде функции - и читабельность кода повысится, и работать хуже не станет.
6. вместо трех операторов-макросов CLR_B стоит использовать единственный оператор записи в порт - сразу все три бита и "погасить".
Добавлено: Ср сен 02, 2009 08:23:10
ILIS
ARV писал(а):бегло поглядел код... вижу ряд слабых мест.
1. ресурс EEPROM - 100000 записей. то есть если изменять каждую секунду, хватит на сутки. но честно говоря, не представляю себе устройство, в котором каждую секунду меняют настройки. это я к тому, что нет особого смысла "чередовать ячейки" для продления срока службы EEPROM - ну в 20 раз вы увеличите срок, это кардинально поменяет ситуацию?
2. макросы для установки битов стоит оформлять в стиле WinAVR, раз уж вы пользуетесь этим компилятором. т.е. вместо 1<<5 писать _BV(5).
3. не увидел собственно многоканального ШИМ. один канал у вас в основном цикле методом опроса реализуется - это не фонтан. рекомендую подумать над тем, как в единственном обработчике прерывания от таймера реализовать все 3 канала ШИМ (можно и больше, но не останется портов под кнопки).
4. не увидел подавления дребезга кнопок. вряд ли ваш вариант будет работать хорошо в реальном железе.
5. если "абсолютно идентично для остальных кнопок" - это стоит оформить в виде функции - и читабельность кода повысится, и работать хуже не станет.
6. вместо трех операторов-макросов CLR_B стоит использовать единственный оператор записи в порт - сразу все три бита и "погасить".
Спасибо за советы. Я вообще на C# и C++ пишу. Так что с програмированием микрух сталкиваюсь впервые.
К сожалению книг по программированию на WinAvr нет. Все методом тыка и примеры в инете. Даташит читаю еще ) Учусь только ) Так что это первый мой блин.
Добавлено: Ср сен 02, 2009 08:47:32
GP1
"Программирование на языке С для AVR и PIC микроконтроллеров" сост. Ю.А.Шпак, толко на днях купил такую, как раз про WinAVR
Добавлено: Ср сен 02, 2009 09:10:24
ILIS
GP1 писал(а):"Программирование на языке С для AVR и PIC микроконтроллеров" сост. Ю.А.Шпак, толко на днях купил такую, как раз про WinAVR
Скачал. Киев 2006 года. Так?

Добавлено: Ср сен 02, 2009 09:38:56
ARV
как все известные критики, скажу так: книжку Шпака не читал, но имею о ней негативное мнение
если серьезно - просто прочтите ту документацию, которая идет в комплекте с WinAVR - этого будет достаточно для большинства случаев. конечно, все доки на английском, зато в переводах всегда есть ошибки

Добавлено: Ср сен 02, 2009 14:49:39
ILIS
Новый вариант ) вроде все учел. Добавил плавное включение и выключение. Да и просто Включение и выключение при кратковременном нажатии.
С железом не мудрил еще. От дребезгов какой кондер достаточно поставить? Или там что-то еще?
Запитывать буду с помощью 78l05.
Вообще, схема планируется в плафон машины на 3 мощных диода. ШИМом будут рулиться драйвера zxld1360. Вот )
Добавлено: Ср сен 02, 2009 15:20:17
ARV
круто...
я делал проектик "электронная свеча" - не желаете взглянуть на исходник? на моем сайте свободно лежит. мне кажется, кое-что оттуда вы могли бы почерпнуть полезное... в плане реализации многоканального ШИМ
а по алгоритму управления - как вам такой вариант: три кнопки - три светодиода. краткое нажатие кнопки включает/выключает соответствующий светодиод. долгое нажатие при включенном начинает менять яркость, после отпускания направления изменения яркости меняется на противоположное, т.е. при следующем долгом нажатии яркость пойдет в другую сторону. я не вникал - может, у вас именно так... тогда извините. но по коду это понять сложно.
Добавлено: Ср сен 02, 2009 15:24:11
ILIS
ARV писал(а):круто...
я делал проектик "электронная свеча" - не желаете взглянуть на исходник? на моем сайте свободно лежит. мне кажется, кое-что оттуда вы могли бы почерпнуть полезное... в плане реализации многоканального ШИМ
а по алгоритму управления - как вам такой вариант: три кнопки - три светодиода. краткое нажатие кнопки включает/выключает соответствующий светодиод. долгое нажатие при включенном начинает менять яркость, после отпускания направления изменения яркости меняется на противоположное, т.е. при следующем долгом нажатии яркость пойдет в другую сторону. я не вникал - может, у вас именно так... тогда извините. но по коду это понять сложно.
Именно так ) Старался все там описать, но согласен - разгребать чужие грабли....

Добавлено: Вс янв 17, 2010 03:01:14
dosmen
Хочу приспособить ваш вариант ШИМ для управления тремя лампами 12В (каждая до 4А).
Возникает пару вопросов.
Если просто половиком управлять, то при длине провода к лампам 4-5м не превратится ли данный девайс в радиопередатчик?
Добавлено: Вс янв 17, 2010 16:13:12
Pooher
Да да. Даже если и провод короткий будет, от радио помех не убежишь, частота то солидная.
ЗЫ:
И ещё не забывайте про эффект наложения отражённой волны сигнала, обязательно надо согласовать волновые сопротивления
