реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
ArthurS
сообщение Jul 9 2018, 15:34
Сообщение #1





Группа: Новичок
Сообщений: 1
Регистрация: 9-10-17
Пользователь №: 99 684



Дано: есть плата на STM32F070, на которой надо поднять передачу данных с манчестерским кодированием со скоростью 100 кбит/с (200 кГц). Хорошо бы без аппаратных доработок.
Вопрос: можно ли это как-то сделать просто софтом или при помощи несложной дополнительной схемы (какой)?
Go to the top of the page
 
+Quote Post
zhevak
сообщение Jul 9 2018, 17:35
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Цитата(ArthurS @ Jul 9 2018, 20:34) *
Дано: STM32F070, 100 кбит/с (200 кГц)
Вопрос: можно ли это как-то сделать просто софтом или при помощи несложной дополнительной схемы (какой)?

Если камень ничего больше не делает, кроме как из своей памяти извлекает байты и отправляет их в Манчестеровском коде, то наверно можно.

По сути, МК должен через каждые 5 мкс изменять состояние одного какого-то бита в порте. МК -- достаточно быстрый, способен работать на 48 МГц. Мне кажется, что такого времени -- 5 мкс -- вполне достаточно для программного управления ногой.

Но вообще задача решается куда проще на МК фирмы Atmel (бывш.) -- на AVR и на AT91Sxxx. Они умеют генерировать меандр синхронный с выходом UART. Сигнал называется XCK. Причём генерируют даже в паузах между передачами байт. На приёмном конце это весьма актуально.

А вот, STM32, к сожалению, выдают меандр только для информационных битов USART. Во время вывода стартового и стопового битов меандр не вырабатывается. Я так думаю, что такое немного странное функционирование USART-ов в STM32 продиктовано не тем, что ST хотела предоставить разработчикам работать с Манчестером (как это было у Atmel), а возможностью перевести USART в режим, совместимый с SPI. Странное решение. Но, какое уж есть.

У меня вот тут https://wp.me/p1H7g0-1Qm кое-что есть на эту тему.



--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
SSerge
сообщение Jul 9 2018, 21:02
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



https://electronix.ru/forum/index.php?s=&am...st&p=870651


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
aiwa
сообщение Jul 9 2018, 23:14
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Application note от Atmel. "Manchester Coding Basics".
Atmel-9164-Manchester-Coding-Basics_Application-Note.pdf

Программа для AVR на С, поэтому легка для переноса. Используется ногодрыг.
Там два варианта.
Первый - универсальный. Используется таймер, выдающий прерывания через равные промежутки времени и соответственно чтение данных с пина порта (или запись) и соответствующая обработка.
И второй вариант: использование прерывания от порта при изменении состояния пина и таймер для измерения интервалов между событиями.
Go to the top of the page
 
+Quote Post
Priest_89
сообщение Jul 10 2018, 04:06
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 66
Регистрация: 21-03-12
Пользователь №: 70 931



Реализовывали и на гораздо более медленных 8-битных PIC16, и не только передачу, просто переключением ножек порта, но и прием. Так что с STM32 проблем быть не должно. Внешняя схема зависит от физической среды передачи.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Jul 10 2018, 05:20
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(ArthurS @ Jul 9 2018, 18:34) *
надо поднять передачу ...

Только передача нужна, прием не нужен ? А то, если подразумевается прием из реальной линии связи, никакого STMa может не хватить, понадобится модем делать ...
Go to the top of the page
 
+Quote Post
vladec
сообщение Jul 10 2018, 07:31
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 167
Регистрация: 3-10-05
Из: Москва
Пользователь №: 9 158



Цитата
передачу данных с манчестерским кодированием со скоростью 100 кбит/с (200 кГц).

А почему 200кГц? Вроде как те же 100кГц должны быть.
Go to the top of the page
 
+Quote Post
k155la3
сообщение Jul 10 2018, 09:26
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(ArthurS @ Jul 9 2018, 18:34) *
Дано: есть плата на STM32F070, на которой надо поднять передачу данных с манчестерским кодированием со скоростью 100 кбит/с (200 кГц). Хорошо бы без аппаратных доработок.
Вопрос: можно ли это как-то сделать просто софтом или при помощи несложной дополнительной схемы (какой)?
Модулятор для манчестера очень простой, помнится даже один элемент XOR.
Учитывая достаточно большую скорость, как для софт-реализации, я бы рассматривал SPI узел + простой внешний аппаратный модулятор.
Приемник - где-то аналогично.


Go to the top of the page
 
+Quote Post
KRS
сообщение Jul 16 2018, 20:05
Сообщение #9


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



манчестер легко реализуется на отправку через free run timer и ногу output compare, а прием через input capture
если dma подключить к output compare возможна большая скорость

можно и SPI приспособить без модулятора, главное чтобы пауз в отправке не было просто будет 2 бита spi на один бит манчестера
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Jul 20 2018, 17:27
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(KRS @ Jul 17 2018, 00:05) *
манчестер легко реализуется на отправку через free run timer и ногу output compare, а прием через input capture
если dma подключить к output compare возможна большая скорость

можно и SPI приспособить без модулятора, главное чтобы пауз в отправке не было просто будет 2 бита spi на один бит манчестера


Лучший ответ про output compare и input capture sm.gif

Еще можно DMA использовать. Правда на начало приема для синхронизации придется прерывание использовать. Зато передавать можно сразу несколько каналов sm.gif Опять же буферизация получится естественным образом..
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Jul 20 2018, 17:48
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Помню как-то нужно было за вечер сварганить приблуду, которая промышленному кондиционеру в составе стойки с оборудованием должна была команды подавать без пульта. Пультик такой, как от телевизора. Сначала подумал накопать информации по пульту и его кодам, но как-то плюнул на все это и быстренько написал дешифратор кнопок пульта - какая-то STM32 самая мелкая, естественно на захвате таймера сделал определение длительностей переключения выхода инфракрасного приемника, выплюнул их в UART, подкорректировал ручками эти числа из-за входного тристабильного внешнего буфера. И в общем получились у меня три массива чисел-команд: включение, перевод в режим обдува и снижение температуры. Теперь обратная задача - эту последовательность скармливаю регистру сравнения и в прерывании по совпадению подсовываю следующий код длительности. В итоге при включении питания я параллельно ИК-датчику выдаю кондиционеру три команды, а он и не в курсе, что роботы захватили мир батарейки в пульте уже давно сели и никто им не пользуется biggrin.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 11:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01508 секунд с 7
ELECTRONIX ©2004-2016