Робот состоит:
1) "Мозг" - atmega16, собран по схеме MRC40, на 16 Mhz
2) ДД с робоспейс, на l293d
3) RC5 модуль.
4) 1 SHARP (2Y0A21) на 10-80см.
5) 1 Севропривод.
6) моторы - сдвоенный редуктор TAMIYA.
Брал за пример kapandu.
Вот вроде бы программа, но я не знаю как подключать RC5. Помогите, за одно проверьте программу.
- Код: Выделить всё • Развернуть
*******************************************************************************
$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
'*******************************************************************************
Я вот не знаю как подключить этот ДД:
Для чего нужны контакты: En1, En2.
Нужно же подключать: in3, in4, in2, in1
- Код: Выделить всё • Развернуть
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-ого движка сконфигурировали как выход
Вот программа для ДД. Скажите какие порты под какой контакт этого ДД?
Помогите плиз.