roboforum.ru

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

RoboRF в МиниБоте

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

RoboRF в МиниБоте

Сообщение galex1981 » 29 янв 2009, 00:22

Для начала знакомлюсь с предметной областью: изучаю datasheet ИС C2500 и исходные коды минибота и т. д.
Вложения
v3.0.rar
последняя рабочая версия
(21.17 КиБ) Скачиваний: 39
исх код эда.rar
имеющиеся исходники
(67.28 КиБ) Скачиваний: 78
cc2500.pdf
Даташит на ИС
(1.3 МиБ) Скачиваний: 135
shema.jpg
Схема миниплаты
Последний раз редактировалось galex1981 15 сен 2009, 21:56, всего редактировалось 6 раз(а).
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Разработка кода общения 2х мегаплат на СС2500

Сообщение galex1981 » 06 фев 2009, 12:20

blindman писал(а):Так надо проверять флаг ошибки CRC перед тем как принятый пакет использовать

Вопрос: переотправлять пакет после проверки CRC я должен или у самой cc2500 есть команда переотправки последнего пакета?
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Разработка кода общения 2х мегаплат на СС2500

Сообщение blindman » 06 фев 2009, 12:48

Все сам
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Разработка кода общения 2х мегаплат на СС2500

Сообщение galex1981 » 06 фев 2009, 13:40

переделал код без использования crc8, используя бит CRC_OK
Вложения
1.51.rar
(15.67 КиБ) Скачиваний: 21
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Разработка кода общения 2х мегаплат на СС2500

Сообщение galex1981 » 08 фев 2009, 02:10

В общем кое что готово, с обработкой CRC общение 2х мегаплат (2х миниботов), но есть одна проблема. Суть ее состоит в следующем: заливаются 2 прошивки на каждую плату. Изначально платы находятся в режиме приема. После того как одной платой отправишь сообщение другой она вроде как переходит в режим ведущей, то есть передавать передает но идут глюки с получением. Если затем второй платой не приять а передать сообщение, то она либо вешается, либо перезагружается программа на МК. Если плата вешается, то у нее работает только передача, прием отсутствует. Если МК перезагружается, то прием продолжает работать.
Самое странное что вешается плата на месте возможного приема CC2500 при проверке 1 го уровна на GD0:
Функция приема сообщения радиомодема
Код: Выделить всёРазвернуть
ПринятьДанные:
Text_priem = ""
'Переводим передатчик в режим IDLE
Команда = Команда_idle : Gosub ПослатьКоманду

'Обнулим FIFO RX
Команда = Команда_frx : Gosub ПослатьКоманду

'Обнулим FIFO TX
Команда = Команда_ftx : Gosub ПослатьКоманду

Команда = Команда_rx : Gosub ПослатьКоманду


   Do
      If Gdo0 = 1 Then Goto Zbend
   Loop

Zbend:
   Do
      If Gdo0 = 0 Then Goto Zbend0
   Loop
Zbend0:
'1 длина
'2 канал
'3-n пакет

   Регистр = Регистр_rxbytes : Gosub ПрочитатьСтатус
   If Статус = 0 Then Goto Zbok
   Zb_cs = 0
   Команда = Регистр_rxfifob : Статус = Spimove(Команда)
   Статус = Spimove(Команда)                                ': Print Hex(Статус);
   Длина = Статус - 1
   Статус = Spimove(Команда)                                ': Print Hex(Статус) ; "-";     '  #1 ,
   For I = 1 To Длина
      Статус = Spimove(Команда) :
      Text_priem = Text_priem + Chr(Статус):                '  #1 ,данные
      Ucsr0b.rxen0 = 0
      Print Chr(Статус);                                    '  #1 ,данные
      Ucsr0b.rxen0 = 1
   Next
   'нужно ли переотправить код
   If Text_priem = "+-*/*/+-++" Then
      Isread = 0:
      Text = Cpytext:                                       'копия строки для повторной отправки
      'отправка сообщения
      Gosub ОтправитьДанные:
      Text = "":
      Goto Zbok
   End If
   Ucsr0b.rxen0 = 0
   Print
   Ucsr0b.rxen0 = 1
   Статус = Spimove(Команда) :                              'Print Hex(Статус);
   Статус = Spimove(Команда) :                              'Print Hex(Статус)
   Zb_cs = 1
   'выборка из 7го бита CRC_OK
   If Статус.7 = 0 Then
      'запрос на переотправку сообщения
      Isread = 0:
      Text = "+-*/*/+-++"                                   'кодовое слово означающее переотправить сообщение
      Gosub ОтправитьДанные
      Text = "":
      Goto Zbok
   End If
Zbok:

Return


Место где программа вешается:
Код: Выделить всёРазвернуть
   Do
      If Gdo0 = 1 Then Goto Zbend
   Loop

Zbend:

Просто не выходит из этого цикла при реальном приеме
Вложения
1.56.rar
(3.16 КиБ) Скачиваний: 19
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Разработка кода общения 2х мегаплат на СС2500

Сообщение galex1981 » 12 фев 2009, 20:38

переделал
Вложения
1.6.rar
(16.15 КиБ) Скачиваний: 20
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Разработка кода общения 2х мегаплат на СС2500

Сообщение EdGull » 26 фев 2009, 19:01

во чё у себя в закромах надыбал...

antikollizii-1.GIF

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

Re: Разработка кода общения 2х мегаплат на СС2500

Сообщение galex1981 » 27 фев 2009, 12:30

Спасибо Эд, это действительно пригодится для радиоканала
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Разработка кода общения 2х мегаплат на СС2500

Сообщение galex1981 » 01 мар 2009, 22:25

Выкладываю очередную версию кода. В нем проблема: если переключаться с передачи на прием, прием не работает.
Вложения
1.7.rar
(16.64 КиБ) Скачиваний: 16
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Разработка кода общения 2х мегаплат на СС2500

Сообщение galex1981 » 02 мар 2009, 12:47

INT1 прерывание не работает
Вложения
250kbps_in_out_mega88.rar
(3.28 КиБ) Скачиваний: 15
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Разработка кода общения 2х мегаплат на СС2500

Сообщение galex1981 » 03 мар 2009, 02:54

Наконец то получилось что то дельное!!!!!!!!!! Работает приемо-передача, остались последние штрихи: подчистить буферы, и убрать повторение приема при передаче
Вложения
1.72.rar
(16.75 КиБ) Скачиваний: 19
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Разработка кода общения 2х мегаплат на СС2500

Сообщение galex1981 » 05 мар 2009, 01:29

Подчистил буферы, убрал повторение данных при передаче.
Осталось:
-Проблема: При передачи с мегаплаты на минибот не всегда приходят данные на минибот, наоборот все нормально
-Переделать контроль получения кода (опрос флага CRC_OK, выдача OK при успешном приеме)
-Окончательно подчистить код
Вложения
1.8.rar
(15.94 КиБ) Скачиваний: 22
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Разработка кода общения 2х мегаплат на СС2500

Сообщение galex1981 » 12 мар 2009, 01:04

Итак, первый абсолютно рабочий результат: код общения в обе стороны 2х мегаплат!
Есть особенности, может есть те, кто знают их, а для новичков и для тех кто не знает попробую их описать:
1) При прошивке есть разница, для мегаплаты код или для минибота, соответственно есть 4 строки, в которых для определенного железа должно быть раскомментировано соответственное:
Код: Выделить всёРазвернуть
$prog &HFF , &HAD , &HD7 , &HF8                             ' для мегаплаты
'$prog &HFF , &HE0 , &HDD , &HF9                             ' для минибота 2.0


Код: Выделить всёРазвернуть
Config Pinb.1 = Output : Zb_cs Alias Portb.1 : Zb_cs = 1    ' для мегаплаты
'Config Pinb.0 = Output : Zb_cs Alias Portb.0 : Zb_cs = 1    ' для МиниБот 2.0


2)Значения регистров freq2, freq1, freq0 ИС cc2500 у меня взяты по-умолчанию как в коде у Эда. Если идет несоответствие частоты мегаплат (требуется калибровка), этими регистрами можно выставить точное совпадение частот
Код: Выделить всёРазвернуть
Const Регистр_freq2 = &H0D                                  'подстройка при калибровке платы
Const Регистр_freq1 = &H0E                                  'подстройка при калибровкеплаты
Const Регистр_freq0 = &H0F                                  'подстройка при калибровке платы


3)При желании вы можете устанавливать какую предпочитаете мощность приемо-передатчика, код:
Код: Выделить всёРазвернуть
'Мощность приемо-передатчика
Число = &H44 : Gosub ЗаписатьВТаблицуМощностей              '44  '46   'HBF 'FB


Далее ниже прикладываю таблицу мощностей CC2500 и сам код конечно ;)
Вложения
250kbps_in_out_mega88.rar
сам код
(3.09 КиБ) Скачиваний: 23
power.JPG
таблица мощностей
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: RoboRF в МиниБоте

Сообщение galex1981 » 18 мар 2009, 02:16

Откорректированная версия
Вложения
1.85.rar
(3.12 КиБ) Скачиваний: 45
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: RoboRF в МиниБоте

Сообщение Aleksandr_ » 23 апр 2009, 20:09

А есть уже код для посылки команд с ПК конкретно на Минибота? Чтобы он к примеру светодиодом моргал на определённую полученную команду, или включал двигатели?
А то, я так понимаю, он пока только текстовые сообщения с компьютера на компьютер пересылает.
Aleksandr_
 
Сообщения: 12
Зарегистрирован: 19 апр 2009, 22:48
Откуда: Уфа

Re: RoboRF в МиниБоте

Сообщение galex1981 » 23 апр 2009, 20:17

Есть конечно! Вместе с Mega88 прошиваете Mega32 прошивкой: ЗДЕСЬ и можете как через радиоканал так и через ИК канал управлять миниботом
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Пред.След.

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

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

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