[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Передатчик с обратной связью на NRF24L01
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
отлично

 
  • Страница 1 из 1
  • 1
Поиск: