Страница 1 из 1
PWM atmega8
Добавлено: Вт июн 27, 2017 16:03:46
daaar
Делаю контроллер rgb светодиодной ленты на atmega8. Конфигурирую шим так:
Код: Выделить всё
DDRB = 0b00001110;
TCCR2 = (1<<WGM20)|(1<<WGM21)|(1<<COM21)|(1<<CS22);
TCCR1A = (1<<WGM10)|(1<<WGM11)|(1<<COM1A1)|(1<<COM1B1);
TCCR1B = (1<<CS11)|(1<<CS10);
While(1) выглядит вот так:
Спойлер
Код: Выделить всё
while (1)
{
int i = 0;
for (i = 0; i <= 0xff; i++, _delay_ms(t))
{
r_ch = 0xff * i;
g_ch = 0xff - i;
b_ch = 0xffff;
}
for (i = 0; i <= 0xff; i++, _delay_ms(t))
{
g_ch = i;
b_ch = 0xff*(0xff - i);
r_ch = 0xffff;
}
for (i = 0; i <= 0xff; i++, _delay_ms(t))
{
b_ch = i;
r_ch = 0xff*(0xff - i);
g_ch = 0xff;
}
}
Но получается не плавно переливающийся цвет, а какой-то "рваный" переливающийся
В чём может быть косяк? Я правильно понял что шим на OC1A и OC1B - 16ти разрядные, а OC2 - 8ми разрядный?
Re: PWM atmega8
Добавлено: Ср июн 28, 2017 07:10:43
ARV
daaar писал(а):Я правильно понял что шим на OC1A и OC1B - 16ти разрядные, а OC2 - 8ми разрядный?
правильно. поэтому надо все 3 ШИМ-канала настраивать на FastPWM 8 bit и не мудрить.
Re: PWM atmega8
Добавлено: Ср июн 28, 2017 08:10:28
daaar
[uquote="ARV",url="/forum/viewtopic.php?p=3134490#p3134490"]надо все 3 ШИМ-канала настраивать на FastPWM 8 bit и не мудрить.[/uquote]
Спасибо, это помогло. Но если OCR1 16ти битный, то почему в datasheet его можно настроить только как 10и битный?
Re: PWM atmega8
Добавлено: Ср июн 28, 2017 08:28:15
Ivanoff-iv
можно и как 8битный — ставишь ТОПом регистр захвата, например, если он не используется, и в него 0x00FF вписываешь — и всё таймер будет считать как 8 битный и оба регистра сравнения останутся доступны для работы.
Добавлено after 4 minutes 12 seconds:
так как посмотреть негде а на все 146% я не уверен в правильности написания названий регистров и режимов таймера то написал по русски, думаю, что понять это можно.
Re: PWM atmega8
Добавлено: Ср июн 28, 2017 08:33:06
daaar
[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3134521#p3134521"]можно и как 8битный — ставишь ТОПом регистр захвата, например, если он не используется, и в него 0x00FF вписываешь — и всё таймер будет считать как 8 битный и оба регистра сравнения останутся доступны для работы.[/uquote]
Я не совсем корректно задал вопрос, я подразумевал что можно настроить 8,9 и 10и битный ШИМ, а 16и битный нельзя? Но таймер же 16и битный
Re: PWM atmega8
Добавлено: Ср июн 28, 2017 08:42:40
Ivanoff-iv
там есть режимы и 16 битного шима — режимы с частотной и фазовой коррекцией. только частота 16 битного ШИМа будет в 256 раз ниже 8 битного при одинаковом тактировании
Re: PWM atmega8
Добавлено: Ср июн 28, 2017 08:47:21
ARV
зачем вам 16 бит, если третий канал все равно 8 бит?
Re: PWM atmega8
Добавлено: Ср июн 28, 2017 09:06:29
daaar
[uquote="ARV",url="/forum/viewtopic.php?p=3134529#p3134529"]зачем вам 16 бит, если третий канал все равно 8 бит?[/uquote]
На будущее
Re: PWM atmega8
Добавлено: Ср июн 28, 2017 09:08:47
ARV
будущее не предопределено © Сара Коннор

Re: PWM atmega8
Добавлено: Сб июл 01, 2017 09:22:54
COKPOWEHEU
Режимы 1000 - 1011, 1110, 1111 в помощь: разрядность задается регистром ICR1 либо OCR1A и может быть до 0xFFFF.