Мой робот "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 Поэтому в строчке выбирается лишь номер порта на котором проводятся измерения. К примеру выводы PD2(INT0), PD3(INT1). Эти выводы для прерываний. Только на них можно подключить тсоп, для управления по каналу RC5 Причём в программе надо разрешить прерывания. С помощью строчки:
|
|
|
|
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мкф
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
|
|
|
|