pwm.txt 1.5 KB

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