реклама на сайте
подробности

 
 
> Вопрос по Си...
wasp
сообщение Apr 22 2008, 15:29
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 39
Регистрация: 2-09-07
Пользователь №: 30 237



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


Не подскажите зачем там эти две строчки:
........
while (!nIRQ);
while (nIRQ);
.........

что бы это значило? 05.gif
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
rezident
сообщение Apr 22 2008, 15:33
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Видимо автор таким образом пытался импульс какой-то отследить, переход 0->1->0.
Go to the top of the page
 
+Quote Post
wasp
сообщение Apr 22 2008, 15:46
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 39
Регистрация: 2-09-07
Пользователь №: 30 237



Цитата(rezident @ Apr 22 2008, 19:33) *
Видимо автор таким образом пытался импульс какой-то отследить, переход 0->1->0.

спасибо за быстрый ответ!
с СИ знаком поверхостно, поэтому не могу сообразить. Почему за обоими операторами стоит ";"?
То есть условие в скобках выполняется, но за этим не следует ничего... Программа переходит на следующую строку так и так.
Или я ошибаюсь?
Go to the top of the page
 
+Quote Post
tazik
сообщение Apr 22 2008, 16:02
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 195
Регистрация: 13-05-07
Из: Норильск
Пользователь №: 27 691



Цитата(wasp @ Apr 22 2008, 23:46) *
спасибо за быстрый ответ!
с СИ знаком поверхостно, поэтому не могу сообразить. Почему за обоими операторами стоит ";"?
То есть условие в скобках выполняется, но за этим не следует ничего... Программа переходит на следующую строку так и так.
Или я ошибаюсь?


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

То же самое, что и while(nIRQ) {чего-то делаем}; - просто скобки опущены, т.к. во время ожидания все равно ничего не выполняется
Go to the top of the page
 
+Quote Post
wasp
сообщение Apr 22 2008, 16:08
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 39
Регистрация: 2-09-07
Пользователь №: 30 237



Цитата(tazik @ Apr 22 2008, 20:02) *
Синтаксис языка такой. Пока условие верно, перехода на следующую строку не происходит.

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

Вот оно что!
Ну тогда все становится на свои места, спасибо за ликбез! smile.gif
Go to the top of the page
 
+Quote Post
arttab
сообщение Apr 22 2008, 23:46
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



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


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
wasp
сообщение Apr 25 2008, 19:07
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 39
Регистрация: 2-09-07
Пользователь №: 30 237



в продолжение темы...
прошил и подключил PIC16F676, что был под рукой к передатчику RF02.
программа доходит как раз до этого места "while (!nIRQ);
while (nIRQ);"
и останавливается.
симулировал программку с пом. Протеус, если посадить на эту ногу генератор импульсов, все работает...
осциллографа под рукой нет, но видимо с RF02 не приходит этот самый пресловутый nIRQ.
в каком случае он должен генерироваться, в даташите не нашел.
да, в приведенной в даташите программе используется кварц на 10МГц, а у меня от внутреннего генератора - 4 МГц. Может от этого сбоит?

понимаю что вопрос типа "кто бы за меня разобрался?", но ничего в голову не лезет...
Go to the top of the page
 
+Quote Post
vank
сообщение Apr 26 2008, 06:59
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 26-05-05
Из: Болгария
Пользователь №: 5 443



Привет!
И мне интересует этая програма. Я покупал из Китаии RFM12BP и RFM12B. Я работаю под ассемблера и не могу разобраться с програмой на C, каторая находиться сдесь во файле RFM12B_manual.pdf стр.32-43. Можно ли кто то компилировать это програма и выслать код на ASM?
Спасибо вам!
Прикрепленные файлы
Прикрепленный файл  RFM12B_manual.pdf ( 708.22 килобайт ) Кол-во скачиваний: 160
 
Go to the top of the page
 
+Quote Post
tazik
сообщение Apr 26 2008, 08:03
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 195
Регистрация: 13-05-07
Из: Норильск
Пользователь №: 27 691



Цитата(wasp @ Apr 26 2008, 03:07) *
в продолжение темы...
прошил и подключил PIC16F676, что был под рукой к передатчику RF02.
программа доходит как раз до этого места "while (!nIRQ);
while (nIRQ);"
и останавливается.
симулировал программку с пом. Протеус, если посадить на эту ногу генератор импульсов, все работает...
осциллографа под рукой нет, но видимо с RF02 не приходит этот самый пресловутый nIRQ.
в каком случае он должен генерироваться, в даташите не нашел.
да, в приведенной в даташите программе используется кварц на 10МГц, а у меня от внутреннего генератора - 4 МГц. Может от этого сбоит?

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


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

Кстати, есть микросхема IA4222 - практически 1 в 1. Даже датащит совпадает
Go to the top of the page
 
+Quote Post
wasp
сообщение Apr 28 2008, 06:18
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 39
Регистрация: 2-09-07
Пользователь №: 30 237



Цитата(tazik @ Apr 26 2008, 12:03) *
Сам не работал (.
Но судя по документации IRQn выдается при приеме очередного бита данных в том случае, если при конфигурации был установлен бит ebs. (В примере он устанавливается - RFXX_WRT_CMD(0xC220)).

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

tazik, спасибо за ответ.
Но не совсем понятно, если IRQn выдается при приеме очередного бита данных, то как пройдет самый первый бит?
В приведенном выше фрагменте программа останавливается и ждет первого импульса IRQn.

vank, как все налажу, вышлю.
Go to the top of the page
 
+Quote Post
RCray
сообщение Apr 28 2008, 07:12
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 170
Регистрация: 14-09-05
Из: Suwon
Пользователь №: 8 548



Цитата(tazik @ Apr 22 2008, 20:02) *
Синтаксис языка такой. Пока условие верно, перехода на следующую строку не происходит.

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


while(nIRQ) {;}
Go to the top of the page
 
+Quote Post
tazik
сообщение Apr 28 2008, 17:20
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 195
Регистрация: 13-05-07
Из: Норильск
Пользователь №: 27 691



Цитата(wasp @ Apr 28 2008, 14:18) *
Но не совсем понятно, если 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 - Apr 28 2008, 18:18
Go to the top of the page
 
+Quote Post
wasp
сообщение Apr 28 2008, 18:38
Сообщение #13


Участник
*

Группа: Новичок
Сообщений: 39
Регистрация: 2-09-07
Пользователь №: 30 237



Цитата(tazik @ Apr 28 2008, 21:20) *
Микросхема так работает, что при передаче команд, синхронизация осуществляется от сигнала 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 Мгц, если не пойдет, тогда уже искать причину...

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



из нее если я правильно понимаю, следует, что nIRQ включается при ebs=1, Ho после установки бита еа=1.
но какое отношение имеет этот бит к nIRQ - непонятно...
Power Management Command C000h:


Сообщение отредактировал wasp - Apr 28 2008, 18:41
Go to the top of the page
 
+Quote Post
tazik
сообщение Apr 28 2008, 18:57
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 195
Регистрация: 13-05-07
Из: Норильск
Пользователь №: 27 691



Цитата(wasp @ Apr 29 2008, 02:38) *
из нее если я правильно понимаю, следует, что nIRQ включается при ebs=1, Ho после установки бита еа=1.


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

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

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

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

Сообщение отредактировал tazik - Apr 28 2008, 19:15
Go to the top of the page
 
+Quote Post
wasp
сообщение Apr 28 2008, 19:19
Сообщение #15


Участник
*

Группа: Новичок
Сообщений: 39
Регистрация: 2-09-07
Пользователь №: 30 237



Цитата(tazik @ Apr 28 2008, 22:57) *
Давайте, наверное, перепишем следующим образом:
... nIRQ включается при ebs=1, Ho после включения усилителя мощности (бит ea)

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

спасибо, немного прояснилось.
Цитата(tazik @ Apr 28 2008, 22:57) *
Может сделать ход конем? - Поступить грубо и извращенно, удлинив IRQn с помощью интегрирующей RC цепочки? Зависит от степени азарта и нетерпения smile.gif

нетерпение уже притупилось biggrin.gif
попробую с кварцем на 10 МГц - отпишусь smile.gif
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 07:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01492 секунд с 7
ELECTRONIX ©2004-2016