Программирование cc1101

CC1101-это недорогой приемопередатчик sub 1GHz. Предназначенный для беспроводных приложений с низкой мощностью. Схема в основном используется для промышленных, научных и медицинских полос частот (ISM) и устройств ближнего действия (SRD), работающих в диапазоне 315, 433, 868 и 915 МГц, и может быть легко запрограммирована для работы на других частотах, таких как диапазон 300 ~ 348 МГц, 387 ~ 464 и 779 ~ 928 МГц. CC1101-это улучшенная и совместимая с кодом версия CC1100 RF TRX. Основные улучшения CC1101 включают в себя паразитный отклик. Усиление фазового шума ближнего действия. Соседнего канала (ACP). Более высокий уровень насыщения. Лучшую выходную мощность и расширенные полосы частот работы.

Структурная схема приемопередатчика CC1101 RF

Модуль использует микросхему CC1100, работающую на 433 МГц , 868 МГц, 915 МГц полосы ISM. Содержит модулятор. Приемник с демодулятором. Усилитель мощности. Кварцевый генератор и регулятор преамбулы и код CRC. Генерируемый автоматически. Который можно легко настроить через SPI (последовательный периферийный интерфейс).

Конфигурация PIN-кода

Дальность передачи: 300-500 метров (в зависимости от конкретной ситуации окружающей среды и скорости передачи данных в бодах и т. Д.)

Необходимые компоненты

  • Микроконтроллер Arduino, TEENSY, ATMEGA328 16/12, ATmega32U4 16/8/ MHz, ESP8266, ATMEGA250 16 MHz. ATSAM3x8E, ATSAM21D. ATTINY85 16/8 MHz
  • Модуль прорыва CC1100 / CC1101
  • Припаяйте меньше доски хлеба
  • Соединительная проволока / DuPont Wire

Руководство по монтажу

Исходный код передатчика

#включить
#включить
CC1101 cc1101;
// Светодиод подключен к выходу Arduino 4 (физический вывод PanStamp 19)

#определить LEDOUTPUT 13
// счетчик для получения инкремента в каждом цикле
счетчик байтов;
байт b;
байт syncWord = 199;
пустотная мигалка(){
digitalWrite(LEDOUTPUT, HIGH);
задержка(100);
digitalWrite(LEDOUTPUT, LOW);
задержка(100);
пустая настройка()
Serial.begin(9600);
Serial.println();
// настройка выхода мигалки
pinMode(LEDOUTPUT, OUTPUT);
digitalWrite(LEDOUTPUT, LOW);
// мигните один раз. Чтобы сигнализировать о настройке
мигалка();
// сброс счетчика
счетчик=0;
Serial.println();
// инициализация радиочастотного чипа
cc1101.init();
cc1101.setSyncWord(&syncWord, false);
cc1101.setCarrierFreq(CFREQ_433);
cc1101.disableAddressCheck();
//cc1101.setTxPowerAmp(PA_LowPower);
задержка(1000);
Serial.print(); //cc1101=0
Serial.println(cc1101.readReg(CC1101_PARTNUM, CC1101_STATUS_REGISTER));
Serial.print(); //cc1101=4
Serial.println(cc1101.readReg(CC1101_VERSION, CC1101_STATUS_REGISTER));
Serial.print();
Serial.println(cc1101.readReg(CC1101_MARCSTATE, CC1101_STATUS_REGISTER) & 0x1f);
Serial.println();
//Serial.println(
void send_data() {
Данные CCPACKET;
data.length=10;
byte blinkCount=счетчик++;
data.data[0]=5;
data.data[1]=blinkCount;data.data[2]=0;
data.data[3]=1;data.data[4]=0;
//cc1101.flushTxFifo ();
Serial.print();
Serial.println(cc1101.readReg(CC1101_MARCSTATE, CC1101_STATUS_REGISTER) & 0x1f);
if(cc1101.sendData(data)){
Serial.print(blinkCount,HEX);
Serial.println();
мигалка();
}остальное{
Serial.println();
мигалка();
мигалка();
пустая петля()
send_data();
задержка(500);

Исходный код приемника

#включить
#включить
// Светодиод подключен к выходу Arduino 4 (физический вывод PanStamp 19)

#определить LEDOUTPUT 4
// Подключение к аппаратному чипу CC1101 ВЧ-чип
CC1101 cc1101;
байт b;
байт i;
байт syncWord = 199;
длинный счетчик = 0;
байт чан = 0;
// флаг получения беспроводного пакета

boolean packetAvailable = false;
void blinker() {
  digitalWrite(LEDOUTPUT, HIGH);
  задержка(100);
  digitalWrite(LEDOUTPUT, LOW);
  задержка(100);
/* Обрабатывать прерывание от CC1101 (INT0) gdo0 на выводе 2 */
void cc1101signalsInterrupt(void) {
  // установите флаг. Указывающий на то. Что пакет доступен
  packetAvailable = true;
пустая настройка()
  Serial.begin(9600);
  Serial.println();
  // настройка выхода мигалки
  pinMode(LEDOUTPUT, OUTPUT);
  digitalWrite(LEDOUTPUT, LOW);
  // мигните один раз. Чтобы сигнализировать о настройке
  мигалка();
  // инициализация радиочастотного чипа

  cc1101.init();
  cc1101.setSyncWord(&syncWord, false);
  cc1101.setCarrierFreq(CFREQ_433);
  cc1101.disableAddressCheck(); //если он не указан. То будет отображаться только
  //cc1101.setTxPowerAmp(PA_LowPower);
  Serial.print(); //cc1101=0
  Serial.println(cc1101.readReg(CC1101_PARTNUM, CC1101_STATUS_REGISTER));
  Serial.print(); //cc1101=4
  Serial.println(cc1101.readReg(CC1101_VERSION, CC1101_STATUS_REGISTER));
  Serial.print();
  Serial.println(cc1101.readReg(CC1101_MARCSTATE, CC1101_STATUS_REGISTER) & 0x1f);
  attachInterrupt(0, cc1101signalsInterrupt, ПАДЕНИЕ);
  Serial.println();
void ReadLQI()
  байт lqi = 0;
   значение байта = 0;
  lqi = (cc1101.readReg(CC1101_LQI, CC1101_STATUS_REGISTER));
  значение = 0x3F (lqi & 0x3F);
  Serial.print();
  Serial.println(значение);
void readRSSI()
  байт rssi = 0;
   значение байта = 0;
  rssi = (cc1101.readReg(CC1101_RSSI, CC1101_STATUS_REGISTER));
  если (rssi >=> 128)
    значение = 255 rssi;
    значение /= 2;
    значение += 74;
  ещё
    значение = rssi / 2;
    значение += 74;
  Serial.print();
  Serial.println(значение);
пустая петля()
  если (packetAvailable) {
    Serial.println();
    // Отключить прерывание беспроводного приема
    detachInterrupt(0);
    readRSSI();
    ReadLQI();
    // очистить флаг
    packetAvailable = false;
    Пакет CCPACKET;
    если (cc1101.receiveData(&packet) >> 0) {
      если (!packet.crc_ok) {
        Serial.println();
      }
      if (packet.length > 0) {
        Serial.print();
        Serial.print(packet.length);
        Серийнаяпечать();
        для (int j = 0; j packet.length; j++) {
          Serial.print(packet.data[j], HEX);
          Serial.print();
        }
        Serial.println();
      }
    // Включить прерывание беспроводного приема
    attachInterrupt(0, cc1101signalsInterrupt, ПАДЕНИЕ);

Загрузки

  • Скачать CC1101 Arduino Code Library | ZIP
  • Скачать спецификацию трансивера CC1101 Datasheet | PDF
  • Скачать Руководство по модулю CC1101 | PDF