Перейти к содержанию
    

Прошу прощения за глупый вопрос.

Пытаюсь разобраться с программой для РIС(пример передачи пакета данных для RF-модуля FSK-передатчика http://www.hoperf.com/pdf/RF02B.pdf ).

Сама программка находится здесь: http://www.hoperf.com/pdf/RF02_code.pdf стр. 11-16.

И там на стр. 15 вот такой фрагмент кода:

27c9e24dfe8c92dae787a3fcbd419d1a.jpg

 

Не подскажите зачем там эти две строчки:

........

while (!nIRQ);

while (nIRQ);

.........

 

что бы это значило? :05:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Видимо автор таким образом пытался импульс какой-то отследить, переход 0->1->0.

спасибо за быстрый ответ!

с СИ знаком поверхостно, поэтому не могу сообразить. Почему за обоими операторами стоит ";"?

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

Или я ошибаюсь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо за быстрый ответ!

с СИ знаком поверхостно, поэтому не могу сообразить. Почему за обоими операторами стоит ";"?

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

Или я ошибаюсь?

 

Синтаксис языка такой. Пока условие верно, перехода на следующую строку не происходит.

 

То же самое, что и while(nIRQ) {чего-то делаем}; - просто скобки опущены, т.к. во время ожидания все равно ничего не выполняется

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Синтаксис языка такой. Пока условие верно, перехода на следующую строку не происходит.

 

То же самое, что и while(nIRQ) {чего-то делаем}; - просто скобки опущены, т.к. во время ожидания все равно ничего не выполняется

Вот оно что!

Ну тогда все становится на свои места, спасибо за ликбез! :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а nIRQ должны быть объявлены как изменяемые из вне. можете сами это указать, а именно эти указаны черех структуру тип регистр. так в iarе сделано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в продолжение темы...

прошил и подключил PIC16F676, что был под рукой к передатчику RF02.

программа доходит как раз до этого места "while (!nIRQ);

while (nIRQ);"

и останавливается.

симулировал программку с пом. Протеус, если посадить на эту ногу генератор импульсов, все работает...

осциллографа под рукой нет, но видимо с RF02 не приходит этот самый пресловутый nIRQ.

в каком случае он должен генерироваться, в даташите не нашел.

да, в приведенной в даташите программе используется кварц на 10МГц, а у меня от внутреннего генератора - 4 МГц. Может от этого сбоит?

 

понимаю что вопрос типа "кто бы за меня разобрался?", но ничего в голову не лезет...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привет!

И мне интересует этая програма. Я покупал из Китаии RFM12BP и RFM12B. Я работаю под ассемблера и не могу разобраться с програмой на C, каторая находиться сдесь во файле RFM12B_manual.pdf стр.32-43. Можно ли кто то компилировать это програма и выслать код на ASM?

Спасибо вам!

RFM12B_manual.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в продолжение темы...

прошил и подключил PIC16F676, что был под рукой к передатчику RF02.

программа доходит как раз до этого места "while (!nIRQ);

while (nIRQ);"

и останавливается.

симулировал программку с пом. Протеус, если посадить на эту ногу генератор импульсов, все работает...

осциллографа под рукой нет, но видимо с RF02 не приходит этот самый пресловутый nIRQ.

в каком случае он должен генерироваться, в даташите не нашел.

да, в приведенной в даташите программе используется кварц на 10МГц, а у меня от внутреннего генератора - 4 МГц. Может от этого сбоит?

 

понимаю что вопрос типа "кто бы за меня разобрался?", но ничего в голову не лезет...

 

Сам не работал (.

Но судя по документации IRQn выдается при приеме очередного бита данных в том случае, если при конфигурации был установлен бит ebs. (В примере он устанавливается - RFXX_WRT_CMD(0xC220)).

 

Кстати, есть микросхема IA4222 - практически 1 в 1. Даже датащит совпадает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сам не работал (.

Но судя по документации IRQn выдается при приеме очередного бита данных в том случае, если при конфигурации был установлен бит ebs. (В примере он устанавливается - RFXX_WRT_CMD(0xC220)).

 

Кстати, есть микросхема IA4222 - практически 1 в 1. Даже датащит совпадает

tazik, спасибо за ответ.

Но не совсем понятно, если IRQn выдается при приеме очередного бита данных, то как пройдет самый первый бит?

В приведенном выше фрагменте программа останавливается и ждет первого импульса IRQn.

 

vank, как все налажу, вышлю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Синтаксис языка такой. Пока условие верно, перехода на следующую строку не происходит.

 

То же самое, что и while(nIRQ) {чего-то делаем}; - просто скобки опущены, т.к. во время ожидания все равно ничего не выполняется

 

while(nIRQ) {;}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но не совсем понятно, если IRQn выдается при приеме очередного бита данных, то как пройдет самый первый бит?

 

Микросхема так работает, что при передаче команд, синхронизация осуществляется от сигнала SCK контроллера. А при передаче данных - от IRQn передатчика (при установленном бите ebs).

 

Еще в RF02.pdf на странице 16 помимо диаграмм есть фраза: "Do not send CLK pulses with TX data bits, otherwise they will be interpreted as commands".

 

То есть при настройке передатчика импульса IRQ и не должно быть.

 

в приведенной в даташите программе используется кварц на 10МГц, а у меня от внутреннего генератора - 4 МГц. Может от этого сбоит?

 

Скорее всего, Вы правы и дело именно в этом. Длительность лог. 1 IRQn равна 1,6 мкс. 4МГц + PIC - получаем, что одна команда на asm (например, считывание состояния ножки) выполняется за 1мкс. А здесь программа вообще на Си - трудно гарантировать надежную фиксацию импульса. Видимо, без осциллографа не обойтись. Можно еще попробовать команду чтения статуса 0xCC00, во втором байте передатчик будет передавать свое состояние по линии IRQn, а синхронизация его передачи будет происходить от линии CLK контроллера

Изменено пользователем tazik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Микросхема так работает, что при передаче команд, синхронизация осуществляется от сигнала SCK контроллера. А при передаче данных - от IRQn передатчика (при установленном бите ebs).

 

Еще в RF02.pdf на странице 16 помимо диаграмм есть фраза: "Do not send CLK pulses with TX data bits, otherwise they will be interpreted as commands".

 

То есть при настройке передатчика импульса IRQ и не должно быть.

Скорее всего, Вы правы и дело именно в этом. Длительность лог. 1 IRQn равна 1,6 мкс. 4МГц + PIC - получаем, что одна команда на asm (например, считывание состояния ножки) выполняется за 1мкс. А здесь программа вообще на Си - трудно гарантировать надежную фиксацию импульса. Видимо, без осциллографа не обойтись. Можно еще попробовать команду чтения статуса 0xCC00, во втором байте передатчик будет передавать свое состояние по линии IRQn, а синхронизация его передачи будет происходить от линии CLK контроллера

Все верно 1.6 мкс при 4 МГц - нереально. Для начала надо попробовать с 10 Мгц, если не пойдет, тогда уже искать причину...

 

и еще раз вопрос по диаграмме.

 

569397ca7c20589a20137107033ea991.jpg

 

из нее если я правильно понимаю, следует, что nIRQ включается при ebs=1, Ho после установки бита еа=1.

но какое отношение имеет этот бит к nIRQ - непонятно...

Power Management Command C000h:

0ac77813c4ff16c6617d51d627888872.jpg

Изменено пользователем wasp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

из нее если я правильно понимаю, следует, что nIRQ включается при ebs=1, Ho после установки бита еа=1.

 

Давайте, наверное, перепишем следующим образом:

... nIRQ включается при ebs=1, Ho после включения усилителя мощности (бит ea)

 

Действительно, если усилитель передатчика отключен, то какой смысл передавать данные. По крайней мере мне так кажется. :07:

 

Еще из описания не понятно, в каком случае работает передача по FSK, а в каком - по SDI. Вроде бы, никакого переключения не делается.

 

Может сделать ход конем? - Поступить грубо и извращенно, удлинив IRQn с помощью интегрирующей RC цепочки? Зависит от степени азарта и нетерпения :)

Изменено пользователем tazik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Давайте, наверное, перепишем следующим образом:

... nIRQ включается при ebs=1, Ho после включения усилителя мощности (бит ea)

 

Действительно, если усилитель передатчика отключен, то какой смысл передавать данные. По крайней мере мне так кажется. :07:

спасибо, немного прояснилось.

Может сделать ход конем? - Поступить грубо и извращенно, удлинив IRQn с помощью интегрирующей RC цепочки? Зависит от степени азарта и нетерпения :)

нетерпение уже притупилось :biggrin:

попробую с кварцем на 10 МГц - отпишусь :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...