123456789101112131415161718192021222324252627 |
- ; иницалзация ШИМ
- ; для начала, пины PB1 (OC1A) и PB2 (OC1B) настроим на выход
- ldi temp,0b00000110
- out DDRB,temp
- ; Выставляем для обоих каналов ШИМ режим вывода ОС** сброс при совпадении.
- ; COM1A = 10 и COM1B = 10
- ; Также ставим режим FAST PWM 8bit (таймер 16ти разрядный и допускает
- ; большую разрядность ШИМ сигнала. Вплоть до 10 бит. WGM = 0101
- ; Осталось только запустить таймер на частоте МК CS = 001
- ldi temp,2<<COM1A0|2<<COM1B0|0<<WGM11|1<<WGM10
- out TCCR1A,temp
- ldi temp,0<<WGM13|1<<WGM12|1<<CS10
- out TCCR1B,temp
- ; Готово! Теперь ШИМ таймера1 генерит сигнал на выходаx OC1А и OC1B
- ; Закинем в регистры сравнения первого и второго канала число 255/3=85
- ; и 255/2 = 128. Так как ШИМ у нас 8ми разрядный, то заброс идет только
- ; в младший разряд. Старший же остается нулем. Но регистры сравнения
- ; тут у нас 16ти разрядные поэтому грузить надо оба байта сразу.
- ; Не забыв запретить прерывания (это важно!!! ибо атомарный доступ)
- clr temp
- out OCR1AH,temp
- ldi temp,85
- out OCR1AL,temp
- clr temp
- out OCR1BH,temp
- ldi temp,128
- out OCR1BL,temp
|