Подключение трансивера на CC1101 к Arduino
- Войдите на сайт для отправки комментариев
Чт, 28/06/2012 - 13:28
Доброго времени суток! Заказал себе 2 модуля трансивера на базе CC1101 (вот viewitem.eim.ebay.ru/2PCS--Wireless-RF-Transceiver-Module-433Mhz-CC1101-CC1100-/260915767551/item) и немного не понимаю, как их подключить.
1) Модули 3.3в, нужен преобразователь уровней. Можно просто воспользоваться делителем напряжения для линий из дуины в модуль (Slave In, Slave Select, Clock, Vcc) и напрямую подключить линию из модуля в дуину (slave out)?
2)Совсем не понял как посылать и принимать данные, всяческое изменения регистров, SmartRF Studio и прочее далеки от моего понимания :-(
Если кто-нибудь знает как работать с этой штукой (или CC1100, они почти аналогичны), подскажите? Заранее спасибо.
Промучился с этой штукой, почти ничего не добился, хотябы подключил и работает (отсылает статус-байты)
Чтобы сконфигурировать ее, получил значения с SmartRF Studio, загнал в массив [адресс][значение]
Чтобы записать, надо "наложить на адресс маску 0х00, а чтобы считать 0х80". Наложить маску - это как. Насколько я понял из даташита, то первый байт отправляемый по СПИ дожен выглядеть так [байт чтения\записи][байт одиночная запись\бурст запись][адресс]. 0-запись, 1 - чтение; 0-1 байт, 1-бурст. Т.о для чтения одного байта надо к его адресу прибавить 0x80, для записи одного - 0x00, для бурст соответсвенно 0xC0 и 0x40.
Вот так я делаю:
По идее, должен отсылать - но никак, токопотребление не возрастает. ЧТо я неправильно делаю?
До сих пор не получил результат. Как бы получается записывать регистры, вроде все понял, но постоянно статус-байт возвращает "TX FIFO has underflowed. Acknowledge with SFTX". Как-то получалось, что возвращалось и режим TX, RX, Fast Tx ready, но редко. В основном TX FIFO has underflowed.
Ставлю длина пакета фиксированная, 1 байт, Ограничения TX FIFO тоже 1 байт. Даташит утверждает, что Underflowed возникает при кол-ве байт ниже ограничения. Но ведь я записываю туда байты. Пишу:
SPI.transfer(0x3F | 0x40);
SPI.transfer(байт);
А все равно underflowed. В чем может быть причина? Я неправильно пишу в регистры?
Кажется что-то есть... По прежнему пишет "TX FIFO underflowed", но судя по току (16мА, как раз ток передачи при 0Дб) передача идет. Что немного странно. Идет и с фиксированной, и с переменной длиной пакета.
Код (пока что кривой и отладочный):
Странно, я его почти не менял с предыдущего раза. А тут возьми и заработай. Я только не 1 байт стал писать, а МНОГО!
можно узнать чем все закончилось ?
Спасибо за код, помог начать разбираться с таким же устройством. Появились вопросы:
- У CC1101 согласно документации 47 регистров для конфигурирования (address 0 to address 0x2E), вы записываете 50.
- Строки кода 134-136 вообще выполняются когда-либо?
- В цикле перед вызовом WrReg вывод SS прижимается, внутри WrReg он прижимается еще раз и так же повторно вы его подтягиваете внутри функции и после выхода из нее.
- Вы устанавливаете BURST бит, но при этом используете single access. Смысл?
Вдруг кому еще интересно - есть резульат! Все попытки пообщаться с устройством через готовую SPI (
#include <SPI.h>
) библиотеку успехом не увенчались - получаемые данные ничего общего с тем, что ожидалось, не имели. Сегодня решил руками реализовать протокол по даташиту, благо там все элементарно. И вуаля! Девайс отвечает именно теми данными, которые описаны в даташите. Пока реализована только возможность чтения из регистров, но дальше уже все тривиально! Почему не работает стандартный SPI посмотрю, как только придет логический анализатор.UPDATE.
По поводу SPI думаю, что все банально - так делать нельзя просто:
177
SPI.transfer(_Adr | 0x40);
//Пишим адрес и маску бурст записи
178
SPI.transfer(_Val);
//Пишим значения
Таким образом мы делаем два отдельных посыла, а не один из адреса и значения, поэтому и получаем фигню. Как будет время, перепишу обратно код на использование SPI библиотеки - использование аппаратных возможностей все же лучше, чем софтовая их реализация. Но для понимания работы SPI было интересно. Ваш Капитан Очевидность.
Короче, я в тупике - сплошной секс слепых в крапиве. Информации куча, но поймать сигнал от беспроводного датчика погодной станции не удается. Все, что я вижу, это скачки RSSI в момент передачи. Прерывание на прием пакета не срабатывает. Оно с какой то радости срабатывает при инициализации. Код ниже. Если кто-то может хоть что-то подсказать, буду рад. И еще - библиотека SPI работать так и отказалась - остался на софт реализации протокола.
По поводу SPI думаю, что все банально - так делать нельзя просто:
177
SPI.transfer(_Adr | 0x40);
//Пишим адрес и маску бурст записи
178
SPI.transfer(_Val);
//Пишим значения
Таким образом мы делаем два отдельных посыла, а не один из адреса и значения, поэтому и получаем фигню.
Это одно и то же. SPI не предполагает каких либо сигналов между двумя посылами.
Вероятнее всего, Вы просто не угадали с режимом: в SPI масса настроек (скорость, порядок следования битов, фаза синхросигнала, по какому фронту происходит запись и чтение). Коль изучили дэйташит на девайс, сможете понять, какого именно режима он требует, и установить в этот режим SPI контроллер Ардуино.
Между может и не предполагает, а вот в начале и конце посылки меняется уровень CSN, а этого как раз и не требуется. Настроек у SPI не такая уж и масса, и на первый взгляд там нет того, что требуется. Да и это пока что далеко не первоочередная дазача. Проблема в том, что CC1101 в принципе не хочет делать того, что мне нужно. Вернее, я не знаю, как его заставить - слишком большое количество настроек и нюансов. :(
Пока есть конкретный вопрос - я не понимаю, почему у меня дергается каждый при запуске скетча функция, привязанныя к внешнему прерыванию. В чем причина - не пойму.
Покурив даташиты (все ссылки на найденную литературу по CC1101 можной найти в самом начале скатча), был найден режим синхронной передачи данных, который выдает сырые полученные данные. Так как данные из эфира он получает постоянно - эфир зашумлен, был сделан своебразный фильтр по уровню принемаемого сигнала - учитывать уровень не менее, чем -60дБм. Значение чисто эмпирическое. Но фигня в том, что данные вылупляются со скоростью 500кбод. Это значение взято с потолка, так как неизвестен ни тип модуляции, ни символьная скорость передачи, ни длина посылов, ни, тем более, используемый протокол. Какая именно используется скорость передачи буду как-то выяснять эксперементально. Без этого пытаться расшифровать полученные данные бесполезно. Код ниже, опять же - принимаются любые мысли по тому, как упростить задачу.
UPD. Метод научного тыка - так себе. Стоило утащить датчик на свое место на балкон, как фильтр в -60 отсек полезный сигнал, а повышение чуствительности приводит к тому, что идет постоянный прием мусора. Надо что-то с этим делать.. А вот что?....
Чтобы боле менее чтото понять в данных сделайте вывод на ногу GPIO2 например, там уже подключаете логанализатор и расшифровываете посылки помех.
Если вы сами не знаете что принимать поэтому такой результат.
С логическим анализатором все стало еще хуже.. )))) Разобрал датчик погодной станции, прицепился к пину data и прицепился к пинам GDO0 и GDO2 девайса.
Наблюдаю следующую картину:
0 - DATA передатчика
1 - GDO2 - Serial Clock CC1101
2 - GDO0 - Serial Data CC1101
Что то я вообще корелляции не наблюдаю.. Кто в лес, а кто по дрова..
Код инициализации выложите СС1101
какая частота и модуляция? Там у СС1101 может быть кварц стоять не точный, поэтому возможны сдвиги по частоте. Нужен приемник для проверки http://phreakerclub.com/1394
http://phreakerclub.com/forum/showthread.php?t=56
Привет! В статье написаны вроде бы очевидные вещи, которые повторяют все из начала даташита девайса. Мне только неясно, откуда автор взял, что "Самое главное что регистры нужно записывать в порядке выдаваемом этой программой, а не как следовало бы из человеческой логики, начиная с нулевого))" - я такую инфу в даташите не видел, а если еще участь, что автор пишет "Задержки взял заведомо очень большие чтоб не читать мануал))" - то есть большая вероятность, что он ошибается.
Мой код можно найти выше в ветке в моих сообшениях. У меня задача just for fun поймать сигнал от погодной станции. Какая частота и модуляция - доподлинно неизвестно. Частота - в районе 433МГц, вчера по косвенным признакам выяснил, что модуляция ASK/OOK. Осталось выяснить символьную скорость, какие значения бит синхронизации и пр. Всеволновый приемник был заказан уже, - жду))). Оптимизм не теряю, думаю, что рано или поздно я эту хрень дожму! ))))
Тогда попробуйте эту конфигурацию трансивера, модуляция амплитудная на частоте автосигналок. Проверяем трансивер послав пакет с пульта автосигнализации, только работающие в АМ модуляции, например томагавк, ценмакс и т.д.
дефайны регистров
Запуск трансивера
Это код для pic18
Раньше увлекался я этим трансивером, сейчас SI4432 использую. Он мне больше нравиться, хотя бы потому что моща на передачу у него 100 мВт, размер и цена такая же. Не зря этот чип стоит в брелках Пандоры.
Привет! За пример спасибо! На выходных попробую найти время попробовать. Я еще кое-что раскопал, тоже может помочь.
По поводу чипа - я полный нуб в этом деле - занялся ардуиной просто ради интереса, а с ардуиной прикупил первое, что попалось на ebay по ключевому слову 433MHz. Я был уверен, что давно написаны библиотеки подо все, что можно и никак не ожидал, что нужно читать тонны литературы и даташитов + купить логический анализатор, купить всеволновый приемник.)))) Но так оказалось даже увлекательней - своебразный челендж - кто кого. Жена только недовольна, что я какой-то хренью занялся и еще засрал компьютерный стол змеиным клубком проводов.)))
Привет! Попробовал ваш вариант, сигнал не пойман, результата пока нет. Еще хуже, что подопытный умер. Работает если только пальцем зажать один из кондеров, расположенных вокруг кварца. Хрен его знает, что с ним приключилось, но в таком виде с ним как-то не очень общаться. Заказан новый (+SI4432) - так просто он от меня не отделается. ))) Ухожу на перерыв - пока буду ломать другие фигульки.)))
Добрый день!
пытаюсь получить сигнал с метеостанции LaCrosse Kweller s-8200 посредством радиомодуля CC1101. Пока безуспешно.
Известно, что частота сигнала 868.35 MHz. Модуляция скорее всего FSK. Параметров модуля много и еще не во всех разобрался,
но я так понимаю, что многие из них к передаче сигнала относятся. Подскажете, плиз, на какие параметры обращать внимание
чтобы сигнал принять.
обвязка модуля может быть под 433 мгц заточена и поэтому для приема на 868 мгц надо подносить поближе модуль.
И можете в девиацию частоты не попасть.
На самой плате модуля СС1101 868 написано.
Про характеристики передатчика и приёмника самой метеостанции можете чего-нить сказать?
Кроме того, что она на частоте 868.35 MHz работает.