|
|
  |
Мои мучения с CC2500 |
|
|
|
Jul 1 2009, 16:35
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
Цитата(zheka @ Jun 22 2009, 06:32)  А помогли действительно задержки. Думаю вам поможет проверка статусного байта. Детальнее... Статусный байт Байт статуса трансивера можно получать на выводе SO при каждой посылке командного строба ,адресного байта или записи байта данных. Также байт статуса можно принимать при записи данных в регистры при Burst доступе. Статусный байт дает возможность определять готовность SPI к обмену , текущий режим ,флаги переполнения Tx FIFO или Rx FIFO,количество свободных байт в Tx FIFO буффере при передаче или оставшихся байт в Rx FIFO буффере при приеме . Если данные записываются в трансивер ,статусный байт возвращается при каждой посылке адресного байта,командного строба или данных . Если данные читаются из трансивера , статусный байт возвращается при посылке адресного байта или командного строба. Возможные значения байта CHIP_RDY 7 CHIP_RDYn Бит готовности SPI к обмену, необходимо дожидаться появления лог. 0 6:4 STATE[2:0] Индикатор текущего состояния трансивера 000 IDLE режим 001 RX режим 010 TX режим 011 FSTXON включен частотный синтезатор ,начата передача пакета 100 CALIBRATE производится калибровка частотного синтезатора 101 SETTLING PLL is settling 110 RXFIFO_OVERFLOW RX FIFO переполнен 111 TXFIFO_UNDERFLOW TX FIFO пуст 3:0 FIFO_BYTES_AVAILABLE[3:0] если значение FIFO_BYTES_AVAILABLE[3:0]=15 количество свободных байт RX FIFO в режиме RX не менее 15 или количество оставшихся байт в TX FIFO в режиме TX не менее 15 Цитата Ладно, установил я длину 256 байт, откуда мне их читать на стороне приема? ОГбычно данные берутся из буфера, который равен 64 байтам. Опять поможет статусный байт Детальнее... Байт длины пакета используется для определения длины пакета данных ,как для передатчика ,так и для приемника. Тоесть передатчик включит ровно столько данных в пакет ,сколько будет указано в регистре PKTLEN и от количества данных в Tx FIFO передатчика это не зависит. Если необходимо передавать пакеты переменной длины ,нужно установить PKTLEN=255 (0xFF) и самостоятельно первым байтом данных указывать длину пакета. Следует учесть ,что при передаче пакета произвольной длины ,размер пакета равен размер данных+1 байт(длины пакета) В итоге есть три способа указать длину пакета. 1 Фиксированная длина пакета PKTCTRL0.LENGTH_CONFIG=0,длина пакета указывается в регистре PKTLEN 2 Произвольная длина пакета PKTCTRL0.LENGTH_CONFIG=1,длина пакета указывается первым байтом сразу после синхрослова. 3 Бесконечная длина пакета PKTCTRL0.LENGTH_CONFIG=2 Двух-байтный CRC данных может быть аппаратно подсчитан и включен в передающий пакет при установке PKTCTRL0.CRC_EN =1. Если в приемнике также установлен PKTCTRL0.CRC_EN =1 ,в нем производиться подсчет принятых данных и проверка на совпадение CRC. Если CRC не совпал и PKTCTRL1.CRC_AUTOFLUSH=1 пакет не будет размещен в буффере приемника ,при этом следует учесть ,что при установке PKTCTRL1.CRC_AUTOFLUSH=1 , размер данных в пакете не может быть более 64 байт.Передающий пакет из МК в трансивер состоит из байта длины пакета (если установлен PKTCTRL0.LENGTH_CONFIG=1) и данных. Если PKTCTRL0.LENGTH_CONFIG=0 количество данных в пакете фиксировано и байт длины пакета добавляется аппаратно.
|
|
|
|
|
Jul 2 2009, 03:13
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
Цитата Если PKTCTRL0.LENGTH_CONFIG=0 количество данных в пакете фиксировано и байт длины пакета добавляется аппаратно Фиксировано и равно тому что указано в PKTLEN? Если да, то зачем тогда аппаратная добавка длины ? Как работает приемник, то есть как он определяет длину пакета в этом случае - ориентируется ли он на PKTLEN при приеме, или анализирует саму принимаемую информацию? Если PKTLEN и байт длины не совпадают, что тогда?
|
|
|
|
|
Jul 4 2009, 09:17
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
Цитата(zheka @ Jul 2 2009, 07:13)  Фиксировано и равно тому что указано в PKTLEN? Если да, то зачем тогда аппаратная добавка длины ? Да я и сам не против бы задать такой вопрос,по идее в даташите длина пакета присоединяется опционально и при PKTCTRL0.LENGTH_CONFIG=0 длины пакета в пакете не должно быть. Хотя однозначного ответа в даташите на этот вопрос я так и не нашел. У меня еще камни "родные" чипконовские  ,может ревизия не та ,может не до конца разобрался с настройками. В целом остановился на переменной длине пакета ,думаю так проще приемнику. Цитата Как работает приемник, то есть как он определяет длину пакета в этом случае - ориентируется ли он на PKTLEN при приеме, или анализирует саму принимаемую информацию? Если PKTLEN и байт длины не совпадают, что тогда? На PKTLEN при приеме ориентируется ,индикаторы RSSI и LQI закидывает фиг знает куда, это точно  , поэтому я опять остановил свой выбор на переменной длине. Ничего же не мешает передавать переменную длину фиксированно  ,зато RSSI и LQI четко сидят на хвосте. Цитата Почему RSSI и LQI в статусных регистрах отличаются от тех, что приходят с пакетом? Какие правильнее использовать? Было у меня тоже такое ,правильнее те ,что с пакетом идут. Там при изненении режима или при переходе в режим IDLE есть целый ряд регистров которые могут затираться, сейчас точно не вспомню ,нада даташит покурить. Цитата Правильно ли я делаю? : 1.Строб SIDLE 2. Изменяю регистр FREQ0 3. Строб SCAL Правильно,я допустим выводил содержание пакета и индикаторы на терминалку и подстраивал приемник, ,добиваясь наилучшего LQI ,неплохо получалось даже на безродных кварцах. Так что с этим проблем не должно быть. Цитата поправлю = FSTXON - просто запущен синтезатор Вы правы ,думаю FSTXON это готовность синтезатора.
|
|
|
|
|
Jul 8 2009, 08:07
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
Дальность проверял только в помещении. Точную подстройку чатсоты не производил. на 6 метрах периодически теряется несущая если между приемником и передатчиком собственное тело. Выхожу на балкон, приседаю - что с телом, что без тела - периодически теряется несущая. На кухне - препятствие - бетонная стена и деревянная дверь, расстояне 7 метров тоже периодически теряется несущая. Если не приседать (препятствие стекло) то получается 7,5 м дальность. На бельевые веревки не залазил ))) Целостность пакетов при присутствующей несущей не проверял, но подозреваю, что если постоянно меняется LQI и RSSI, то пакеты все же целы. Тем более, у меня какой-то глюк в программе, если хоть один пакет теряется, то информация на экране перестает обновляться, так что разрыв связи ловлю четко. Антенна - петля на плате. Все осстальное: Код / Chipcon // Product = CC2500 // Chip version = E // Crystal accuracy = 10 ppm // X-tal frequency = 26 MHz // RF output power = 0 dBm // RX filterbandwidth = 551.067708 kHz // Phase = 1 // Datarate = 250.240707 kbps // Modulation = (7) MSK // Manchester enable = (0) Manchester disabled // RF Frequency = 2432.999988 MHz // Channel spacing = 199.788952 kHz // Channel number = 0 // Optimization = Sensitivity // Sync mode = (3) 30/32 sync word bits detected // Format of RX/TX data = (0) Normal mode, use FIFOs for RX and TX // CRC operation = (1) CRC calculation in TX and CRC check in RX enabled // Forward Error Correction = (0) FEC disabled // Length configuration = (1) Variable length packets, packet length configured by the first received byte after sync word. // Packetlength = 255 // Preamble count = (2) 4 bytes // Append status = 1 // Address check = (0) No address check // FIFO autoflush = 1 // Device address = 0 Единственное - все элементы у меня 0805, но они на кварце, на фильрах по питанию. У меня нет цепи согласования с антенной (для PCB она по рефдезайну не требуется), потому и нет критичных к типоразмеру элементов. Тут кому-то говорили, что мол в таком случае можно использовать и 0805. Вопрос - если у меня передатчик настроен на +1 dbm, то при расположении приеника ну практически вплотую, при ориентации антенн друг на друга какой RSSI должен быть?
Сообщение отредактировал zheka - Jul 8 2009, 08:10
|
|
|
|
|
Jul 10 2009, 14:04
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
Цитата(zheka @ Jul 8 2009, 12:07)  Тем более, у меня какой-то глюк в программе, если хоть один пакет теряется, то информация на экране перестает обновляться, так что разрыв связи ловлю четко. Дайте угадаю ,у вас даже при включении питания связь устанавливается через раз В целом дальность никакая Цитата // RX filterbandwidth = 551.067708 kHz // Phase = 1 // Datarate = 250.240707 kbps // Modulation = (7) MSK Вот это я и ожидал увидеть,так сказать неуспели настроить камень,зато газуем на полную Для начала сделайте FSK ,она менее привередлива к точности частоты , RX filterbandwidth около 200кгц чем шире полоса ,говоря простыми словами ,тем хуже прием ,когда поймаете сигнал ,сможете сузить ,ну естественно не меньше чем сама девиация ,ну и скорость допустим 10kbps. Примерно на этих настройках сможете получить оптимальное соотношение скорости и дальности. Цитата Единственное - все элементы у меня 0805, но они на кварце, на фильрах по питанию. У меня нет цепи согласования с антенной (для PCB она по рефдезайну не требуется), потому и нет критичных к типоразмеру элементов. Тут кому-то говорили, что мол в таком случае можно использовать и 0805. Да ,типоразмер здесь не важен. Саму антенну лучше делать по волновому сопротивлению близким ко входу трансивера или через балун. хотя это даст процентов 10-20 улучшения ,так что сней можно играться на последнем этапе. Цитата Вопрос - если у меня передатчик настроен на +1 dbm, то при расположении приеника ну практически вплотую, при ориентации антенн друг на друга какой RSSI должен быть? В среднем 60-70 при этом постоянно менялось ,наверное из за отраженых сигналов.
|
|
|
|
|
Jul 10 2009, 15:11
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
Цитата Дайте угадаю ,у вас даже при включении питания связь устанавливается через раз Нет с этим все ОК Цитата Вот это я и ожидал увидеть,так сказать неуспели настроить камень,зато газуем на полную Здешний обитатель ks148 писал что месяц убитл на попытки запустить на частоте 9600 бод. ПОлучалась лажа , которая чудесным образом исчезла при включении 250 кбод. Этим я и руководствовался. Цитата В среднем 60-70 при этом постоянно менялось ,наверное из за отраженых сигналов. Таки вы меня путаете. У меня рекорд RSSI при расположени вплотную - 102 (в десятичном формате), а вы пишете, что 60-70 и при этом называете мою дальность никакой.
|
|
|
|
|
Jul 10 2009, 16:01
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
Цитата(zheka @ Jul 10 2009, 19:11)  Таки вы меня путаете. У меня рекорд RSSI при расположени вплотную - 102 (в десятичном формате), а вы пишете, что 60-70 и при этом называете мою дальность никакой. Зато у меня LQI от 0 до 5 Если сигнал будет слабым ,но достаточно чистым ,тоесть качественным ,приемник возьмет его без проблем. Я писал выше ,что лучше опираться на LQI. А хорошая дальность для этих трансиверов ,это когда они будут брать по всей квартире из любой точки,с любой направленостью антенны ,со всеми препятствиями какие могут быть в квартире ,стены ,шкафы и люди в придачу. Я свой трансивер даже в микроволновку запихнул  и ходил кругами ,чтобы поймать положение при котором трансивер иногда пропускал пакеты. По крайней мере это то ,что я смог добиться от них ,возможно они еще лучше лупят. Цитата Здешний обитатель ks148 писал что месяц убитл на попытки запустить на частоте 9600 бод. ПОлучалась лажа , которая чудесным образом исчезла при включении 250 кбод. Этим я и руководствовался. Чем выше скорость ,тем хуже дальность.У ks148 наверное не все удачно пошло ,как по софту так и по железу.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|