Страница 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.