Собственно пока снял вот такое видео.
Пробный заезд на новой платформе+переписал прогу не много.
Основной файл Robbe.bas:
Code
'*******************************************************************************
' Автор: Замотаев Кирилл Игоревич (Space)
' Сайт: www.enore.ru
' Дата начала: 20.09.2009 г.
' CPU: ATmega16
' Тактовая частота: 16000000 Hz
' Компилятор: BASCOM-AVR 1.11.9.0
' Версия 1.4
'*******************************************************************************
' Программируемые Fuse:
' SUT0
' BOOTSZ0, BOOTSZ1
' CKORT
' SPIEN
'*******************************************************************************
$regfile = "m16def.dat" 'используем мк ATmega16
$crystal = 16000000 'частота кварцевого резонатора 16mHz
$baud = 19200 'устанавливаем скорость для UART
$include "config ports.bas"
'**************************Процедуры (функции)**********************************
Declare Sub Turrent 'Объявить процедуру
'************************Переменные и константы*********************************
'*******************************Переменные**************************************
Dim A As Byte , B As Byte , C As Byte
Dim Sharp_left As Word , Sharp_right As Word
Dim Sharp_center As Word , Sharp_turret As Word
'***********************Задаём значения переменным******************************
A = 90 : B = 86 : C = 88
'*******************************Константы***************************************
Const Задержка Для Сервопривода = 30
'***************************Работа в терминале**********************************
Print "Hello!" : Print "I am Robbe."
'******************Вращение сервопривода и датчика Sharp************************
'***********************Основной цикл программы*********************************
Do
Call Turrent
Loop
'*******************************************************************************
$include "gosub.bas" 'Подключаем в процесс компиляции внешний файл с метками
$include "Subs.bas" 'Подключаем в процесс компиляции внешний файл с процедурами
'*******************************************************************************
'*******************************************************************************
End
'*******************************************************************************
Файл config portc.bas:
Code
'*********************************Порт A****************************************
'Ddra = &B00000000 ' Все порты A выставляем на вход
'*******************************************************************************
'*********************************Порт В****************************************
Config Portb.3 = Output : Speaker Alias Portb.3
'*******************************************************************************
'*********************************Порт С****************************************
Ddrc = &B11111111 ' Все порты B выставляем на выход
Config Servos = 5 , Servo1 = Portc.3 , Servo2 = Portc.4 , Servo3 = Portc.5 , Servo4 = Portc.6 , Servo5 = Portc.7 , Reload = 12 ' Указываем кол-во серв, присваеваем имя Servo№ PC№ , указываем длину импульса.
'*******************************************************************************
'*********************************Порт D****************************************
'******************************Настройка таймеров*******************************
'*******************************************************************************
'*****************************Настройка ADC*************************************
Config Adc = Single , Prescaler = Auto , Reference = Internal
'*******************************************************************************
Enable Interrupts ' разрешаем прерывания
'*******************************************************************************
Файл с процедурами Subs.bas(процедура, которая в этом файле одна пока, вращает сервопривод на котором установлен шарп):
Code
Sub Turrent
'*********************************Вправо****************************************
Local I As Byte
For I = 50 To 90
Servo(1) = I : Waitms Задержка Для Сервопривода
Gosub Проверка_дальномера_справа
Next
For I = 90 To 110
Servo(1) = I : Waitms Задержка Для Сервопривода
Gosub Проверка_дальномера_слева
Next
'*********************************Влево****************************************
For I = 110 To 90 Step -1
Servo(1) = I : Waitms Задержка Для Сервопривода
Gosub Проверка_дальномера_слева
Next
For I = 90 To 50 Step -1
Servo(1) = I : Waitms Задержка Для Сервопривода
Gosub Проверка_дальномера_справа
Next
End Sub
Файл с метками Gosubs.bas(внизу кода задаётся угол(скорость) для сервы):
Code
'*******************************************************************************
$include "config ports.bas"
'*******************************************************************************
'***********************************Sharp***************************************
Проверка_дальномера_справа:
Do
Start Adc : Sharp_turret = Getadc(0)
If Sharp_turret >= 850 Then
Gosub Стоп
Gosub Разворот_влево
End If
Loop Until Sharp_turret < 850
Gosub Вперёд
Return
Проверка_дальномера_слева:
Do
Start Adc : Sharp_turret = Getadc(0)
If Sharp_turret >= 850 Then
Gosub Стоп
Gosub Разворот_вправо
End If
Loop Until Sharp_turret < 850
Gosub Вперёд
Return
'*******************************************************************************
'***********************************АКБ*****************************************
'*******************************************************************************
'*******************************************************************************
' Включение комбинации серво-моторов для движения в заданном направлении
'*******************************************************************************
Стоп:
Servo(2) = C 'Правая-передняя серва
Servo(4) = C 'Правая-задняя серва
Servo(3) = C 'Левая-задняя серва
Servo(5) = C 'Левая-передняя серва
Return
Вперёд:
Servo(2) = B 'Правая-передняя серва
Servo(4) = B 'Правая-задняя серва
Servo(3) = A 'Левая-задняя серва
Servo(5) = A 'Левая-передняя серва
Return
Назад:
Servo(2) = A 'Правая-передняя серва
Servo(4) = A 'Правая-задняя серва
Servo(3) = B 'Левая-задняя серва
Servo(5) = B 'Левая-передняя серва
Return
Разворот_влево:
Servo(2) = B 'Правая-передняя серва
Servo(4) = B 'Правая-задняя серва
Servo(3) = B 'Левая-задняя серва
Servo(5) = B 'Левая-передняя серва
Return
Разворот_вправо:
Servo(2) = A 'Правая-передняя серва
Servo(4) = A 'Правая-задняя серва
Servo(3) = A 'Левая-задняя серва
Servo(5) = A 'Левая-передняя серва
Return
Поворот_влево:
Servo(2) = B 'Правая-передняя серва
Servo(4) = B 'Правая-задняя серва
Servo(3) = B 'Левая-задняя серва
Servo(5) = B 'Левая-передняя серва
Return
Поворот_вправо:
Servo(2) = A 'Правая-передняя серва
Servo(4) = A 'Правая-задняя серва
Servo(3) = A 'Левая-задняя серва
Servo(5) = A 'Левая-передняя серва
Return
'*******************************************************************************