roboforum.ru

Технический форум по робототехнике.
Текущее время: 02 дек 2024, 20:15

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: Управление сервой с помощью потенциометра. МК PIC16F887
СообщениеДобавлено: 14 июл 2010, 01:31 
Не в сети

Зарегистрирован: 28 июн 2010, 11:58
Сообщения: 24
Откуда: СПб
Skype: dmitry.kotikov
ФИО: Котиков Дмитрий
Исправил. Конечно выложу! + весь полезный материал, который будет использоваться и видео с демонстрацией.
Только вот сначала нужно ЭТО СДЕЛАТЬ, а новых идей пока никаких...

Добавлено спустя 1 минуту 47 секунд:
Как данными из ADRESH и ADRESL можно более грамотно воспользоваться?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой с помощью потенциометра. МК PIC16F887
СообщениеДобавлено: 14 июл 2010, 08:54 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Посмотреть код можно в примерах, в руководстве компилера похожем на супер учебник, возможно в даташите.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой с помощью потенциометра. МК PIC16F887
СообщениеДобавлено: 14 июл 2010, 10:44 
Не в сети

Зарегистрирован: 28 июн 2010, 11:58
Сообщения: 24
Откуда: СПб
Skype: dmitry.kotikov
ФИО: Котиков Дмитрий
avr123.nm.ru писал(а):
Посмотреть код можно в примерах, в руководстве компилера похожем на супер учебник, возможно в даташите.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой с помощью потенциометра. МК PIC16F887
СообщениеДобавлено: 14 июл 2010, 11:22 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
На страничке где качается компилер находится СУПЕР ПУПЕР и экстра руководство. Где есть ВСЕ что делает типовой радигубитель - АЦП точно есть.

вот картинка из того СУПЕР мануала

По ней код ваш таков примерно

Код:
while(1){
пауза 18 мс
на серво выдать "1"
пауза_мкс ( ( ADC_read (номер канала АЦП) + 1000) );
на серво выдать "0"
}


А функцию паузы в мкс вам придется самому наверно писать.
Либо использовать функцию паузы в 10 машинных циклов PIC - Delay_Cyc ( от 3 до 255 )

Delay_Cyc (10);

Это пауза 100 циклов, при 20 Мгц циклы в PIC с частотой 5 МГц случаются, значит пауза 20 мкС.


=


Вложения:
adc_pic_mikroc.png
adc_pic_mikroc.png [ 100.2 КиБ | Просмотров: 1402 ]

_________________
Читайте !
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой с помощью потенциометра. МК PIC16F887
СообщениеДобавлено: 14 июл 2010, 13:23 
Не в сети

Зарегистрирован: 28 июн 2010, 11:58
Сообщения: 24
Откуда: СПб
Skype: dmitry.kotikov
ФИО: Котиков Дмитрий
Я сейчас более глубоко изучал ситуацию и понял что ADRESH изменяется от 0 до 255, кот-нибудь может пояснить как изменяется и в зависимости от чего ADRESL? Его значения прыгают от 0 до 192.
И так ADRESH мы умножаем на 4 и получаем значение от 0 до 1020. ADRESL делим на 64 и получаем значение от 0 до 3. Складываем ADRESH и ADRESL и получаем значение от 0 до 1023.

Проблему с колбашеньем сервы решил, теперь она двигается плавно.

Вот последняя версия кода на данный момент. Серва все еще выполняет только три положения(как я писал ранее - крайне левое, среднее, крайне правое). Не могу понять какая часть кода отвечает за это явление...
Код:
int x;
unsigned i;

void main()
{
TRISC.F5 =0;
TRISB.F4 =0;
TRISB.F5 =0;

while(1)
      {
ADCON0=0b00001111;          //справа на лево 1 - АЦП вкл, 1- аналогово-цифровое преобразование вкл., 1100 порт RA3, 00 - FOSC для частоты 20мгц, Tad=100нсек
   Delay_ms(20);                // задержка 20мс

   x=(ADRESH*4)+(ADRESL/64);   // а здесь начинается вычисление лучше которого я пока что не придумал...
   i=(1900/100)*(x/(1023/100));
   i=i+500;
   i=i/1000;

ANSEL=0x00;
ANSELH=0x00;

PORTC.F5=1;          //команды работать соответствующим выходам
PORTB.F5=1;
PORTB.F4=1;
Vdelay_ms(i);   

PORTC.F5=0;
PORTB.F5=0;
PORTB.F4=0;
delay_ms(20);
       }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой с помощью потенциометра. МК PIC16F887
СообщениеДобавлено: 14 июл 2010, 14:50 
Не в сети
Аватара пользователя

Зарегистрирован: 28 июл 2009, 10:02
Сообщения: 862
Откуда: Самара
ФИО: Павел Сергеевич
ADRESL ADRESH - 10 битный результат АЦП
в одном 8 бит в другом 2 бита.
можно выставить левое и правое выравнивание.
А вообще не заморачивайся с ними бери готовую функция ADCRead(канал).
в твоем случае можно использовать только ADRESH - 8бит - разрешение получится 255 и не делать преобразование х=()+().
а прыгает так по-тому что у тебя левое выравнивание стоит и биты по спадающему идут, сперва забивают ADRESH, а потом ADRESL.
сделай правое выравнивание.
Вложение:
1.jpg
1.jpg [ 20.71 КиБ | Просмотров: 1375 ]

ADRESL
00xx xxxx - 0
01xx xxxx - 64
10xx xxxx - 128
11xx xxxx - 192
только когда сделаешь правое выравнивание, надо будет формулу для х менять.

_________________
«Сон разума рождает чудовищ»


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой с помощью потенциометра. МК PIC16F887
СообщениеДобавлено: 15 июл 2010, 10:33 
Не в сети
Аватара пользователя

Зарегистрирован: 28 июл 2009, 10:02
Сообщения: 862
Откуда: Самара
ФИО: Павел Сергеевич
Изучай даташит на PIC16F887.
Вот вкратце накидал прогу (без прерываний и таймеров) она далеко не гут, но все же работает:
Код:
#include <built_in.h>

int x;
unsigned i;

void main()
{
TRISC.F5 = 0;

ANSEL  = 0b11111111;        // PORTA is input
TRISA  = 0b00001000;        // Configure AN3 pin as analog

while(1)
      {
      i = ADC_Read(3);   // Get 10-bit results of AD conversion
      i=i+1000;

      PORTC.F5=1;                 //команды работать соответствующим выходам
      VDelay_Advanced_ms(i, 20);  // задержка в мкс (виртуальное занижение частоты)

      PORTC.F5=0;
      VDelay_Advanced_ms(20000-i, 20);      // задержка мс 20мс=20000мкс
      }
}

Вложение:
2.jpg
2.jpg [ 122.56 КиБ | Просмотров: 1380 ]

Файл для протеуса:
Вложение:
2.rar [17.1 КиБ]
Скачиваний: 0


Для более точной настройки можно поиграться с i=i+1000;
и VDelay_Advanced_ms(20000-i, 20);

_________________
«Сон разума рождает чудовищ»


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой с помощью потенциометра. МК PIC16F887
СообщениеДобавлено: 16 июл 2010, 17:16 
Не в сети

Зарегистрирован: 28 июн 2010, 11:58
Сообщения: 24
Откуда: СПб
Skype: dmitry.kotikov
ФИО: Котиков Дмитрий
На выходные уезжаю. Приеду разберусь с программой. Она работает, я ее загрузил на плату - все окей. Только серва не доходит до крайних положений. Доработаю по возвращению :)
Про ADRESL и ADRESH - зачем нужно делать левое или правое выравнивание?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой с помощью потенциометра. МК PIC16F887
СообщениеДобавлено: 23 июл 2010, 01:51 
Не в сети
Аватара пользователя

Зарегистрирован: 03 дек 2008, 23:24
Сообщения: 268
Откуда: Тамбов
Skype: anubis_kesh
прог. языки: Delphi, С++, PHP, HTML
ФИО: Гребенников Роман
kotikov писал(а):
Я сейчас более глубоко изучал ситуацию и понял что ADRESH изменяется от 0 до 255, кот-нибудь может пояснить как изменяется и в зависимости от чего ADRESL?

не глубоко...
Если по простому то: при правом выравнивании точность, при левом быстродействие.
При правом выравнивании тебе в любом случае придется использовать оба регистра, тобишь все 10 бит. И изменяться от 0 до 255 будет не ADRESH, а ADRESL. ADRES=ADRESL+(256*ADRESH) , а дальше можешь делать с ним все что хочешь.
При левом выравнивании младшие пару битов ADRESL можно выкинуть и работать только с ADRESH. Получается только 8 бит (правда это потом надо будет учитывать). Если не придираться к словам то как-то так...
З.Ы. Помоему лучше завязывать с микроС и переходить на Hi-Tech, все по ближе к примерам и пониманию как и что должно работать... Чем мучаться с этими Delay-то Delay-сё, лучше включить таймер и делать все на нем....

_________________
Блин, никак не могу придумать подпись!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой с помощью потенциометра. МК PIC16F887
СообщениеДобавлено: 06 авг 2010, 17:02 
Не в сети
Аватара пользователя

Зарегистрирован: 28 июл 2009, 10:02
Сообщения: 862
Откуда: Самара
ФИО: Павел Сергеевич
Цитата:
Сообщение kotikov » 16 июл 2010, 18:16
На выходные уезжаю. Приеду разберусь с программой. Она работает, я ее загрузил на плату - все окей. Только серва не доходит до крайних положений. Доработаю по возвращению :)


Уже не одни выходные прошли...
Есть какие-нить результаты или вопросы?

_________________
«Сон разума рождает чудовищ»


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой с помощью потенциометра. МК PIC16F887
СообщениеДобавлено: 08 авг 2010, 00:33 
Не в сети
Аватара пользователя

Зарегистрирован: 03 дек 2008, 23:24
Сообщения: 268
Откуда: Тамбов
Skype: anubis_kesh
прог. языки: Delphi, С++, PHP, HTML
ФИО: Гребенников Роман
:oops:
У меня вопрос, только контроллер другой PIC18F6527 и проблема с другим модулем

_________________
Блин, никак не могу придумать подпись!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO