реклама на сайте
подробности

 
 
> ШИМ для сервомашинки на attiny13
evgenui
сообщение May 24 2013, 14:05
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 24-05-13
Пользователь №: 76 963



Здравствуйте, при выполнении дипломной работы(макет комнаты) столкнулся с проблемой создания ШИМ для управления сервомашинкой. Имею в наличии МК attiny13. пробывал программировать сам не вышло. в связи с этим прошу помощи в програмировании.
Прикрепленное изображение

работать должно так при нажатии кнопки на серво должены постоянно поступать импульсы в 1 мс с интервалом в 20мс. при размыкании кнопки импульсы в 2 мс. с интервалом в 20мс.
писать нужно на си или ассемблере. заранее благодарю.


Сообщение отредактировал Herz - May 29 2013, 11:15
Причина редактирования: Самоцитирование
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
evgenui
сообщение Jun 1 2013, 05:39
Сообщение #2





Группа: Участник
Сообщений: 10
Регистрация: 24-05-13
Пользователь №: 76 963



kovigor извините, но я впервые сталкиваюсь с этими вопросами, при самостоятельном изучении не вышло ничего хорошего, а сроки поджимают. Вот и спрашиваю у знающих людей в чем моя ошибка?

Xenia, я собираюсь управлять сервомашинкой, необходимо 2 положения крайнее левое и крайнее правое. для этого на управляющий вывод необходимо подавать импульс 1 или 2 мс. через каждые 20мс. программно выставлены задержки на эти величины, так что думаю что для сервы все равно на какой частоте работает МК.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Jun 1 2013, 07:14
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(evgenui @ Jun 1 2013, 08:39) *
при самостоятельном изучении не вышло ничего хорошего, а сроки поджимают. Вот и спрашиваю у знающих людей в чем моя ошибка?

Конечно, потому и не вышло - вы не учитесь, а пишете сообзщения на форумы. Задача тривиальна, решается за день. Почему у всех "вышло", а у вас - нет ???
Плюс стиль сообщений - сообщения написаны безграмотно, крайне небрежно, по виду их можно судить о полном неуважении к тем, кому они предназначаются. Одно слово "промаделировал" как нельзя лучше говорит о том, сколько книг в своей жизни вы прочли (и не только по специальности). Поверьте, первое же подобное сообщение напрочь отбивает охоту вам помогать. Так что мой вам совет - откройте, наконец, книжку и даташит, выясните, как решается ваша задача, и решите ее сами. Помочь вам я бы мог, но не сделаю этого ради вас же, ибо такая помощь не будет для вас полезной. Учитесь работать самостоятельно ...
Go to the top of the page
 
+Quote Post
Andrikll
сообщение Jun 8 2013, 20:12
Сообщение #4





Группа: Участник
Сообщений: 11
Регистрация: 16-02-07
Пользователь №: 25 420



Здравствуйте! Нашел эту тему и решил не заводить свою. Задача котторую я хотел решить схожая, но я хотел ее решить непременно в прерываниях для того чтобы был точнее счет...
Подробнее.
Микросхема атмега48, таймер который использую т2 (1байтный) режим таймера нормал (обычный счет без обнуления по достижении ОСР) но при этом я использую прерывание по ОСР0А. Частоту для светодиода задал 976 Гц ОСР2А задаю регулятором (инкрементным энкодером) общая частота 3.8 Гц (976/256=3,81).
В полной программе с функцией обработки энкодера и 2-мя прерываниями, диод помаргивает неравномерно, при этом я ничего не трогаю (энкодер). Для того чтобы понятно было как это выглядит привожу видео. Если делаю программу только прерывания, то никаких помаргиваний, равномерно дрожит своими 3.8 герцами, но "чистая" программа без основной части то мне не нужна! Прошу помощи.
В основной части программы вызов функции изменения reg и отображение значений старших бит (вывод на светодиоды, 5 старших бит). в данном листинге нет присвоения ОСР2А каких либо значений но и в этом случае свечение не равномерное!
На другом форуме задавал этот вопрос, предложили сменить переменную (энкодера) на volatile, немного меньше стали подергивания (или мне показалось) но полностью не решилась проблемма

Код
char serv_num=1, count, old_reg, new_reg;

volatile char reg=0x0f;
  void regul (void)
    {
  if (old_reg==0) {if(new_reg == 2) reg++;  if(new_reg == 1) reg--; }
     }
        interrupt [TIM2_OVF] void timer2_ovf_isr(void)
        {
        PORTB.0 = 1;
         }

// Timer 2 output compare interrupt service routine
interrupt [TIM2_COMPA] void timer2_compa_isr(void)
{
PORTB.0 = 0;  
}

void main(void)
{
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+

#endif

PORTB=0x00;
DDRB=0xFF;

PORTC=0x00;
DDRC=0x00;

PORTD=0xC0;
DDRD=0x3F;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 976 Hz
// Mode: normal
// OC0A output: Disconnected
// OC0B output: Disconnected

TCCR0A=0x00;
TCCR0B=0x05;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 976 Hz
// Mode: normal
// OC2A output: Disconnected
// OC2B output: Disconnected

ASSR=0x00;
TCCR2A=0x00;
TCCR2B=0x07;
TCNT2=0x00;
OCR2A=0x0f;
OCR2B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off

EICRA=0x00;
EIMSK=0x00;
PCICR=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x01;

// Timer/Counter 2 Interrupt(s) initialization
TIMSK2=0x03;

// Global enable interrupts

#asm("sei")

while (1)
      {
     new_reg = 2*!PIND.6+!PIND.7;    
     if (old_reg!=new_reg) regul();
     old_reg=new_reg;  

     PORTB.5 = (reg-reg%128)/128;  
     PORTB.4 = (reg-reg%64)/64;
     PORTB.3 = (reg-reg%32)/32;
     PORTB.2 = (reg-reg%16)/16;
     PORTB.1 = (reg-reg%8)/8;
     OCR2A = reg;

       };
}


Сообщение отредактировал Andrikll - Jun 9 2013, 13:05
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- evgenui   ШИМ для сервомашинки на attiny13   May 24 2013, 14:05
- - kovigor   Цитата(evgenui @ May 24 2013, 17:05) рабо...   May 24 2013, 14:46
|- - evgenui   Цитата(kovigor @ May 24 2013, 17:46) Вот,...   May 24 2013, 15:55
|- - kovigor   Цитата(evgenui @ May 24 2013, 18:55) спас...   May 24 2013, 16:28
|- - badik   ШИМ это много проще. Делаете в начале инициализаци...   May 24 2013, 17:05
- - evgenui   спасибо большое!!! щас попробую   May 24 2013, 17:18
- - badik   Прошу извинить про ШИМ. ATtiny13 имеет только Time...   May 24 2013, 17:29
- - evgenui   доброго времени суток, помогите еще раз, задача вс...   May 29 2013, 10:06
|- - kovigor   Цитата(evgenui @ May 29 2013, 13:06) не м...   May 29 2013, 10:37
- - evgenui   условно говоря так чтобы сигнал изменялся и процес...   May 29 2013, 11:09
|- - kovigor   Цитата(evgenui @ May 29 2013, 14:09) усло...   May 29 2013, 11:14
- - evgenui   запускать не нужно, нужно выполнение вышеперечисле...   May 29 2013, 11:46
|- - kovigor   Цитата(evgenui @ May 29 2013, 14:46) запу...   May 29 2013, 11:48
- - evgenui   т.е требуется замедлить процесс поворота сервы. а ...   May 29 2013, 11:50
|- - kovigor   Цитата(evgenui @ May 29 2013, 14:50) т.е ...   May 29 2013, 12:44
- - evgenui   не работает, поворачивается в одно положение тольк...   May 29 2013, 13:47
|- - kovigor   Цитата(evgenui @ May 29 2013, 16:47) пово...   May 29 2013, 14:03
- - evgenui   спасибо, промаделировал все нормально спаял схему,...   May 31 2013, 16:33
|- - kovigor   Цитата(evgenui @ May 31 2013, 19:33) если...   May 31 2013, 19:55
- - Xenia   Скажите, какую частоту надо заказывать PWM для шаг...   May 31 2013, 21:31


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 08:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01368 секунд с 7
ELECTRONIX ©2004-2016