Цитата(paul2002 @ Feb 27 2006, 10:10)

Есть задача: соорудить трехфазный задающий генератор со сдвигом фаз на треть периода друг относительно друга (рисунок с диаграммой прикладываю) с перспективой на большее количество фаз. Требуемый период сигнала - 25 мкс, коэф. заполнения - 0.4. Попробовал сделать на mega8(был под рукой) и уперся в то, что в лоб решить не получается - не хватает производительности. Наверное, самое простое - использовать таймер в режиме ШИМ, но их количества недостаточно и непонятно как реализовать требуемый сдвиг фаз. Может кто-нибудь сталкивался с подобной задачей и какие могут быть решения? Или надо просто брать МК мощнее? Спасибо
здесь таймер не подходит, да и не нужен он.. C сразу отметается как средство программирования. Использовать только асм и учитывать длительность команд. Коэффициен заполнения в моем примере равен 0.33, думаю вы по аналогии сделаете требуемый. Imho самое сложное в этой задаче будет подборка кварца

Код
.def AL = R24
.equ Phase0 = 1
.equ Phase1 = 2
.equ Phase2 = 4
.org 0
ldi AL, $FF
out DDRB, AL
PhaseShiftLoop:
ldi AL, Phase0
out PortB, AL
nop
nop
// столько раз пишем nop сколько требуется для обеспечения задержки в 25/3 мкс - Tout - Tldi
ldi AL, Phase1
out PortB, AL
nop
nop
// столько раз пишем nop сколько требуется для обеспечения задержки в 25/3 мкс - Tout - Tldi
ldi AL, Phase2
out PortB, AL
nop
nop
// столько раз пишем nop сколько требуется для обеспечения задержки в 25/3 мкс - Tout - Trjmp - Tldi
rjmp PhaseShiftLoop
Сообщение отредактировал defunct - Feb 27 2006, 08:50