Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Модуль LoRa E220-900T22D

Сообщений 1 страница 19 из 19

1

Перевел мануал, написал простенькую программку, только не знаю как выложить на форум

0

2

Перевод можно выложить на файлообменник, а здесь дать ссылку.

Листинг программы можно прямо в теле сообщения оформить как "Свернутый текст", "Цитата" или "Код".
Соответствующие "кнопочки" есть в окне Редактора сообщений...
Работа с Форумом

0

3

Очень интересная тема! 5-7км. дальность связи это круто  :flirt:

0

4

Всё жду и жду эти модули...
Жесть, на радио рынке нет, может из пульта электросчётчика чего выдрать?
Кстати, в общении по UART нет контрольной суммы?

0

5

Получилось соединится.

Всё просто:
;Команды:
;=== С0-Запись
;=== С1-Чтение
;=== С2-Временное изменение
;=== С4-неверный формат ответа

;============ ПРОТОКОЛ EBAY ЕГО МОДЕМА
;1-Комманда
;2-Cтартовый адрес
;3-Кол-во
;4-Параметр

В ответ приходит возможность считать несколько байт сразу в ответ.

tx(0)=$c1 ; команда;
tx(1)=$00 ;стартовый адрес
tx(2)=$0A ;длина

https://upforme.ru/uploads/0000/25/b8/1295/t733453.jpg

Ответ участка кода:

PureB
Код:
;=== Ev3658
EnableExplicit 

Enumeration
  #okno
  #polotno ;Картинка спрайта
  #sprite  ;Окно редатора спрайтов
  #timerchat
  #com_port
EndEnumeration
Global x.c,y.c,w.c,h.c
Global event.c
Global p.c,o.c

Global vrb.a,vrc.c
Global Dim mem_chat.a(8193)
Global trig_mem.c
Global x_zoom_chat.c,y_zoom_chat.c

x_zoom_chat=128*8
y_zoom_chat=64*8
x=0
y=0
w=x_zoom_chat+10
h=y_zoom_chat+200

;---- Uart переменные
Global On_uart.a
Global Dim tx.a(1024) ;Буфер приёма
Global tm_rx.a
Global Dim rx.a(1024)
Global byte_tm.a,param.a
Goto PROG:

;============ ПРОТОКОЛ EBAY ЕГО
;1-Комманда
;2-Cтартовый адрес
;3-Кол-во
;4-Параметр


;Команды:
;=== С0-Запись
;=== С1-Чтение
;=== С2-Временное изменение
;=== С4-неверный формат ответа

; C0:00:03:12:34:62 -  1234 

;===== Адреса модема
;=== 00H - ч/з - H-Byte 

REGISTR_RX:
byte_tm=3
param=$09
;Протокол модема 2 (Чтение)
tx(0)=$c1 ; команда; (C1+starting address+parameters ; C1+starting address+length+parameters 
tx(1)=$00 ;стартовый адрес
tx(2)=$0A ;длина 
;tx(3)=param ;Параметры
If WriteSerialPortData(#com_port, @tx(0),byte_tm)
      Debug "Отправка "+Hex(tx(0))+":"+Hex(tx(1))+":"+Hex(tx(2))+":"+Hex(tx(3))+": "
      ;Delay(100) ;Делаем паузу
    EndIf
Return

PROG:
;Debug CPUName()
p=13
If OpenSerialPort(#com_port,"COM"+Str(p),9600,#PB_SerialPort_NoParity,8,1,#PB_SerialPort_NoHandshake,255,255)
  Gosub registr_rx:
  Debug "COM порт  "+Str(p)+", отправлен запрос."
  
    on_uart=1
  Else
    on_uart=0
  EndIf
  
    
If OpenWindow(#okno,x,y,w,h,"ТЕЛЕГРАФФ 868",#PB_Window_Tool|#PB_Window_SystemMenu| #PB_Window_ScreenCentered|#PB_Window_BorderLess)
  CreateImage(#polotno,x_zoom_chat,y_zoom_chat)
  ImageGadget(#sprite,4,4,x_zoom_chat,y_zoom_chat,ImageID(#polotno))
  SetWindowColor(#okno, RGB(0,0,0))
  StartDrawing(ImageOutput(#polotno))
  ;Box(5,5,x_zoom_chat,y_zoom_chat,(RGB(10,10,10)))
  AddWindowTimer(#okno,#timerchat,100)
  
  trig_mem=0
  
  For o=1 To y_zoom_chat Step 8
    For p=1 To x_zoom_chat Step 8
      trig_mem+1
      Box(p+1,o+1,6,6,(RGB(mem_chat(trig_mem), 68, 67)))
    Next p
  Next o
  
    ;Debug trig_mem
  StopDrawing()
  SetGadgetState(#sprite,ImageID(#polotno))
  Global s.s
  Repeat 
    Event = WaitWindowEvent()
    If Event = #PB_Event_Timer And EventTimer() = #timerchat ;Таймер обработки чата
    EndIf
    
    ;-----  UART
    
   While AvailableSerialPortInput(#com_port) ;---- Получение данных с COM порта
      If ReadSerialPortData(#com_port, @rx(tm_rx), 1) ;Считывание 1 байта
        s=s+Hex(rx(tm_rx))+":"
        tm_rx+1
        Debug "Приём "+Str(tm_rx)+" "+s
             EndIf ;Если ошибка передачи байта
             ;Debug "Приём "+Str(tm_rx) + " "+Hex(rx(tm_rx),#PB_Byte)
             
   Wend
     Select Event
       Case #PB_Event_Gadget
         Select EventGadget()
           Case 1 
              CloseWindow(0)
              End  
         EndSelect
      EndSelect
   Until Event = #PB_Event_CloseWindow
EndIf 
CloseSerialPort(#com_port)
End

https://upforme.ru/uploads/0000/25/b8/1295/t136060.jpg

Отредактировано Ev3658 (2022-11-13 20:46:58)

0

6

Угощайтесь переводом простой документации.

https://disk.yandex.ru/i/PGwrzRifkMPTPg

https://upforme.ru/uploads/0000/25/b8/1295/t126098.jpg

С конфигурацией то понятно. Но а как в целом данные то передавать?  :confused:

+1

7

Данные оказывается просто передаются в другом режиме работы модема.
Для настройки модема я никуда не цеплял M0 и M1, это логические единицы.

0

8

EBYTE их технологии.....

Пришла отладочная плата на STM 8L151G4 - жуть...
Для полного счастья EBYTE модемом надо управлять и M0 и M1 - тогда можно мутить сканер.
Я не нашел как управлять M0 и M1 по UART, хотя в документации заикнулись про какой-то режим, но опять-же описание отсутствует.

Может есть у кого расширенная версия тайны EBYTE и технологий?

Сложность заключается в том, что они поставили свой микроконтроллер между трансивером и мной  :hobo:
Я бы использовал CTS/RTS и т.п. в UART, но думал на плате кто сделал, а сделали на STM8 и какой-то код туда впихнули.

https://upforme.ru/uploads/0000/25/b8/1295/t203360.jpg

При нажатии 2х USER кнопок у разъёма USB модуль выдаёт:

https://upforme.ru/uploads/0000/25/b8/1295/t331795.jpg

При этом нет связи с модемом. Нужно написать код под STM8 для PLC модема )))) не...это трындец.... выдрать, замногодрыжить и через 3.14 в "Телетайп"  :glasses:

Отредактировано Ev3658 (2022-11-26 20:19:44)

0

9

Всем доброго здоровья. Подниму немного тему о ЛоРа. Прикупил модули е220-400m22s и не знаю с какой стороны к ним подойти. Читал документации и ничего не понял. Есть отважные кто на пальцах объяснит и даст пинка?)

0

10

Бог с ним с E220-400m22s. Кто-то же полюбому, из здесь присутствующих, налаживал связь с чипами SX126x или SX127x по SPI? Я отважился только прочитать что он шлёт при запуске. Принимается 0×А2. Во время замыкания reset на землю - 0×FF. Как писать в регистры, должны ли быть какие-то ответы и, тем более, передать что-то по радиоканалу, тёмный лес...

0

11

если не знаешь регистры бери готовое на С и смотри, все есть

Код:
 * @brief The address of the register holding the first byte defining the CRC seed
 */
#define SX126X_REG_CRCSEEDBASEADDRESS 0x06BC

/**
 * @brief The address of the register holding the first byte defining the CRC polynomial
 */
#define SX126X_REG_CRCPOLYBASEADDRESS 0x06BE

/**
 * @brief The address of the register holding the first byte defining the whitening seed
 */
#define SX126X_REG_WHITSEEDBASEADDRESS 0x06B8

/**
 * @brief The addresses of the registers holding SyncWords values
 */
#define SX126X_REG_SYNCWORDBASEADDRESS 0x06C0

/**
 * @brief The addresses of the register holding LoRa Modem SyncWord value
 *        0x1424: LoRaWAN private network,
 *        0x3444: LoRaWAN public network
 */
#define SX126X_REG_LR_SYNCWORD 0x0740

/**
 * @brief The address of the register holding the coding rate configuration extracted from a received LoRa header
 */
#define SX126X_REG_LR_HEADER_CR 0x0749
#define SX126X_REG_LR_HEADER_CR_POS ( 4U )
#define SX126X_REG_LR_HEADER_CR_MASK ( 0x07UL << SX126X_REG_LR_HEADER_CR_POS )

/**
 * @brief The address of the register holding the CRC configuration extracted from a received LoRa header
 */
#define SX126X_REG_LR_HEADER_CRC 0x076B
#define SX126X_REG_LR_HEADER_CRC_POS ( 4U )
#define SX126X_REG_LR_HEADER_CRC_MASK ( 0x01UL << SX126X_REG_LR_HEADER_CRC_POS )

/*!
 * The address of the register giving a 32-bit random number
 */
#define SX126X_REG_RNGBASEADDRESS 0x0819

/*!
 * The address of the register used to disable the LNA
 */
#define SX126X_REG_ANA_LNA 0x08E2

/*!
 * The address of the register used to disable the mixer
 */
#define SX126X_REG_ANA_MIXER 0x08E5

/*!
 * The address of the register holding RX Gain value
 *     0x94: power saving,
 *     0x96: rx boosted
 */
#define SX126X_REG_RXGAIN 0x08AC

/**
 * @brief Change the value on the device internal trimming capacitor
 */
#define SX126X_REG_XTATRIM 0x0911

/**
 * @brief Set the current max value in the over current protection
 */
#define SX126X_REG_OCP 0x08E7

/**
 * @brief WORKAROUND - Optimizing the Inverted IQ Operation, see DS_SX1261-2_V1.2 datasheet chapter 15.4
 */
#define SX126X_REG_IQ_POLARITY 0x0736

/**
 * @brief WORKAROUND - Modulation Quality with 500 kHz LoRa Bandwidth, see DS_SX1261-2_V1.2 datasheet chapter 15.1
 */
#define SX126X_REG_TX_MODULATION 0x0889

/**
 * @brief WORKAROUND - Better resistance to antenna mismatch, see DS_SX1261-2_V1.2 datasheet chapter 15.2
 */
#define SX126X_REG_TX_CLAMP_CFG 0x08D8
#define SX126X_REG_TX_CLAMP_CFG_POS ( 1U )
#define SX126X_REG_TX_CLAMP_CFG_MASK ( 0x0FUL << SX126X_REG_TX_CLAMP_CFG_POS )

/**
 * @brief RTC control
 */
#define SX126X_REG_RTC_CTRL 0x0902

/**
 * @brief Event clear
 */
#define SX126X_REG_EVT_CLR 0x0944
#define SX126X_REG_EVT_CLR_TIMEOUT_POS ( 1U )
#define SX126X_REG_EVT_CLR_TIMEOUT_MASK ( 0x01UL << SX126X_REG_EVT_CLR_TIMEOUT_POS )

/**
 * @brief RX address pointer
 */
#define SX126X_REG_RX_ADDRESS_POINTER 0x0803

/**
 * @brief RX/TX payload length
 */
#define SX126X_REG_RXTX_PAYLOAD_LEN 0x06BB

/**
 * @brief Output disable
 */
#define SX126X_REG_OUT_DIS_REG 0x0580
#define SX126X_REG_OUT_DIS_REG_DIO3_POS ( 3U )
#define SX126X_REG_OUT_DIS_REG_DIO3_MASK ( 0x01UL << SX126X_REG_OUT_DIS_REG_DIO3_POS )

/**
 * @brief Input enable
 */
#define SX126X_REG_IN_EN_REG 0x0583
#define SX126X_REG_IN_EN_REG_DIO3_POS ( 3U )
#define SX126X_REG_IN_EN_REG_DIO3_MASK ( 0x01UL << SX126X_REG_IN_EN_REG_DIO3_POS )

/**
 * @brief TX bitbang A
 */
#define SX126X_REG_BITBANG_A_REG 0x0680
#define SX126X_REG_BITBANG_A_REG_ENABLE_POS ( 4U )
#define SX126X_REG_BITBANG_A_REG_ENABLE_MASK ( 0x07UL << SX126X_REG_BITBANG_A_REG_ENABLE_POS )
#define SX126X_REG_BITBANG_A_REG_ENABLE_VAL ( 0x01UL << SX126X_REG_BITBANG_A_REG_ENABLE_POS )

/**
 * @brief TX bitbang B
 */
#define SX126X_REG_BITBANG_B_REG 0x0587
#define SX126X_REG_BITBANG_B_REG_ENABLE_POS ( 0U )
#define SX126X_REG_BITBANG_B_REG_ENABLE_MASK ( 0x0FUL << SX126X_REG_BITBANG_B_REG_ENABLE_POS )
#define SX126X_REG_BITBANG_B_REG_ENABLE_VAL ( 0x0CUL << SX126X_REG_BITBANG_B_REG_ENABLE_POS )

/**
 * @brief Number of symbols given as SX126X_REG_LR_SYNCH_TIMEOUT[7:3] * 2 ^ (2*SX126X_REG_LR_SYNCH_TIMEOUT[2:0] + 1)
 */
#define SX126X_REG_LR_SYNCH_TIMEOUT 0x0706

/**
 * @brief Base address of the register retention list
 */
#define SX126X_REG_RETENTION_LIST_BASE_ADDRESS 0x029F

/**
 * @brief GFSK node address
 *
 * @remark Reset value is 0x00
 */
#define SX126X_REG_GFSK_NODE_ADDRESS 0x06CD

/**
 * @brief GFSK broadcast address
 *
 * @remark Reset value is 0x00
 */
#define SX126X_REG_GFSK_BROADCAST_ADDRESS 0x06CE

/*


 SX126X_SET_SLEEP                  = 0x84,
    SX126X_SET_STANDBY                = 0x80,
    SX126X_SET_FS                     = 0xC1,
    SX126X_SET_TX                     = 0x83,
    SX126X_SET_RX                     = 0x82,
    SX126X_SET_STOP_TIMER_ON_PREAMBLE = 0x9F,
    SX126X_SET_RX_DUTY_CYCLE          = 0x94,
    SX126X_SET_CAD                    = 0xC5,
    SX126X_SET_TX_CONTINUOUS_WAVE     = 0xD1,
    SX126X_SET_TX_INFINITE_PREAMBLE   = 0xD2,
    SX126X_SET_REGULATOR_MODE         = 0x96,
    SX126X_CALIBRATE                  = 0x89,
    SX126X_CALIBRATE_IMAGE            = 0x98,
    SX126X_SET_PA_CFG                 = 0x95,
    SX126X_SET_RX_TX_FALLBACK_MODE    = 0x93,
    // Registers and buffer Access
    SX126X_WRITE_REGISTER = 0x0D,
    SX126X_READ_REGISTER  = 0x1D,
    SX126X_WRITE_BUFFER   = 0x0E,
    SX126X_READ_BUFFER    = 0x1E,
    // DIO and IRQ Control Functions
    SX126X_SET_DIO_IRQ_PARAMS         = 0x08,
    SX126X_GET_IRQ_STATUS             = 0x12,
    SX126X_CLR_IRQ_STATUS             = 0x02,
    SX126X_SET_DIO2_AS_RF_SWITCH_CTRL = 0x9D,
    SX126X_SET_DIO3_AS_TCXO_CTRL      = 0x97,
    // RF Modulation and Packet-Related Functions
    SX126X_SET_RF_FREQUENCY          = 0x86,
    SX126X_SET_PKT_TYPE              = 0x8A,
    SX126X_GET_PKT_TYPE              = 0x11,
    SX126X_SET_TX_PARAMS             = 0x8E,
    SX126X_SET_MODULATION_PARAMS     = 0x8B,
    SX126X_SET_PKT_PARAMS            = 0x8C,
    SX126X_SET_CAD_PARAMS            = 0x88,
    SX126X_SET_BUFFER_BASE_ADDRESS   = 0x8F,
    SX126X_SET_LORA_SYMB_NUM_TIMEOUT = 0xA0,
    // Communication Status Information
    SX126X_GET_STATUS           = 0xC0,
    SX126X_GET_RX_BUFFER_STATUS = 0x13,
    SX126X_GET_PKT_STATUS       = 0x14,
    SX126X_GET_RSSI_INST        = 0x15,
    SX126X_GET_STATS            = 0x10,
    SX126X_RESET_STATS          = 0x00,
    // Miscellaneous
    SX126X_GET_DEVICE_ERRORS = 0x17,
    SX126X_CLR_DEVICE_ERRORS = 0x07,

0

12

Регистры в даташите прописаны. С их адресами проблем нет. Сишные библиотеки на гитхабе ковырял. Не понятно как это должно выглядеть в плане общения по spi. К примеру SetStandby 0×80. Rc значение 0, Xosc 1. Слать ЛоРа один байт со значением 80 потом второй с нужным мне значением 1 или 0? Должны ли быть от неё ответы? В какие моменты? https://upforme.ru/uploads/0000/25/b8/2118/t521550.jpg

0

13

ну да, сначала регистр а потом вторым байтом данные. Ответа может и не быть.

Отредактировано Yuriy.pv (2023-07-08 19:58:15)

0

14

Вот здесь и здесь (оттуда же) были ?

0

15

Были, читали, смотрели. Здесь, на форуме, тоже находил код, правда на sx127x.Анализировал его. Он несколько отличается от sx126x, судя по даташитам. Идеи есть. Один добрый человек помог немного разобраться в сути общения с модулем. Правда он больше акцентировался и практиковался на sx127x, но ради меня изучил sx126x и дал немного примеров. Как будет свободное время,  сяду за комп, попробую примеры связать воедино.
Yuriy.pv, спасибо за пояснение, видимо так оно и есть.

Отредактировано Nec (2023-07-09 09:29:19)

0

16

Связь с модулем наладил. Команды отрабатывает, регистры читает и пишет, ответы получаю. Попутно был затык с передачей переменных в несколько байт через Spiout переменная, n . Баском опять, зачем-то, отправляет сначала младший байт, потом старший. Хотя в настройках SPI указано MSB first. Тут, по старой памяти, swap выручил.
Теперь упёрся в отправку сообщений. После записи в буфер и команды "Set_TX" с таймаутом "0"  в ответ приходит что-то типа "режим Stanby_XOSC - команда принята, но по каким-то причинам не может быть выполнена". Код 0х3 - 0х5. И далее на все последующие команды тот же ответ. До перезагрузки модуля....

0

17

ЛоРу победил. Связь налажена. Когда все понято и прочитано, кажется, что ничего сложного в этом и не было. По последним тестам, в условиях города, связь около 1 Км. Без прямой видимости. Передача 20 байт занимает 200-300 мс. Думаю, это расстояние не предел, т.к. настроек модуляции куча и есть куда "двигаться". Спасибо всем, кто откликнулся!

+2

18

Жесть с чипом на прямую общаться  %-)
Но в целом тема действительно хорошая.
Надеюсь поддержу развитие когда будет практика с Lora Wan

0

19

С LoRa wan не заморачивался. Не было необходимости. Тупо, передатчик-приёмник. Чипы LoRa бывают разные и управлять ими нужно по-разному. Я выбрал дешманский на aliexpress. На сегодняшний день стоит 250р. Модуль на базе LLCC68. Как я понял, китайский аналог SX1268. Урезанный в функционале немного. Но, на сегодняшний день добился связи в городских условиях до 3км. Использую для телеметрии в летательных аппаратах. В воздухе ещё больше дистанция. Кажется, заявленные 5-6км будут. Видео, конечно, не передашь, но для небольших пакетов в несколько байт вполне годятся.
P.S. Это все о модуле e220-400m22s на 160мВт (22дБм, 433МГц).
На днях испробую на 868МГц 22дБм.
Есть и на 1Вт (30дБм) и даже больше) Но в рамки нашего законодательства даже первый не укладывается...

Отредактировано Nec (2023-10-15 17:58:55)

0