roboforum.ru

Технический форум по робототехнике.

помогите разобраться с ШИМ в микропаскаль для АТмега16

помогите разобраться с ШИМ в микропаскаль для АТмега16

paslenok » 17 май 2013, 09:44

необходимо создать программу "комета". светодиоды должны загораться в такой последовательности:
1 такт. загорается светодиод 1(самый яркий) .
2 такт. самым ярким загорается светодиод 2, светодиод 1 имеет меньшую яркость,чем светодиод 2.
3 такт. самый яркий - светодиод 3, светодиод 2 имеет такую же яркость, как светодиод 1 в такте 2, светодиод 1 -самый тусклый .
и так далее, пока все огоньки не пройдут до конца.

пытаюсь разобраться как уменьшать и увеличивать яркость светодиодов. вот код в микропаскаль, но в VMLab он не работает, так как светодиод просто загорается и ничего не меняется. в чем может быть ошибка?

program gasnet;
var
f: byte;
procedure SHIM; org OVF0addr;
begin
OCR2:=0x00;
if (OCR2<0xff) then f:=0;
if (OCR2>0x00) then f:=1;
if f=0 then OCR2:=OCR2+0x01;
if f=1 then OCR2:=OCR2-0x01;
end;
begin
PORTB:=0x00;
DDRB:=0x08;
DDRD:=0xff;

TCCR1A.WGM13:=0;
TCCR1A.WGM12:=1;
TCCR1A.WGM11:=0;
TCCR1A.WGM10:=1;
TCCR1A.COM1A1:=1;
TCCR1A.COM1A0:=0;
TCNT2:=0x00;
OCR2:=50;

while (true) do
begin

end;
end.

Re: помогите разобраться с ШИМ в микропаскаль для АТмега16

avr123.nm.ru » 17 май 2013, 23:37

вместо светика включите резистор и конденсатор - RC фильтр - и на кондере измеряйте напряжение, оно должно быть пропорционально ШИМ.

Re: помогите разобраться с ШИМ в микропаскаль для АТмега16

paslenok » 19 май 2013, 08:38

Зачем подключать RC-фильтр, если в OCR2 можно задавать яркость светодиода (то есть саму ширину импульса)?

Re: помогите разобраться с ШИМ в микропаскаль для АТмега16

avr123.nm.ru » 19 май 2013, 11:04

думать.

Re: помогите разобраться с ШИМ в микропаскаль для АТмега16

Madf » 19 май 2013, 12:22

Вообще для такого эффекта 3 светика мало, выглядеть будет всё не красиво (размаха нет), даже возможно у вас всё работает корректно, только как раз проблема в этом. Я делал как то просто на 4-х светодиодах эффекта аля мерцание звездного неба (так, типа "hello world"), каждый светодиод плавно мигал с разным периодом, выглядело отлично.

В вашем случае алгоритм имеет простую логику:

1. есть массив значений;
2. каждая следующая ячейка на N-раз имеет меньше значение чем предыдущее (коэффициент можно подобрать, рассчитать относительно используемых каналов) и всё это рассчитывается один раз (ДО отображения ШИМом), как шаблон/маска;
3. в один раз/шаг (в 1 единицу времени) все значения в массиве сдвигаются в сторону большего числа (т.е. просто перемещаются по ячейкам массива по условию "roll" (циклично));
4. далее просто отображаем из каждой ячейки массива значение в ШИМ (т.к. ячейки массива ровны количеству каналов/светиков);
5. всё повторяется с пункта N3.

Можно создать разные шаблоны масок и выводить их...универсально.

зы: ШИМ используется как правило 8-бит (т.е. значения от 0 до 255, а не 0 и 1).

Re: помогите разобраться с ШИМ в микропаскаль для АТмега16

paslenok » 19 май 2013, 20:44

у меня будет 8 светодиодов. Идея организации алгоритма мне очень понравилась, спасибо. Думаю, что так и буду реализовывать. Но остается еще проблема - при запуске программы (как например в коде выше)светодиод загорается и не меняет интенсивность. В чем может быть ошибка?

Re: помогите разобраться с ШИМ в микропаскаль для АТмега16

Madf » 19 май 2013, 21:06

вообще у Меги16 всего 4 ШИМа - это значит, что аппаратно сделать можно только 4 канала, а у вас 8, значит придется делать программный шим или брать специализированные чипы или МК семейства AT90PWMххх (или более мощные АВРки)

зы: если проблема с Си, то юзайте Bascom (значительно проще).

Re: помогите разобраться с ШИМ в микропаскаль для АТмега16

paslenok » 19 май 2013, 21:09

я пишу на микропаскаль :)


Rambler\'s Top100 Mail.ru counter