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

ATtiny25-20pu проблема с ШИМ

Добавлено: Ср июл 01, 2015 22:41:32
Stanislavich
Привет. МК исправен, уже поигрался со светодиодами.
Мне нужно с помощью данного мк управлять двумя сервоприводами. Для начала нужно хоть с одним справиться. По даташиту на нем 2канальный pwm. Я решил выводить сигнал на ножку OC0A (нулевой пин B).
Делаю все по даташиту, ищу все, что связано с fast pwm :) .

Пишут: " TOP is defined as 0xFF when WGM0[2:0] = 3, and OCR0A when WGM0[2:0] = 7." ну так-как мне нужно различное значение угла, то ставлю в регистре TCCR0A биты WGM00,WGM01,WGM02(этот в B) по единице.
Идем дальше:
"In fast PWM mode, the compare unit allows generation of PWM waveforms on the OC0x pins. Setting the COM0x[1:0] bits to two will produce a non-inverted PWM" значит ставим COM0A1 в 1 и COM0A0 в 0.

Это максимум, что я смог вытащить из абзаца про fast powm.

Дальше ищу что-нибудь про TCCR0A:
Биты COM0,WGM выставили, в принципе здесь больше ничего нет.

Смотрю по TCCR0B: WGM02 есть, CS00 ставлю в единицу(No prescaling).

На следующей странице пишут про TCNT0, написано, что лучше это не трогать.
дальше идет регистр OCR0A. Как я понял, он нужен для генерации сигнала на серву, а именно на пин. к которому я ее подключил.

Внимание вопрос: что я cделал не так, что еще нужно сделать?
ДШ: http://www.atmel.com/images/atmel-2586- ... asheet.pdf

Re: ATtiny25-20pu проблема с ШИМ

Добавлено: Ср июл 01, 2015 22:50:39
dr.doc
Спойлер; Включим ШИМ режим
ldi r16,(1<<COM0A1|0<<COM0A0|1<<COM0B1|0<<COM0B0|1<<WGM00)
out TCCR0A,r16
ldi r16,(0<<CS02|0<<CS01|1<<CS00) ; WGM2
out TCCR0B,r16

ldi r16,(1<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|1<<WGM10)
out TCCR1A,r16
ldi r16,(0<<CS02|0<<CS01|1<<CS00|0<<WGM12) ; WGM2
out TCCR1B,r16


ldi r16,0xAA
out OCR0B,r16
eor r16,xor
out OCR0A,r16
Это для двух каналов на АТтини2313. Регистры, в принципе, одинаковы, поиграйтесь.

Re: ATtiny25-20pu проблема с ШИМ

Добавлено: Ср июл 01, 2015 22:53:39
Stanislavich
dr.doc писал(а):Это для двух каналов на АТтини2313. Регистры, в принципе, одинаковы, поиграйтесь.
Я пишу на си(atmel studio 6). Ассемблер, увы, пока не освоил.

Re: ATtiny25-20pu проблема с ШИМ

Добавлено: Ср июл 01, 2015 22:56:24
dr.doc
Так конструкции там должны быть понятны. Например: TCCR0A = (1<<COM0A1|0<<COM0A0|1<<COM0B1|0<<COM0B0|1<<WGM00) - выставляем конфигурацию бит. И далее таким же способом.

Re: ATtiny25-20pu проблема с ШИМ

Добавлено: Ср июл 01, 2015 23:04:03
Stanislavich
dr.doc писал(а):Так конструкции там должны быть понятны. Например: TCCR0A = (1<<COM0A1|0<<COM0A0|1<<COM0B1|0<<COM0B0|1<<WGM00) - выставляем конфигурацию бит. И далее таким же способом.
Ну допустим. А с помощью какого регистра управлять самим выводом? Изменение OCR0A ни к чему не приводит.

Re: ATtiny25-20pu проблема с ШИМ

Добавлено: Ср июл 01, 2015 23:12:24
dr.doc
А Вы полный комплекс мер из приведенного примера сделали? Если работаете в студии, просмотрите меняется ли TCNT, записаны ли регистры?

Re: ATtiny25-20pu проблема с ШИМ

Добавлено: Ср июл 01, 2015 23:41:46
Mishany
элементарно, см. даташит и настраиваем:
1. выбираем режим fastpwm mode7(см. таблицу 11-5 дтш) либо mode3
2. режим компаратора COM0A1, COM0A0 (B)
3. настраиваем предделитель исходя из нужной длительности импулься для сервы (таблица 11-6) с учетом дальнейшей точной настройки OCR0A(B)
4. играемся со значениями регистра OCR0A (B) и наблюдаем через осциллограф за сигналом, опытным путем находим нужные настройки.

Re: ATtiny25-20pu проблема с ШИМ

Добавлено: Ср июл 01, 2015 23:57:34
Stanislavich
Проблема была решена сменой FastPWM 7го в таблице на 3й. Также хорошо работает и с phase correct pwm(1 в таблице)

Re: ATtiny25-20pu проблема с ШИМ

Добавлено: Чт июл 02, 2015 04:08:37
Stanislavich
Окей, новый вопрос: как управлять сервой и с порта OCR0A и с OCR0B?

Re: ATtiny25-20pu проблема с ШИМ

Добавлено: Чт июл 02, 2015 09:11:14
Mishany
найти для начала какой сигнал переваривает серва, и далее пытаться этот сигнал получить на ногах мк, информации по этому полно на просторах

Re: ATtiny25-20pu проблема с ШИМ

Добавлено: Чт июл 02, 2015 10:47:01
dr.doc
как управлять сервой и с порта OCR0A и с OCR0B
Изменять длительность импульса путем изменения чисел, записываемых в OCR0x.