Технический форум по робототехнике.
galex1981 » 29 янв 2009, 00:22
Для начала знакомлюсь с предметной областью: изучаю datasheet ИС C2500 и исходные коды минибота и т. д.
- Вложения
-
- v3.0.rar
- последняя рабочая версия
- (21.17 КиБ) Скачиваний: 39
-
- исх код эда.rar
- имеющиеся исходники
- (67.28 КиБ) Скачиваний: 78
-
- cc2500.pdf
- Даташит на ИС
- (1.3 МиБ) Скачиваний: 135
-
- Схема миниплаты
Последний раз редактировалось
galex1981 15 сен 2009, 21:56, всего редактировалось 6 раз(а).
galex1981 » 06 фев 2009, 12:20
blindman писал(а):Так надо проверять флаг ошибки CRC перед тем как принятый пакет использовать
Вопрос: переотправлять пакет после проверки CRC я должен или у самой cc2500 есть команда переотправки последнего пакета?
blindman » 06 фев 2009, 12:48
Все сам
galex1981 » 06 фев 2009, 13:40
переделал код без использования crc8, используя бит CRC_OK
- Вложения
-
- 1.51.rar
- (15.67 КиБ) Скачиваний: 21
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
galex1981 » 12 фев 2009, 20:38
переделал
- Вложения
-
- 1.6.rar
- (16.15 КиБ) Скачиваний: 20
EdGull » 26 фев 2009, 19:01
во чё у себя в закромах надыбал...
galex1981 » 27 фев 2009, 12:30
Спасибо Эд, это действительно пригодится для радиоканала
galex1981 » 01 мар 2009, 22:25
Выкладываю очередную версию кода. В нем проблема: если переключаться с передачи на прием, прием не работает.
- Вложения
-
- 1.7.rar
- (16.64 КиБ) Скачиваний: 16
galex1981 » 02 мар 2009, 12:47
INT1 прерывание не работает
- Вложения
-
- 250kbps_in_out_mega88.rar
- (3.28 КиБ) Скачиваний: 15
galex1981 » 03 мар 2009, 02:54
Наконец то получилось что то дельное!!!!!!!!!! Работает приемо-передача, остались последние штрихи: подчистить буферы, и убрать повторение приема при передаче
- Вложения
-
- 1.72.rar
- (16.75 КиБ) Скачиваний: 19
galex1981 » 05 мар 2009, 01:29
Подчистил буферы, убрал повторение данных при передаче.
Осталось:
-Проблема: При передачи с мегаплаты на минибот не всегда приходят данные на минибот, наоборот все нормально
-Переделать контроль получения кода (опрос флага CRC_OK, выдача OK при успешном приеме)
-Окончательно подчистить код
- Вложения
-
- 1.8.rar
- (15.94 КиБ) Скачиваний: 22
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
-
- таблица мощностей
galex1981 » 18 мар 2009, 02:16
Откорректированная версия
- Вложения
-
- 1.85.rar
- (3.12 КиБ) Скачиваний: 45
Aleksandr_ » 23 апр 2009, 20:09
А есть уже код для посылки команд с ПК конкретно на Минибота? Чтобы он к примеру светодиодом моргал на определённую полученную команду, или включал двигатели?
А то, я так понимаю, он пока только текстовые сообщения с компьютера на компьютер пересылает.
galex1981 » 23 апр 2009, 20:17
Есть конечно! Вместе с Mega88 прошиваете Mega32 прошивкой:
ЗДЕСЬ и можете как через радиоканал так и через ИК канал управлять миниботом