Помогите с программой ))
|
|
Krish | Дата: Вторник, 12.04.2011, 15:23 | Сообщение # 1 |
Группа: Пользователи
Сообщений: 184
Репутация: 2
Статус: Offline
| Сделал электронику, теперь нужна программа. Робот состоит: 1) "Мозг" - atmega16, собран по схеме MRC40, на 16 Mhz 2) ДД с робоспейс, на l293d 3) RC5 модуль. 4) 1 SHARP (2Y0A21) на 10-80см. 5) 1 Севропривод. 6) моторы - сдвоенный редуктор TAMIYA. Брал за пример kapandu. Вот вроде бы программа, но я не знаю как подключать RC5. Помогите, за одно проверьте программу. 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.2 , Reload = 12 ' Указываем кол-во серв, присваеваем имя Servo1 порту PC2, указываем длину импульса.
'*************************** Порт A ********************************************
' Поключили дальномер, порт A7, настройки АДС ниже
'*************************** Порт В ********************************************
'*************************** Порт C ********************************************
Config Pinc.2 = Output ' Подключили серву1 к порту С2, настройки сервы выше
'*************************** Порт D ********************************************
Config Pinc.6 = Output : Dr1 Alias Portc.6 'ногу сконфигурировали как выход и обозвали Dr1 Config Pinc.7 = Output : Dr2 Alias Portc.7 'ногу сконфигурировали как выход и обозвали Dr2 Config Pinc.5 = Output 'ногу ШИМа 1-ого движка сконфигурировали как выход Config Pinc.4 = 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(7) '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(7) '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
'******************************************************************************* Вот меня смущает вот этот момент: '*************************** Порт D ******************************************** Code Config Pinc.6 = Output : Dr1 Alias Portc.6 'ногу сконфигурировали как выход и обозвали Dr1 Config Pinc.7 = Output : Dr2 Alias Portc.7 'ногу сконфигурировали как выход и обозвали Dr2 Config Pinc.5 = Output 'ногу ШИМа 1-ого движка сконфигурировали как выход Config Pinc.4 = Output 'ногу ШИМа 2-ого движка сконфигурировали как выход Вот ДД: http://robotsspace.ucoz.ru/publ/7-1-0-50 для чего на нём En2 и En1, вроде бы подключаю я только in3, in4, in2, in1?Добавлено (12.04.2011, 15:23) --------------------------------------------- Дайте программу RC5 модуля на TSOP1736
LacOS
Сообщение отредактировал Krish - Вторник, 12.04.2011, 12:23 |
|
|
|
Space | Дата: Вторник, 12.04.2011, 17:54 | Сообщение # 2 |
Администратор
Язык программированя: BascomAVR
Группа: Администраторы
Сообщений: 327
Репутация: 8
Статус: Offline
| Quote (Krish) для чего на нём En2 и En1, вроде бы подключаю я только in3, in4, in2, in1? шим подаётся на эти выводы, если шим не нужен просто подключаешь на эти выводы +5В. Там я вроде перемычку для этого делал. Quote (Krish) Дайте программу RC5 модуля на TSOP1736 ищи на робофоруме, радиокот тоже встречалось там. Ты б лучше не спешил брать куски целиком. Начни с начала. Подключи моторы и шарп. И на основе этого сделай хотя б чтоб препятствия он объезжал. Как сделаешь прикручивай серву, на неё шарп и делай тоже самое. ток чтоб робот сервой крутил в разные стороны. А потом уже RC5. Как за счёт одного шарпа сделать всё, смотри статью от неё и отталкивайся.
|
|
|
|
Krish | Дата: Вторник, 12.04.2011, 18:24 | Сообщение # 3 |
Группа: Пользователи
Сообщений: 184
Репутация: 2
Статус: Offline
| пожалуйста распиши мне порт ДД в программе с выходом на ДД (схеме), а то я запутаюсь, напиши что куда подключать...
LacOS
|
|
|
|
Space | Дата: Вторник, 12.04.2011, 18:34 | Сообщение # 4 |
Администратор
Язык программированя: BascomAVR
Группа: Администраторы
Сообщений: 327
Репутация: 8
Статус: Offline
| Code Config Pinc.4 = Output : Dr1 Alias Portc.4 'ногу сконфигурировали как выход и обозвали Dr1 Config Pinc.5 = Output : Dr2 Alias Portc.5 'ногу сконфигурировали как выход и обозвали Dr2 Config Pinc.6 = Output : Dr3 Alias Portc.6 'ногу сконфигурировали как выход и обозвали Dr3 Config Pinc.7 = Output : Dr4 Alias Portc.7 'ногу сконфигурировали как выход и обозвали Dr4 На 4 порт подрубаешь In1, на 5 In2 (Для 1-ого мотора). На 6 In3, на 7 In4(для второго мотора)
|
|
|
|
Space | Дата: Вторник, 12.04.2011, 18:35 | Сообщение # 5 |
Администратор
Язык программированя: BascomAVR
Группа: Администраторы
Сообщений: 327
Репутация: 8
Статус: Offline
| Управление через шим
|
|
|
|
Krish | Дата: Вторник, 12.04.2011, 19:15 | Сообщение # 6 |
Группа: Пользователи
Сообщений: 184
Репутация: 2
Статус: Offline
| Если я такую программу залью: Code $regfile = "m16def.dat" ' файл спецификации Меги16 $crystal = 16000000 ' указываем на какой частоте будем работать
'---------------------------------------------------------------------------- Config Timer1 = Pwm , Pwm = 8 , Prescale = 256 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Config Pind.2 = Output : R Alias Portd.2 'ногу сконфигурировали как выход и обозвали R Config Pind.3 = Output : L Alias Portd.3 'ногу сконфигурировали как выход и обозвали L Config Pind.4 = Output 'ногу ШИМа сконфигурировали как выход '---------------------------------------------------------------------------- Dim Speed As Byte
Speed = 80 ' задаём скорость мотору
Do R = 1 : Pwm1b = Speed 'вращаем в одну сторону 3 секунды Wait 3
R = 0 : Pwm1b = 0 'остановка мотора на 3 секунды L = 0 : Pwm1b = 0 Wait 3
L = 1 : Pwm1b = Speed 'вращаем в другую сторону 3 секунды Wait 3
R = 0 : Pwm1b = 0 'остановка мотора на 3 секунды L = 0 : Pwm1b = 0 Wait 3 Loop Config Rc5 = Pinс.2 Enable Interrupts Dim Address As Byte , Command As Byte Do Getrc5(address , Command) If Address <> 255 And Command <> 255 Then Command = Command And &B01111111 Print Chr(12); Print "Address - " ; Address Print "Command - " ; Command; End If Loop End ТО по rc5 протоколу он ездить будет?
LacOS
Сообщение отредактировал Krish - Вторник, 12.04.2011, 19:16 |
|
|
|
Space | Дата: Вторник, 12.04.2011, 20:33 | Сообщение # 7 |
Администратор
Язык программированя: BascomAVR
Группа: Администраторы
Сообщений: 327
Репутация: 8
Статус: Offline
| нет И чего ты хотел добиться этим кодом я не понимаю. Ты тупо скопировал с робофорума кусок кода. В этом цикле, последнем выполняется вывод данных на пк через uart, нажал на клавишу на пульте, она и выводится на экран пк (в программе терминал).
|
|
|
|
Krish | Дата: Среда, 13.04.2011, 11:28 | Сообщение # 8 |
Группа: Пользователи
Сообщений: 184
Репутация: 2
Статус: Offline
| Space, тогда дай программу ))
LacOS
|
|
|
|
Space | Дата: Среда, 13.04.2011, 17:33 | Сообщение # 9 |
Администратор
Язык программированя: BascomAVR
Группа: Администраторы
Сообщений: 327
Репутация: 8
Статус: Offline
| ну дам программу и чё ты дальше с ней делать будешь.. задавать вопросы что там и для чего и как переделать под своё. нафик мне это надо. с чего начать я уже сказал. вот и вперёд. А ты пока берешься за то чего даже не понимаешь
|
|
|
|
Krish | Дата: Пятница, 15.04.2011, 11:09 | Сообщение # 10 |
Группа: Пользователи
Сообщений: 184
Репутация: 2
Статус: Offline
| Всё с программой всё супер, найду фотик скину видео. Хочу подключить LCD wh1602b к attiny2313 и сделать часы, это реально? Есть ли такие проекты у Вас?
LacOS
|
|
|
|
Space | Дата: Пятница, 15.04.2011, 11:25 | Сообщение # 11 |
Администратор
Язык программированя: BascomAVR
Группа: Администраторы
Сообщений: 327
Репутация: 8
Статус: Offline
| Реально, только ещё микросхема ds1307 нужна. Проекта пока нет. но уже в процессе. Как доделаю выложу
|
|
|
|
Krish | Дата: Суббота, 16.04.2011, 21:47 | Сообщение # 12 |
Группа: Пользователи
Сообщений: 184
Репутация: 2
Статус: Offline
| Space, хм, мне сказали что нужен часовой кварц, а то кварц на 16 mhz безбожно врёт...
LacOS
|
|
|
|
Space | Дата: Суббота, 16.04.2011, 21:53 | Сообщение # 13 |
Администратор
Язык программированя: BascomAVR
Группа: Администраторы
Сообщений: 327
Репутация: 8
Статус: Offline
| ну естественно к микросхеме этой ещё и кварц нужен. платку собиру на днях, схема такова:
|
|
|
|
Krish | Дата: Суббота, 16.04.2011, 21:56 | Сообщение # 14 |
Группа: Пользователи
Сообщений: 184
Репутация: 2
Статус: Offline
| Space, да, я видел, на робозона. я хотел бы тебе свою нарисовать, но не знаю в какой программе ты рисуешь?! дай пожалуйста название программы))
LacOS
|
|
|
|
Space | Дата: Суббота, 16.04.2011, 21:58 | Сообщение # 15 |
Администратор
Язык программированя: BascomAVR
Группа: Администраторы
Сообщений: 327
Репутация: 8
Статус: Offline
| Если научишься искать по сайту, то большинство вопросов отпадут. смотри тут
|
|
|
|