PWM attiny13

Обсуждаем контроллеры компании Atmel.
Ответить
Держит паяльник хвостом
Аватара пользователя
Сообщения: 920
Зарегистрирован: Пн июн 13, 2016 19:37:24
Откуда: Perm

Сообщение daaar »

Нужен ШИМ, решил использовать для этого attiny13. ШИМ не запускается, уже все перечитал, везде по разному включают.

Код: Выделить всё

DDRB |= (1<<1);
TCCR0B |= (1<<WGM01) | (1<<WGM00) | (1<<CS02) | (1<<CS01) | (1<<COM0A0);
OCR0B = 0xff/2;
[/color]
Вот такой код конфигурации ШИМ. Что может быть не так?
Контактная информация:
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 240
Зарегистрирован: Пн июл 04, 2016 16:51:22
Откуда: Россия, Омск

Сообщение AlanDrakes »

Вы используете пин OCR0B, а включаете в настройках регистра пин OCR0A.
Исправьте вторую строку на это:

Код: Выделить всё

TCCR0B |= (1<<WGM01) | (1<<WGM00) | (1<<CS02) | (1<<CS01) | (1<<COM0B0);
                                                                    ^
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

а в регистре TCCR0B есть бит COM0B0? Наверное у меня старая документация.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 920
Зарегистрирован: Пн июн 13, 2016 19:37:24
Откуда: Perm

Сообщение daaar »

Исправил ошибку, но всё равно не запустилось
oleg110592 писал(а):а в регистре TCCR0B есть бит COM0B0?
Пишу в atmel studio, ide исправила COM00 на COM0B0
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

WGM01, WGM00, COM0B0 - это биты регистра TCCR0A.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 920
Зарегистрирован: Пн июн 13, 2016 19:37:24
Откуда: Perm

Сообщение daaar »

Z_h_e писал(а):WGM01, WGM00, COM0B0 - это биты регистра TCCR0A.
То есть таймер конфигурируется с помощью TCCR0A и TCCR0B?

Добавлено after 19 minutes 47 seconds:
Получается так:

Код: Выделить всё

TCCR0A |= (1<<WGM01) | (1<<WGM00) | (1<<COM0B0);
TCCR0B |= (1<<CS01) | (1<<CS02);
OCR0B = 0xff/2;
Но всё равно не запускается
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Ну проверьте наличие внешнего тактирования, может в схеме проблема.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 920
Зарегистрирован: Пн июн 13, 2016 19:37:24
Откуда: Perm

Сообщение daaar »

Тактирование идет от внутреннего генератора, в схеме просто подключен светодиод к OC0B
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Тогда зачем конфигурировать таймер от внешнего источника? Такое впечатление что Вы ДШ даже не пробовали читать.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 920
Зарегистрирован: Пн июн 13, 2016 19:37:24
Откуда: Perm

Сообщение daaar »

Извиняюсь, перепутал. Установил CS00 и CS01, ничего не изменилось
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Проверьте исправность порта.

Код: Выделить всё

DDRB=1<<PB1;
while (1) PINB=1<<PB1;
Светодиод где-то в половину яркости должен гореть.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

Код: Выделить всё

#include <stdint.h>
#include <avr/io.h>

int main(void)
{
	//9.6
    CLKPR = (1 << CLKPCE);
    CLKPR = (0 << CLKPCE) | (0 << CLKPS3) | (0 << CLKPS2) | (0 << CLKPS1) | (0 << CLKPS0);

	DDRB=(0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (1<<DDB1) | (0<<DDB0);

	// fast PWM
	TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (1<<WGM01) | (1<<WGM00);
	TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00);
	OCR0B=0x80;

	//dis
	ACSR=(1<<ACD);

	while(1)
	{
	}
}
в протеусе меандр на PB1
Держит паяльник хвостом
Аватара пользователя
Сообщения: 920
Зарегистрирован: Пн июн 13, 2016 19:37:24
Откуда: Perm

Сообщение daaar »

Z_h_e писал(а):Проверьте исправность порта.
порт исправен
Контактная информация:
Ответить

Вернуться в «AVR»