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

 
 
> Вопрос по Си...
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 - 25)
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
wasp
сообщение Apr 29 2008, 20:57
Сообщение #16


Участник
*

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



мда, до nIRQ, как выяснилось, дело не доходит.
раздобыл осцилограф, на выводе nIRQ абсолютный ноль.
попробовал поменять программно частоту CLK (можно менять в диапазоне 1-10 МГц), безрезультатно.
держится 1 МГц - частота по умолчанию.
вывод - инициализация не проходит, а значит не выставляется бит ebs, ea как и все остальные.
поэтому и нет nIRQ.
вот код программки, может кому что в глаза бросится, буду премного благодарен.
Код
typedef unsigned char uchar;
typedef unsigned int uint;

#include <16F676.h>
#device adc=8
#FUSES NOWDT                     //No Watch Dog Timer
#FUSES HS                        //High speed Osc (> 4mhz)
#FUSES NOPROTECT                 //Code not protected from reading
#FUSES NOBROWNOUT                //No brownout reset
#FUSES NOMCLR                    //Master Clear pin used for I/O
#FUSES NOCPD                     //No EE protection
#FUSES NOPUT                     //No Power Up Timer
#FUSES BANDGAP_HIGH          
#use delay(clock=8000000)
#byte PORTC = 7
#byte PORTA = 5
#bit LED = PORTA.1
#bit SDI = PORTC.0
#bit SCK = PORTC.1
#bit nSEL = PORTC.2
#bit FSK = PORTC.3

#bit nIRQ = PORTC.4
#bit SDO = PORTC.5

void Write0( void );
void Write1( void );
void WriteCMD( uint CMD );
void RF2_Init( void );
void WriteFSKbyte( uchar DATA );

   uint ChkSum;

/*****************************************************************/

void RF2_Init( void )
{
   nSEL=1;
   SDI=1;
   SCK=0;
   FSK=0;
}

void main()
{
   ChkSum=0;
  
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_comparator(NC_NC);
   setup_vref(FALSE);
  
   SET_TRIS_C(0x30);
   SET_TRIS_A(0x0);
      LED=0;

   RF2_Init();
   WriteCMD( 0xCC00 );
   WriteCMD( 0x8B61 );
   WriteCMD( 0xA640 );
   WriteCMD( 0xD040 );
   WriteCMD( 0xC823 );
   WriteCMD( 0xC220 );
   WriteCMD( 0xC001 );

   while (1)
   {
      WriteCMD( 0xC039 );

      LED=1;
      delay_ms(100);
      LED=0;
      delay_ms(100);

      WriteFSKbyte( 0xAA );
      WriteFSKbyte( 0xAA );
      WriteFSKbyte( 0xAA );
      WriteFSKbyte( 0x2D );
      WriteFSKbyte( 0xD4 );

      WriteFSKbyte( 0x30 );
      ChkSum+=0x30;
      WriteFSKbyte( 0x31 );
      ChkSum+=0x31;
      WriteFSKbyte( 0x32 );
      ChkSum+=0x32;
      WriteFSKbyte( 0x33 );
      ChkSum+=0x33;
      WriteFSKbyte( 0x34 );
      ChkSum+=0x34;
      WriteFSKbyte( 0x35 );
      ChkSum+=0x35;
      WriteFSKbyte( 0x36 );
      ChkSum+=0x36;
      WriteFSKbyte( 0x37 );
      ChkSum+=0x37;
      WriteFSKbyte( 0x38 );
      ChkSum+=0x38;
      WriteFSKbyte( 0x39 );
      ChkSum+=0x39;
      WriteFSKbyte( 0x3A );
      ChkSum+=0x3A;
      WriteFSKbyte( 0x3B );
      ChkSum+=0x3B;
      WriteFSKbyte( 0x3C );
      ChkSum+=0x3C;
      WriteFSKbyte( 0x3D );
      ChkSum+=0x3D;
      WriteFSKbyte( 0x3E );
      ChkSum+=0x3E;
      WriteFSKbyte( 0x3F );
      ChkSum+=0x3F;

      ChkSum&=0x0FF;
      WriteFSKbyte( ChkSum );
      WriteFSKbyte( 0xAA );
      WriteCMD( 0xC001 );
      delay_ms(1000);
   }
}

/************************************************************/
void Write0( void )
{
   SDI=0;
   SCK=0;
   #asm
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP  
   NOP
   NOP
   NOP
   NOP
   #endasm
   SCK=1;
   #asm
   NOP
   #endasm
}

/****************************************************************/
void Write1( void )
{
   SDI=1;
   SCK=0;
   #asm
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   #endasm
   SCK=1;
   #asm
   NOP
   #endasm
}
/*****************************************************************/
void WriteFSKbyte( uchar DATA )
{
   uchar n=8;
   nSEL=1;
   while (n--)
      {
      while (!nIRQ);
      while (nIRQ);
      if (DATA&0x80) FSK=1;
      else FSK=0;
      DATA=DATA<<1;
      }
}
/*****************************************************************/
void WriteCMD( uint CMD )
{
   uchar n=16;
   SCK=0;
   nSEL=0;
   while (n--)
   {
      if (CMD&0x8000) Write1();
      else Write0();
      CMD=CMD<<1;
   }
   SCK=0;
   nSEL=1;

}
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 29 2008, 23:33
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(wasp @ Apr 29 2008, 23:57) *
вот код программки, может кому что в глаза бросится, буду премного благодарен
Скачал описание модуля по ссылке из первого поста. Не нашел в нем команд 0xD040, 0xC823.

Раз уж ветка по С:
1) Ээх, не любите вы себя - потратьте час, присвойте всем битам (и/или их комбинациям) осмысленные имена через #define и потом пишите WriteCMD( SET_CONFIG | BAND_433 | CLK_2MHZ | LOAD_CAP_11_5_PF | M1 ) - и программа читабельная станет и вероятность ошибиться гораздо меньше.

2) вот вам предложение:
Код
void WriteCMD( uint CMD )
{
   uchar n=16;
   // SCK тут уже равно 0
   nSEL=0;
   do
   {
      if (CMD & (1 << 15) )
           SDI = 1;
      else
           SDI = 0;
      SCK = 1;
      CMD <<= 1;  // в это время выдерживается пауза высокого уровня SCK, хотя она тут и не нужна, между командами все равно больше 25 нс
      SCK = 0;
   }
   while (--n);      // во время перехода по циклу выдерживается пауза низкого уровня SCK, хотя она тут и не нужна.

   // и тут SCK уже равно 0.
   nSEL=1;

}
циклы do {} while (--var); компилируются эффективнее, чем while(n--) {}. Длинные nop не нужны - по даташиту длительность высокого и низкого уровней SCK должна быть не меньше 25 нс, у вас процессор при всем желании так быстро ногами дергать не сможет. SDI после этой функции может оставаться в любом состоянии и сбрасывать его при инициализации тоже необязательно.

3) сделайте отдельную функцию для
Код
    WriteFSKbyte( n );
    ChkSum += n;
исключите возможность ошибки "передали одно, а прибавили другое".

4)Какой смысл команды 0xCC00 в вашем тексте? Она выдает содержимое регистра статуса во время последних 8 импульсов SCK, но вы его не читаете. Для начала добейтесь, чтобы модуль вам ответил что-то осмысленное на эту команду. Зациклите ее, засинхронизируйте осциллограф от nSEL, посмотрите, что творится на ногах.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
vank
сообщение Apr 30 2008, 04:47
Сообщение #18


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

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



Извините, на моя просба никто не можеть помочь?
Go to the top of the page
 
+Quote Post
tazik
сообщение May 1 2008, 09:25
Сообщение #19


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

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



Цитата(vank @ Apr 30 2008, 12:47) *
Извините, на моя просба никто не можеть помочь?


А почему бы Вам самим не скомпилировать пример? Никаких трудностей при этом не было. Да и Вам должно быть удобней, чем лазить по asm+C тексту
В файлах код для передатчика с разными уровнями оптимизации для AVR.

Прикрепленный файл  vank.rar ( 11.47 килобайт ) Кол-во скачиваний: 164


Может быть, я чего-то просто-напросто не понимаю?

Сообщение отредактировал tazik - May 1 2008, 09:26
Go to the top of the page
 
+Quote Post
wasp
сообщение May 1 2008, 10:44
Сообщение #20


Участник
*

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



Цитата(Сергей Борщ @ Apr 30 2008, 03:33) *
Скачал описание модуля по ссылке из первого поста. Не нашел в нем команд 0xD040, 0xC823.

Раз уж ветка по С:
1) Ээх, не любите вы себя - потратьте час, присвойте всем битам (и/или их комбинациям) осмысленные имена через #define и потом пишите WriteCMD( SET_CONFIG | BAND_433 | CLK_2MHZ | LOAD_CAP_11_5_PF | M1 ) - и программа читабельная станет и вероятность ошибиться гораздо меньше.

2) вот вам предложение:
Код
void WriteCMD( uint CMD )
{
   uchar n=16;
   // SCK тут уже равно 0
   nSEL=0;
   do
   {
      if (CMD & (1 << 15) )
           SDI = 1;
      else
           SDI = 0;
      SCK = 1;
      CMD <<= 1;  // в это время выдерживается пауза высокого уровня SCK, хотя она тут и не нужна, между командами все равно больше 25 нс
      SCK = 0;
   }
   while (--n);      // во время перехода по циклу выдерживается пауза низкого уровня SCK, хотя она тут и не нужна.

   // и тут SCK уже равно 0.
   nSEL=1;

}

Спасибо большое!
Действительно так гораздо компактнее. smile.gif
Цитата
Какой смысл команды 0xCC00 в вашем тексте? Она выдает содержимое регистра статуса во время последних 8 импульсов SCK, но вы его не читаете. Для начала добейтесь, чтобы модуль вам ответил что-то осмысленное на эту команду. Зациклите ее, засинхронизируйте осциллограф от nSEL, посмотрите, что творится на ногах.

Сделал как Вы посоветовали, обнаружилось, что на выходе SDI постоянно ноль.
Код
void RF2_Init( void )
{
   nSEL=1;
   SDI=1;
   SCK=0;
   FSK=0;
}

void main()
{
  
   RF2_Init();

   while (1)
   {
      WriteCMD( 0xCC00 );
   }
}

/*****************************************************************/
void WriteCMD( uint CMD )
{
   uchar n=16;
   // SCK тут уже равно 0
   nSEL=0;
   do
   {
      if (CMD & 0x8000)
              SDI = 1;
      else
              SDI = 0;

      SCK = 1;
      CMD = CMD<<1;  // в это время выдерживается пауза высокого уровня SCK, хотя она тут и не нужна, между командами все равно больше 25 нс
      SCK = 0;
   }
   while (--n);      // во время перехода по циклу выдерживается пауза низкого уровня SCK, хотя она тут и не нужна.

   // и тут SCK уже равно 0.
   nSEL=1;

}

причем клок синал SCK и nSEL идут , а SDI нету 07.gif


Причем даже когда делаю так:

Код
     if (CMD & 0x8000)
             SDI = 1;
      else
             SDI = 1;

все равно ноль.

Причем когда делаю так:
Код
//     if (CMD & 0x8000)
             SDI = 1;
   //   else
             SDI = 0;

генерит...

Что это - ошибка компилятора или мои кривые руки?
Да, компилер CCS_PCWHD_v4.057
Go to the top of the page
 
+Quote Post
vank
сообщение May 1 2008, 12:20
Сообщение #21


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

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



Цитата(tazik @ May 1 2008, 13:25) *
А почему бы Вам самим не скомпилировать пример? Никаких трудностей при этом не было. Да и Вам должно быть удобней, чем лазить по asm+C тексту
В файлах код для передатчика с разными уровнями оптимизации для AVR.

Спасибо "tazik"! Но мне необходим код для PIC-a. А я не знаю C и поетому не могу скомпилировать пример.
Go to the top of the page
 
+Quote Post
tazik
сообщение May 1 2008, 12:24
Сообщение #22


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

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



Цитата(vank @ May 1 2008, 20:20) *
Но мне необходим код для PIC-a. А я не знаю C и поетому не могу скомпилировать пример.


Пожалуйста, только для PIC`а у меня ничего нет (. Для AVR`а пример скомпилировался с 1-го раза без всяких замечаний.
Go to the top of the page
 
+Quote Post
wasp
сообщение May 1 2008, 16:04
Сообщение #23


Участник
*

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



поставил тип переменной CMD "unsigned long int" вместо "unsigned int" - все пошло.
я озадачен 05.gif
Go to the top of the page
 
+Quote Post
wasp
сообщение May 2 2008, 08:50
Сообщение #24


Участник
*

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



никак не получается инициализировать RFM02.
по прежнему после инициализации нет импульсов на выходе nIRQ и не меняется частота CLK (настраиваемый выход клоксигнала)
хотя когда гоняю в цикле команду CC00 (read status registor) выдает такой пакет (значит команды в принципе проходят) :

а что это значит?
в даташите об этом только это:


помогите советом. crying.gif
Go to the top of the page
 
+Quote Post
Different
сообщение May 22 2008, 12:13
Сообщение #25


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

Группа: Участник
Сообщений: 170
Регистрация: 7-03-07
Пользователь №: 25 965



Вот куски кода для модулей HopeRF с немецких сайтов. Может кому чего в них пригодится.
Ссылки дали сами китайцы... a14.gif
Прикрепленные файлы
Прикрепленный файл  rfm01.zip ( 1.98 килобайт ) Кол-во скачиваний: 101
Прикрепленный файл  rfm02.zip ( 2.08 килобайт ) Кол-во скачиваний: 92
Прикрепленный файл  rfm12.zip ( 2.25 килобайт ) Кол-во скачиваний: 100
Прикрепленный файл  RFM12_RX_TX.zip ( 113.53 килобайт ) Кол-во скачиваний: 129
 
Go to the top of the page
 
+Quote Post
SashaGubov
сообщение Sep 12 2008, 10:45
Сообщение #26


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 13-05-06
Из: Киев
Пользователь №: 17 060



а эти модули от 5 вольт можно питать?
Go to the top of the page
 
+Quote Post

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

 


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


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