roboforum.ru

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

Мой робот. EdGull

EdGull » 19 мар 2006, 22:01

Лекарства нет, у меня он лицензионный 8-)
на мыло слать смысла нет, тут выкладываю.

СЫРЕЦ!!! В ЧАСНОСТЯХ РАБОТАЕТ, В ЦЕЛОМ НЕТ!!!
ИСКЛЮЧИТЕЛЬНО В ОЗНАКОМИТЕЛЬНЫХ ЦЕЛЯХ!!!

$prog &HFF , &HA4 , &HD1 , &H00       ' generated. Take care that the chip supports all fuse bytes.
$regfile = "m8DEF.dat"
$baud = 1200
$crystal = 8000000


Config Pind.4 = Output : Ir_led Alias Portd.4
Config Pind.5 = Output : Led Alias Portd.5 : Led = 1
Config Pind.2 = Input : Tsop Alias Pind.2
'Config Pinc.5 = Input
Dim Temp As Byte
Dim Temp1 As Byte

Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Config Pinb.1 = Output        ': Config Pinb.6 = Output             ': Pwml Alias Portb.1 : Pwml = 0
Config Pinb.2 = Output        ': Config Pinb.7 = Output             ': Pwmr Alias Portb.2 : Pwmr = 0

Config Pinc.0 = Output : РеверсЛ Alias Portc.0
Config Pinc.1 = Output : РеверсП Alias Portc.1

Config Adc = Single , Prescaler = 2 , Reference = Internal
Dim Акк_мотора As Word
Dim Акк_база As Word
Dim Л_глаз As Word
Dim П_глаз As Word
Dim Мах_глаз As Word

Dim Препятствие As Word
Dim Сч_Препятствие As Byte : Препятствие = 0
Dim Направление As Byte
Dim ШИМ As Byte : ШИМ = 100

Dim Сч_круг As Byte

Wait 1
Print "start"

'---------------------------НАЧАЛО----------------------------
Do
  Gosub Покругу
  Print Мах_глаз
  Gosub Свет
  Gosub Откл
Loop
'---------------------------КОНЕЦ-----------------------------
Свет:
  While Л_глаз > Мах_глаз
     Gosub АЦП
     Print Л_глаз
     Gosub Влево
  Wend
Return
'-------------------------------------------------------------
АЦП:
  Start Adc
  Л_глаз = Getadc(6)
  П_глаз = Getadc(7)
  Stop Adc
Return
'-------------------------------------------------------------
Покругу:
  Мах_глаз = 1023
  Направление = Rnd(2) + 1
  Temp1 = Rnd(25) + 25
For Temp = 1 To Temp1
  If Направление = 1 Then Gosub Влево
  If Направление = 2 Then Gosub Вправо
  Gosub АЦП
     If Л_глаз < Мах_глаз Then Мах_глаз = Л_глаз
     If П_глаз < Мах_глаз Then Мах_глаз = П_глаз
'      Print Л_глаз ; "---" ; П_глаз
'      Print Мах_глаз
Next
  Gosub Стоп
Return
'-------------------------------------------------------------
Локатор:
For Temp = 1 To 200
  Ir_led = 1
  Waitus 14
  Ir_led = 0
  Waitus 13
Next
If Tsop = 0 Then
  Препятствие = 400
  If Направление = 0 Then
     Направление = Rnd(2) + 1
  End If
End If
Waitus 100
Return
'-------------------------------------------------------------
Влево:
  РеверсЛ = 1
  РеверсП = 0
  Pwm1a = ШИМ + 20
  Pwm1b = ШИМ
Return
'-------------------------------------------------------------
Вправо:
  РеверсЛ = 0
  РеверсП = 1
  Pwm1a = ШИМ + 20
  Pwm1b = ШИМ
Return
'-------------------------------------------------------------
Вперед:
  РеверсЛ = 0
  РеверсП = 0
  Pwm1a = ШИМ + 20
  Pwm1b = ШИМ
Return

Стоп:
  Pwm1a = 0
  Pwm1b = 0
Return

Откл:
Do
Loop
Return

'Do
'   Gosub Локатор
'   If Препятствие = 0 Then
'      Направление = 0
'      Led = 1
'      Gosub Вперед
'   Else
'      Led = 0
'      If Направление = 1 Then Gosub Влево
'      If Направление = 2 Then Gosub Вправо
'      Decr Препятствие
'   End If
'Loop

bodja » 20 мар 2006, 01:23

Дааа...
Заметно что на Синклере топтали кнопки. :)
БАСКОМ восхвален тем что у него входной код как у VisualBasic,
Подпрограмма начинается SUB ,а заканчивается END SUB,хотя возможно и такие команды компилятор переваривает.

И не видать что Вы стек инициализируете,
100% будет прога уходить в аут при первом же возврате из подпрограммы.

Я так понял прога чисто двигается на свет?

EdGull » 20 мар 2006, 08:42

Стек инициализируется в настройках васика.

Данным кодом я отрабатывал работу АЦП.

avr123.nm.ru » 20 мар 2006, 10:14

bodja писал(а):У вас кстати нет лекарства на БАСКОМ?


есть бэйсик от "Микроэлектроника" и лекарства,

там:

==========

-> Краткий Курс микроконтроллеры AVR - где взять примеры, куски кода ШИМ=PWM Servo LCD i2c 1-wire MotorControl - как сделать электронное устройство - основы электроники

и здесь на форуме.

EdGull » 20 мар 2006, 11:00

Bascom AVR и basic для микроэлектроники это две большие разницы 8-)

EdGull » 20 мар 2006, 15:58

Вот кстати более древний код, на нем робот ездил на свет объезжая препятствия основываясь на ИК-локаторе.


$regfile = "m8DEF.dat"
$baud = 1200
$crystal = 8000000
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 10                                               ' default use 10 for the SW stack
$framesize = 40
Config Pind.4 = Output : Ir_led Alias Portd.4
Config Pind.5 = Output : Led Alias Portd.5 : Led = 1
Config Pind.2 = Input : Tsop Alias Pind.2
'Config Pinc.5 = Input
Dim Temp As Byte
Dim ГлазЛ As Word : ГлазЛ = 0
Dim ГлазП As Word : ГлазП = 0
Dim ГлазЛПрош As Word : ГлазЛПрош = 0
Dim ГлазППрош As Word : ГлазППрош = 0
Config Adc = Single , Prescaler = Auto , Reference = Internal
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Config Pinb.1 = Output                                      ': Config Pinb.6 = Output             ': Pwml Alias Portb.1 : Pwml = 0
Config Pinb.2 = Output                                      ': Config Pinb.7 = Output             ': Pwmr Alias Portb.2 : Pwmr = 0
Config Pinc.0 = Output : РеверсЛ Alias Portc.0
Config Pinc.1 = Output : РеверсП Alias Portc.1
Dim Препятствие As Word
Dim ВремПерем1 As Word
Dim ВремПерем2 As Word
Препятствие = 0
Dim Направление As Byte : Направление = 0
Dim ШИМ As Byte
ШИМ = 150
Dim Нога As Byte : Нога = 100
Dim НогаЛ As Byte : НогаЛ = 0
Dim НогаП As Byte : НогаП = 0
Dim Скорость As Byte : Скорость = 0
Dim Зарядка As Long : Зарядка = 200
Wait 1
Start Adc
ГлазППрош = Getadc(7)
ГлазЛПрош = Getadc(6)
'ГлазЛ = Getadc(2) Напряж основ
'ГлазП = Getadc(3) Напряж двигат
Do
  Gosub Локатор
  If Препятствие = 0 Then
     Направление = 0
     Led = 1
     Gosub Вперед
     Decr Нога
     If Нога = 0 Then
        Gosub Стоп
        ГлазЛ = Getadc(7)
        ГлазП = Getadc(6)
        НогаЛ = 0
        НогаП = 0
        If ГлазЛ > ГлазП Then
           ВремПерем1 = ГлазЛ - ГлазП
           If ВремПерем1 > 10 Then НогаЛ = 40
        End If
        If ГлазП > ГлазЛ Then НогаП = 40
        If ГлазП = ГлазЛ Then
           НогаЛ = 20
           НогаП = 20
        End If
        If ГлазП < ГлазППрош Then
           ГлазППрош = ГлазП
        End If
        If ГлазЛ < ГлазЛПрош Then
           ГлазЛПрош = ГлазЛ
        End If
        If Зарядка = 0 Then
           Led = 0
           ВремПерем1 = 0
           If ГлазП > ГлазППрош Then
              ВремПерем1 = ГлазП - ГлазППрош
           End If
           ВремПерем2 = 0
           If ГлазЛ > ГлазЛПрош Then
              ВремПерем2 = ГлазЛ - ГлазЛПрош
           End If
           If ВремПерем1 < 30 Then
              If ВремПерем2 < 30 Then
                 Gosub Стоп
                 Wait 10
                 Зарядка = 200
                 Препятствие = 400
                 If Направление = 0 Then
                    Направление = Rnd(2) + 1
                 End If
              End If
           End If
        Else
           Decr Зарядка
        End If
        Нога = 100
     End If
  Else
     Led = 0
     НогаЛ = 0
     НогаП = 0
     If Направление = 1 Then Gosub Влево
     If Направление = 2 Then Gosub Вправо
     Decr Препятствие
  End If
Loop
Локатор:
For Temp = 1 To 20
  Ir_led = 1
  Waitus 18
  Ir_led = 0
  Waitus 17
Next
If Tsop = 0 Then
  Препятствие = 400
  If Направление = 0 Then
     Направление = Rnd(2) + 1
  End If
End If
Waitus 100
Return
Влево:
  РеверсЛ = 1
  РеверсП = 0
  Pwm1a = ШИМ + 38
  Pwm1b = ШИМ + 20
Return
Вправо:
  РеверсЛ = 0
  РеверсП = 1
  Pwm1a = ШИМ + 38
  Pwm1b = ШИМ + 20
Return
Вперед:
  РеверсЛ = 0
  РеверсП = 0
  Скорость = ШИМ + 18
  Скорость = Скорость + НогаП
  Pwm1a = Скорость
  Скорость = ШИМ + НогаЛ
  Pwm1b = Скорость
Return
Стоп:
РеверсЛ = 0
РеверсП = 0
Pwm1a = 0
Pwm1b = 0
Return

yozik0ff » 23 мар 2006, 09:52

"аккумуляторами (у меня от сотового литиевые, плавает от 4,2В до 3,5В, пришлось ставить StepUp до 5В, на движки идет прямой отдельный) "

StepUp что это? :(  и как это есть?!!
:?: Извините

EdGull » 23 мар 2006, 12:51

это импульсный преобразователь который из низкого делает  более высокое напряжение, я например использую очень распространенную MC34063 в стандартной схеме включения. Мне нравиться 8-)

P.S. нет тебе прощенья, только кровь смоет твой позор. 8-)

setar » 23 мар 2006, 12:58

EdGull писал(а):это импульсный преобразователь который из низкого делает  более высокое напряжение, я например использую очень распространенную MC34063 в стандартной схеме включения. Мне нравиться 8-)

очень хочется подробностей.
чтобы не отвлекаться от темы заведу новую
http://www.roboforum.ru/viewtopic.htm?t=1206

EdGull » 23 мар 2006, 13:05

там и ответил


Rambler\'s Top100 Mail.ru counter