|
ATMega |
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 14)
|
May 11 2011, 06:28
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 25-08-10
Пользователь №: 59 097

|
В книжке написано, что тоглать можно только ОС1А. Я вчера делал девайс и тоглал ОС1В, но тоглать их в противофазе без прерывания не получится. возможно наиболее дешевым выходом будет дополнительный инвертер на выходе. хотя прерывание и пересчеты для тогланья в противофазе не отнимут больше 60-100 мкс.
фаст пвм для противофазы не пробовал, но вроде как можно назначить на одну ногу инвертед, а на другую нон-инвертед.
Сообщение отредактировал CYD - May 11 2011, 06:30
|
|
|
|
|
May 11 2011, 06:32
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Цитата(CYD @ May 11 2011, 09:28)  В книжке написано, что тоглать можно только ОС1А. одновременно можно "толгать" и ОС1А и ОС1В - проверено. Цитата(CYD @ May 11 2011, 09:28)  но тоглать их в противофазе без прерывания не получится. думаю получится, но в другом режиме Цитата(CYD @ May 11 2011, 09:28)  возможно наиболее дешевым выходом будет дополнительный инвертер на выходе. это перебор Цитата(CYD @ May 11 2011, 09:28)  хотя прерывание и пересчеты для тогланья в противофазе не отнимут больше 60-100 мкс. копеечка к копеечке..  Спасибо!
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
May 11 2011, 09:18
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (Буратино @ May 11 2011, 09:14)  В режиме CTC (сброс при совпадении) можно переключать в противоположное состояние вывод OC1A и/или OC1B, но получить сигналы на пинах в противофазе никак нельзя. Почему нельзя? Что мешает остановить таймер (CS1x = 0), настроить таймер в режим 4 или 12 (CTC со сбросом по значению ICR1), для выходов поставить режим 01 (Toggle OC1A/OC1B on Compare Match), далее, установив FOC1A, инвертировать состояние одного из выходов и запустить таймер (CS1x = нужное значение предделителя). Все. Никаких сложностей не видно. QUOTE (CYD @ May 11 2011, 09:28)  В книжке написано, что тоглать можно только ОС1А. Выкиньте эту книжку.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 11 2011, 09:34
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
QUOTE (CYD @ May 11 2011, 15:28)  тоглать Нет такого слова в русском языке. Есть "переключать", "устанавливать", "сбрасывать" и др. Поверьте, такая речь не только не украшает язык, но и сбивает с толку. Пришел ко мне на днях человек и говорит модное слово "Актюатор" (исполнительный механизм). В итоге выяснилось, что он не имеет представления о чем говорит вообще. Прошу прощения за
--------------------
Выбор.
|
|
|
|
|
May 11 2011, 09:53
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Сделал вот так: Код void Init_Timer1 (void) { TCCR1A = (1 << COM1A1)|(1 << COM1A0)|(1 << COM1B1); TCCR1B = (1 << WGM12)|(1 << CS10); OCR1AH = 0x00; OCR1AL = 0x1F; }
volatile INT08U j=0; #pragma vector=TIMER1_COMPA_vect __interrupt void timer1_compa_isr(void) {
if (j) { TCCR1A = (1 << COM1A1)|(1 << COM1A0)|(1 << COM1B1); j = 0; } else { TCCR1A = (1 << COM1A1)|(1 << COM1B0)|(1 << COM1B1); j = 1; } } Но у меня используется и таймер 0, и он переполняется с большой частотой 8кНz. Наблюдаю искажения формы сигнала: (частота не ровно 125кHz в связи с тем что использую кварц немного другой) Не совсем понимаю почему так происходит, ведь приоритет у таймера 1 выше чем у таймера 0.. Цитата(Сергей Борщ @ May 11 2011, 12:18)  Почему нельзя? Супер, Спасибо!
Эскизы прикрепленных изображений
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
May 11 2011, 10:27
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Цитата(Палыч @ May 11 2011, 13:09)  Приоритет определяет: какое прерывание обрабатывать первым при одновременности возникновения запросов от нескольких прерываний. Ежели МК приступил к процедуре обработки прерывания с низким приоритетом, которая выполняется Х мкс, а в это время был выставлен запрос на прерывание более высокого приоритета, то этот запрос будет отложен до окончания процедуры обработки прерывания низкого приоритета. Т.о. второе прерывание (с высоким приоритетом) будет задержано на Х мкс. Да, спасибо! Всем сенкс, работает!
Эскизы прикрепленных изображений
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
May 13 2011, 07:49
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Цитата(dimka76 @ May 12 2011, 11:36)  А зачем все эти заморочки с прерываниями. В режиме ШИМ все будет происходить аппаратно и в противофазе. На сколько я понял, в режиме Fast PWM, счетчик считает от нуля и до разрядности ШИМ. Для моего кварца максим. чатсота гораздо ниже 125кHz получается. Может быть в других режимах ШИМ можно это сделать, либо Fast PWM настроить на счет не от нуля, но я сделал так как советовал Сергей: в режиме CTC перевернул одну лапу спец. битом и настроил пины соответственно. Все получилось здорово. У меня такой вопрос: сделал систему на процессоре ATMega8. Все работает так как и планировалось, за исключением одного "но". Дело в том, что рядом с процессором (~13mm) на плате расположено реле, которое коммутирует две настольные лампы, одна из которых VTLAMP3W (содержит две лампы дневного света BLUB 9W G23), другая обычная лампа накаливания на 40W. Время от времени процессор виснет  Добавил доп. емкость на вход питания ,отпаял все лишние провода от лап. зы Конечно, в реале, реле будет коммутировать совсем не такие токи, но тем не менее нужно попытаться разобраться!
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
May 13 2011, 08:02
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (Буратино @ May 13 2011, 10:49)  Добавил доп. емкость на вход питания ,отпаял все лишние провода от лап. зы Конечно, в реале, реле будет коммутировать совсем не такие токи, но тем не менее нужно попытаться разобраться! Показывайте схему. Показывайте разводку. Вероятнее всего проблема в неправильной разводке земли, либо в висящем в воздухе без подтяжки входе Reset, либо не на все ноги завели земли/питания.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|