igrok_by | Дата: Среда, 07.10.2015, 14:13 | Сообщение # 1 |
Группа: Пользователи
Сообщений: 2
Статус: Offline
| День добрый. Может кто желал подобную связь??? Алгоритм работы просто. Получили команду - обработали (сняли показания с датчиков) - выкинули ответ. Я тут пробовал воято но что-то не чего путно не получается. То вроде как цифры растут то опять скинутся. В чем проблема не знаю. Может у кого есть свой пример. Код $regfile = "m8def.dat" $crystal = 8000000 '$regfile = "m328pdef.dat" '$crystal = 16000000 'конфигурация дисплея '================================================================= Config Lcdpin = Pin , Rs = Portd.4 , E = Portd.3 , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 Config Lcd = 16 * 2 Cursor Off Cls
'Для передатчика '-------------------------------------------------------------- 'Заявить отдельные подпрограммы Declare Sub R_register(byval Command As Byte , Byval C_bytes As Byte) Declare Sub W_register(byval C_bytes As Byte)
'SPI (nRF24L01) команды Const Write_reg = &H20 'Определить Команду Записи В Реестр Const Rd_rx_pload = &H61 'Define Rx Полезной Нагрузки Адрес Регистра Const Wr_tx_pload = &HA0 'Определить Tx Полезной Нагрузки Адрес Регистра Const Flush_tx = &HE1 'Определить Флеш Tx Зарегистрировать Команду
'SPI (nRF24L01) регистры (адреса) Const Config_nrf = &H00 'Config адрес регистра Const En_aa = &H01 'Включить Автоматическое Подтверждение регистрации адрес Const En_rxaddr = &H02 'Включено Rx адреса " адрес регистра" Const Rf_ch = &H05 'RF channel' адрес регистра Const Rf_setup = &H06 'РФ Setup " (Настройка) адрес регистра" Const Status = &H07 'Статус " адрес регистра" Const Rx_addr_p0 = &H0A 'rx адрес Pipe0 " зарегистрировать адрес" Const Rx_pw_p0 = &H11 'rx полезной нагрузки ширина , Pipe0 " зарегистрировать адрес" Const Fifo_status = &H17 'fifo - Регистр Состояния " регистрация адреса" Const Tx_addr = &H10 'TX address (адрес)
'Переменные кеша Dim D_bytes(6) As Byte , B_bytes(5) As Byte Dim Q As Byte , W As Byte , E As Byte , R As Byte , T As Byte
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1
'Программное обеспечение SPI НЕ работает с nRF24L01, используйте оборудование SPI только, но эсэсовцы pin-код должен управляться нашей функцией Config Pind.5 = Output 'CE pin is output Config Pinb.2 = Output 'SS pin is output Config Pind.7 = Input 'IRQ pin is input Ce Alias Portd.5 Ss Alias Portb.2 Irq Alias Pind.7
'основная прога Spiinit
Set Ce Waitms 10 Reset Ce Reset Ss Cls Lcd "RX_device"
Call R_register(status , 1) 'Читать Регистр СОСТОЯНИЯ Reset Ce 'Set CE низко, чтобы получить доступ к регистрам
Gosub Setup_rx 'Настройка nRF24L01 для RX Waitms 2 Set Ce 'Set nRF20L01 в режиме приема
Do
If Irq = 0 Then 'Подождите, пока IRQ происходит, pin-код становится низким на прерывание Reset Ce 'Ресивер должен быть включен до чтения pload
Call R_register(rd_rx_pload , 5) 'Читать 5 байт RX pload регистрации Q = B_bytes(1) W = B_bytes(2) E = B_bytes(3) R = B_bytes(4) T = B_bytes(5) Cls Lcd "q=" ; Q ; "w=" ; W ; "e=" ; E Lowerline Lcd "r=" ; R ; "t=" ; T ; " " ;
D_bytes(1) = Write_reg + Status 'Сброс RX_DR бит состояния D_bytes(2) = &B01000000 'Напиши 1 до RX_DR бит для сброса IRQ Call W_register(2) Set Ce 'Включить приемник снова
Wait 2
Incr T Incr Q Incr W Incr E Incr R
If T = 250 Then T = 0 End If If Q = 250 Then Q = 0 End If If W = 250 Then W = 0 End If If E = 250 Then E = 0 End If If R = 250 Then R = 0 End If
Set Ce Waitms 10 Reset Ce Reset Ss Call R_register(status , 1) 'Читать Регистр СОСТОЯНИЯ Reset Ce 'Set CE низко, чтобы получить доступ к регистрам
Gosub Setup_rx 'Настройка nRF24L01 для RX Waitms 2 Set Ce 'Set nRF20L01 в режиме приема
D_bytes(1) = Flush_tx 'Flush the TX_fifo буфера Call W_register(1) D_bytes(1) = Write_reg + Status 'Reset IRQ бит D_bytes(2) = &B00110000 Call W_register(2)
Gosub Setup_tx 'Настройка nrf240l01 для TX D_bytes(1) = Wr_tx_pload 'Положи 5 байт в TX pload буфера D_bytes(2) = Q 'Байт 1 D_bytes(3) = W 'Байт 2 D_bytes(4) = E 'Байт 3 D_bytes(5) = R 'Байт 4 D_bytes(6) = T 'Байт 5 будет увеличиваться каждый цикл Call W_register(6) 'Запись 6 байт для регистрации
Cls Lcd "q=" ; Q ; "w=" ; W ; "e=" ; E Lowerline Lcd "r=" ; R ; "t=" ; T ; " " ;
Waitms 2 Set Ce 'Set CE на короткий миг, чтобы передать буфер fifo Waitms 1 Reset Ce
Waitms 20
Set Ce Waitms 10 Reset Ce Reset Ss
Call R_register(status , 1) 'Читать Регистр СОСТОЯНИЯ Reset Ce 'Set CE низко, чтобы получить доступ к регистрам
Gosub Setup_rx 'Настройка nRF24L01 для RX Waitms 2 Set Ce 'Set nRF20L01 в режиме приема
Wait 2 End If
Loop
'Sub подпрограмм Sub W_register(byval C_bytes As Byte) 'Пишите зарегистрировать с SPI Reset Ss 'Руководство управления СС контакт, установить СС низких до смещение, байт Spiout D_bytes(1) , C_bytes 'Shiftout байты данных SPI корыта, C_bytes это количество байт, которые будут написаны Set Ss 'Set СС высокого End Sub
Sub R_register(byval Command As Byte , Byval C_bytes As Byte) As Byte 'C_bytes = Count_bytes, номер off байт для чтения Reset Ss 'Ручное управление СС контакт, установить на низком уровне до переход в/из байт Spiout Command , 1 'Первый shiftout в реестр, который будет читать Spiin B_bytes(1) , C_bytes 'Прочитал назад байты из SPI направлять по nRF20L01 Set Ss 'Установить СС обратно на высоком уровне End Sub
Setup_rx: 'Подготовка к RX D_bytes(1) = Write_reg + Rx_addr_p0 'RX адрес для pipe0 D_bytes(2) = &H34 D_bytes(3) = &H43 D_bytes(4) = &H10 D_bytes(5) = &H10 D_bytes(6) = &H01 Call W_register(6) 'Отправить 6 байт для SPI D_bytes(1) = Write_reg + En_aa 'Enable auto ACK на pipe0 D_bytes(2) = &H01 Call W_register(2) D_bytes(1) = Write_reg + En_rxaddr 'Включить RX адрес для pipe0 D_bytes(2) = &H01 Call W_register(2) D_bytes(1) = Write_reg + Rf_ch 'Настройка каналов D_bytes(2) = 40 'Частота 2440 MГц Call W_register(2) D_bytes(1) = Write_reg + Rx_pw_p0 'Set RX pload ширина для pipe0 D_bytes(2) = 5 Call W_register(2) D_bytes(1) = Write_reg + Rf_setup 'Настройка РФ -> Выходной мощности 0 дБм, datarate 2 Мбит / с и МШУ прибыль по D_bytes(2) = &H0F Call W_register(2) D_bytes(1) = Write_reg + Config_nrf 'Настройка CONFIG -> I=1 (RX_device), PWR_UP=1, CRC 2bytes, Включить CRC D_bytes(2) = &H0F Call W_register(2) Return
Setup_tx: 'Подготовка к TX D_bytes(1) = Write_reg + Tx_addr 'TX адрес D_bytes(2) = &H34 D_bytes(3) = &H43 D_bytes(4) = &H10 D_bytes(5) = &H10 D_bytes(6) = &H01 Call W_register(6) D_bytes(1) = Write_reg + Rx_addr_p0 'RX адрес для pipe0 D_bytes(2) = &H34 D_bytes(3) = &H43 D_bytes(4) = &H10 D_bytes(5) = &H10 D_bytes(6) = &H01 Call W_register(6) D_bytes(1) = Write_reg + En_aa 'Enable auto ACK на pipe0 D_bytes(2) = &H01 Call W_register(2) D_bytes(1) = Write_reg + En_rxaddr 'Включить RX адрес для pipe0 D_bytes(2) = &H01 Call W_register(2) D_bytes(1) = Write_reg + Rf_ch 'Настройка каналов D_bytes(2) = 40 'Частота 2440 MГц Call W_register(2) D_bytes(1) = Write_reg + Rf_setup 'Настройка РФ -> Выходной мощности 0 дБм, datarate 2 Мбит / с и МШУ прибыль по D_bytes(2) = &H0F Call W_register(2) D_bytes(1) = Write_reg + Config_nrf 'Настройка CONFIG -> I=0 (TX_device), PWR_UP=1, CRC 2bytes, Включить CRC D_bytes(2) = &H0E Call W_register(2) Return
|
|
| |
exersizze | Дата: Суббота, 10.10.2015, 11:47 | Сообщение # 2 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
| igrok_by, глянь сюда http://avrproject.ru/forum/3-138-1 там схожая задача. Работает на ура.
|
|
| |
igrok_by | Дата: Понедельник, 06.03.2017, 09:26 | Сообщение # 3 |
Группа: Пользователи
Сообщений: 2
Статус: Offline
| Всем привет. Стал вопрос подключение SE8R01 модуля. Точнее китаёза писал что это Nrf24L01, а когда пришло и первая попытка подключения не прошла прислал даташит на SE8R01. Так полистав, я в них не селен, разницу между модулями я чот не нашел, адреса вроде теже и тд. Кто небуть их конектил??? Даташит: Доступно только для пользователей
|
|
| |
Terro | Дата: Среда, 30.10.2019, 11:56 | Сообщение # 4 |
Группа: Пользователи
Сообщений: 3
Статус: Offline
| отлично
|
|
| |