Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить

Re: HC-12 модуль радиосвязи uart

Сб фев 12, 2022 12:38:20

Ну я понял. У меня есть avr910. Я записал загрузчик и фьюз биты скачал

Re: HC-12 модуль радиосвязи uart

Сб фев 12, 2022 16:20:18

mixon46 писал(а):Есть класс serial. В нём есть список методов. Но в этом списке нет метода Serial.readSerial. Этот метод берётся из класса Stream.


Кто может помочь разобраться как это работает на живом примере

это надо сидеть разбираться с библиотекой...
это долго и нудно))
проще писать на С. Можно прямо в самой среде ардуино писать.
например надо передать байт по UART. Это две строчки кода.))

UDR = 1; // передать байт 1
while ( ! (UCSRA & (1<<UDRE) ); // ждём окончания передачи байта 1

Всё))

и т.д. и т.п.
:tea:

Re: HC-12 модуль радиосвязи uart

Сб фев 12, 2022 18:29:46

Понимаю. Но немного не хватает знаний. Допустим я отправляю в uart текст из трёх байт. У uart же буфер 64 байта верно? Как мне "123" считать строку в С? Записать в массив а потом поочерёдно проверять байты? Я это не понимаю

Re: HC-12 модуль радиосвязи uart

Сб фев 12, 2022 19:28:00

а что там понимать... всё предельно просто))

если артдуино собрано на ATmega328 то просто открываем даташит и смотрим как работает UART в ATmega328...
UART_ATmega328.jpg
(59.42 KiB) Скачиваний: 62


Добавлено after 11 minutes 37 seconds:
в режиме передачи:
- записываем байт в регистр UDR.
- как только в регистре UDR появляется байт он сразу передаётся в передающий регистр.
- из передающего регистра идёт передача...
TX.jpg
(68.17 KiB) Скачиваний: 59

аналогично в режиме приёма... только всё в обратной последовательности...
RX.jpg
(70.33 KiB) Скачиваний: 55

вывод:
передавать и принимать по UART можно только по одному байту...

Например так:

UDR = 1; // передать байт 1
while ( ! (UCSRA & (1<<UDRE) ); // ждём окончания передачи байта 1
UDR = 2; // передать байт 2
while ( ! (UCSRA & (1<<UDRE) ); // ждём окончания передачи байта 2
UDR = 3; // передать байт 3
while ( ! (UCSRA & (1<<UDRE) ); // ждём окончания передачи байта 3
...

и т.д.

Что тут сложного ?))
:tea:

точно так же работает и SPI...

Re: HC-12 модуль радиосвязи uart

Сб фев 12, 2022 20:04:10

А если я хочу передать по типу Serial.print ("text") ;

Или же хочу принять по типу String stroka = Serial.readString ();

Как такое сделать в cvavr?

Re: HC-12 модуль радиосвязи uart

Сб фев 12, 2022 22:48:54

во-первых надо вспомнить какие бывают переменные...
байтовые...
строковые...
булевы...
...

Serial.print ("text") ; // передаём в функцию Serial.print () переменную "text".
далее функция Serial.print () переводит переменную "text" в массив байт (74 65 78 74) и передаёт по UART байты (74 65 78 74).
Как имеено это делает библиотека ардуино... я без понятия)) это надо сидеть и разбираться... а это долго и нудно))
mixon46 писал(а):Как такое сделать в cvavr?

Например так:

unsigned char x;
unsigned char bufer[]={"text"};
for (x=0; x<4 ; x++) {
UDR = bufer[x]; // передать байт из bufer
while ( ! (UCSRA & (1<<UDRE) ); // ждём окончания передачи байта
};

или можно так:

unsigned char x;
unsigned char bufer[]={"text|"};
for (x=0; bufer[x] != '|' ; x++) {
UDR = bufer[x]; // передать байт из bufer
while ( ! (UCSRA & (1<<UDRE) ); // ждём окончания передачи байта
};

можно и по другому...

в любом случае cvavr при компиляции автоматом переводит bufer[]={"text"}; в bufer[]={74 65 78 74}; и далее передаёт по UART байты (74 65 78 74).
Так же делают и другие компиляторы и программы...
:tea:

Добавлено after 8 minutes 14 seconds:
Или же хочу принять по типу String stroka = Serial.readString ();

не понятно зачем это надо...

не знаю как в ардуино а в других прогах надо указать функции Serial.readString () массив куда сохранять принятые байты...

типа так:

unsigned char bufer[100]={};
String stroka = Serial.readString (bufer);

Но это не точно)) я без понятия как работает библиотека ардуино... ))
:tea:

Re: HC-12 модуль радиосвязи uart

Вс фев 13, 2022 10:35:17

Сброшу сюда архив с flash, eeprom, fuse битами бутлоадера на 32U4. Вдруг кому либо потребуется при замене микроконтроллера в плате arduino proMicro
Вложения
ProMicro 32U4.rar
(517.3 KiB) Скачиваний: 93

Re: HC-12 модуль радиосвязи uart

Пн фев 21, 2022 23:08:28

Задержка будет по любому, и ощутимая.
По умолчанию там режим FU3, скорость порта 9600, символьная скорость по воздуху 15000, фиксированный размер воздушного пакета 256 бит, полезная нагрузка 1...17 байт.
Передача 4-х байт:
4,17мс по UART
17,07мс по воздуху
4,17мс по UART на другой стороне
Итого: 25,41мс
Но будет еще какая то задержка на то, что бы модуль догадался что "больше байт не будет, и надо начинать передачу этих 4-х".
На практике, у меня получилась задержка получения ответа от удаленной стороны (аналог пинга) 104...124мс для пакетов 16 байт с шифрованием AES-128 на 328-й Меге при тактовой 9,216МГц.

Еще имейте ввиду, что эти модули подделывают все кому не лень, и каждый клепает свою прошивку, по этому совместимости между различными клонами нет, ни по протоколу, ни по задержкам, ни по багам.

Re: HC-12 модуль радиосвязи uart

Пн фев 21, 2022 23:16:51

Ну не знаю. Я раньше испытывал. И каждый байтик приходил как надо. Правда расстояние было малым

Re: HC-12 модуль радиосвязи uart

Пн фев 21, 2022 23:19:23

А это не важно, на расстоянии 1км дополнительная задержка составит всего 3,3мкс ;-)
Ответить