roboforum.ru

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

Учебный курс по Bascom AVR Basic для ЧАЙНИКОВ

Re: Учебный курс по Bascom AVR Basic для ЧАЙНИКОВ

space » 19 сен 2011, 10:17

Когда в программе используются коды
Код: Выделить всёРазвернуть
Config Servos = 1 , Servo1 = Portb.3 , Reload = 11 

и
Код: Выделить всёРазвернуть
Прием3_rc5:
     Getrc5(address , Command)
     If Address <> 255 And Command <> 255 Then
        Command = Command And &B01111111
     End If
Return


то она не компилируется, стоит убрать код с настройкой сервоприводов, всё компилируется. на скрине видно ошибку которую выдаёт компилятор при компиляции кода "Dublicate label". Почему может быть так?
Вложения
1.jpg

Re: Учебный курс по Bascom AVR Basic для ЧАЙНИКОВ

galex1981 » 19 сен 2011, 11:25

Похоже что Config servos и Getrc5 используют одни и те же метки с одинаковыми именами. Скинь весь проект я гляну поближе на него

Re: Учебный курс по Bascom AVR Basic для ЧАЙНИКОВ

space » 19 сен 2011, 11:35

Вот проект, так он в полном объёме должен быть

Добавлено спустя 3 минуты 16 секунд:
даже банально, обрезать весь код по максимуму:


Код: Выделить всёРазвернуть
$regfile = "m16def.dat"                                     'используем мк ATmega16
$crystal = 16000000                                         'частота кварцевого резонатора 16mHz
$baud = 19200                                               'устанавливаем скорость для UART


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№ , указываем длину импульса.



Config Rc5 = Pind.2


Enable Interrupts                                           ' разрешаем прерывания





'************************Переменные и константы*********************************
'*******************************Переменные**************************************

Dim Address As Byte , Command As Byte



Do
   Gosub Прием_rc5
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


всё равно почти тоже самое (последней третьей ошибки нет)
Вложения
1.jpg
Архив WinRAR.rar
(15.07 КиБ) Скачиваний: 0

Re: Учебный курс по Bascom AVR Basic для ЧАЙНИКОВ

galex1981 » 19 сен 2011, 12:24

В общем проблем было несколько:
1) Раз ты используешь для чего непонятно - кучу файлов - где определяешь конфиги, где функции, причем не пишешь их прототипы, в результате чего у тебя во всем проекте каша; так приводи проект в нормальный порядок а не функция там а основной файл ее не видит по вышеуказанным причинам
2) Используешь названия функции с маленькой буквы а вызываешь с большой (для английских вариантов названия функций регистр неважен, а если называешь функции русскими буквами - то очень важен)
3) В хелпе по Config servo написано что можно менять таймер. То есть у тебя для 2х функций использовался один таймер, потому шли конфликты
Код: Выделить всёРазвернуть
'as an option you can use TIMER1
'Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10 , Timer = Timer1


В общем переделанный проект прилагаю - смотри какие у тебя были ошибки.
А вообще советую все таки русские названия не использовать как и в других языках программирования.
Вложения
переделанный проект.rar
(13.05 КиБ) Скачиваний: 0

Re: Учебный курс по Bascom AVR Basic для ЧАЙНИКОВ

space » 19 сен 2011, 13:07

galex1981 писал(а):В общем проблем было несколько:
1) Раз ты используешь для чего непонятно - кучу файлов - где определяешь конфиги, где функции, причем не пишешь их прототипы, в результате чего у тебя во всем проекте каша; так приводи проект в нормальный порядок а не функция там а основной файл ее не видит по вышеуказанным причинам

потому что найти так проще :) Если всё в одном файле, то нужный кусок искать тяжело, а так всё по полочкам :)
galex1981 писал(а):3) В хелпе по Config servo написано что можно менять таймер. То есть у тебя для 2х функций использовался один таймер, потому шли конфликты
Код: Выделить всёРазвернуть
'as an option you can use TIMER1
'Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10 , Timer = Timer1


В общем переделанный проект прилагаю - смотри какие у тебя были ошибки.
А вообще советую все таки русские названия не использовать как и в других языках программирования.

Понял :) Спасибо, про таймер я и забыл :-|


Ток не понял зачем это:
Код: Выделить всёРазвернуть
Declare Sub Прием_rc5
- Прием_rc5 же не процедура, а всего лишь метка, или это тот самый прототип??))

Добавлено спустя 23 минуты 24 секунды:
вот только проблема, с timer1 сервы не крутятся вообще
переделанный код залил прям чтоб проверить и всё, на пульт реакции нет.

прошил тестовую прогу для пульта, которую не давно писал ие-приёмник работает, сигналы принимает

может для таймера ещё какие настройки надо сделать?

Re: Учебный курс по Bascom AVR Basic для ЧАЙНИКОВ

galex1981 » 19 сен 2011, 13:50

1) Прием_rc5 это и есть прототип метки.
2) Таймер 3 попробуй...

Re: Учебный курс по Bascom AVR Basic для ЧАЙНИКОВ

space » 19 сен 2011, 19:42

попробовал и timer1 и timer2
вообще ладно, смысл понятен, потом отдельно код состряпаю и попробую, за помощь спасиб :)

Re: Учебный курс по Bascom AVR Basic для ЧАЙНИКОВ

space » 25 сен 2011, 02:27

пробую щас работать с энкодером. В программе сделал управление сервоприводом. Меняется переменная W в диапозоне от 33 до 150. При вращение энкодера переменная уменьшается или увеличивается, в зависимости от направления вращения, на единицу. Для этого использую команды Incr, Decr. Надо сделать чтобы переменная увеличивалась не на единицу, а сразу единиц на 10-15. Собственно в этом и затруднение

Код: Выделить всёРазвернуть
$regfile = "m16def.dat"                                     ' файл спецификации Меги32
$crystal = 16000000                                         ' указываем на какой частоте будем работать

$lib "lcd4.lbx"

$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

Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7
Config Lcd = 16 * 2
Config Servos = 1 , Servo1 = Portd.7 , Reload = 11

Dim W As Integer

Config Int0 = Falling

On Int0 Getencoder

Enable Interrupts
Enable Int0

Cha Alias Pind.2
Chb Alias Pind.3

Config Cha = Input
Config Chb = Input

Cls
Cursor Off



Do

If W > 150 Then W = 33

If W < 33 Then W = 150

  Servo(1) = W

   Locate 1 , 1

    Lcd "encounter: " ; W ; "     "

     Waitms 100
Loop

Getencoder:

If Cha = 0 Then
If Chb = 0 Then Incr W Else Decr W
End If
Waitms 5
Gifr = 64
Return


End

Re: Учебный курс по Bascom AVR Basic для ЧАЙНИКОВ

vadinator » 25 сен 2011, 02:55

вместо Incr W используйте W = W + 10 , а вместо Decr W соответственно W = W - 10...

Re: Учебный курс по Bascom AVR Basic для ЧАЙНИКОВ

space » 25 сен 2011, 02:58

:) я пробовал так не катит

Добавлено спустя 2 минуты 30 секунд:
а нет :D работает. решил попробовать ещё раз)) Видать когда пробовал, не так что то прописал)) спасиб :wink:

Re: Учебный курс по Bascom AVR Basic для ЧАЙНИКОВ

CFox » 30 сен 2011, 19:48

Блин объясните почему нельзя транслитом пользоваться... А если хочеться?

Re: Учебный курс по Bascom AVR Basic для ЧАЙНИКОВ

Vooon » 30 сен 2011, 20:42

Потому что разбирать что ты там понаписал в таком случае - дополнительная трата времени. Я такие сообщения в лучшем случае игнорирую.

Re: Учебный курс по Bascom AVR Basic для ЧАЙНИКОВ

space » 01 окт 2011, 23:28

Использую сдвиговый регистр 74HC595. Светодиоды за счёт него научился включать. Ни чего сложного, но вот как управлять сервоприводом за счёт сдвигового регистра в BascomAVR? Почитал теорию в вике, но понятней не стало

Re: Учебный курс по Bascom AVR Basic для ЧАЙНИКОВ

avr123.nm.ru » 01 окт 2011, 23:37

Попробуйте HC4017

Re: Учебный курс по Bascom AVR Basic для ЧАЙНИКОВ

space » 01 окт 2011, 23:43

не вижу смысла использования другой микросхемы


Rambler\'s Top100 Mail.ru counter