Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с nRF905
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Rf & Microwave Design
silqver
Пытаюся обмениваться данными по SPI с модулем tlx905 на базе чипа nRF905. Из регистра конфигурации считываются нули... Подскажите пожалуйста кто работал с этой микросхемой алгоритм чтения записи данных. Как я понял из ДТ: вначале включается SPI потом отправляетс байт команды и далее байты данных, отключается SPI, режим чипа для приема команды переключается именно в момент включения SPI чипа и записи байта. Буду очень признателен если поделитесь куском рабочей проги для конфигарции данного модуля.
Tcom
Стучите в ICQ 301610730
Дам полную консультацию и примеры кодов для этого трансивера.

Вот моя библиотека для работы с этим чипом
Код
;************************************************
;** Подпрограмма работы с трансивером          **
;** nRF905 совместно с процессором             **
;** ATmega 48/88/168                           **
;************************************************
;*   ---- Используемые регистры --------------  *
;************************************************
;* Регистр Cfg предназначен для занесения пара- *
;* метра в вызываемую функцию                   *
;************************************************
;* регистр tmp1 для обмена данных               *
;* регистр tmp2 для обмена данных               *
;* регистр data для данных TX/RX                *
;************************************************
;*  CSN выбор трансивера                        *
;************************************************
;*  ------ Настройка портов SPI   ------        *
;************************************************
;*    ldi tmp1 , (1<<ddb3)|(1<<ddb5)|(1<<ddb2)  *
;*    out ddrb , tmp1                           *
;************************************************
;*  ------ Настройка  SPI модуля   ---------    *
;************************************************
;*    ldi tmp1 ,                                *
;*       (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0) *
;*    out spcr , tmp1                           *
;************************************************
freq_transiver:;установка рабочей частоты    
cbi CSN
rcall delay
ldi tmp1 , 0
rcall wait_spi
rcall wait_spi1
rcall delay
sbi CSN
rcall delay
ret
;-----------------
pwr_transiver: ;установка мощьности передатчика      
cbi CSN
rcall delay
ldi tmp1 , 1
rcall wait_spi
rcall wait_spi1
rcall delay
sbi CSN
rcall delay
ret
;-----------------
spectr_transiver:; установка ширины RX и TX адресa    
cbi CSN
rcall delay
ldi tmp1 , 2
rcall wait_spi
rcall wait_spi1
rcall delay
sbi CSN
rcall delay
ret
;-------------------------
spectr_data_transiver_rx:;ширина RX данныx
cbi CSN
rcall delay
ldi tmp1 , 3
rcall wait_spi
rcall wait_spi1
rcall delay
sbi CSN
rcall delay
ret
;------------------------
spectr_data_transiver_tx:; ширина TX данныE
cbi CSN
rcall delay
ldi tmp1 , 4
rcall wait_spi
rcall wait_spi1
rcall delay
sbi CSN
rcall delay
ret
;------------------------
rx_adress_transiver:    ;запись адреса приёмника
cbi CSN
rcall delay
ldi tmp1 , 5
rcall wait_spi
ldi tmp1 , 0xE7  ;адрес приёмника [0]
rcall wait_spi
rcall delay
sbi CSN
rcall delay      
cbi CSN
rcall delay
ldi tmp1 , 6
rcall wait_spi
ldi tmp1 , 0xE7 ;адрес приёмника [1]
rcall wait_spi
rcall delay
sbi CSN
rcall delay      
cbi CSN
rcall delay
ldi tmp1 , 7
rcall wait_spi
ldi tmp1 , 0xE7 ;адрес приёмника [2]
rcall wait_spi
rcall delay
sbi CSN
rcall delay        
cbi CSN
rcall delay
ldi tmp1 , 8
rcall wait_spi
ldi tmp1 , 0xE7 ;адрес приёмника [3]
rcall wait_spi
rcall delay
sbi CSN
rcall delay
ret
;------------------------
mode_qr_transiver:  ; установка конфигурации кварца и т.д.
cbi CSN
rcall delay
ldi tmp1 , 9
rcall wait_spi
rcall wait_spi1
rcall delay
sbi CSN
rcall delay
ret

;-----------------------
tx_adress_transiver: ;апись адреса передатчика
cbi CSN
rcall delay
ldi tmp1 , 34
rcall wait_spi
ldi tmp1 , 0xE7 ;адрес передатчика [0]
rcall wait_spi
ldi tmp1 , 0xE7 ;адрес передатчика [1]
rcall wait_spi
ldi tmp1 , 0xE7 ;адрес передатчика [2]
rcall wait_spi
ldi tmp1 , 0xE7 ;адрес передатчика [3]
rcall wait_spi
rcall delay
sbi CSN
rcall delay
ret
;------------------------
rx_data_transiver: ;считать данные с буфера приёмника
cbi CSN
rcall delay
ldi tmp1 , 36
rcall wait_spi
ldi tmp1 , 0
rcall wait_spi
in data , SPDR
rcall delay
sbi CSN
rcall delay
ret
;------------------------
tx_data_transiver1:;3аписать данные в буфер передатчика
cbi CSN
rcall delay
ldi tmp1 , 32
rcall wait_spi
mov tmp1,data
rcall wait_spi
rcall delay
sbi CSN
rcall delay
ret
;------------------------
delay:
;push tmp1
ldi tmp1 , 0xff
wdr
nop
nop
nop
nop
dec tmp1
brne pc-5
;pop tmp1
ret
;-------------------------
wait_spi:                
out SPDR , tmp1
in tmp2 , spsr
sbrs tmp2 , spif
rjmp pc-2
ret
;-------------------------
wait_spi1:                
out SPDR , cfg
in tmp2 , spsr
sbrs tmp2 , spif
rjmp pc-2
ret
silqver
Через асю че-то пока не получилось.... поэтому спрошу здесь. Из вашего кода следует, если я правильно понял такой алгоритм: включение SPI трансивера, запись байта команды, запись байта данных, выключение SPI. Для записи нескольких байт повторение данной процедуры для каждого байта. Возможно ли так: включение SPI трансивера, запись байта команды, запись байта или байтов данных(зависит от команды), выключение SPI. Т.е. массив байтов данных записывается за один раз. В программе вы привели примерную адресацию регистра конфигурации ldi tmp1,xx , а как адресуется он на самом деле, т.е. по байтам или как?
Я пока так и не смог получить ответ от своего чипа sad.gif поэтому и задаю такие вопросы...
И еще вопрос smile.gif Какие антенны вы используете для этих трансиверов? У меня на провод 1/4 волны на 433 постоянно идет детекция несущей, судя по ноге CD при отключенном передатчике второго модуля.
Заранее Вам благодарен за ответы...
Tcom
У вас есть даташит на етот чип на русском?
Если нет могу переслать.
//---------------------------------------------------
freq_transiver:;установка рабочей частоты
cbi CSN // Выбор трансивера
rcall delay // Задержка
ldi tmp1 , 0 // Адрес регистра в который пишем-читаем (в данном случае пишем)
rcall wait_spi // передаём в нордик адрес регистра
rcall wait_spi1 // передаём в нордик данные (они находятся в регистре cfg)
rcall delay // задержка
sbi CSN // снимаем выбор кристала (типа конец транзакции)
rcall delay // задержка
ret
//---------------------------------------------------
silqver
промыл плату...и чудо smile.gif коннект по SPI есть (у меня программный SPI). Читаю и пишу нормально. НО теперь новый трабл модули друг друга не видят... Какую вы использовали антенну? У меня модули TLX905 (50 омный выход несимметричный), насколько понял должен подойти обычный верт. штырь на полволны. На каком раccтоянии реально данные модули у Вас работают?
И еще, если не трудно, можно привести полный рабочий код для обмена много байтовыми пакетами через эти модули.
Tcom
Рабочий код и все тех данные выложить немогу, так как это является собственностью фирмы на которую работал.
Насчёт растояния то скажу одно мы добились нежданных результатов гдето в раене 10 - 15 км по прямой, в чистом диапазоне.
А как вы опредиляете что модул видит другой?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.