roboforum.ruТехнический форум по робототехнике. |
|
|
ну тогда и код по твоей логике здесь не нужен
$prog &HFF , &HE4 , &HD9 , &H00 'указываем какие фусибиты надо прошить
$regfile = "m32def.dat" ' файл спецификации Меги32
$crystal = 8000000 ' указываем на какой частоте будем работать
$baud = 2400 ' указываем частоту дла usart (теперь нужно только для отладки программы)
'----------------------------------------------------------------------------
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Config Pinc.2 = Output : Drl Alias Portc.2 'ногу сконфигурировали как выход и обозвали Drl
Config Pinc.3 = Output : Drr Alias Portc.3 'ногу сконфигурировали как выход и обозвали Drr
Config Pind.4 = Output 'ногу ШИМа левого движка сконфигурировали как выход
Config Pind.5 = Output 'ногу ШИМа правого движка сконфигурировали как выход
'----------------------------------------------------------------------------
Dim Speed As Byte
Speed = 70 ' указываем скорость робота
Config Rc5 = Pind.2
Enable Interrupts
Dim Address As Byte , Command As Byte
Print "Start MiniBot" ' выводим в терминал отладочное сообщение
Do
Gosub Прием_rc5
If Command = 255 Then
Gosub Стоп
Elseif Command = 32 Then
Gosub Прямо
Waitms 100
Elseif Command = 33 Then
Gosub Назад
Waitms 100
Elseif Command = 17 Then
Gosub Влево
Waitms 100
Elseif Command = 16 Then
Gosub Вправо
Waitms 100
End If
Loop
Прием_rc5:
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
Return
Влево:
Gosub Стоп : Waitms 10
Drl = 1 : Drr = 0 : Pwm1b = Speed : Pwm1a = Speed:
Return
Вправо:
Gosub Стоп : Waitms 10
Drl = 0 : Drr = 1 : Pwm1b = Speed : Pwm1a = Speed:
Return
Прямо:
Gosub Стоп : Waitms 10
Drl = 0 : Drr = 0 : Pwm1b = Speed : Pwm1a = Speed:
Return
Назад:
Gosub Стоп : Waitms 10
Drl = 1 : Drr = 1 : Pwm1b = Speed : Pwm1a = Speed:
Return
Стоп:
Drl = 0 : Drr = 0 : Pwm1b = 0 : Pwm1a = 0:
Return
$regfile = "m32DEF.dat"
$baud = 38400
$crystal = 8000000
'светодиоды
Config Pinc.4 = Output
Config Pinc.5 = Output
Config Pinc.6 = Output
Config Pinc.7 = Output
'----------------------------------------------------------------------------
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Config Pinc.2 = Output : Drl Alias Portc.2 'ногу сконфигурировали как выход и обозвали Drl
Config Pinc.3 = Output : Drr Alias Portc.3 'ногу сконфигурировали как выход и обозвали Drr
Config Pind.4 = Output 'ногу ШИМа левого движка сконфигурировали как выход
Config Pind.5 = Output 'ногу ШИМа правого движка сконфигурировали как выход
'----------------------------------------------------------------------------
Dim Speed As Byte
Speed = 100 ' указываем скорость робота
Wait 1
Print "start"
Do
Portc.4 = 1 : Waitms 500 : Portc.4 = 0 : Waitms 500
Portc.6 = 1 : Waitms 500 : Portc.6 = 0 : Waitms 500
Portc.5 = 1 : Waitms 500 : Portc.5 = 0 : Waitms 500
Portc.7 = 1 : Waitms 500 : Portc.7 = 0 : Waitms 500
Portc.4 = 1 : Portc.5 = 1 : Waitms 500 : Portc.4 = 0 : Portc.5 = 0 : Waitms 500
Portc.6 = 1 : Portc.7 = 1 : Waitms 500 : Portc.6 = 0 : Portc.7 = 0 : Waitms 500
Gosub Прямо : Wait 3 : Gosub Стоп
Gosub Влево : Wait 3 : Gosub Стоп
Gosub Вправо : Wait 3 : Gosub Стоп
Gosub Назад : Wait 3 : Gosub Стоп
Loop
Влево:
Gosub Стоп : Waitms 10
Drl = 1 : Drr = 0 : Pwm1b = Speed : Pwm1a = Speed:
Return
Вправо:
Gosub Стоп : Waitms 10
Drl = 0 : Drr = 1 : Pwm1b = Speed : Pwm1a = Speed:
Return
Прямо:
Gosub Стоп : Waitms 10
Drl = 0 : Drr = 0 : Pwm1b = Speed : Pwm1a = Speed:
Return
Назад:
Gosub Стоп : Waitms 10
Drl = 1 : Drr = 1 : Pwm1b = Speed : Pwm1a = Speed:
Return
Стоп:
Drl = 0 : Drr = 0 : Pwm1b = 0 : Pwm1a = 0:
Return
==============================================================================
'Платформа применения- МИНИБОТ-1.
'Язык - Basic
'Среда - BASCOM-AVR MCS Electronics v1.11.9.1
'Программа для настройки энкодеров
'
'срабатывание энкодеров дублруется на светодиодные индикаторы
'
' Цель: добится того чтобы энкодеры чётко распознавали все чёрные и белые
'сектора на энкодерных дисках
'
' Алгоритм настройки: загружаем прошивку в робота и включаем
'аккуратно подгибаем руками ИК диоды и ИК транзисторы чтобы энкодеры
'срабатывали на всех белых секторах без пропусков
'
'Дата: 03.05.2008
'Автор: Груздев Ф.А.
'==============================================================================
$regfile = "m32DEF.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 10
$framesize = 40
'---------------------------порт А---------------------------------------------
Config Pina.0 = Input : Датчик_линии_Правый Alias Pina.0
Config Pina.1 = Input : Обороты_Правый Alias Pina.1
Config Pina.2 = Input : Обороты_Левый Alias Pina.2
Config Pina.3 = Input : Датчик_линии Alias Pina.3
Config Pina.4 = Input : Датчик_линии_Левый Alias Pina.4
Config Pina.5 = Input : Ток_Двиг_Левый Alias Pina.5
Config Pina.6 = Input : Ток_Двиг_Правый Alias Pina.6
Config Pina.6 = Input : Батарея Alias Pina.6
'---------------------------порт В---------------------------------------------
Portb = &B11111111
Config Pinb.0 = Output : Локатор_Тыл Alias Portb.0
Config Pinb.1 = Output : Локатор_Правый Alias Portb.1
Config Pinb.2 = Input : Зарядка Alias Pinb.2
Config Pinb.3 = Output : Локатор_Левый Alias Portb.3
'---------------------------порт С---------------------------------------------
Portc = &B00000011
Config Pinc.0 = Output : И2С_такт Alias Portc.0
Config Pinc.1 = Output : И2С_данные Alias Portc.1 'реконфигурируется
Config Pinc.2 = Output : Реверс_Левый Alias Portc.2 ': Реверс_Левый = 0
Config Pinc.3 = Output : Реверс_Правый Alias Portc.3 ': Реверс_Правый = 0
Config Pinc.4 = Output : Кр_Правый Alias Portc.4 ': Кр_Правый = 1
Config Pinc.5 = Output : Зел_Правый Alias Portc.5 ': Зел_Правый = 1
Config Pinc.6 = Output : Кр_Левый Alias Portc.6 ': Кр_Левый = 1
Config Pinc.7 = Output : Зел_Левый Alias Portc.7 ': Зел_Левый = 1
'---------------------------порт D---------------------------------------------
Portd = &B00111111
Config Pind.0 = Input : УСАРТ_вход Alias Pind.0
Config Pind.1 = Output : УСАРТ_выход Alias Portd.1
Config Pind.2 = Input : Приемник_Тыл Alias Pind.2
Config Pind.3 = Input : Приемник_Фронт Alias Pind.3
Config Pind.4 = Output 'шим левого двигателя
Config Pind.5 = Output 'шим правого двигателя
Config Pind.6 = Output : ИК_свет Alias Portd.6
Config Pind.7 = Output : Динамик Alias Portd.7
'---------------------------Программа------------------------------------------
ИК_свет = 1 'включаем ИК диоды
Do
Portd.4 = 0 'отключаем левый мотор
Portd.5 = 0 'отключаем правый мотор
Кр_Правый = Обороты_Правый
Кр_Левый = Обороты_Левый
Loop
'==============================================================================
'Платформа применения- МИНИБОТ-1.
'Язык - Basic
'Среда - BASCOM-AVR MCS Electronics v1.11.7.7
'Назначение программы - пример для некоммерческого использования.
'Действие программы - уравнивание угловых скоростей колес одноосевой схемы
' с двумя независимыми двигателями.
'Результат работы программы - езда прямо в одном направлении.
'Пояснения - в программе использован ШИМ для управления двигателями
' и прерывание от таймера0 для обработки информации от датчиков
' оборотов двигателей.
'Дата: 10.03.2008
'Автор: Чернышев А.А
'==============================================================================
$regfile = "m32DEF.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 10
$framesize = 40
'---------------------------порт А---------------------------------------------
Config Pina.0 = Input : Датчик_линии_Правый Alias Pina.0
Config Pina.1 = Input : Обороты_Правый Alias Pina.1
Config Pina.2 = Input : Обороты_Левый Alias Pina.2
Config Pina.3 = Input : Датчик_линии Alias Pina.3
Config Pina.4 = Input : Датчик_линии_Левый Alias Pina.4
Config Pina.5 = Input : Ток_Двиг_Левый Alias Pina.5
Config Pina.6 = Input : Ток_Двиг_Правый Alias Pina.6
Config Pina.6 = Input : Батарея Alias Pina.6
'---------------------------порт В---------------------------------------------
Portb = &B11111111
Config Pinb.0 = Output : Локатор_Тыл Alias Portb.0
Config Pinb.1 = Output : Локатор_Правый Alias Portb.1
Config Pinb.2 = Input : Зарядка Alias Pinb.2
Config Pinb.3 = Output : Локатор_Левый Alias Portb.3
'---------------------------порт С---------------------------------------------
Portc = &B00000011
Config Pinc.0 = Output : И2С_такт Alias Portc.0
Config Pinc.1 = Output : И2С_данные Alias Portc.1 'реконфигурируется
Config Pinc.2 = Output : Реверс_Левый Alias Portc.2 ': Реверс_Левый = 0
Config Pinc.3 = Output : Реверс_Правый Alias Portc.3 ': Реверс_Правый = 0
Config Pinc.4 = Output : Кр_Правый Alias Portc.4 ': Кр_Правый = 1
Config Pinc.5 = Output : Зел_Правый Alias Portc.5 ': Зел_Правый = 1
Config Pinc.6 = Output : Кр_Левый Alias Portc.6 ': Кр_Левый = 1
Config Pinc.7 = Output : Зел_Левый Alias Portc.7 ': Зел_Левый = 1
'---------------------------порт D---------------------------------------------
Portd = &B00111111
Config Pind.0 = Input : УСАРТ_вход Alias Pind.0
Config Pind.1 = Output : УСАРТ_выход Alias Portd.1
Config Pind.2 = Input : Приемник_Тыл Alias Pind.2
Config Pind.3 = Input : Приемник_Фронт Alias Pind.3
Config Pind.4 = Output 'шим левого двигателя
Config Pind.5 = Output 'шим правого двигателя
Config Pind.6 = Output : ИК_свет Alias Portd.6
Config Pind.7 = Output : Динамик Alias Portd.7
'---------------------------конфигурация железа--------------------------------
'настройка ШИМ
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
'счетчик_0 - для измерений периода сигнала с датчиков оборотов двигателей
Config Timer0 = Timer , Prescale = 1 'таймер
Stop Timer0 'стоп таймер
Tcnt0 = 0 'чистим регистр
'-----------------------------переменные---------------------------------------
Dim Installspeed As Byte
Dim ФлагЛ As Bit , ФлагП As Bit
Dim СчетчикЛ As Byte , СчетчикП As Byte
'------------------------присвоение начальных значений-------------------------
'На разных скоростях возможны флуктуации по курсу - это связано с точностью
'сборки механики (пробуксовка двгателей относительно колес), настройки
'датчиков оборотов, а также их сильной внешней паразитной засветки.
'В данной программе датчики используются как логические - без использования АЦП.
Installspeed = 120
'настройка прерываний
On Timer0 Время_истекло
Start Timer0
Enable Timer0
Enable Interrupts
СчетчикЛ = 0
СчетчикП = 0
ИК_свет = 1 'включаем ИК излучатели
'==============================================================================
'основная программа
Do
Pwm1b = Pwm1b + 1 'загрузка в ШИМ
Pwm1a = Pwm1a + 1
'фиксация скорости
If Pwm1a >= Installspeed Then
Pwm1a = Installspeed
End If
If Pwm1b >= Installspeed Then
Pwm1b = Installspeed
End If
Loop
'==============================================================================
'ПП - прерывания от таймера 0
Время_истекло:
'увеличение счетчика левого
If ФлагЛ = 0 Then
If Обороты_Левый = 1 Then
Incr СчетчикЛ : ФлагЛ = 1
End If
Else
If Обороты_Левый = 0 Then
ФлагЛ = 0
End If
End If
'увеличение счетчика правого
If ФлагП = 0 Then
If Обороты_Правый = 1 Then
Incr СчетчикП : ФлагП = 1
End If
Else
If Обороты_Правый = 0 Then
ФлагП = 0
End If
End If
'уравнивание счетчиков
If СчетчикП > СчетчикЛ Then
Pwm1a = Pwm1a + 1 'ускорить правый
If Pwm1b > 0 Then
Pwm1b = Pwm1b - 1
End If 'замедлить левый
End If
If СчетчикП < СчетчикЛ Then
If Pwm1a > 0 Then
Pwm1a = Pwm1a - 1 'замедлить правый
End If
Pwm1b = Pwm1b + 1 'ускорить левый
End If
'сброс счетчиков
If СчетчикП = СчетчикЛ Then
СчетчикП = 0 : СчетчикЛ = 0
End If
Return
'Платформа применения- МИНИБОТ-1.
'Язык - Basic
'Среда - BASCOM-AVR MCS Electronics v1.11.9.1
'Программа для настройки датчиков линии
'
'срабатывание датчиков линии дублируется зажиганием светодиодов
'
'
'
'Дата: 10.08.2008
'Автор: Беляев Р.В.
'==============================================================================
$regfile = "m32DEF.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 10
$framesize = 40
'---------------------------порт А---------------------------------------------
Config Pina.0 = Input : Датчик_линии_Правый Alias Pina.0
Config Pina.1 = Input : Обороты_Правый Alias Pina.1
Config Pina.2 = Input : Обороты_Левый Alias Pina.2
Config Pina.3 = Input : Датчик_линии Alias Pina.3
Config Pina.4 = Input : Датчик_линии_Левый Alias Pina.4
Config Pina.5 = Input : Ток_Двиг_Левый Alias Pina.5
Config Pina.6 = Input : Ток_Двиг_Правый Alias Pina.6
Config Pina.6 = Input : Батарея Alias Pina.6
'---------------------------порт В---------------------------------------------
Portb = &B11111111
Config Pinb.0 = Output : Локатор_Тыл Alias Portb.0
Config Pinb.1 = Output : Локатор_Правый Alias Portb.1
Config Pinb.2 = Input : Зарядка Alias Pinb.2
Config Pinb.3 = Output : Локатор_Левый Alias Portb.3
'---------------------------порт С---------------------------------------------
Portc = &B00000011
Config Pinc.0 = Output : И2С_такт Alias Portc.0
Config Pinc.1 = Output : И2С_данные Alias Portc.1 'реконфигурируется
Config Pinc.2 = Output : Реверс_Левый Alias Portc.2 ': Реверс_Левый = 0
Config Pinc.3 = Output : Реверс_Правый Alias Portc.3 ': Реверс_Правый = 0
Config Pinc.4 = Output : Кр_Правый Alias Portc.4 ': Кр_Правый = 1
Config Pinc.5 = Output : Зел_Правый Alias Portc.5 ': Зел_Правый = 1
Config Pinc.6 = Output : Кр_Левый Alias Portc.6 ': Кр_Левый = 1
Config Pinc.7 = Output : Зел_Левый Alias Portc.7 ': Зел_Левый = 1
'---------------------------порт D---------------------------------------------
Portd = &B00111111
Config Pind.0 = Input : УСАРТ_вход Alias Pind.0
Config Pind.1 = Output : УСАРТ_выход Alias Portd.1
Config Pind.2 = Input : Приемник_Тыл Alias Pind.2
Config Pind.3 = Input : Приемник_Фронт Alias Pind.3
Config Pind.4 = Output 'шим левого двигателя
Config Pind.5 = Output 'шим правого двигателя
Config Pind.6 = Output : ИК_свет Alias Portd.6
Config Pind.7 = Output : Динамик Alias Portd.7
'---------------------------Программа------------------------------------------
ИК_свет = 1
'включаем ИК диоды
Do
Portd.4 = 0 'отключаем левый мотор
Portd.5 = 0 'отключаем правый мотор
Кр_Правый = Датчик_линии_Правый
Зел_Правый = Датчик_линии
Кр_Левый = Датчик_линии_Левый
Зел_Левый = Датчик_линии
Loop
'==============================================================================
'Платформа применения- МИНИБОТ-1.
'Язык - Basic
'Среда - BASCOM-AVR MCS Electronics v1.11.9.1
'Программа для настройки энкодеров
'
'срабатывание светодиодов датчиков линии дублируется на светодиодные индикаторы
'
'Цель: следовать черной линии и продолжать движение при пересечении ее другой
'
'Алгоритм настройки: загружаем прошивку в робота и включаем
'аккуратно подгибаем руками ИК диоды и ИК транзисторы чтобы датчики
'срабатывали на границе черного и белого цветов
'
'используются три передних датчика линии и два двухцветных светодиода
'для индикации их состояния
'
'Дата: 10.12.2008
'Автор основного кода: Груздев Ф.А.
'Автор кода следования линии: SMT
'==============================================================================
$regfile = "m32DEF.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 10
$framesize = 40
'---------------------------порт А---------------------------------------------
Config Pina.0 = Input : Датчик_линии_Правый Alias Pina.0
Config Pina.1 = Input : Обороты_Правый Alias Pina.1
Config Pina.2 = Input : Обороты_Левый Alias Pina.2
Config Pina.3 = Input : Датчик_линии Alias Pina.3
Config Pina.4 = Input : Датчик_линии_Левый Alias Pina.4
Config Pina.5 = Input : Ток_Двиг_Левый Alias Pina.5
Config Pina.6 = Input : Ток_Двиг_Правый Alias Pina.6
Config Pina.6 = Input : Батарея Alias Pina.6
'---------------------------порт В---------------------------------------------
Portb = &B11111111
Config Pinb.0 = Output : Локатор_Тыл Alias Portb.0
Config Pinb.1 = Output : Локатор_Правый Alias Portb.1
Config Pinb.2 = Input : Зарядка Alias Pinb.2
Config Pinb.3 = Output : Локатор_Левый Alias Portb.3
'---------------------------порт С---------------------------------------------
Portc = &B00000011
Config Pinc.0 = Output : И2С_такт Alias Portc.0
Config Pinc.1 = Output : И2С_данные Alias Portc.1 'реконфигурируется
Config Pinc.2 = Output : Реверс_Левый Alias Portc.2 ': Реверс_Левый = 0
Config Pinc.3 = Output : Реверс_Правый Alias Portc.3 ': Реверс_Правый = 0
Config Pinc.4 = Output : Кр_Правый Alias Portc.4 ': Кр_Правый = 1
Config Pinc.5 = Output : Зел_Правый Alias Portc.5 ': Зел_Правый = 1
Config Pinc.6 = Output : Кр_Левый Alias Portc.6 ': Кр_Левый = 1
Config Pinc.7 = Output : Зел_Левый Alias Portc.7 ': Зел_Левый = 1
'---------------------------порт D---------------------------------------------
Portd = &B00111111
Config Pind.0 = Input : УСАРТ_вход Alias Pind.0
Config Pind.1 = Output : УСАРТ_выход Alias Portd.1
Config Pind.2 = Input : Приемник_Тыл Alias Pind.2
Config Pind.3 = Input : Приемник_Фронт Alias Pind.3
Config Pind.4 = Output 'шим левого двигателя
Config Pind.5 = Output 'шим правого двигателя
Config Pind.6 = Output : ИК_свет Alias Portd.6
Config Pind.7 = Output : Динамик Alias Portd.7
'---------------------------Программа------------------------------------------
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Dim Speed As Byte
Speed = 70
ИК_свет = 1 'включаем ИК диоды
Pwm1b = Speed : Pwm1a = Speed 'устанавливаем скорость двигателей
Do
If Датчик_линии_Левый = 0 _
And Датчик_линии_Правый = 0 _
And Датчик_линии = 0 Then 'значит датчики на пересечении линий
Реверс_Правый = 0
Реверс_Левый = 0
Else
If Датчик_линии_Левый = 0 Then 'если левый датчик на линии -
Реверс_Правый = 1 ' включаем реверс левого двигателя,
Else 'иначе (левый датчик не на линии)
Реверс_Правый = 0 'включаем левый двигатель вперед
End If
If Датчик_линии_Правый = 0 Then 'если правый датчик на линии -
Реверс_Левый = 1 'включаем реверс правого двигателя,
Else 'иначе (правый датчин не на линии)
Реверс_Левый = 0 'включаем правый двигатель вперед
End If
End If
If Обороты_Левый = 1 Then
Кр_Левый = 1
Else
Кр_Левый = 0
End If
If Обороты_Правый = 1 Then
Кр_Правый = 1
Else
Кр_Правый = 0
End If
Gosub Зажечь_индикаторы_датчиков
Gosub Пауза_между_чтениями_датчиков
Loop 'повторяем проверку датчиков
Return
Пауза_между_чтениями_датчиков:
Waitms 300
Return
Зажечь_индикаторы_датчиков:
Кр_Правый = Датчик_линии_Правый
Зел_Правый = Датчик_линии
Зел_Левый = Датчик_линии
Кр_Левый = Датчик_линии_Левый
Return
Do
If Датчик_линии_Левый = 0 _
And Датчик_линии_Правый = 0 _
And Датчик_линии = 0 Then 'значит датчики на пересечении линий
Реверс_Правый = 0
Реверс_Левый = 0
Waitms 500 'едем немного вперед - пока ведущая ось не окажется на перекрестке
Реверс_Правый = 1 ' затем - поворачиваем направо
Реверс_Левый = 0
Waitms 1000
Else
'... и т.д.
frig писал(а):Прошивка для езды прямо с выравниванием скорости движения по показаниями энкодеров
Автор - Чернышев А.А.
- Код: Выделить всё • Развернуть
'==============================================================================
'Платформа применения- МИНИБОТ-1.
'Язык - Basic
'Среда - BASCOM-AVR MCS Electronics v1.11.7.7
'Назначение программы - пример для некоммерческого использования.
'Действие программы - уравнивание угловых скоростей колес одноосевой схемы
' с двумя независимыми двигателями.
'Результат работы программы - езда прямо в одном направлении.
'Пояснения - в программе использован ШИМ для управления двигателями
' и прерывание от таймера0 для обработки информации от датчиков
' оборотов двигателей.
'Дата: 10.03.2008
'Автор: Чернышев А.А
'==============================================================================
$regfile = "m32DEF.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 10
$framesize = 40
'---------------------------порт А---------------------------------------------
Config Pina.0 = Input : Датчик_линии_Правый Alias Pina.0
Config Pina.1 = Input : Обороты_Правый Alias Pina.1
Config Pina.2 = Input : Обороты_Левый Alias Pina.2
Config Pina.3 = Input : Датчик_линии Alias Pina.3
Config Pina.4 = Input : Датчик_линии_Левый Alias Pina.4
Config Pina.5 = Input : Ток_Двиг_Левый Alias Pina.5
Config Pina.6 = Input : Ток_Двиг_Правый Alias Pina.6
Config Pina.6 = Input : Батарея Alias Pina.6
'---------------------------порт В---------------------------------------------
Portb = &B11111111
Config Pinb.0 = Output : Локатор_Тыл Alias Portb.0
Config Pinb.1 = Output : Локатор_Правый Alias Portb.1
Config Pinb.2 = Input : Зарядка Alias Pinb.2
Config Pinb.3 = Output : Локатор_Левый Alias Portb.3
'---------------------------порт С---------------------------------------------
Portc = &B00000011
Config Pinc.0 = Output : И2С_такт Alias Portc.0
Config Pinc.1 = Output : И2С_данные Alias Portc.1 'реконфигурируется
Config Pinc.2 = Output : Реверс_Левый Alias Portc.2 ': Реверс_Левый = 0
Config Pinc.3 = Output : Реверс_Правый Alias Portc.3 ': Реверс_Правый = 0
Config Pinc.4 = Output : Кр_Правый Alias Portc.4 ': Кр_Правый = 1
Config Pinc.5 = Output : Зел_Правый Alias Portc.5 ': Зел_Правый = 1
Config Pinc.6 = Output : Кр_Левый Alias Portc.6 ': Кр_Левый = 1
Config Pinc.7 = Output : Зел_Левый Alias Portc.7 ': Зел_Левый = 1
'---------------------------порт D---------------------------------------------
Portd = &B00111111
Config Pind.0 = Input : УСАРТ_вход Alias Pind.0
Config Pind.1 = Output : УСАРТ_выход Alias Portd.1
Config Pind.2 = Input : Приемник_Тыл Alias Pind.2
Config Pind.3 = Input : Приемник_Фронт Alias Pind.3
Config Pind.4 = Output 'шим левого двигателя
Config Pind.5 = Output 'шим правого двигателя
Config Pind.6 = Output : ИК_свет Alias Portd.6
Config Pind.7 = Output : Динамик Alias Portd.7
'---------------------------конфигурация железа--------------------------------
'настройка ШИМ
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
'счетчик_0 - для измерений периода сигнала с датчиков оборотов двигателей
Config Timer0 = Timer , Prescale = 1 'таймер
Stop Timer0 'стоп таймер
Tcnt0 = 0 'чистим регистр
'-----------------------------переменные---------------------------------------
Dim Installspeed As Byte
Dim ФлагЛ As Bit , ФлагП As Bit
Dim СчетчикЛ As Byte , СчетчикП As Byte
'------------------------присвоение начальных значений-------------------------
'На разных скоростях возможны флуктуации по курсу - это связано с точностью
'сборки механики (пробуксовка двгателей относительно колес), настройки
'датчиков оборотов, а также их сильной внешней паразитной засветки.
'В данной программе датчики используются как логические - без использования АЦП.
Installspeed = 120
'настройка прерываний
On Timer0 Время_истекло
Start Timer0
Enable Timer0
Enable Interrupts
СчетчикЛ = 0
СчетчикП = 0
ИК_свет = 1 'включаем ИК излучатели
'==============================================================================
'основная программа
Do
Pwm1b = Pwm1b + 1 'загрузка в ШИМ
Pwm1a = Pwm1a + 1
'фиксация скорости
If Pwm1a >= Installspeed Then
Pwm1a = Installspeed
End If
If Pwm1b >= Installspeed Then
Pwm1b = Installspeed
End If
Loop
'==============================================================================
'ПП - прерывания от таймера 0
Время_истекло:
'увеличение счетчика левого
If ФлагЛ = 0 Then
If Обороты_Левый = 1 Then
Incr СчетчикЛ : ФлагЛ = 1
End If
Else
If Обороты_Левый = 0 Then
ФлагЛ = 0
End If
End If
'увеличение счетчика правого
If ФлагП = 0 Then
If Обороты_Правый = 1 Then
Incr СчетчикП : ФлагП = 1
End If
Else
If Обороты_Правый = 0 Then
ФлагП = 0
End If
End If
'уравнивание счетчиков
If СчетчикП > СчетчикЛ Then
Pwm1a = Pwm1a + 1 'ускорить правый
If Pwm1b > 0 Then
Pwm1b = Pwm1b - 1
End If 'замедлить левый
End If
If СчетчикП < СчетчикЛ Then
If Pwm1a > 0 Then
Pwm1a = Pwm1a - 1 'замедлить правый
End If
Pwm1b = Pwm1b + 1 'ускорить левый
End If
'сброс счетчиков
If СчетчикП = СчетчикЛ Then
СчетчикП = 0 : СчетчикЛ = 0
End If
Return
язык - basic
Функционал прошивки - робот двигается прямо контролируя скорости двигателей по показаниям энкодеров.
Используемые датчики: энкодеры.
Incr СчетчикП : ФлагП = 1
space писал(а):Incr СчётчикП-это понятно, увеличивается переменная на единицу, а ФлагП = 1 тоже увеличивается или уменьшается на единицу?
Вернуться в МиниБот — национальный класс роботов
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10