CC1101 не дергает GDO0

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 160
Зарегистрирован: Чт авг 13, 2009 08:22:53
Откуда: Vinnitsa

Сообщение masterpc »

Здравствуйте, уважаемые форумчане!
Есть задача - управление трансивером СС1101 с помощью микроконтроллера STM8S. За основу взял готовые библиотеки С++ panstamp_arduino_1.0. и переделал их под С

При инициализации модуля вижу реакцию модуля по выводу GDO0. Но при попытке начать передачу зависаю на

Код: Выделить всё

 // Wait for the sync word to be transmitted
  while(!GDO0_HI);
Все настройки один в один как в библиотеке panstamp. Кто сталкивался с подобной задачай или имел дело с этими модулями помогите пожалуйста. Сишник и хидер прикрепил.
Вложения
cc1101.h
(18.59 КБ) 696 скачиваний
cc1101.c
(13.98 КБ) 703 скачивания
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3793
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Я работал с этими трансиверами и по применению младшего брата cc1101 (именно cc110L) у меня здесь есть статья с исходником:
http://radiokot.ru/circuit/analog/receiv_transmit/33/
Функционирование выводов GDOx и прерываний от них у этих трансиверов идентичное и задается в конфигурации самого чипа. Проще всего это сделать скачав SmartRF Studio от TI. Разбираться с Вашим кодом мне, извините, некогда. Могу предложить посмотреть мой код из статьи, если будут вопросы по нему - отвечу. На Вашем месте я-бы начал с проверки конфигурации вывода GDO0 в конфигурации чипа для достижения желаемого функционирования и проверки конфигурации соответствующего вывода МК под нужный фронт прерывания по входу.
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 160
Зарегистрирован: Чт авг 13, 2009 08:22:53
Откуда: Vinnitsa

Сообщение masterpc »

Спасибо за ответ!
Проверил конфигурацию GDO0 - все ок:
Asserts when sync word has been sent / received, and de-asserts at the end of the packet. In RX, the pin will also deassert
when a packet is discarded due to address or maximum length filtering or when the radio enters
RXFIFO_OVERFLOW state. In TX the pin will de-assert if the TX FIFO underflows.


дальше, настроил GDO2 на выход тактовой/128, посмотрел осциллографом тактовую - все ок. Кварц тикает на 26МГц.

Что еще можно проверить?
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 160
Зарегистрирован: Чт авг 13, 2009 08:22:53
Откуда: Vinnitsa

Сообщение masterpc »

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

Вот мой код отправки данных:

Код: Выделить всё

byte CC1101_sendData(CCPACKET_Type *packet)
{
  byte marcState;

  // Enter RX state
  setRxState();

  // Check that the RX state has been entered
  while ((readStatusReg(CC1101_MARCSTATE) & 0x1F) != 0x0D){};
  delay(ms,2);   

  // Set data length at the first position of the TX FIFO
  writeReg(CC1101_TXFIFO,  CCPACKET.length);
  // Write data into the TX FIFO
  CC1101_writeBurstReg(CC1101_TXFIFO, CCPACKET.data, CCPACKET.length);

  // CCA enabled: will enter TX state only if the channel is clear
  //cmdStrobe(CC1101_STX);
  setTxState();

  // Check that TX state is being entered (state = RXTX_SETTLING)
  marcState = readStatusReg(CC1101_MARCSTATE) & 0x1F;
  if((marcState != 0x13) && (marcState != 0x14) && (marcState != 0x15))
  {
    setIdleState();       // Enter IDLE state
    flushTxFifo();        // Flush Tx FIFO
    setRxState();         // Back to RX state
    return false;
  }

  // Wait for the sync word to be transmitted
  while(!GDO0_HI);

  // Wait until the end of the packet transmission
  while(GDO0_HI);

  // Enter back into RX state
  setRxState();

  // Check that the TX FIFO is empty
  if((readStatusReg(CC1101_TXBYTES) & 0x7F) == 0)
    return true;

  return false;
}
CCPACKET.length никак не определен, но в настройках указано

Код: Выделить всё

#define CC1101_DEFVAL_PKTLEN     0xFF        // Packet Length
#define CC1101_DEFVAL_PKTCTRL1   0x06        // Packet Automation Control
#define CC1101_DEFVAL_PKTCTRL0   0x05        // Packet Automation Control
Подтолкните пожалуйста к осмыслению.
Реклама
Эиком - электронные компоненты и радиодетали
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 160
Зарегистрирован: Чт авг 13, 2009 08:22:53
Откуда: Vinnitsa

Сообщение masterpc »

есть положительные сдвиги! нужно было указывать длинну пакета. Сейчас второй аналогичный трансивер рядом засветил светодиод, что что-то да получил. Иду открывать шампанское, вернее валерьянку ))))
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3793
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

masterpc писал(а):Может возникнуть затык в случае не соответсвия отправляемойдлины пакета установленному в настройках?
Может. Фактическая длина пакета при Ваших настройках должна присутствовать в передаваемом пакете. Если декларируемая длина меньше фактически переданной, то GDO0 бе будет выставлен пока не примутся все байты пакета. Если фактичекая длина превышает CC1101_DEFVAL_PKTLEN то весь пакет будет удален
из FIFO. Посмотрите логическим анализатором или осциллографом что конкретно засылается в передатчик и дайте сюда осциллограмму.
masterpc писал(а):CCPACKET.length никак не определен, но в настройках указано
Это плохо - параметр должен быть определен.
masterpc писал(а):

Код: Выделить всё

#define CC1101_DEFVAL_PKTLEN     0xFF        // Packet Length
#define CC1101_DEFVAL_PKTCTRL1   0x06        // Packet Automation Control
#define CC1101_DEFVAL_PKTCTRL0   0x05        // Packet Automation Control
Эти настройки правильные.
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 160
Зарегистрирован: Чт авг 13, 2009 08:22:53
Откуда: Vinnitsa

Сообщение masterpc »

Осцил у меня старичок С1-83, показать не могу. Поставил проверку на фактическое значение длины пакета - все отлично. Но есть одно но. Сигнал крайне не стабилен. Может быть это связано с тем, что при переделке библиотеки с 868 на 433 я только частоту поменял и все? Там ведь еще настройки девиации и полосы. Поставил SmartRF Studio пытаюсь разобраться, что еще нужно поменять. Полскажите пожалуйста критические параметры для смены частоты.
Друг Кота
Аватара пользователя
Сообщения: 3793
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Конечно, просто сменив частоту с 900 мгц на 430 работать будет плохо потому, что полоса пропускания приемника будет слишком широкой для низкочастотного диапазона. Для стабилности следует правильно соотнести полосу пропускания с видом модуляции и скоростью передачи. Разбирайтесь со SmartRF Studio, она
делает оптимальные настройки приемника и передатчика авоматически по запросу данных от пользователя.
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 160
Зарегистрирован: Чт авг 13, 2009 08:22:53
Откуда: Vinnitsa

Сообщение masterpc »

Ser60 писал(а):Конечно, просто сменив частоту с 900 мгц на 430 работать будет плохо потому, что полоса пропускания приемника будет слишком широкой для низкочастотного диапазона. Для стабилности следует правильно соотнести полосу пропускания с видом модуляции и скоростью передачи. Разбирайтесь со SmartRF Studio, она
делает оптимальные настройки приемника и передатчика авоматически по запросу данных от пользователя.
Для начала решил с назначением регистров разобраться, т.к просто замена в SmartRF Studio частоты на 433 не увенчалась успехом. Вообще на какие параметры нужно обратить внимание при перестройке частоты?
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 160
Зарегистрирован: Чт авг 13, 2009 08:22:53
Откуда: Vinnitsa

Сообщение masterpc »

Пытаюсь настроить правильно трансивер. При приеме трансивер не выходит на RX state. Зависаю на этой строке:

Код: Выделить всё

// Check that the RX state has been entered
  while ((readStatusReg(CC1101_MARCSTATE) & 0x1F) != 0x0D){};
Попробовал уменьшить мощность на -30дБ, стал зависать на несколько секунд позже. В чем может быть проблема?
Друг Кота
Аватара пользователя
Сообщения: 3793
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

masterpc писал(а):на какие параметры нужно обратить внимание при перестройке частоты?
Подставьте свои параметры по частоте, виду модуляции и скорости в Studio, она сама вычислит нужные настройки приемно-передаыущего тракта. Посмотрите потом в правой колонке параметров какие показаны красным цветом - те Studio и изменила. См картинку
http://radiokot.ru/circuit/analog/recei ... /33/04.png
masterpc писал(а):Попробовал уменьшить мощность на -30дБ, стал зависать на несколько секунд позже. В чем может быть проблема?
Мощность при переходе в режим приема вообще не при чем. Мне кажется странной Ваша фунция CC1101_sendData() выше. Зачем передачу пакета начинать с перевода трансивера в режим приема? Если хотите, чтобы он переходил в режим приема по приему пакета атоматически, для этого есть сообветствующий байт в настройках конфигурации. Еще раз рекомендую посмотреть мой исходник.
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 160
Зарегистрирован: Чт авг 13, 2009 08:22:53
Откуда: Vinnitsa

Сообщение masterpc »

Запустил! Еще и еще и еще раз поковырялся в SmartRF Studio, все запустил. Насчет функции отправки - это была готовая библиотека от panstamp. Я вначале тоже как то отнесся скептически, но потом нашел на форумах, что такой порядок имеет место быть.
Спасибо большое!!! :beer:
Друг Кота
Аватара пользователя
Сообщения: 3793
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Поздравляю! Тем не менее, у себя в программе я заходил в режим передачи без предварительного захода в режим приема, поэтому мне и кажется странной эта функция. Не думаете написать статью сюда про Ваш проект?
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 160
Зарегистрирован: Чт авг 13, 2009 08:22:53
Откуда: Vinnitsa

Сообщение masterpc »

Спасибо!!!
Насчет статьи не думал, возможно напишу :)
Ответить

Вернуться в «Периферия»