Страница 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
Проверьте исправность порта.
Светодиод где-то в половину яркости должен гореть.
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 писал(а):Проверьте исправность порта.
порт исправен