maks321 0 7 сентября, 2009 Опубликовано 7 сентября, 2009 (изменено) · Жалоба ситуация такая: контролер -мега8 нужно сделать от 2 до 10 импульсов в одном такте PWM сигнала. частоты пвма в пределах от 40гц до 5Кгц ,осцилограмму нужно получить примерно такую простыми задержками по мсекундам никчему не привела(съела весь ресурс),запустить или остановить 2й таймер из-под прерывания первого тож не получилось. можно конешно на 2 выхода повесить логику 2И , но чтото мне подсказывает что это логика есть в контролере. мой исходник щас на уровне инициализации, такчто и выложить на обозрение нечего :( сильно не пинайте, процессоры только начал программить . Изменено 7 сентября, 2009 пользователем Maks321 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
domowoj 0 8 сентября, 2009 Опубликовано 8 сентября, 2009 · Жалоба Надо просто в нужное время пепенастроить основной таймер, формирующий ШИМ, на формирование ваших "мелких" импульсиков, а затем в нужное время, вернуть реж. ШИМ в исходное состояние. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Duhas 0 8 сентября, 2009 Опубликовано 8 сентября, 2009 · Жалоба 2 ШИМ + или... на том же транзисторе.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 8 сентября, 2009 Опубликовано 8 сентября, 2009 · Жалоба нужно сделать от 2 до 10 импульсов в одном такте PWM сигнала. частоты пвма в пределах от 40гц до 5Кгц Можно сделать без внешней логики. Ставите таймер1 в Phase and Frequency Correct PWM Mode, устанавливаете период и заполнение внешнего шим, и разрешаете прерывания по завершению внешнего шим, после срабатывания прерывания, не мешкая, устанавливаете период и заполнение внутреннего шим, тем же прерыванием подсчитываете количество импульсов, и быстренько восстанавливаете период и заполнение внешнего шим. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dx! 0 8 сентября, 2009 Опубликовано 8 сентября, 2009 · Жалоба В некоторых относительно новых AVR появился "Modulator" - возможность объединить логикой одну ножку с ШИМ-выходами пары таймеров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maks321 0 9 сентября, 2009 Опубликовано 9 сентября, 2009 · Жалоба вобщем получилось нечто такое #pragma interrupt_handler timer1_ovf_isr:9 void timer1_ovf_isr(void) { //TIMER1 has overflowed // TCNT1H = 0xFF; //reload counter high value // TCNT1L = 0x06; //reload counter low value if (a1 < q1) if (a2 > q2) { a2 = 0; if (PORTD == 0x00) PORTD = 0xFF;else PORTD = 0x00;} if (a1 > 10000) { a1 = 0; a2 = 0; PORTD = 0xFF;} // (10000 условная частота 10КГц) a1++; a2++; } a1 a2 переменные для счета. q1 (q1 = 5000 для 50%) расчитываем % обшего пвм q2 длительность коротких импульсов(можно посчитать и количество от общей частоты) пока без регулировки скважности мигаю всем портом исключительно в тестовых ценях на протеусе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dlwest 0 11 сентября, 2009 Опубликовано 11 сентября, 2009 · Жалоба Гм. А если приспособить под это дело UART? Или нужно бОльшее разрешение по оси времени? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 11 сентября, 2009 Опубликовано 11 сентября, 2009 · Жалоба ситуация такая: контролер -мега8 но чтото мне подсказывает что это логика есть в контролере. Стало быть, даташит Вы читали по диагонали :( Можно ведь модулятор и на диодах, и на транзисторе сделать... на любой вкус. Медленный ШИМ на OC1B быстрый на OC2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maks321 0 11 сентября, 2009 Опубликовано 11 сентября, 2009 (изменено) · Жалоба датащит был прочитан по диагонали, получилась вот такая штука, таймер2 на 2кгц #pragma interrupt_handler timer2_ovf_isr:5 void timer2_ovf_isr(void) { TCNT2 = 0x83; //reload counter value if (a5 < q2) { if (a4 < q4) { a4++; PORTD = 0xFF;} else {PORTD = 0x00; if (a3 < q3-1) a3++; else {a4=0;a3=0;}} a5++;} else if (a1 < q1-1) a1++; else {a1=0;a5=0;a3=0;a4=0;} } void pwm() { a1=0;a2=0;a3=0;a4=0;a5=0; // peremennue schota q1 = 10; //pausa mejdu paketami q3 = 3; // pausa mejdu impulsami q4 = 2; // dlinna impulsa q5 = 5; // kolichestvo impulsov q2 = (q3+q4)*q5; // dlina impulsnogo paketa } мои дельфовые припарации сильно замедлят процесор? или всеже я могу расчитывать макс частоту в 1 кгц? Изменено 11 сентября, 2009 пользователем Maks321 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
max_cnc 0 14 сентября, 2009 Опубликовано 14 сентября, 2009 · Жалоба Если я правильно понял, то низкочастотный меандр нужен с фиксированой 50% скважностью, а ВЧ врезки регулируемой частоты (нужна ли регулировка скважности ?) в нулевых состояниях основной последовательности. Я бы сделал так: Для одного таймера делаем режим сброс по совпадению с прерыванием или прерывание по переполнению с предустановеой таймера на исходное значение в начале обработчика прерывания, что больше нравиться. Цель - получить прерывания с периодом в 2 раза меньше периода основного меандра. Второй таймер настраиваем на нужный режим ШИМ для получения ВЧ последовательности. Затем в обработчике делаем следующее: ЕСЛИ ВТОРОЙ ТАЙМЕР ДЛЯ ВЧ ШИМ ЗАПУЩЕН - ОСТАНАВЛИВАЕМ ЕГО И ЗАПИСЫВАМ ЗНАЧЕНИЕ, ЧТОБЫ УСТАНОВИТЬ ВЫХОД ШИМ В ЕДИНИЦУ (подробне почитайте в ДШ о режиме ШИМ) ЕСЛИ ВТОРОЙ ТАЙМЕР ДЛЯ ВЧ ШИМ ОСТАНОВЛЕН - СБРАСЫВЕМ (ПРЕДУСТАНАВЛИВАЕМ) ЕГО И ЗАПУСКАЕМ Стоп/пуск можно делать через регистры управления тайметами TCCRx, например битами выбора источника тактового сигнала. Ести привязка фазы вч к нч не требуется - перед пуском таймет можно не сбрасывать (предустанавливать). Если требуется переменная скважность, то для первого таймера используем прерывание по переполнению, и в зависимости от того, что сделали в данной итерации (остановили или запустили ВЧ ШИМ) записываем в таймер новую длительность для следующего полупериода (длительность нуля после запуска ШИМ и длительность единицы после остановки ШИМ). Вот в принципе и все, при ваших частотах останется >99% процессорного времени для других полезных дел. Сам много раз успешно применял этот способ для самых разных задач. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maks321 0 17 сентября, 2009 Опубликовано 17 сентября, 2009 · Жалоба всем кто помогал спасибо, сделал в двух вариантах(1-мой сложение переменных,2- от max_cnc) практика покажет какой вариант больше подходит для млоего девайса, кока все работает на моем, Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться