roboforum.ru

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

Работа над ошибками

Работа над ошибками

Timmy » 29 мар 2009, 23:03

глупо но всетаки, наверно гдето накосячил
совершенно простой код
только вопрос в чем ошибка

программируется мега8 на миниботе, с включенной mg995 на х10,
привод дергается раз и все
код на bascom-avr в симуляторе вроде все окей


Код: Выделить всёРазвернуть
$prog &HFF , &HE0 , &HDD , &HF9                             ' generated. Take care that the chip supports all fuse bytes.

$regfile = "m88DEF.dat"
$baud = 115200
$crystal = 7372800

Config Pinb.1 = Output : Servo1 Alias Portb.1 : Servo1 = 0
Config Pinb.2 = Output : Servo2 Alias Portb.2 : Servo2 = 0
Config Pinc.0 = Output : Servo3 Alias Portc.0 : Servo3 = 0
Config Pinc.1 = Output : Servo4 Alias Portc.1 : Servo4 = 0

Declare Sub Stay
Declare Sub Down
Declare Sub Up

Waitms 250

Dim Xxxx As integer
Dim Yyyy As Integer
Dim Zzzz As Integer

For Xxxx = 0 To 100
         Call Stay
Next Xxxx

For Yyyy = 0 To 100
   Call Up
Next Yyyy

For Zzzz = 0 To 100
   Call Down
Next Zzzz

Sub Stay
Servo1 = 1
    'Waitus 20
Servo1 = 0
   Waitus 1500
End Sub

Sub Up
Servo1 = 1
  ' Waitus 20
Servo1 = 0
    Waitus 2100
End Sub

Sub Down
Servo1 = 1
  'Waitus 20
Servo1 = 0
   Waitus 900
End Sub
Последний раз редактировалось Timmy 29 мар 2009, 23:15, всего редактировалось 1 раз.

Re: Работа над ошибками

executer » 29 мар 2009, 23:11

Щас будут кричать что не в поле кода код лежит (между тэгами "Code" размещай свой код)

Добавлено спустя 7 минут 2 секунды:
Что означают апострофы перед строчками:
'Waitus 20
??? Если коммент - то на серву ноль впринципе идет с оооочень короткими единичными импульсами

Re: Работа над ошибками

Timmy » 29 мар 2009, 23:20

20 микросекунд длина импульса
но в итоге закоментировано, тк с длиной в один скан вчера отъезжало в одну сторону,
сегодня оно только дергается, один раз...

основной вопрос как цифромашинками рулить, какая длина импульсов и в чем грабля

ХАХАХАХАХА
БУГАГА

я ступил
Порт Б-1
выходит на х11 а не на х10 ха ха ха мне смешно
Последний раз редактировалось Timmy 29 мар 2009, 23:26, всего редактировалось 1 раз.

Re: Работа над ошибками

avr123.nm.ru » 29 мар 2009, 23:25

executer писал(а):Что означают апострофы перед строчками:
'Waitus 20
Если коммент

Да это коментарий. Там есть руководства на руском по BASCOM-AVR - http://bascom-avr.narod.ru

executer писал(а):то на серву ноль впринципе идет с оооочень короткими единичными импульсами


Вы можете прошивку .hex симулировать в VMLAB PROTEUS в студии или подать сигнал через 47 кОм на звуковую карту и посмотреть что там реально на выходе.

Re: Работа над ошибками

galex1981 » 29 мар 2009, 23:45

Там где у тебя закомментировано 20 мкс, должны быть установлены задержки 900-2100 мкс, проблема будет решена. Сервы реагируют не на 0е сигналы, длительностью 900-2100 а на единичные:
900 мкс - крайнее левое положение сервы
1500 мкс - середина
2100 мкс - крайнее правое положение

Добавлено спустя 1 минуту 19 секунд:
пример кода можешь посмотреть ЗДЕСЬ

Re: Работа над ошибками

Timmy » 29 мар 2009, 23:53

спасибо вот теперь все как надо
серва поворачивает туда сюда, как надо
Код: Выделить всёРазвернуть
$prog &HFF , &HE0 , &HDD , &HF9                             ' generated. Take care that the chip supports all fuse bytes.

$regfile = "m88DEF.dat"
$baud = 115200
$crystal = 7372800

Config Pinb.2 = Output : Servo1 Alias Portb.2 : Servo1 = 0

Declare Sub Stay
Declare Sub Down
Declare Sub Up


Waitms 250

Dim Xxxx As integer
Dim Yyyy As Integer
Dim Zzzz As Integer

For Xxxx = 0 To 5000
         Call Stay
Next Xxxx

For Xxxx = 0 To 5000
   Call Up
Next Xxxx

For Xxxx = 0 To 5000
   Call Down
Next Xxxx

Sub Stay
Servo1 = 1
    Waitus 1500
Servo1 = 0
End Sub

Sub Up
Servo1 = 1
   Waitus 2100
Servo1 = 0
End Sub

Sub Down
Servo1 = 1
  Waitus 900
Servo1 = 0
End Sub

Re: Работа над ошибками

Timmy » 16 апр 2009, 09:37

поможите с методом INPUT
при вызове инпут не пишется переменная
те она как была 0 так и остается

Код: Выделить всёРазвернуть
$prog &HFF , &HBD , &HC9 , &H00                             ' generated. Take care that the chip supports all fuse bytes.
$regfile = "m32def.dat"                                     ' ôàéë ñïåöèôèêàöèè Ìåãè32
$crystal = 7372800                                          ' óêàçûâàåì íà êàêîé ÷àñòîòå áóäåì ðàáîòàòü

$baud = 115200                                              ' óêàçûâàåì ñêîðîñòü íà êîòîðîé áóäåò ðàáîòàòü óàðò

$include "Config ports.bas"

Dim Rdddr As Integer : Rdddr = 1

Waitms 5000
Print "Start MiniBot v2.0"

Do
Print "x" ; Rdddr
Input "test " , Rdddr Noecho
Print
Waitms 10
Print Rdddr ; "xxx"

Loop

Re: Работа над ошибками

galex1981 » 16 апр 2009, 10:03

Пробуй так:
Код: Выделить всёРазвернуть
Print "test ";
Input Gspcinput Noecho

То есть разделяй то что выводишь в терминал от того что вводишь

Re: Работа над ошибками

Timmy » 16 апр 2009, 11:20

я пробовал и так,
так вобще не останавливается на инпут...

если Input "text", var то останавливается на первом инпуте и через один
окно терминала

Start MiniBot v2.0
x1
test 11
0xxx
x0
test
0xxx
x0
test

все оч интересно,
изначально переменная равна 1
далее вводим 11(неважно что вводим)
опа переменная теперь 0
следующий цикл опроса просто пролетаем без поодтверждения
Последний раз редактировалось Timmy 16 апр 2009, 11:45, всего редактировалось 1 раз.

Re: Работа над ошибками

galex1981 » 16 апр 2009, 11:44

Кстати перед командой Input нужно выполнять: Clear Serialin

Re: Работа над ошибками

Timmy » 16 апр 2009, 12:20

на конфиг сериалин
просто пролетает без остановок

загрузил пример
Код: Выделить всёРазвернуть
$prog &HFF , &HE4 , &HD9 , &H00                            ' generated. Take care that the chip supports all fuse bytes.
$regfile = "m32def.dat"                                     ' ôàéë ñïåöèôèêàöèè Ìåãè32
$crystal = 7372800                                          ' óêàçûâàåì íà êàêîé ÷àñòîòå áóäåì ðàáîòàòü
$baud = 115200                                              ' óêàçûâàåì ñêîðîñòü íà êîòîðîé áóäåò ðàáîòàòü óàðò
$hwstack = 32                                               ' default use 32 for the hardware stack

$swstack = 10                                               ' default use 10 for the SW stack

$framesize = 40                                             ' default use 40 for the frame space



Dim V As Byte , B1 As Byte

Dim C As Integer , D As Byte

Dim S As String * 15



Input "Use this to ask a question " , V

Input B1                                                    'leave out for no question



Input "Enter integer " , C

Print C





Inputhex "Enter hex number (4 bytes) " , C

Print C

Inputhex "Enter hex byte (2 bytes) " , D

Print D



Input "More variables " , C , D

Print C ; " " ; D



Input C Noecho                                              'supress echo



Input "Enter your name " , S

Print "Hello " ; S



Input S Noecho                                              'without echo

Print S

End

так с ним тоже пролетание через один инпут и 0 в переменных

Код: Выделить всёРазвернуть
Use this to ask a question Usn fhfg

Enter integer

0
Enter hex number (4 bytes) r ) 1234
-20352
Enter hex byte (2 bytes)
0
More variables
               )s
                  ) gfjhhg\

0 0
Enter your name 0
Hello 0
e 0
lk;lk


плз если кому не сложно
киньте пример под 32 мегу с фусибитами

Re: Работа над ошибками

galex1981 » 16 апр 2009, 14:45

Еще раз повторю:
Код: Выделить всёРазвернуть
Input "Use this to ask a question " , V

Так в васике глючит
делается так:
Код: Выделить всёРазвернуть
print "Use this to ask a question " 
Clear Serialin
Input V

Работать будет - сам проверял

Добавлено спустя 1 час 17 минут 53 секунды:
В Миниботе 2.0 для удобства разработчикам закорочены выводы Rx и Tx в UATRе, потому при передачи сообщения робот "слышит" сам себя. Для того чтоб он сам себя не слышал программно print оборачивают так:
Код: Выделить всёРазвернуть
   Ucsr0b.rxen0 = 0
   Print Text
   Ucsr0b.rxen0 = 1


Добавлено спустя 46 минут 57 секунд:
Ниже привожу код приема строки по прерыванию:
Код: Выделить всёРазвернуть
$prog &HFF , &HE0 , &HDD , &HF9                             ' для минибота 2.0
'27mhz 250kbps

$hwstack = 32
$swstack = 10
$framesize = 40

$regfile = "m88DEF.dat"
$baud = 115200
$crystal = 7372800

On Urxc Getchar                                             'переопределяем прерывание на передачу по usart
Enable Interrupts                                           'разрешаем прерывания
Enable Urxc

Dim Text As String * 15                                     'строка для отправки/приема (длина строки 15 символов)
Dim Text_tmp As String * 15
Dim Txt_ As Byte


Do 'Главный цикл
.....
Loop

Getchar:
   Txt_ = Inkey()
   If Txt_ > 13 Then          'не служебные символы
      Text_tmp = Chr(txt_)
      Text = Text + Text_tmp
   End If
   If Txt_ = 13  Then'нажали ввод
         'строка в Text принята
   End If
Return


Re: Работа над ошибками

Timmy » 16 апр 2009, 15:20

спасибо разбираюсь

Re: Работа над ошибками

EdGull » 16 апр 2009, 15:26

galex1981нужно еще тут выложить название Ucsr0b.rxen0 для меги32

Re: Работа над ошибками

galex1981 » 16 апр 2009, 16:38

Для Меги32 этот регистр UCSRB.RXEN


Rambler\'s Top100 Mail.ru counter