|
|
  |
CC2500 Приемопередатчик, Кто-то реально делал? |
|
|
|
Nov 17 2005, 08:39
|

Знающий
   
Группа: Свой
Сообщений: 943
Регистрация: 6-07-04
Из: Санкт-Петербург
Пользователь №: 274

|
Цитата микрочип при понижении напряжения не сможет работать на полной скорости (сам непроверял так дока пишет) Используйте 18 серию с индексом J - 40 МГц на 3,3В Цитата Собствеено вопрос кто-нибудь решал проблему возникновения коллизий? Если в сети будет 10-20 устройств, можно использовать урезанный бесплатный стек ZigBee от микрочипа
|
|
|
|
|
Nov 18 2005, 00:36
|
Участник

Группа: Новичок
Сообщений: 19
Регистрация: 17-11-05
Пользователь №: 11 010

|
Наконецто встретил в сети человека кто смог запустить этого зверя CC2500 Маленький , дешевый а нервов поел немерянно. Расскажите пожалуйста все о том в какой последовательности инициализировать зверя на прием и передачу. У меня связка правда несколько иная. на прием стоит CC2500 на передачу CC2550. В качестве интерфейса собрал и запрограмил SPA2COM на PIC16F74. C помощью COM терминалки могу общатся с регистрами зверя. Как я это делал - генерил список регистров в Studio , затем все регистры до адреса 2f загонял в каждый чип. Для приема это CC2500 для передачи 2550 . Естессно настройка регистров для каждого чипа свои. После того как загнал регистры начинается работа с коммандами ? Для приема я посылаю команду по адресу 34 .. После этого на ноге GDO0 появляется некий цифровой шум ( если была выбрана модуляция 2-FSK). По опыту работы с RFM5000 могу сказать что это правильный шум - шум эфира. Далее мои познания в области приема заканчиваются. Берусьт за передатчик. Загоняю регистры , загоняю в FIFO несколько байт ( FE xx FE xx FE xx FE xx ) затем даю команду STX (35) - ноль.. НИЧЕГО.. Затем заполняю еще раз FIFO и даю SFTX (3B) результат - НИЧЕГО. Бьюсь уже 3-й день..безрезультатно. Вопрос ! Правильно я работаю с регистрами/коммандами впринципе ? Скорее всего чегото я неправильно делаю с передатчиком после установки регистров.
Существует еще калибровка - зачем она нужна ? Надо ли ей пользоватся постоянно ?
Как работает контроль за микросхемой ? После команды 34 (SRX) в ответ получаю всегда сначала 5F (SETTLING PLL is settling) затем 1F (Rx mode) . Это правильно ?
Очень мого вопросов. Если нетрудно , опишите пожалуйста Вашу методику инициализации девайза на неком примере. С точностью до регистра/комманды. Нужно очень точное руководство к действию от которого потом можно будет меня значения регистров для собственных нужд..
Заранее благодарен.
|
|
|
|
|
Nov 19 2005, 10:36
|
Частый гость
 
Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964

|
Цитата(Oleg_Lun @ Nov 18 2005, 03:36)  Расскажите пожалуйста все о том в какой последовательности инициализировать зверя на прием и передачу.
Очень мого вопросов. Если нетрудно , опишите пожалуйста Вашу методику инициализации девайза на неком примере. С точностью до регистра/комманды. Нужно очень точное руководство к действию от которого потом можно будет меня значения регистров для собственных нужд..
Заранее благодарен. Вот последовательность инициализации СС2500 : ;инициализация СС2500 rcall init_spi rcall por_cc2500 rcall delay_5ms rcall write_settings rcall delay_5ms rcall write_patable rcall delay_5ms ; ldi temp,SFRX mov spi_out,temp rcall write_strob nop ; ldi temp,SFTX mov spi_out,temp rcall write_strob nop ; ldi temp,SIDLE mov spi_out,temp rcall write_strob ;IDLE Подпрограммки и описание регистров в прикрепленном файле
CC2500.ZIP ( 4.83 килобайт )
Кол-во скачиваний: 827Переключение в режим приема осуществляю при нажатии на кнопку: sw2: ; sw2_lp: ldi temp,SFRX mov spi_out,temp rcall write_strob nop rcall delay_1ms ; ldi temp,SCAL mov spi_out,temp rcall write_strob nop rcall delay_1ms ; ldi temp,SRX mov spi_out,temp rcall write_strob nop rcall delay_1ms ; cbi PORTD,4 sw2_loop: sbic PINB,gd2 sbi PORTD,5 sbis PINB,gd2 cbi PORTD,5 ; sbic PINB,gd0 rjmp sw2_recive ; rjmp sw2_loop sw2_recive: sbi PORTD,4 sbic PINB,gd0 rjmp sw2_recive rcall read_fifo rcall delay_5ms ; rjmp sw2_lp ; ret Немного пояснений к последнему блоку. На одну ногу микроконтроллера привязан вывод GDO0, на другую - GDO2 (SPI само собой на другие 3). После включения режима приема жду 1 на ноге GDO2, проинициализированной в режим индикации обнаружения несущей, после чего жду 1 на ноге GDO0, проинициализированной в режим индикации приема слова синхронизации. После снития 1 на этой ноге читаю ФИФОшку. Все это из примеров использования микросхемы, которые Chipcon выложил у себя на сайте. Там правда на С все и для другого контроллера, но разобраться реально можно. На передачу практически то же самое: main_loop: ; rcall write_txfifo nop ldi temp,STX mov spi_out,temp rcall write_strob mn1_loop: sbis PINA,gd0 rjmp mn1_loop mn2_loop: sbic PINA,gd0 rjmp mn2_loop rcall delay_250ms rjmp main_loop В передатчике в начале пишу в фифо то, что хочу передать, потом включаю режим передачи и жду 1 на GDO0, что означает успешную передачу слова синхронизации, а кода появляется 0 - пакет передан, можно следующий пихать. Как показал опыт - основная проблема при настройке это совпадение частот приемника и передатчика. У меня кварцы с 6-ю цифрами, но пришлось подстраивать на ~200 кГц путем изменения значения регистров FSCTRL1, 0. Сейчас мучаюсь с печатной антенной (F-антенна). С петлей (folded dipole) работает прекрасно, а тут в схеме согласования очень противные индуктивности 1,2нГн - достать трудно. А у Вас какая антенна? Цитата(codewizard @ Nov 16 2005, 21:50)  Еще вопросик, предполагается что в узле (я его так назвал) общей сети будет работать до 10 (это максимум, с запасом, который я даже не знаю как скоро смогу достигнуть) устройств на СС2500... Собствеено вопрос кто-нибудь решал проблему возникновения коллизий? Может есть какие идеи/соображения по этому поводу.
Я пока придумал одно t - скорость передачи одного пакета T=2t При отправке пакета контроллер выбирает случайное число n, и отправка пакета начнется через время равное nT Так ведь у СС2500 все есть уже для решения проблемы! Работать нужно пакетами, при этом микросхемы сами умеют определять кому какой пакет полагается, потому как там можно адресовать до 254 устройств на одном канале (путем определения адреса). Включаем проверку адреса в регистре PKTCTRL1, а сам адрес в регистре ADDR. Причем поддерживается и широковещание или по адресу 0, или по адресу 255.
|
|
|
|
|
Nov 19 2005, 14:10
|
Участник

Группа: Новичок
Сообщений: 19
Регистрация: 17-11-05
Пользователь №: 11 010

|
Ценнейшая инфоррмацмия. Спасибо. Кое что прояснилось. Сейчас попробую ВАашу методику.
Но пока ждал ответа кой в чем сам разобрался. Пока у меня работает таким образом - ( посвоей методике)
Пишу сам алгоритм. 1. Инициализирую контроллеры. Один на прием второй на передачу.
Алгоритм передачи. Пердатчик сконфигурирован. Находится в IDLE состоянии.
Включаю TX командой 0х35 ( на ноге GDO0 приемника вместо шума эфира появляется несущая в виде меандра. Нога сконфигурирована как вывод Serial Transparent Data Out)
Передаю в FIFO байт не в режиме BURST. Прочто один байт - "0x3F 0xXX" После этой команды передатчик ПЕРЕДАЕТ байт и это видно на GDO0 приемника, но передатчик после этого почемуто уходит в IDLE. Для того чтобы передать следующий байт , мне надо послать команду 0х3B Это команда у них называется Flush the TX FIFO buffer .. Я так понимаю очистить буффер. (Правильно ?) После этого я могу заново включить TX 0x35 и ЗАНОВО ПЕРЕДАТЬ В FIFO БАЙТ. Иначе если очистить буффер , передатчик просто не включится . Только после этой процедуры байт передается. И так повторяется раз за разом. Передавать байты в режиме Burst пока не пробовал.
Прием: ( Нога GDO0 сконфигурирована так что лог1=CRC-OK )
включаю RX - 0x34
Далее жду на ноге DGO0 появление лог1 что контрольная сумма правильная (это заодно говорит что принятый байт уже находится в FIFO) Странный эффект - после приема одного байта приемник уходит в IDLE как и передатчик после отправки бпайта. Правилдьно ли это ?
Считываю байт из FIFO командой BF (80+3F)
"очищаю" FIFO премника командой 0х3А (Rx FIFO Flush)
Перевожу чип на прием 0x34 после этого повторяю процедуру.
--- От сюда масса вопросв - ПРАВИЛЬНО ЛИ Я ВООБЩЕ делаю ? Этот алгоритм я вывел совершенно случайно изучая работу комманд. Расскажите примерно как я рассказал на основе алгоритма как передать 2 байта или более.. Что происходит при этом в приемнике и передатчике ? Как сделать так чтобы приемник не уходил в IDLE после принятия каждого байта ? У меня несколько специфичные задачи. Мне надо передавать 2 байта с интервалом порядка 100 мс. Но передавать на максимальной скорости чтобы пакеты были как можно короче. Передал - выключился , подошло время - передал , выключился и тд. Чтобы меньше кушал батарейку. Принимать надо ГАРАНТИРОВАННО ПРАВИЛЬНО именно те байты которвые ПЕРЕДАЛ ПЕРЕДАТЧИК.. Никакой дальнейшей коррекции ошибок не пердусмотрено , повторный запрос пакета невозможен впринципе - ибо связь односторонняя. Отсюда вопрос - наскорлько точно и правильно работает алгоритм подсчета СRC ? Какой процент ошибок на скорости 250к со всеми включенными защитами (несущая , подсчет суммы , адресация в нужный приемник и тд) ?? Не придется ли делать собственную коррекцию ошибок ?
Заранее благодарен .
|
|
|
|
|
Nov 19 2005, 15:02
|
Участник

Группа: Новичок
Сообщений: 19
Регистрация: 17-11-05
Пользователь №: 11 010

|
Да , в догонку еще хотел бы спросить про некоторые регистры. Что делают :
WHITE_DATA CRC_AUTOFLUSH APPEND_STATUS
|
|
|
|
|
Nov 19 2005, 18:41
|
Участник

Группа: Участник
Сообщений: 57
Регистрация: 30-08-05
Пользователь №: 8 094

|
Все это из примеров использования микросхемы, которые Chipcon выложил у себя на сайте. Там правда на С все и для другого контроллера, но разобраться реально можно. ----- Можно пожалуйста ссылку на этот пример, а то инет очень дорогой(сотовый). Сильно не покопаешься. И если не затруднит, скажите куда подключать выводы SI, SCLK, SO, CSn(MOSI,MISO,SCK...) на атмеле? С SPI не знаком т.к не подключал никакие модули. А с приемопередатчиками вообще не сталкивался  Вот решил осваивать на самых дешевых экземплярах. Когда я ИХ увидел первый вопрос как я ЭТО буду припаивать  ) Но попробую на вышеизложенном методе(на плите), пока такое еще не пробовал
--------------------
|
|
|
|
|
Nov 19 2005, 21:51
|
Участник

Группа: Новичок
Сообщений: 19
Регистрация: 17-11-05
Пользователь №: 11 010

|
Вот решил осваивать на самых дешевых экземплярах. ---- Чем дешевле - тем хуже в освоении , тем больше нужно опыта для запуска и понимания чего от тебя хотят разрабы чипа. с ВЧ ябы советовал начать работать с RFM5000 модулем. Некритичен к монтажу , не имеет на борту микроконтроллера (большая преграда к пониманию ВЧ) , не программируется. Вобщем довольно тупое , но рабочее устройство. По крайней мере можно на его ногах увидеть что такое несущая и как она выгладет при расхождении частот кварца приемника и передатчика. Еслиб стоил он 1$ - делал бы на нем. Сейчас я немогу добится работы устройств CC2500 на расстоянии хотябы 10 см.. Про метры я уже молчу. Это зчто-то из области фантастики. Когда антенами касаешся - вижу осцилом несущую.. ... Былбы RFM5000 - горя незнал бы.. Хотя 2.4 ггц это не 433 мгц..
----
Когда я ИХ увидел первый вопрос как я ЭТО буду припаивать ) Но попробую на вышеизложенном методе(на плите), пока такое еще не пробовал ---
Припаивать просто - нужно изготовить сначала точнейшую печатку. Я делал в кореле строго по тем размерам которые пишутся в мануале. ПОсле этого лудим хорошим низкотемпературным припоем микруху и контакты. Затем кладем её на плату , позиционируем и очень медленно нагреваем промышленным феном ( если нет паяльника с горячим воздухом). Я сначала тренировался на простых деталях. Как только начнет плавится припой - держим еще 10 секунд и мееедленно выносим струю воздуха. Остужаем. Всё.
|
|
|
|
|
Nov 20 2005, 10:36
|
Участник

Группа: Новичок
Сообщений: 19
Регистрация: 17-11-05
Пользователь №: 11 010

|
Сейчас я немогу добится работы устройств CC2500 на расстоянии хотябы 10 см.. Про метры я уже молчу. --- Сам спросил - сам отвечу.. Ошибка была в том что после включения CC2500 мощность его передатчика всегда гдето - 55 дб.. Для того чтобы включилась полная моща - надо после инициализации девайза перед передачей подать в регистр PATABLE число с кажем FF ( +1дб) После этого асе заработало как часы на расстоянии метров и решились многие вопросы с качеством передвчи данных :-))))
Вообще разработчикам документации на этот чип надо поставить 2 балла. Или кол .. Чип элементтарно включается 3-мя командами - главное соблюдать последовательность действий. ВОт эту последовательность из 3-х команд и надо было просто описать в виде простых примеров не на сях или ассемблере - а прямо в мануале.. Для того чтобы понять что вперед надо подавать а что после - я убил целую неделю.. Разберусь до конца - сделаю некий FAQ для тех кто впервые взяд в руки этот чип. Там все просто !
|
|
|
|
|
Nov 21 2005, 00:24
|
Участник

Группа: Новичок
Сообщений: 19
Регистрация: 17-11-05
Пользователь №: 11 010

|
тихо..мирно..сам с собой.. я веду беседу :-)
-- Ура. Событие !!!!!!!!!!!!!!! - заработало все как часы. За время экспериментов (1 неделя) совершил тонну ошибок . Если кому интересно , могу доходчиво на русском языке ( не на СИ или ASM) выложить порядок запуска чипа. Некий Quick Start для новисов. На сегодня - чип работает на скорости 500к , на расстоянии 20 метров через ЖБ стены , посылает пакет из 2-х байт ( может до 255 за 1 раз) , контролирует CRC , если чего неправильно - выбрасывает пакет с минимальными затратами для ЦПУ по времени. .. Сейчас просто кайфую от простоты управления. Гениально просто , когда знаеш как :-))
|
|
|
|
|
Nov 21 2005, 06:29
|
Знающий
   
Группа: Свой
Сообщений: 775
Регистрация: 11-05-05
Пользователь №: 4 913

|
Цитата(Oleg_Lun @ Nov 21 2005, 03:24)  тихо..мирно..сам с собой.. я веду беседу :-)
-- Ура. Событие !!!!!!!!!!!!!!! - заработало все как часы. За время экспериментов (1 неделя) совершил тонну ошибок . Если кому интересно , могу доходчиво на русском языке ( не на СИ или ASM) выложить порядок запуска чипа. Некий Quick Start для новисов. На сегодня - чип работает на скорости 500к , на расстоянии 20 метров через ЖБ стены , посылает пакет из 2-х байт ( может до 255 за 1 раз) , контролирует CRC , если чего неправильно - выбрасывает пакет с минимальными затратами для ЦПУ по времени. .. Сейчас просто кайфую от простоты управления. Гениально просто , когда знаеш как :-)) Поделитесь радостью с другими  . Тут подкинули задачку, жду макетные платы как раз на СС2500. Чужой опыт пригодится. У меня, правда, контроллер 51.
|
|
|
|
|
Nov 21 2005, 07:57
|
Участник

Группа: Новичок
Сообщений: 19
Регистрация: 17-11-05
Пользователь №: 11 010

|
Вот алгоритм моих действий: -- Инициализация.
Передатчик.
1. Сгенерить код в Studio ВЫСТАВИТЬ РУКАМИ РЕГИСТРЫ : ДЛИНА ПАКЕТОВ FIXED КОЛИЧЕСТВО ПАКЕТОВ 2 CRC=1 (КОНТРОЛЬНАЯ СУММА ВКЛЮЧЕНА) AUTO FLUSF = 1 (АВТООПУСТОШЕНИЕ БУФФЕРА ЕСЛИ CRC НЕПРАВИЛЬНОЕ) IOCFG0=0x06 - Лог1 = начало пачки синхронизации , Лог0=Конец передачи пакета
2. занести таблицу в чип 3. УСТАНОВИТЬ МОЩНОСТЬ - В регистр PATABLE 0x3E занести значение 0xFF - +1дб 4. занести в FIFIO (0x3F) 2 БАЙТА 0x?? 5 Включить TX (0x35) 6 Проверять в цикле ногу FGO0 пока не появится 0 - конец пачки . 7 Очистить FIFO (0x3B) 8 Повторить с пункта 4 для следующих 2-х байт..
Приемник
1. Сгенерить код в Studio . Регистром IOCFG0 (0x02) ВЫСТАВИТЬ РУКАМИ РЕГИСТРЫ/БИТЫ В РЕГИСТРАХ конфигурации : ДЛИНА ПАКЕТОВ FIXED КОЛИЧЕСТВО ПАКЕТОВ 2 CRC=1 (КОНТРОЛЬНАЯ СУММА ВКЛЮЧЕНА) AUTO FLUSF = 1 (АВТООПУСТОШЕНИЕ БУФФЕРА ЕСЛИ CRC НЕПРАВИЛЬНОЕ) IOCFG0=0x06 - Лог1 = начало пачки синхронизации , Лог0=Конец приема пакета
2. занести таблицу в чип 3. Очистить FIFO (0x3A) 4. Включить прием (0x34) 6 В цикле контролировать ногу GDO0. Как только на ней лог1 - пришла синхронизация - идти дальше. Иначе ждать лог1 . 7 В цикле еще раз контролировать ногу GDO0 но ждать лог0 - окончание приема пакета. Если лог0 - идти дальше иначе идти пункт 7
8 СЧИТАТЬ РЕГИСТР RXBYTES(количество принятых байт которые лежат в FIFO). Если CRC несовпала то буффер будет пуст так как включено автоопустошение буффера если CRC не правильно (AUTOFLUSH=1) Если в эторм регистре 00 то идти на пункт 3 иначе идти дальше на считывание FIFO. 9. Считать FIFO (0xBF) 2 РАЗА 10. Повторить с пункта 3.
--- Это основной алгоритм. по которому ОНО работает прекрасно .
Далее - мои ошибки - Я сдуру юзал кварц софковый такой с надписью 26мгц 98г. На нем красная точка была. Такие кварцы негодятся. Точность кварца должна быть до 6-го знака. У меня стоит 26.601712 .. ПОйдет любой с такой точностью в диапазоне 26-27 мгц. дальше - СТУДИЯ НЕ ВЫСТАВЛЯЕТ АВТОМАТОМ ТАКИЕ ПАРАМЕТРЫ КАК ДЛИНА ПАКЕТА ИЛИ ФИКСИРОВАННАЯ ДЛИНА ПАКЕТА ИЛИ КОНФИГУРАЦИЯ НОГ GDOx.. После того как в студии расчитали все частоты и каналы и модуляции - сгенерить регистры. ЗАТЕМ В СТУДИИ ЕЩЕ РАЗ ПРОЙТИСЬ РУКАМИ ПО НАСТРОЙКАМ САМИХ РЕГИСТРОВ ( ЗАКЛАДКА ТАКАЯ ЕСТЬ REGISTER VIEV) И ВЫСТАВИТЬ РУКАМИ ТАКИЕ ПАРАМЕТРЫ КАК CRC enable/disable , Packet Lenght , AUTOFLUSH и тд.. Затем полученные значения регистров забить руками в сгенерированную ранее таблицу. Отличие от того что генерит студия и того что надо мягко удивят.. Далее - изворачиватся с 2-х сторонним монтажем нет смысла. Все прекрасно пашет на софковом текстолите на 1-стороней печатке. Причем с абы-как расположенными перемычками. Фоту печатки кину позже. Далее - после инициализации передатчика ОБЯЗАТЕЛЬНО ВЫСТАВИТЬ МОЖНОСТЬ ! Я это не делал и получил -55 дб после включения. Мощность ставится - в регистр по адресу 3E занести FF ПОка все.
|
|
|
|
|
Nov 21 2005, 15:26
|
Частый гость
 
Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964

|
Цитата(Oleg_Lun @ Nov 21 2005, 03:24)  тихо..мирно..сам с собой.. я веду беседу :-) Прошу прощения за долгое молчание, Инет только на работе, да и тут электричества цельный день небыло. Рад, что у Вас все получилось. Во второй версии Даташита Chipcon немного исправился, чуть подробнее и понятнее написали, но уже поздно, мы их и так поняли Вот на всякий случай архив с примерами, если кто не нашел на их сайте
SmartRF04DK_Examples_Libraries_1_1.zip ( 187.17 килобайт )
Кол-во скачиваний: 2832. По ним реально легко алгоритм инициализации и работы прочитать, все по-порядку и совпадает с опытом. ----- На сегодня - чип работает на скорости 500к , на расстоянии 20 метров через ЖБ стены ----- Хотелось бы узнать на какую антенну? У меня на диполь (в виде петли периметром ~12см) при максимальной мощности (+1 дБм) в кирпичном здании не более 10 м. На улице ~20, но нужно ориентировать точно антенны.
|
|
|
|
|
Nov 21 2005, 15:38
|
Частый гость
 
Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964

|
Цитата(Oleg_Lun @ Nov 19 2005, 18:02)  Да , в догонку еще хотел бы спросить про некоторые регистры. Что делают :
WHITE_DATA
APPEND_STATUS Если я правильно понял Даташит  то WHITE_DATA это приведение (аппаратное) сигнала к виду без постоянной составляющей - облегчает режим работы передатчика, должно быть включено с обоих сторон (и на приеме и на передаче), APPEND_STATUS - включает в принятый пакет два байта дополнительно в конце - уровень сигнала RSSI, и качество сигнала (насколько легко аппаратно декодировать) LQI. CRC_AUTOFLUSH - автоматическое опустошение буфера при неправильной контрольной сумме пакета (считается аппаратно). Все фичи на мой взгляд очень полезные.
|
|
|
|
|
Nov 21 2005, 19:21
|
Участник

Группа: Участник
Сообщений: 57
Регистрация: 30-08-05
Пользователь №: 8 094

|
Разберусь до конца - сделаю некий FAQ для тех кто впервые взяд в руки этот чип ---- Поддерживаю эту идею  Как раз поможет таким как я  2 ksv198 Подскажите пожалуйста как организовать SPI между модулем и атмелом? куда подключать на атмеле выводы с CC2500: SI, SCLK, SO, CSn?
--------------------
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|