Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить

Re: Принять данные на ПК со скоростью 1 Мбит

Пт ноя 22, 2019 13:20:04

Я не пойму, Вы сомневаетесь в возможности передачи или в возможности приема? Расскажите поподробнее. Может наложены какие искусственные ограничения о которых я не знаю?

Re: Принять данные на ПК со скоростью 1 Мбит

Пт ноя 22, 2019 17:39:54

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

Re: Принять данные на ПК со скоростью 1 Мбит

Пт ноя 22, 2019 18:21:39

Чушь Вы говорите. У меня прерывание вызывается с частотой 31 Килогерц, слушаете?, и, длиться оно 32 микросекунды. Передача одного байта 8 микросекунд на скорости 2 Мегабита, 2 байт 16 микросекунд. Запись в регистр один такт. Итого: за 32 микросекунды прерывания можно передать 4 байта раскидав их по прерываю перемежая полезными командами. 4 байта*31 Килогерц=124килобайта в секунду*16=1984 Килобита в секунду. Итого МЕГА и 2 Мегабита в секунду близнецы братья, при этом загрузка ядра процессора от UART составит пару процентов от команд загрузки регистра данных UART, остальное другие полезные вычисления. Уметь пользоваться разделением времени это искусство!!!! Это бывает не под силу операционной системе, но человек завсегда мудрее....

Re: Принять данные на ПК со скоростью 1 Мбит

Пт ноя 22, 2019 21:34:43

astrahard, напишите код передачи, тогда поймете, как Вы заблуждаетесь:
1. До передачи надо определить, если ли что передавать, или данных готовых к передаче еще нет.
2. Затем адрес передаваемого байта надо вычислить, хотя бы инкрементировав счетчик.
3. Потом этот байт надо прочитать в регистр.
4. Потом надо убедиться, что буфер передатчика пуст и туда уже можно писать новый байт. То есть, считать байт статуса, сравнить нужный бит и выполнить команду условного перехода.
5. Только после всего этого можно будет записать очередной байт в буфер передатчика
6. А теперь переходим к п.1.

Так что одним тактом при передаче ну никак не обойтись.

Re: Принять данные на ПК со скоростью 1 Мбит

Пт ноя 22, 2019 21:49:15

Чушь, Вы читать не умеете что я пишу. Чтобы отправить байт нужно просто загрузить его в регистр данных UART. А уверенность в том что очередная передача окончена придет сама через время 6 микросекунд для скорости 2 Мегабита, при этом эти 6 микросекунд можно свободно посвятить полезным вычислениям отсчитываем 6 микросекунд "полезных вычислений" и суем в регистр данных UART очередной байт, адрес его в оперативной памяти мне будет заранее известен. И проверять не нужно статус.

Добавлено after 3 minutes 57 seconds:
Вот что значит увлечение всякими драйверами и ОС!!!! Вы не представляете как работает голая аппаратура под С. Я передавать собираюсь на этой скорости 2 байта с частотой 31 Килогерц это половина от скорости 2 Мегабита.
Последний раз редактировалось astrahard Сб ноя 23, 2019 15:00:45, всего редактировалось 1 раз.

Re: Принять данные на ПК со скоростью 1 Мбит

Пт ноя 22, 2019 23:04:10

astrahard писал(а):Чушь Вы говорите. У меня прерывание вызывается с частотой 31 Килогерц, слушаете?
Так я же написал.
Мурик писал(а):В данном случае передача не непрерывного потока.


astrahard писал(а):Запись в регистр один такт.
Не учитываете такты затраченные на вход и выход с прерывания, сохранение регистров в стеке, извлечение данных из массива и т. д.

astrahard писал(а):Чтобы отправить байт нужно просто загрузить его в регистр данных UART.
Этот байт должен откуда-то взяться. Конечно если передавать что-то типа UDR=0; это потребует мало времени но больше такта. Данные нужно поместить в регистр процессора, а затем из него в регистр данных UART. Это как минимум 2 такта при передаче только одного и того-же значения, а не требуемых данных.

astrahard писал(а):А уверенность в том что очередная передача окончена придет сама через время 8 микросекунд
Как МК определит что прошли 8 мкс?

astrahard писал(а):адрес его в оперативной памяти мне будет заранее известен.
Посмотрите ассемблерный код, генерируемый из сишного и может поймете что тактов требуется гораздо больше чем вы думаете.

astrahard писал(а):И проверять не нужно статус.
Потеря данных допустима? Если да и даже значительный потерянный объем не критичен, то сойдет.

astrahard писал(а):Вот что значит увлечение всякими драйверами и ОС!!!!
Нет, это знание работы МК на уровне ассемблера... Я представляю примерно какой будет ассемблерный код при компиляции сишного и на основе этого пишу.

astrahard писал(а):Вы не представляете как работает голая аппаратура под С.
На Си она не работает. :facepalm: Она работает на машинном коде. :)
Если думаете что строка x++ выполнится за такт, то сильно ошибаетесь. Нужно прочитать данные из памяти в регистр процессора, далее увеличить значение на 1 и после записать из регистра в память, т. е. это потребует как минимум 3 такта при условии что x однобайтовая. А если при этом еще потребуется сохранить регистр в стеке, и извлечь его, добавьте еще 2 такта.

Re: Принять данные на ПК со скоростью 1 Мбит

Сб ноя 23, 2019 19:39:23

Вы правы, что такты я грубо посчитал, но профилировкой кода я занимаюсь в обязательном порядке. Раньше смотрел что генерирует С в ассемблер, затем я стал подходить к С как к ассемблеру. В исходном коде у меня видно, что данные для отправки уже проиндексированы, мне нужно так UDR=holding_registers[10] 6 Микросекунд полезного кода и, UDR=holding_registers[11] , этот кусок в прерывании которое автоматически вызывается с частотой 31 Килогерц. Это получиться вывод очередного преобразования АЦП. Я не считаю такты все до одного потому что знаю что все работает итак, профилирую код осциллографом на свободной ножке контроллера PORTC|=0x01; профилируемый код PORTC&=0xFE; и, считаю что так надежнее, чем считать такты.

P.S. И еще, имейте в виду, пожалуйста, что я сделал ШИМ для силовой части БП и, если бы были серьезные ошибки силовой преобразователь бы сгорел, но такого не происходит. Вот силовой преобразователь точно тестирует все до последнего промаха почище чем любой интерфейс, который хотя-бы не сгорит.

Добавлено after 9 hours 5 minutes 15 seconds:
За сколько тактов PCLOCK UART байт отправляет? за 10, 11 или за 16?

Добавлено after 4 hours 21 minute 51 second:
Все заработало как надо УРА!!! УРА!!! Товарисчи...

Добавлено after 18 minutes 23 seconds:
Так как я хотел получается, проверено. Делайте и прибудет с вами сила.

Re: Принять данные на ПК со скоростью 1 Мбит

Вс ноя 24, 2019 13:27:24

Да, кстати. Визуализацию полученных от микроконтроллера данных очень удобно делать в Excel. Бесплатный modbus_opc_server_32tags можно найти и скачать, вариантов много, например https://insat.ru/products/?category=1666 как раз для отладки и некоммерческих проектов. Для радиолюбителя то что надо... Как известно, Excel позволяет написать в своей клеточки запрос к OPC серверу. А как это визуализировать поймет каждый пользователь электронной таблицы. Я не пойму, почему радиолюбители этим не пользуются?

Добавлено after 10 minutes 10 seconds:
запрос к OPC server в excel https://www.aggsoft.ru/opc-data-logger/ ... -excel.htm
Ответить