roboforum.ru

Технический форум по робототехнике.

Серво машинки, Atmega16

Серво машинки, Atmega16

Elandar » 03 янв 2011, 03:39

Доброго времени суток!
Вопрос мучает уже третий день, не могу понять что не так.
У меня есть atmega16, сервомашинка HX12K, использую восьмибитный таймер(0), внешний кварц на 12Мгц.
В CVAVR выбрал свой контроллер, выставил частоту вн. кварца, выбрал таймер 0, делитель - 1(12 000 кГц), по переполнению.
Итого выходит 1/12*256 = 21.33333333333333 мкс (частота 1 прерывания таймера)
Чтобы управлять серво нужно ждать 20 мс и затем от 0.8 до 2.3 можно давать импульс
0.0213333333333333 мс = 21.33333333333333 мкс
20 мс / 0.0213333333333333 мс = 937.5000000000015 (это число прерываний таймера отсчитывающее 20 мс)
К примеру я хочу подождать 1.55 мс и поставить серво по центру.
1.55 мс / = 0.0213333333333333 мс = 72.65625000000011

Итак получается программа:

...
volatile unsigned int cnt=0;
volatile unsigned char state=0;
ISR(TIMER0_OVF_vect)
{
if ((state == 0) && (cnt > 937))//ждем 20мс
{
cnt=0;
state=1;
PORTB=0xFF;
}
if ((state == 1) && (cnt > 72))//импульс 1.55 мс
{
cnt=0;
state=0;
PORTB=0;
}
cnt++;
}
...
PORTB=0;//изначально 0
DDRB=0xFF;//на выход

TCCR0=0x01;
TCNT0=0x00;
OCR0=0x00;

TIMSK=0x01;
sei();
while(!0)
{
}
...

В итоге, если серво машинка отключена до запуска МК, то после ее подключение к работающему МК она дергается в одну из сторон и замолкает. Если же МК запускается уже с подключенной серво то никакой реакции у сервы нет.
Подскажите, что я не так считаю?

Re: Серво машинки, Atmega16

EdGull » 03 янв 2011, 10:42

а фусибиты переключил на кварц?

Re: Серво машинки, Atmega16

=DeaD= » 03 янв 2011, 10:49

Что с питанием?

Re: Серво машинки, Atmega16

avr123.nm.ru » 03 янв 2011, 11:41

каша из мс и мкс :D посмотрите какие импульсы у вас в PROTEUS или в реале если осциллограф есть или примерно через звуковой вход ПК.

Re: Серво машинки, Atmega16

Elandar » 03 янв 2011, 11:56

EdGull писал(а):а фусибиты переключил на кварц?

SUT_CKSEL = Ext. Crystal/Resonator High Freq.; Start-up time: 16K CK + 64 ms

=DeaD= писал(а):Что с питанием?

оранжевый на ножку МК, красный к +5, коричневый -

Re: Серво машинки, Atmega16

avr123.nm.ru » 03 янв 2011, 12:41

попробуйте питать серву от другого источника питания.

Re: Серво машинки, Atmega16

Elandar » 04 янв 2011, 02:44

avr123.nm.ru, cпасибо!
Запитал серву от другого источника, теперь:
Уже удерживают своё положение, но серво машинка S-101 уходит в одно из крайних положений, а HX12K дергается постоянно :(

Не знаю что делать.
Подскажите, управляться должно каким образом?
а) 20мс ждем, импульс 0.8-2.3
б) импульс 0.8-2.3 и ждем (20-(0.8-2.3))мс - т.е. заполняем после едениц нулями до 20 мс?

Может у кого есть исходный код таймера на С где можно будет понять как управляется вс это дело?

Re: Серво машинки, Atmega16

=DeaD= » 04 янв 2011, 10:24

Повторю свой вопрос - от чего питаете серву?

Re: Серво машинки, Atmega16

true » 04 янв 2011, 12:54

попробуйте перейти на arduino, и не тратить время на простые вещи. Удовольствий массу получите, это я вам из личного опыта говорю! Я сам прошел через простые микроконтроллеры, и этот вечный гимор с таймерами, с интерфейсами, тратит кучу времени и отбивает желание что-либо делать дальше.

Если преследуете цель изучить микроконтроллер, то просто внимательно читайте мануалы. А если хотите что-либо изобретать и двигаться дальше, то см. выше.

Re: Серво машинки, Atmega16

avr123.nm.ru » 04 янв 2011, 14:21

Elandar писал(а):Подскажите, управляться должно каким образом?
Каждые 20 милиСек ( пойдет от 17 до 23 - точность не требуется ) надо делать импульс "1" длительностью от 1000 до 2000 мкС.

Elandar писал(а):Может у кого есть исходный код таймера на С где можно будет понять как управляется вс это дело?


Есть конечно. Задача 13 курса по AVR - http://proavr.narod.ru/z13.htm

Re: Серво машинки, Atmega16

Elandar » 04 янв 2011, 14:52

true писал(а):попробуйте перейти на arduino, и не тратить время на простые вещи. Удовольствий массу получите, это я вам из личного опыта говорю! Я сам прошел через простые микроконтроллеры, и этот вечный гимор с таймерами, с интерфейсами, тратит кучу времени и отбивает желание что-либо делать дальше.

Если преследуете цель изучить микроконтроллер, то просто внимательно читайте мануалы. А если хотите что-либо изобретать и двигаться дальше, то см. выше.

Мне нужна плата которая управляет 20 сервами. Знаю про всякие готовые, но уже взялся сам, а бросать не хочу.
А больш от этой платы мне ничего не нужно, дальше в ARM полезу.

=DeaD= писал(а):Повторю свой вопрос - от чего питаете серву?

От адаптра на 12V 2.08А 25W MAX, понижаю это дело до 5V и на серву.

Re: Серво машинки, Atmega16

EdGull » 04 янв 2011, 15:04

чем понижаешь?

Re: Серво машинки, Atmega16

=DeaD= » 04 янв 2011, 15:11

+1 - чем понижаешь?

Re: Серво машинки, Atmega16

EdGull » 04 янв 2011, 15:27

походу 7805 да еще и L :D

Re: Серво машинки, Atmega16

Elandar » 04 янв 2011, 17:35

EdGull писал(а):походу 7805 да еще и L :D

NY7805C 0334
:D
Что не так?)


cron
Rambler\'s Top100 Mail.ru counter