Страница 1 из 1

PWM attiny13

Добавлено: Сб апр 29, 2017 20:39:23
daaar
Нужен ШИМ, решил использовать для этого attiny13. ШИМ не запускается, уже все перечитал, везде по разному включают.

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

DDRB |= (1<<1);
TCCR0B |= (1<<WGM01) | (1<<WGM00) | (1<<CS02) | (1<<CS01) | (1<<COM0A0);
OCR0B = 0xff/2;
[/color]
Вот такой код конфигурации ШИМ. Что может быть не так?

Re: PWM attiny13

Добавлено: Вс апр 30, 2017 06:31:29
AlanDrakes
Вы используете пин OCR0B, а включаете в настройках регистра пин OCR0A.
Исправьте вторую строку на это:

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

TCCR0B |= (1<<WGM01) | (1<<WGM00) | (1<<CS02) | (1<<CS01) | (1<<COM0B0);
                                                                    ^

Re: PWM attiny13

Добавлено: Вс апр 30, 2017 07:09:51
oleg110592
а в регистре TCCR0B есть бит COM0B0? Наверное у меня старая документация.

Re: PWM attiny13

Добавлено: Вс апр 30, 2017 07:59:21
daaar
Исправил ошибку, но всё равно не запустилось
oleg110592 писал(а):а в регистре TCCR0B есть бит COM0B0?
Пишу в atmel studio, ide исправила COM00 на COM0B0

Re: PWM attiny13

Добавлено: Вс апр 30, 2017 08:39:29
Z_h_e
WGM01, WGM00, COM0B0 - это биты регистра TCCR0A.

Re: PWM attiny13

Добавлено: Вс апр 30, 2017 09:06:55
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;
Но всё равно не запускается

Re: PWM attiny13

Добавлено: Вс апр 30, 2017 09:09:25
Z_h_e
Ну проверьте наличие внешнего тактирования, может в схеме проблема.

Re: PWM attiny13

Добавлено: Вс апр 30, 2017 09:12:28
daaar
Тактирование идет от внутреннего генератора, в схеме просто подключен светодиод к OC0B

Re: PWM attiny13

Добавлено: Вс апр 30, 2017 09:14:56
Z_h_e
Тогда зачем конфигурировать таймер от внешнего источника? Такое впечатление что Вы ДШ даже не пробовали читать.

Re: PWM attiny13

Добавлено: Вс апр 30, 2017 09:23:40
daaar
Извиняюсь, перепутал. Установил CS00 и CS01, ничего не изменилось

Re: PWM attiny13

Добавлено: Вс апр 30, 2017 09:33:16
Z_h_e
Проверьте исправность порта.

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

DDRB=1<<PB1;
while (1) PINB=1<<PB1;
Светодиод где-то в половину яркости должен гореть.

Re: PWM attiny13

Добавлено: Вс апр 30, 2017 09:35:16
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

Re: PWM attiny13

Добавлено: Вс апр 30, 2017 09:48:48
daaar
Z_h_e писал(а):Проверьте исправность порта.
порт исправен