|
Вопрос по Си... |
|
|
|
Apr 22 2008, 15:29
|
Участник

Группа: Новичок
Сообщений: 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); ......... что бы это значило?
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Apr 22 2008, 15:46
|
Участник

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

|
Цитата(rezident @ Apr 22 2008, 19:33)  Видимо автор таким образом пытался импульс какой-то отследить, переход 0->1->0. спасибо за быстрый ответ! с СИ знаком поверхостно, поэтому не могу сообразить. Почему за обоими операторами стоит ";"? То есть условие в скобках выполняется, но за этим не следует ничего... Программа переходит на следующую строку так и так. Или я ошибаюсь?
|
|
|
|
|
Apr 22 2008, 16:02
|
Частый гость
 
Группа: Свой
Сообщений: 195
Регистрация: 13-05-07
Из: Норильск
Пользователь №: 27 691

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

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

|
Цитата(tazik @ Apr 22 2008, 20:02)  Синтаксис языка такой. Пока условие верно, перехода на следующую строку не происходит.
То же самое, что и while(nIRQ) {чего-то делаем}; - просто скобки опущены, т.к. во время ожидания все равно ничего не выполняется Вот оно что! Ну тогда все становится на свои места, спасибо за ликбез!
|
|
|
|
|
Apr 25 2008, 19:07
|
Участник

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

|
в продолжение темы... прошил и подключил PIC16F676, что был под рукой к передатчику RF02. программа доходит как раз до этого места "while (!nIRQ); while (nIRQ);" и останавливается. симулировал программку с пом. Протеус, если посадить на эту ногу генератор импульсов, все работает... осциллографа под рукой нет, но видимо с RF02 не приходит этот самый пресловутый nIRQ. в каком случае он должен генерироваться, в даташите не нашел. да, в приведенной в даташите программе используется кварц на 10МГц, а у меня от внутреннего генератора - 4 МГц. Может от этого сбоит?
понимаю что вопрос типа "кто бы за меня разобрался?", но ничего в голову не лезет...
|
|
|
|
|
Apr 26 2008, 06:59
|
Частый гость
 
Группа: Свой
Сообщений: 96
Регистрация: 26-05-05
Из: Болгария
Пользователь №: 5 443

|
Привет! И мне интересует этая програма. Я покупал из Китаии RFM12BP и RFM12B. Я работаю под ассемблера и не могу разобраться с програмой на C, каторая находиться сдесь во файле RFM12B_manual.pdf стр.32-43. Можно ли кто то компилировать это програма и выслать код на ASM? Спасибо вам!
|
|
|
|
|
Apr 26 2008, 08:03
|
Частый гость
 
Группа: Свой
Сообщений: 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. Даже датащит совпадает
|
|
|
|
|
Apr 28 2008, 06:18
|
Участник

Группа: Новичок
Сообщений: 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, как все налажу, вышлю.
|
|
|
|
|
Apr 28 2008, 07:12
|
Частый гость
 
Группа: Свой
Сообщений: 170
Регистрация: 14-09-05
Из: Suwon
Пользователь №: 8 548

|
Цитата(tazik @ Apr 22 2008, 20:02)  Синтаксис языка такой. Пока условие верно, перехода на следующую строку не происходит.
То же самое, что и while(nIRQ) {чего-то делаем}; - просто скобки опущены, т.к. во время ожидания все равно ничего не выполняется while(nIRQ) {;}
|
|
|
|
|
Apr 28 2008, 17:20
|
Частый гость
 
Группа: Свой
Сообщений: 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
|
|
|
|
|
Apr 28 2008, 18:38
|
Участник

Группа: Новичок
Сообщений: 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
|
|
|
|
|
Apr 28 2008, 18:57
|
Частый гость
 
Группа: Свой
Сообщений: 195
Регистрация: 13-05-07
Из: Норильск
Пользователь №: 27 691

|
Цитата(wasp @ Apr 29 2008, 02:38)  из нее если я правильно понимаю, следует, что nIRQ включается при ebs=1, Ho после установки бита еа=1. Давайте, наверное, перепишем следующим образом: ... nIRQ включается при ebs=1, Ho после включения усилителя мощности (бит ea) Действительно, если усилитель передатчика отключен, то какой смысл передавать данные. По крайней мере мне так кажется.  Еще из описания не понятно, в каком случае работает передача по FSK, а в каком - по SDI. Вроде бы, никакого переключения не делается. Может сделать ход конем? - Поступить грубо и извращенно, удлинив IRQn с помощью интегрирующей RC цепочки? Зависит от степени азарта и нетерпения
Сообщение отредактировал tazik - Apr 28 2008, 19:15
|
|
|
|
|
Apr 28 2008, 19:19
|
Участник

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

|
Цитата(tazik @ Apr 28 2008, 22:57)  Давайте, наверное, перепишем следующим образом: ... nIRQ включается при ebs=1, Ho после включения усилителя мощности (бит ea) Действительно, если усилитель передатчика отключен, то какой смысл передавать данные. По крайней мере мне так кажется.  спасибо, немного прояснилось. Цитата(tazik @ Apr 28 2008, 22:57)  Может сделать ход конем? - Поступить грубо и извращенно, удлинив IRQn с помощью интегрирующей RC цепочки? Зависит от степени азарта и нетерпения  нетерпение уже притупилось попробую с кварцем на 10 МГц - отпишусь
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|