Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Re: RFM22B

Пт мар 16, 2012 08:20:53

Cat писал(а):Все размещенное в инете жутко кривое и глючное. Подолбавшись с месяц таки получилось поднять двусторонний канал связи с гарантированной доставкой пакетов даже на фоне сильных помех. Алгоритм дать могу, код не буду, ибо труда вложено немеренно


А кому он нужен - алгоритм?

Re: RFM22B

Пт мар 16, 2012 10:15:48

Bigalls писал(а):А кому он нужен - алгоритм?
Самое ценное это как раз правильный алгоритм работы, а уж на чем именно и какими приемами его организовать (хоть на си, хоть на ассемблере, да хоть на чем...) это уже даже не второе, это последнее дело. Но нубам не понять. :wink: У каждого свои приемы написания конечного кода.

Не хотите - как хотите, продолжайте онанировать методом тыка, вместо того чтобы почитать ДШ и AN440

Re: RFM22B

Пт мар 16, 2012 11:05:16

буду рад хоть алгоритму. а схему можете прислать? модуль 22B ??

Re: RFM22B

Пт мар 16, 2012 11:08:43

Какая частота, ревизия? Я работал с модулями RFM22B-433-S3 (третья ревизия обвязки), ревизия самого чипа 6,0

Re: RFM22B

Пт мар 16, 2012 11:18:32

Итак, начинаем сначала:
Там есть вход SDN- shutdown, если его держать в 1, то модуль впадает в анабиоз. При подаче на него 0 - происходит полный сброс всех регистров модуля.

В файле shema.pdf пример того, как подключено у меня. Х4 это RFM22

После данного действия необходимо подождать около 25 мс, игнорируя в этот период включения хаотичные сигналы прерывания с модуля. Как только модуль выйдет в нормальный режим - прочитать ревизию чипа из регистра 1, если она равна 6, то можно пользоваться картой регистров - документ AN440.

Как сделаете это - пойдем дальше
Вложения
shema.pdf
(53.13 KiB) Скачиваний: 1044
RFM22B.pdf
(1.44 MiB) Скачиваний: 1050
AN440.pdf
(284.04 KiB) Скачиваний: 1014

Re: RFM22B

Пт мар 16, 2012 13:01:53

Cat писал(а):
Bigalls писал(а):А кому он нужен - алгоритм?
Самое ценное это как раз правильный алгоритм работы, а уж на чем именно и какими приемами его организовать (хоть на си, хоть на ассемблере, да хоть на чем...) это уже даже не второе, это последнее дело. Но нубам не понять. :wink: У каждого свои приемы написания конечного кода.

Не хотите - как хотите, продолжайте онанировать методом тыка, вместо того чтобы почитать ДШ и AN440


Вы не поняли, я намекнул что кроме алгоритма схема подключения модуля, примеры работы и т.д. если уж сказали А то говорите и В.
Мне жаль людей которые кичатся тем что сделали.

Re: RFM22B

Пт мар 16, 2012 13:35:10

может Cat позже выложит свои труды и мы как вежливые и люди с совестью никогда его не забудем и скажем дружно ему СПАСИБО

Re: RFM22B

Пт мар 16, 2012 14:15:49

BigallS Схема подключения есть в ДШ, если что... На любые вопросы касаемо общения с данным модулем я по возможности отвечу. Вопросы наподобие как запустить SPI или какие фьюзы в меге ставить - это в обучалку. И если вам нечего сказать по теме, прошу не флеймить, итак во всей теме ни одного поста с конкретной инфой не написали.

Теперь по делу:
Антенну можно не подключать, модули без антенн видят друг-друга на расстоянии около метра. Правильно сконфигурировать регистры (предварительно почитав все тот же мануал AN440) можно в предоставляемом производителем калькуляторе(в приложении к посту), на сайте hoperf.com, у меня он кстати корректно запустился только в 2007 офисе, несмотря на наличие требуемых надстроек в 2003. Моя конфигурация регистров так же в приложении.

Данная конфигурация полностью рабочая, как запустите на ней, уберете баги кода - там уже можете экспериментировать со своей.

Итак, предположим модуль включили, подождали 25 мс, а лучше 50 - у меня 50. Читаем регистр 04h, биты 1-ichiprdy и 0-ipor должны быть равны единицам.

Затем, если все ОК, вкатываем паровозом конфигурацию RFM22 из прилагаемого файла. (Внимание, данная конфигурация только для модуля 433 МГц с ревизией чипа 6. Не путайте ревизию чипа и модуля!!!111)
Например строка {0x34,0x08}, // preamble = 32bits означает что по адресу 0x34 отправляется значение 0x08

После того как записали конфигурацию, читаем регистр 02h, если все хорошо, то модуль должен находиться в состоянии IDLE - готовность.

В данном модуле оригинально организована работа с антенной, она с помощью PIN-диодов подключается по желанию то к входу, то к выходу микросхемы. Делается это так: при подаче лог.1 на вход RX модуля - антенна подключается к входному каскаду, при подаче лог.1 на TX - к выходному. Не стоит подавать одновременно 1 на оба пина, может закончиться вылетом каскадов входа.

У модуля есть так называемые GPIO - порты ввода-вывода, конфигурируемые регистрами 0B 0C 0D, обратите внимание, что после сброса модуля на GPIO2 выводится меандр частотой 1 МГц - для тактования внешнего контроллера, если это нам нужно. Потому управлять RX и TX будем выводами GPIO0 GPIO1, в конфигурации мы конфигурируем их как выходы, и с помощью регистра 0Eh задаем их логические уровни.

Итак, мы сбросили модуль, отконфигурировали регистры, отсоединили антенну от приемника и передатчика, подав на RX и TX с помощью GPIO0 GPIO1 - нули.

Следующий шаг - в регистрах 05h 06h отключаем все прерывания

Вхолостую (игнорируя результат) читаем регистры 03h 04h - там могут висеть какие-то флаги прерываний, они нам пока не нужны. Чтение этих регистров сбрасывает их значение, то есть когда мы будем обращаться к модулю по этим адресам, чтобы выяснить что же за прерывание пришло, после чтения регистра он автоматом сбросится.

Затем кодом что ниже сбрасываем указатели буфера передачи и приема.

void RFM22_reset_TX_FIFO (void) {
unsigned char d;
d=rfm22_read (8); // считываем содержимое регистра 8
d&=0b11111110; // обнуляем бит 0
d|=0b00000001; // ставим в 1 бит 0
rfm22_write (8,d); // запись получившегося в регистр 8
d&=~1; // ставим в 0 бит 0
rfm22_write (8,d); // запись получившегося в регистр 8
}


void RFM22_reset_RX_FIFO (void) {
unsigned char d;
d=rfm22_read (8); // считываем содержимое регистра 8
d&=0b11111101; // обнуляем бит 1
d|=0b00000010; // ставим в 1 бит 1
rfm22_write (8,d); // запись получившегося в регистр 8
d&=~2; // ставим в 0 бит 1
rfm22_write (8,d); // запись получившегося в регистр 8

}
Почему именно ТАК ЗАМЫСЛОВАТО - читайте описание регистра 8h в карте. Там это написано, правда на английском.
На этом правильная конфигурация модуля окончена. если есть вопросы о том как устроен FIFO - буфер - спрашивайте.

Если повесть в таком ключе устраивает - дайте знать, буду продолжать. :roll:

P.S. - используйте АППАРАТНЫЙ SPI контроллера, а то во всех примерах в AVR зачем-то городят программный... при живом-то аппаратном, что является лишним свидетельством жопорукости писателей этих "примеров". :kill:
Вложения
RFM22_init_OB_V3.h
(3.17 KiB) Скачиваний: 942
RF22B 23B 31B 42B 43B Register Settings_RevB1-v5.xls
(283 KiB) Скачиваний: 769

Re: RFM22B

Вс мар 18, 2012 02:16:36

Cat писал(а):Если повесть в таком ключе устраивает - дайте знать, буду продолжать. :roll:

Несомненно ждем продолжения, тема весьма интересна.

Cпасибо за пример инициализации, я правда уже добился связи между двумя модулями, но код все равно подправлю в соответствии с вашими рекомендациями.
Экселевский файл у меня на 2003 тоже не запустился, в некоторых полях выдавало "?ИМЯ?", потому забил на него, а оказывается зря, придется таки ставить офис 2007.
При настройке модулей около недели потерял на наблюдение неустойчивой работы, причем весьма хаотично - то работает то нет. Пока не запитал от сетевых блоков (до этого запитывал от батареек и мощность конечно же была на макс выкручена, правда непонятно зачем, модули в 50см друг от друга. Все жадность) так что если ко будет повторять - не наступайте на мои грабли. Хоть и написано что от 1.8В работают, но видать во время передачи просаживают питание неслабо.

Cat, подскажите , в чем разница настройки регистров у RFM22 и RFM22B (кроме мощности)? Контроллер то на борту у них один и тот же?
Какая реальная дальность связи у Вашей системы получилась?

Re: RFM22B

Вс мар 18, 2012 08:51:01

господа у меня вообще в экселе ничего не работает ((( может подскажите что там вообще надо делать? офис 2007

Re: RFM22B

Вс мар 18, 2012 10:00:28

yuta_86 писал(а):господа у меня вообще в экселе ничего не работает ((( может подскажите что там вообще надо делать? офис 2007


В параметрах экселя разреши запуск всех макросов. В 2007 и 2010 экселе надо войти в Центр управления безопасностью, стать на вкладку параметры макросов и поставить чекбокс "включить все макросы"

P.S. Чтобы войти в центр управления безопасностью, надо стать на меню файл, потом в нём подменю "параметры", далее выбираем центр управления безопасностью и на странице нажимаем "параметры центра управления безопасностью" потом вкладка "параметры макросов".
2007 и 2010 офис моск сносят со своим "продвинутым интерфейсом" :shock: :o :cry: :oops:

Re: RFM22B

Вс мар 18, 2012 12:46:23

Gipsy писал(а):Cat, подскажите , в чем разница настройки регистров у RFM22 и RFM22B (кроме мощности)? Контроллер то на борту у них один и тот же?
Какая реальная дальность связи у Вашей системы получилась?


Тут я ничего сказать не могу, ибо просто 22 не щупал и не имел возможности почитать у них версию чипа.

Дальность у меня с антеннами +1dbi и круговой поляризацией - по городу вне прямой видимости около 400-500 м(правда пока не делал сканирование спектра помех, чуть позже реализую-возможно я работал на засратой в своем городе частоте), на открытой местности свыше километра.

Раз уж зашел разговор о питании - это то, с чего должно все начинаться. Делайте питание нормальным, чтобы потом не удивляться всяким неприятностям. Берите нормальный источник 3,3В, и питайте как показано на схеме во вложении - через дроссель подавления ЭМП. У себя я применил BLM21AG601SN1D от MURATA. Так же соблюдайте правила разводки проводников, и будет вам счастье.

Gipsy писал(а):Хоть и написано что от 1.8В работают, но видать во время передачи просаживают питание неслабо.
Предельный ток потребления на максимальной мощности передачи -всего 85мА, так что сомневаюсь... разве что если вы не брали дохлые батарейки от часов для питания :))) , и запомните - НИКОГДА не используйте для питания подобных устройств просто батарейку, нужна стабилизация. Есть LDO стабилизаторы IRU(international rectifier), APU(advanced power) на 3,3В, с перепадом напряжения при токе до 100 мА - всего 0,08-0,1 В.

Продолжаю повесть:

Как устроен FIFO(first input-first output): В памяти чипа Si4430 есть 2 банка по 64 байта(потому нежелательно делать длину пакета более 64 байт, хотя модуль поддерживает длину передачи до 255 байт - тогда придется постоянно подгружать освободившиеся ячейки буфера, при этом вычисляя где сейчас указатель - это куча геморроя), доступ к которым осуществляется по адресу 7F, причем порознь к каждому банку, и уж тем более к его отдельным ячейкам доступ получить не получится- так решил производитель. Читать и писать буферы можно только в burst-режиме (подробности в описании работы SPI в документации)

Чтобы получить доступ к буферу RX- нужно сделать запрос на чтение адреса 7F, причем перед этим я делаю сброс указателя на нулевой элемент буфера функцией RFM22_reset_RX_FIFO, иначе если мы снова начнем читать буфер, то чтение продолжится с того места, на коротом мы остановились - и получится "ой"

Чтобы записать что-то в буфер передачи, нужно обратиться к тому же адресу, но с запросом на запись, ну и разумеется перед этим сбросив указатель функцией RFM22_reset_TX_FIFO.. Прекращение записи/чтения осуществляется просто подтягиванием ножки NSEL (оно же -SS) лог.1

Re: RFM22B

Вс мар 18, 2012 15:03:58

Cat писал(а):...
Чтобы получить доступ к буферу RX- нужно сделать запрос на чтение адреса 7F, причем перед этим я делаю сброс указателя на нулевой элемент буфера функцией RFM22_reset_RX_FIFO, иначе если мы снова начнем читать буфер, то чтение продолжится с того места, на коротом мы остановились - и получится "ой"

Я по прерыванию на nIRQ читаю сначала из регистра $4B количество принятых байт, а потом читаю из $7F нужное количество байт (длинна пакета бывает разной, потому так).
Я так понимаю это неправильно и может при длительной работе привести к потере пакетов? Если обнулять указатель ФИФО до чтения то данные в нем сохраняются? Может лучше после чтения буфер обнулять?

Re: RFM22B

Вс мар 18, 2012 15:32:28

Про правильную организацию приема-передачи я напишу чуть позже(разумеется, сначала по получению правильного пакета надо прочесть в вышеуказанном регистре количество принятых байтов, затем уже читать из буфера). После каждого чтения/записи я делаю сброс указателя, чтобы при следующем обращении к буферу указатель уже был на месте. Данные в нем остаются, при приходе нового пакета просто замещаются.

Имелось ввиду что сброс должен быть осуществлен после прочтения принятого - то есть до принятия очередного пакета.

Тут есть один невыясненный пока что момент - как будет больше времени - поэкспериментирую - при приходе нового пакета чип пишет байты начиная с нулевой ячейки RX буфера, или с того места, где оставил указатель пользователь(например почитал я буфер и забыл сбросить указатель)? Потому я пока что поступаю так, как указано выше.

Re: RFM22B

Сб мар 24, 2012 00:18:59

Ждем продолжения.

ЗЫ: передатчик имеет прикольную функцию - повторная отправка пакета простой записью команды на передачу в управляющий регистр. При этом записи в ФИФО информации не требуется - передается то, чтио было передано в прошлый раз. Проверено в железе - работает.

Re: RFM22B

Сб мар 24, 2012 12:20:09

Я этого не пробовал, получается достаточно даже не трогая указателя и не записывая заново длину переданного пакета, просто снова включить режим TX?

Re: RFM22B

Сб мар 24, 2012 14:26:06

Cat писал(а):Я этого не пробовал, получается достаточно даже не трогая указателя и не записывая заново длину переданного пакета, просто снова включить режим TX?

Да, то есть если вы передали пакет и не получили подтверждение его приема то просто записав 0х09 в регистр 0х07 получите повторную передачу пакета (если конечно-же не трогали до этого ФИФО).
Я указатель вообще не трогаю, только при включении сбрасываю приемный и передающий буфер. Пока работает без проблем, передавал пакеты разной длинны. Но серьезных тестов еще не было, так что выводы рано делать.

Re: RFM22B

Сб мар 24, 2012 15:00:39

Всем, привет!
Было дело работал с RFM22B, показали себя с хорошей стороны.
Может кто подскажет, нужен только приемник для RFM22B-433,
нашел что выпускается RFM31B, однако ток потребления у него 18,5 мА
очень много для моей конструкции, кто нибудь использовал RFM22в в паре с другими
приемниками (передатчиками) ISM диапазона ?

Re: RFM22B

Вс мар 25, 2012 18:17:04

Gipsy писал(а):Я указатель вообще не трогаю, только при включении сбрасываю приемный и передающий буфер. Пока работает без проблем, передавал пакеты разной длинны. Но серьезных тестов еще не было, так что выводы рано делать.


Надо будет как дойдут руки -поэкспрементировать, но мне это пока не нужно, так как в моем случае организован защищенный двусторонний канал связи, каждый пакет несет разную информацию, потому надобности повторять одинаковые пакеты пока не было

Хм... если вы не трогаете указатель, то возможно он таки сам сбрасывается. Надо подробнее покопаться в документации. К сожалению ДШ на сам модуль и карта регистров - единственное что я смог накопать в сети. Хотелось бы еще что-нить почитать от производителя.

Re: RFM22B

Пн апр 09, 2012 20:21:05

Чет не могу никак с broadcast подружить :(.
Выбрал разрешение броадкаста, дал по 3-му и 2-му байту хедера, выдаю на передаче 255 - не ловит ни в каких вариантах.
Никто не встречался с такой проблемой?
Ответить