roboforum.ru

Технический форум по робототехнике.

Минибот - код

Готовая электроника для самодельного робота. Уровень от начинающих до опытных конструкторов.

Re: Минибот - код

Сообщение EdGull » 07 авг 2008, 12:22

ну тогда и код по твоей логике здесь не нужен :D
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: Минибот - код

Сообщение frig » 07 авг 2008, 12:32

ну тогда и код по твоей логике здесь не нужен :D


спакойна. тут код и хексы. короткое описание и ссылки. это каталог.

Прошивка из вики. Само задание расположено по адресу [[Задание№1-4]]

Автор - EdGull

Код: Выделить всёРазвернуть
$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


Язык - basic
Функционал прошивки - управляем миниботом с RC5 пульта вот такого.
Используемые датчики: TSOP. для работы требуются двигатели, пульт.
frig
 
Сообщения: 1640
Зарегистрирован: 12 фев 2007, 12:25
Откуда: Днепр

Re: Минибот - код

Сообщение EdGull » 07 авг 2008, 15:18

тестовый код прошиваемый в миниботов при производстве

Код: Выделить всёРазвернуть
$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
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: Минибот - код

Сообщение frig » 08 авг 2008, 21:18

Прошивка для тестировани работы энкодеров.
Автор - Мур

Код: Выделить всёРазвернуть
==============================================================================
'Платформа применения- МИНИБОТ-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


Язык - basic
Функционал прошивки - при проворачивании колеса и срабатывании энкодера зажигается и гаснет красный светодиод.
Используемые датчики: Энкодеры.
Вложения
TEST_ENCODER.HEX
(774 байт) Скачиваний: 630
frig
 
Сообщения: 1640
Зарегистрирован: 12 фев 2007, 12:25
Откуда: Днепр

Re: Минибот - код

Сообщение frig » 10 авг 2008, 11:27

Прошивка для езды прямо с выравниванием скорости движения по показаниями энкодеров
Автор - Чернышев А.А.

Код: Выделить всёРазвернуть
    '==============================================================================
    'Платформа применения- МИНИБОТ-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
Функционал прошивки - робот двигается прямо контролируя скорости двигателей по показаниям энкодеров.
Используемые датчики: энкодеры.
Вложения
ENCODER_GO.HEX
HEX прошивки
(2.77 КиБ) Скачиваний: 605
frig
 
Сообщения: 1640
Зарегистрирован: 12 фев 2007, 12:25
Откуда: Днепр

Re: Минибот - код

Сообщение frig » 10 авг 2008, 18:39

Прошивка для тестирования работы датчиков линии.
Автор - frig

Код: Выделить всёРазвернуть
'Платформа применения- МИНИБОТ-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


язык - basic
функционал прошивки - при срабатывании левого или првого датчика линии зажигаются, соответственно левый и правый светодиод. При срабатывании среднего датчика линии - зажигаются оба зеленых.
Используемые датчики - датчики линий
Вложения
TEST_LINE.HEX
(885 байт) Скачиваний: 616
frig
 
Сообщения: 1640
Зарегистрирован: 12 фев 2007, 12:25
Откуда: Днепр

Re: Минибот - код

Сообщение rig » 14 авг 2008, 23:23

еще один маленький подвиг

1 код вложение ниже
2 Си, CodeVision
3 мигаем всеми светиками типа красный-> желтый->зеленый, ИК фото-свето приборами ищу линию и стараюсь держать ее под задней оптопарой, едем по линии. Сработку датчиков можно наблюдать визуально по светодиодам: зеленые - левый/правый датчик, красные - средний датчик
4 плата МБ, ик диоды + ик транзисторы (треугольником под системным разъемом), термоусадка
5 hex, вложение
my_1.hex
(2.98 КиБ) Скачиваний: 609

видео, гоняю восьмеркой по куску картона. восьмерка (0,5х0,3метра) сделана из черной изоленты
wXP_1_20080815_004436_01_toAVI.rar
видео 1,1 мбт
(1.08 МиБ) Скачиваний: 724

Си:
my__line.rar
(8.35 КиБ) Скачиваний: 67
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: Минибот - код

Сообщение frig » 15 авг 2008, 08:47

rig :beer: :friends: ты у нас передовик! первый код в теме, первый код следования по линии.. так держать!
frig
 
Сообщения: 1640
Зарегистрирован: 12 фев 2007, 12:25
Откуда: Днепр

Re: Минибот - код

Сообщение SMT » 11 дек 2008, 00:14

Простейший код следования по линии - на базе программы Myp'а, если автор возражает - перепишу с нуля.
Код: Выделить всёРазвернуть
'==============================================================================
'Платформа применения- МИНИБОТ-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

LINETRACER.HEX
(1.75 КиБ) Скачиваний: 609

если хочется, чтобы робот поворачивал на перекрестке например направо, нужно в цикле изменить код так (это если энкодеров нет):
Код: Выделить всёРазвернуть
Do
   If Датчик_линии_Левый = 0 _
      And Датчик_линии_Правый = 0 _
      And Датчик_линии = 0 Then                             'значит датчики на пересечении линий
      Реверс_Правый = 0
      Реверс_Левый = 0
      Waitms 500             'едем немного вперед - пока ведущая ось не окажется на перекрестке
      Реверс_Правый = 1      ' затем - поворачиваем направо
      Реверс_Левый = 0
      Waitms 1000
   Else
'... и т.д.

прошивка с измененным таким образом кодом
LINETRACER1.HEX
(1.81 КиБ) Скачиваний: 605
Последний раз редактировалось SMT 09 янв 2009, 04:30, всего редактировалось 2 раз(а).
SMT
 
Сообщения: 1158
Зарегистрирован: 23 авг 2008, 22:28
Откуда: Санкт-Петербург
ФИО: Сергей

Re: Минибот - код

Сообщение SMT » 10 янв 2009, 16:44

Еще один пример работы с пультом Rc5.
Язык - BASCOM basic.
Используются: задний TSOP (в качестве приемника сигнала пульта), две пары энкодеров и два мотора :)
Кроме управления движением с пульта добавлены развороты по показаниям энкодеров.
Еще прояснилось, что реализация Rс5 в BASCOM-е использует счетчик #0, по этому для работы с энкодерами используется счетчик #2 (счетчик #1 - для шим-а).
TestRC5Control.rar
Исходный код на Basic-е
(2.56 КиБ) Скачиваний: 48

TESTRC5CONTROL.HEX
Прошивка примера работы с пультом Rc5
(9.92 КиБ) Скачиваний: 591
Последний раз редактировалось SMT 11 янв 2009, 01:23, всего редактировалось 4 раз(а).
SMT
 
Сообщения: 1158
Зарегистрирован: 23 авг 2008, 22:28
Откуда: Санкт-Петербург
ФИО: Сергей

Re: Минибот - код

Сообщение SMT » 31 янв 2009, 01:18

Простой код для движения внутри круга (ринга) - для соревнования "Кегельринг".
Язык BASCOM BASIC.

Цель: двигаться в пределах круга, выталкивая из него предметы (кегли), случайно попавшиеся на пути :) .
Используются два передних датчика линии и два датчика энкодеров.
Движение - хаотичное, предметы не распознаются.
Срабатывание светодиодов датчиков линии и энкодеров приводит к реверсу моторов.
Робот двигается не прямо, а немного по дуге и иногда робот поворачивает - это для покрытия большей площади.

Все предметы выталкиваются минуты за три :cry:

KegelRingV1.rar
Код на BASIC-е
(1.62 КиБ) Скачиваний: 49

KEGELRINGV1.HEX
Прошивка
(2.37 КиБ) Скачиваний: 600
SMT
 
Сообщения: 1158
Зарегистрирован: 23 авг 2008, 22:28
Откуда: Санкт-Петербург
ФИО: Сергей

Re: Минибот - код

Сообщение SMT » 01 фев 2009, 15:48

Несколько более сложный код для движения внутри круга (ринга) - для соревнования "Кегельринг".
Язык BASCOM BASIC.

Цель: двигаться в пределах круга, выталкивая из него предметы (кегли), случайно попавшиеся на пути .
Используются два передних датчика линии и два датчика энкодеров. Спереди установлен TSOP для распознавания препятствия (кеглей).
После срабатывание светодиодов датчиков линии и энкодеров обнаруживает границу ринга, но роботу разрешается проехать немного вперед, чтобы вытолкнуть кеглю подальше. Затем он возвращается в ринг и поворачивается в надежде обнаружить поблизости TSOP-ом другие кегли. Если находит - движется к ней, если нет - движется вперед или назад. Дальность обнаружения кегли около 15 см.

Все предметы выталкиваются секунд за 40.
KegelRingV2.rar
Код
(1.86 КиБ) Скачиваний: 53

KEGELRINGV2.HEX
Прошивка
(3.29 КиБ) Скачиваний: 585
SMT
 
Сообщения: 1158
Зарегистрирован: 23 авг 2008, 22:28
Откуда: Санкт-Петербург
ФИО: Сергей

Re: Минибот - код

Сообщение space » 05 фев 2009, 01:18

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

Incr СчётчикП-это понятно, увеличивается переменная на единицу, а ФлагП = 1 тоже увеличивается или уменьшается на единицу?
Аватара пользователя
space
 
Сообщения: 565
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Re: Минибот - код

Сообщение SMT » 05 фев 2009, 01:30

space писал(а):Incr СчётчикП-это понятно, увеличивается переменная на единицу, а ФлагП = 1 тоже увеличивается или уменьшается на единицу?

ФлагП = 1 - переменной ФлагП присваивается 1. В BASIC-е двоеточие разделяет независимые операторы.
насколько я помню код (разбирал его) ФлагП и ФлагЛ это типа триггеров, которые при появлении сигнала на пине энкодера, не дает инкрементировать счетчик всякий раз, когда происходит считывание датчиков (это может быть чаще, чем датчик энкодера меняет свое состояние).
SMT
 
Сообщения: 1158
Зарегистрирован: 23 авг 2008, 22:28
Откуда: Санкт-Петербург
ФИО: Сергей

Re: Минибот - код

Сообщение space » 05 фев 2009, 01:44

то есть если правильно понял, то флаги меняются за счёт энкодеров?
Аватара пользователя
space
 
Сообщения: 565
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Пред.След.

Вернуться в МиниБот — национальный класс роботов

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6