[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Форум » Мастерская » Успехи в мире робототехники » Мой робот "Roberto-1"
Мой робот "Roberto-1"
nightmareДата: Среда, 11.05.2011, 21:58 | Сообщение # 16
Язык программированя: C,C#
Группа: Проверенные
Сообщений: 133
Репутация: 3
Статус: Offline
Теперь и сервы глядишь заработают.

russian-robots@conference.jabber.ru - jabber чат для робототехников
SpaceДата: Среда, 11.05.2011, 23:59 | Сообщение # 17
Администратор
Язык программированя: BascomAVR
Группа: Администраторы
Сообщений: 327
Репутация: 8
Статус: Offline
Ну вот и ладненько всё разъяснилось значит. Krish, тем чем прошиваешь ты мк я не пользуюсь, поэтому в любом случаи не объяснил бы как там и чего.

KrishДата: Четверг, 12.05.2011, 20:13 | Сообщение # 18
Группа: Пользователи
Сообщений: 184
Репутация: 2
Статус: Offline
Space, у тебя ошибка вот в этой программе:
Code
$regfile = "m16def.dat"
$crystal = 16000000

Config Adc = Single , Prescaler = Auto , Reference = Internal

Config Pind.2 = Output : M1f Alias Portd.2
Config Pind.3 = Output : M1b Alias Portd.3
Config Pind.4 = Output : M2f Alias Portd.4
Config Pind.5 = Output : M2b Alias Portd.5

Enable Interrupts

Dim АЦП1 As Word , Выбор_разворота As Bit

Выбор_разворота = 0

Do
Start Adc : АЦП1 = Getadc(2)
If АЦП1 >= 500 Then : Gosub Отъехать_от_препятствия_спереди : Else : Gosub Вперёд : End If
Loop

Вперёд:

M1f = 1 : M2f = 1
M1b = 0 : M2b = 0
Return

Назад:
M1f = 0 : M2f = 0
M1b = 1 : M2b = 1
Return

Разворот_вправо:
M1f = 1 : M2f = 0
M1b = 0 : M2b = 1
Return

Разворот_влево:
M1f = 0 : M2f = 1
M1b = 1 : M2b = 0
Return

'**********************Отъезд от препятствия по центру**************************
Отъехать_от_препятствия_спереди:
Do
Start Adc : АЦП1 = Getadc(2) : Stop Adc
Gosub Назад
Loop Until АЦП1 <= 300

If Выбор_разворота = 0 Then : Gosub Разворот_вправо : Else : Gosub Разворот_влево : End If
Wait 1                    'Время разворота
If Выбор_разворота = 0 Then : Выбор_разворота = 1 : Else : Выбор_разворота = 0 : End If       'Переустанавливаем переменную
Return

Ты не указал input для sharp!
http://robotsspace.ucoz.ru/publ....-1-0-68


LacOS
SpaceДата: Четверг, 12.05.2011, 23:13 | Сообщение # 19
Администратор
Язык программированя: BascomAVR
Группа: Администраторы
Сообщений: 327
Репутация: 8
Статус: Offline
Нет в этом нужды!
Номер порта указывается командой Getadc(x)- где х число, порт от 0 до 7
P.S любой код, который выложен был проверен мной, 100% все рабочие


KrishДата: Пятница, 13.05.2011, 15:15 | Сообщение # 20
Группа: Пользователи
Сообщений: 184
Репутация: 2
Статус: Offline
Getadc(x) - как тут выбрать сам порт А,B,С,D?

LacOS
SpaceДата: Пятница, 13.05.2011, 16:53 | Сообщение # 21
Администратор
Язык программированя: BascomAVR
Группа: Администраторы
Сообщений: 327
Репутация: 8
Статус: Offline
Quote
АЦП (ADC – analog digital converter) – аналого-цифровой преобразователь.
АЦП присутствует практически во всех моделях современных МК, в том числе и в серии mega производства фирмы ATMEL. С помощью него можно выполнять множество полезных действий – контролировать напряжение, обрабатывать различные сигналы с сенсоров и датчиков, преобразовывать аналоговый аудио сигнал в цифровую форму и тд. и тп. Так что же представляет из себя АЦП?

Аналого-цифровой преобразователь конвертирует входящий аналоговый сигнал (напряжение) в цифровую форму. Разрешение преобразователя указывает на то количество дискретных значений которое он может дать. В данном примере используется микроконтроллер ATmega32 (наш контроллер MRC40 с экспериментальным модулем). В этом МК имеется 8 входов АЦП, каждый из которых имеет разрешение 10 бит. Соответственно каждый канал выдает 1024 дискретных значений. Для примера мы подключили построечный резистор к выводу 0 порта А по следующей схеме.

Так вот ацп например на меге16 это выводы PA0-PA7(PA0 в скобочках обозначается как ADC0(то есть ADC это и есть АЦП), пример схемы ниже, и т.д.).

На меге 16 всего этих ацп получается 8. И только эти выводы настраиваются строчкой

Code
Config Adc = Single , Prescaler = Auto , Reference = Internal

Поэтому в строчке

Code
Getadc(x)

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

К примеру выводы PD2(INT0), PD3(INT1). Эти выводы для прерываний. Только на них можно подключить тсоп, для управления по каналу RC5
Причём в программе надо разрешить прерывания. С помощью строчки:

Code
Enable Interrupts
Прикрепления: 0523748.gif (23.2 Kb)


KrishДата: Пятница, 13.05.2011, 16:59 | Сообщение # 22
Группа: Пользователи
Сообщений: 184
Репутация: 2
Статус: Offline
3 Вопроса:
1) Вот интерфейс I2C - это же порты SDA и SCL (PC1 и PC0), как вообще периферия управляется с этих портов? Ведь на контроллерах ставят много портов SDA и SCL, так же и eeprom i2c есть, Они что все управляют всего с 2х портов pc1 и pc0?
2) Я подключаю шарп к порту A, он не реагирует, подключаю к порту C он реагирует, почему?
3) почему то робот не едит по дальномеру ШАРП, не реагирует он на данные с Шарп((
Программа для робота выше на 3и поста :(


LacOS

Сообщение отредактировал Krish - Пятница, 13.05.2011, 16:59
SpaceДата: Пятница, 13.05.2011, 17:12 | Сообщение # 23
Администратор
Язык программированя: BascomAVR
Группа: Администраторы
Сообщений: 327
Репутация: 8
Статус: Offline
Quote (Krish)
1) Вот интерфейс I2C - это же порты SDA и SCL (PC1 и PC0), как вообще периферия управляется с этих портов? Ведь на контроллерах ставят много портов SDA и SCL, так же и eeprom i2c есть, Они что все управляют всего с 2х портов pc1 и pc0?

По I2C единственный мой проект был это часы. И то прогу писал по примеру. На сколько знаю микросхема(реального времени например DS1307) которая может управляться по каналу I2C имеет свой так сказать индивидуальный номер, который указывается в программе. С портов SDA и SCL может управляться сразу несколько устройств. Если так интересно почитай в интернете. т. к. более подробно я тебе не могу рассказать, пока не испробовал сам это.

Quote (Krish)
2) Я подключаю шарп к порту A, он не реагирует, подключаю к порту C он реагирует, почему?

Бред, такого просто не может быть. Хотя я как то пробовал использовать датчик без ацп. Тупо если на ноге там к примеру PC0 1, значит одно действие, если 0, то другое. Вроде работало, но на небольшом расстояние. Конечно ногу PC0 настраиваем на вход, присваеваем имя Sharp:

Code
Config Pinc.0 = Input : Sharp Alias Portc.0
do
If Sharp=1 Then
led=1
else
led=0
end if
loop

Типо этого

Quote (Krish)
3) почему то робот не едит по дальномеру ШАРП, не реагирует он на данные с Шарп((
Программа для робота выше на 3и поста :(

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


KrishДата: Пятница, 13.05.2011, 17:53 | Сообщение # 24
Группа: Пользователи
Сообщений: 184
Репутация: 2
Статус: Offline
Вот схема подключения всего.
Схема робота по типу MRC40 (точь в точь)

Добавлено (13.05.2011, 17:53)
---------------------------------------------
вроде помех не должно быть на АЦП я ставил фильтр, даже AREF заземлил на 0.1мкф

Прикрепления: 0738712.jpg (13.9 Kb)


LacOS
SpaceДата: Пятница, 13.05.2011, 18:09 | Сообщение # 25
Администратор
Язык программированя: BascomAVR
Группа: Администраторы
Сообщений: 327
Репутация: 8
Статус: Offline
нет. нарисуй в splan или eagle схему как положено, со всей обвязкой, как питание подаёшь, куда кварц подлючен, кондёры, резистор и фотку контроллера выложи отдельно

А потому что ты нарисовал могу лишь сказать, что если у тебя на PA2 подключен ик-приёмник(он же тсоп), то уже не правильно. КУДА ПОДКЛЮЧИТЬ ПИСАЛ:

Quote (Space)
К примеру выводы PD2(INT0), PD3(INT1). Эти выводы для прерываний. Только на них можно подключить тсоп, для управления по каналу RC5


KrishДата: Пятница, 13.05.2011, 18:38 | Сообщение # 26
Группа: Пользователи
Сообщений: 184
Репутация: 2
Статус: Offline
вопрос я решил. я взял программу pashteetа (kapanda) она работает....
Code
'*******************************************************************************

$regfile = "m16def.dat"                    'используем мк ATmega16
$crystal = 16000000                    'частота кварцевого резонатора 16MHz

'****************************Настройка таймеров и сервоприводов*****************

Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down       ' таймер для ШИМ двигателей
Config Servos = 1 , Servo1 = Portc.7 , Reload = 12          ' Указываем кол-во серв, присваеваем имя Servo1 порту PC7, указываем длину импульса.

'*************************** Порт A ********************************************

' Поключили дальномер, порт A0, настройки АДС ниже

'*************************** Порт В ********************************************

Config Pind.2 = Output : Led1 Alias Portd.2                 'ногу сконфигурировали как выход и обозвали Led1
Config Pind.3 = Output : Led2 Alias Portd.3                 'ногу сконфигурировали как выход и обозвали Led2

'*************************** Порт C ********************************************

Config Pinc.7 = Output                    ' Подключили серву1 к порту С7, настройки сервы выше

'*************************** Порт D ********************************************

Config Pinc.6 = Output : Dr1 Alias Portc.6                  'ногу сконфигурировали как выход и обозвали Dr1
Config Pinc.5 = Output : Dr2 Alias Portc.5                  'ногу сконфигурировали как выход и обозвали Dr2
Config Pinc.4 = Output                    'ногу ШИМа 1-ого  движка сконфигурировали как выход
Config Pinc.3 = Output                    'ногу ШИМа 2-ого движка сконфигурировали как выход

'*****************************Настройка ADC*************************************

Config Adc = Single , Prescaler = Auto , Reference = Internal

'*******************************************************************************

Enable Interrupts                    ' разрешаем прерывания

'************************Переменные и константы*********************************

Dim Speed As Integer , Sharp As Integer
Dim I As Integer
Dim Vout As Word

'*****************************Основной цикл*************************************
Speed = 255
1:
Do

Gosub Вперёд                    ' Если сигнала от ик-датчика(Sharp) не поступает, значит двигаемся всё время прямо

'******************Вращение сервопривода и датчика Sharp************************

For I = 45 To 90 Step 1                    ' Вращаем сервой справа на лево
      Gosub Sharp_right                    ' считаем что шарп смотрит вправо
      Servo(1) = I
      Waitms 12                    ' ждем 12 мс
Next

For I = 90 To 135 Step 1                    ' Вращаем сервой справа на лево
      Servo(1) = I
      Gosub Sharp_left                    ' считаем что шарп смотрит влево
      Waitms 12                    ' ждем 12 мс
Next

For I = 135 To 90 Step -1                    ' Вращаем сервой слева на право
      Gosub Sharp_left                    ' считаем что шарп смотрит вправо
      Servo(1) = I
      Waitms 12                    ' ждем 12 мс
Next

For I = 90 To 45 Step -1                    ' Вращаем сервой слева на право
      Gosub Sharp_right                    ' считаем что шарп смотрит влево
      Servo(1) = I
      Waitms 12                    ' ждем 12 мс
Next

Loop

'*******************************************************************************
'      Включение комбинации моторов для движения в заданном направлении
'*******************************************************************************

Стоп:                    ' стоим на месте
Dr1 = 0 : Dr2 = 0 : Pwm1a = 0 : Pwm1b = 0
Return

Вперёд:
                       ' едим вперёд на заданной скорости
Dr1 = 0 : Dr2 = 0 : Pwm1a = Speed : Pwm1b = Speed
Return

Назад:                    ' едим назад на заданной скорости

Dr1 = 1 : Dr2 = 1 : Pwm1a = Speed : Pwm1b = Speed
Return

Разворот_вправо:                    ' делаем Разворот_вправо на заданной скорости

Dr1 = 0 : Dr2 = 1 : Pwm1a = Speed : Pwm1b = Speed
Return

Разворот_влево:                    ' делаем Разворот_влево на заданной скорости

Dr1 = 1 : Dr2 = 0 : Pwm1a = Speed : Pwm1b = Speed
Return

'***********************************Sharp***************************************

Sharp_right:

Start Adc : Vout = Getadc(0)                    'Sharp connected for example to PA=0(ADC0)
Stop Adc
If Vout > 240 Then : Sharp = 1 : Else : Sharp = 0 : End If
If Sharp = 1 Then : Led1 = 1
      Gosub Разворот_влево : Waitms 500 : Led1 = 0 : Gosub Вперёд : End If

Return

Sharp_left:

Start Adc : Vout = Getadc(0)                    'Sharp connected for example to PA=0(ADC0)
Stop Adc
If Vout > 240 Then : Sharp = 1 : Else : Sharp = 0 : End If
If Sharp = 1 Then : Led2 = 1
      Gosub Разворот_вправо : Waitms 500 : Led2 = 0 : Gosub Вперёд : End If

Return

End

'*******************************************************************************

А можно RC5 подключить к портам C?

Добавлено (13.05.2011, 18:38)
---------------------------------------------
Короче, самые важные проблемы решил, научился подключать rc5, sharp, servo, управлять ДД, теперь буду делать нового робота.
Надо наити хороший контроллер, наверно, возьму твой, только, блин, я не умею паять smd :( это останавливает(


LacOS

Сообщение отредактировал Krish - Пятница, 13.05.2011, 18:29
SpaceДата: Пятница, 13.05.2011, 19:44 | Сообщение # 27
Администратор
Язык программированя: BascomAVR
Группа: Администраторы
Сообщений: 327
Репутация: 8
Статус: Offline
ггг.. если память не изменяет. он писал прогу по примеру моего проекта
Quote (Krish)
А можно RC5 подключить к портам C?

блин ты читаешь что я пишу!!? сказал же только на порты PD2(INT0), PD3(INT1)!
Quote (Krish)
Надо наити хороший контроллер, наверно, возьму твой, только, блин, я не умею паять smd :( это останавливает(

из smd там только ft232rl, если паять аккуратно, то припаять реально
Quote (Krish)
я не умею паять smd

за тебя ни кто не спаяет, учись


KrishДата: Пятница, 13.05.2011, 20:48 | Сообщение # 28
Группа: Пользователи
Сообщений: 184
Репутация: 2
Статус: Offline
Quote (Space)
блин ты читаешь что я пишу!!? сказал же только на порты PD2(INT0), PD3(INT1)!

Почему я переспрашиваю, дело в том что я уже писал что подключал rc5 и он работал, я его подключал к порту A или C точно не помню, помню сам факт что он работал, но тормозил...
_____________
Хорошо, я спаяю твой контроллер)
_____________
А что ты забросил Bot'а своего?


LacOS
SpaceДата: Пятница, 13.05.2011, 22:52 | Сообщение # 29
Администратор
Язык программированя: BascomAVR
Группа: Администраторы
Сообщений: 327
Репутация: 8
Статус: Offline
Quote (Krish)
Почему я переспрашиваю, дело в том что я уже писал что подключал rc5 и он работал, я его подключал к порту A или C точно не помню, помню сам факт что он работал, но тормозил.

ну вообщем я тебе сказал куда подключать надо
Quote (Krish)
Хорошо, я спаяю твой контроллер)

Учти, что модуль дополнительный паять не стоит, т.к. он только для тестов, на реальном роботе он особо фурычить не будет. Можешь дополнительный модуль с робозон взять, должен подойти

Quote (Krish)
А что ты забросил Bot'а своего?

Не когда им было заниматься вот и забросил


KrishДата: Суббота, 14.05.2011, 17:21 | Сообщение # 30
Группа: Пользователи
Сообщений: 184
Репутация: 2
Статус: Offline
Тогда я спаяю MRC40, посмотрю его, потом твой, если что спаяю

Добавлено (14.05.2011, 17:10)
---------------------------------------------
http://robotshop.su/e-store/catalog/195/667/
Я такую тему хочу взять, как ты думаешь норм?

Добавлено (14.05.2011, 17:21)
---------------------------------------------
Хочу собрать внешний UART модуль...
Но не знаю, что лучше собрать на ft232rl или на attiny2313, у меня просто есть на то и на то детали и текстолит, я наверно буду разводить плату для вот этого UART:
http://www.getchip.net/posts....iny2313


LacOS
Форум » Мастерская » Успехи в мире робототехники » Мой робот "Roberto-1"
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск: