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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Вопрос по формату кадра UART в ATmega-х, Может быть одновременно и Bit8 и P
Reton
сообщение Mar 20 2008, 17:10
Сообщение #31





Группа: Новичок
Сообщений: 2
Регистрация: 30-09-07
Пользователь №: 30 945



Извеняюсь может не в тему. Вот здесь проект http://www.microsyl.com/moodlight/moodlight.html в котором одно мастер-устройство управляет яркостью яркостью RGB-светодиодов, подключенных к слейв-устройствам. Используется какой-то простой протакол, но мне всеравно не совсем понятно, как формируется начало кадра и как каждое слейв-устройство выделяет свой адрес. Насколько я понял вот кусок кода отвечающий за это:
void SerialRx(void)
{
static int Pointer;
ushort Byte;

Pointer++;

if (UCR & (1<<RXB8))
{
Pointer = 0;
Byte = UDR;
}

if (Pointer == ((Address * 3) - 2)) Red = UDR;
else if (Pointer == ((Address * 3) - 1)) Green = UDR;
else if (Pointer == ((Address * 3) - 0)) Blue = UDR;
else Byte = UDR;
}
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 20 2008, 17:57
Сообщение #32


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Дон Амброзио @ Mar 20 2008, 17:51) *
Админ!!!! Проблема решена!!! Тему можно закрыть

По идее автор темы сам может её закрыть. Или я кое-что подзабыл? Посмотрите внимательно есть ли ы Вас такая возможность.
Будете настаивать - закрою, но по-моему продолжение пошло.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Mar 20 2008, 18:48
Сообщение #33


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



насколько я ничего не понимаю,это как раз использован режим UARTа MPCM.Взведен 9 бит
if (UCR & (1<<RXB8)) -пришел маркер начала фрейма.А вот дальше не совсем понятно-ху есть Address?
В коде намеков не просматривается,где-то он должен фигурировать в другом месте,поищите.
Понятно только,что посылки кратны 3.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 20 2008, 20:31
Сообщение #34


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Reton @ Mar 20 2008, 17:10) *
Используется какой-то простой протокол, но мне все равно не совсем понятно, как формируется начало кадра и как каждое слейв-устройство выделяет свой адрес

Мне кажется, здесь всё достаточно прозрачно. Каждый слейв имеет свой собственный адрес, который находится в переменной Address. По приходу байта с взведённым RXB8=1, все слейвы сбрасывают указатель Pointer в 0. Начиная со следующего байта слейвы увеличивают указатель и сравнивают номер байта со своим утроенным адресом (плюс 0, плюс 1 и плюс 2). При совпадении принятый байт попадает в соответствующую переменную (Red, Green, Blue). Вот и весь протокол.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 20 2008, 21:10
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



По-моему, это всё с х51 пошло. Именно там 9 бит пошёл как информационный, для упрощения. Аппаратная чётность там была только для аккумулятора. То есть при таком подходе этот бит можно было заюзать под чётность. Но, соответственно можно было и заюзать как самостоятельный бит. Ну и некоторые повелись в связи с простотой картины. Хотя, при размере фрейма 512 байт, к примеру, избыточность такого подхода составит 512 бит, что соответствует 64 байтам. Что явно превышает избыточность любого протокола с байт стафингом.

Я один раз, уже на AVR применял такой подход, так как до этого применял параллельный 9 битный интерфейс (один бит - указатель комманды). А потом, с целью экономии ног перешёл к последовательному интерфейсу. А бит остался. Следующий переход - SPI+байт потери -> вообще перенёс всё в один МК. smile.gif

Всё таки считаю лучше применять стандартные решения.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 20 2008, 21:47
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(SasaVitebsk @ Mar 21 2008, 00:10) *
.. избыточность такого подхода составит 512 бит, что соответствует 64 байтам. Что явно превышает избыточность любого протокола с байт стафингом.

А контроль четности имеющийся при этом тоже заодно всегда к "избыточности" относите smile.gif?
Цитата
Всё таки считаю лучше применять стандартные решения.

Лучше то, что лучше в конкретных условиях. Для связки с мелкой CPLD байтстафинг явно менее предподчтителен. Для связки вспомогательного контроллера с основным в пределах одной платы тоже следует подумать, причем и для случая SPI в том числе. Ну за SLIP, меня агитировать не надо - я и сам кого угодно сагитирую, если нужно будет, что даже на этом форуме не раз проделывал smile.gif. Ну HDLC с его битстафингом это тоже близкое и родное для любого разработчика коммуникационного оборудования.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
svs39
сообщение Mar 21 2008, 05:21
Сообщение #37


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 8-03-08
Пользователь №: 35 744



Цитата(zltigo @ Mar 21 2008, 01:47) *
А контроль четности имеющийся при этом тоже заодно всегда к "избыточности" относите smile.gif?

Лучше то, что лучше в конкретных условиях. Для связки с мелкой CPLD байтстафинг явно менее предподчтителен. Для связки вспомогательного контроллера с основным в пределах одной платы тоже следует подумать, причем и для случая SPI в том числе. Ну за SLIP, меня агитировать не надо - я и сам кого угодно сагитирую, если нужно будет, что даже на этом форуме не раз проделывал smile.gif. Ну HDLC с его битстафингом это тоже близкое и родное для любого разработчика коммуникационного оборудования.


1) помогите-чем хорош SLIP?
2) HDLC- синхронный поток- достал в свое время (сделали в 1985г на серии 580 - до сих пор работает)
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 21 2008, 05:30
Сообщение #38


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(zltigo @ Mar 21 2008, 00:47) *
Лучше то, что лучше в конкретных условиях.

Золотые слова.

Не существует той единственной "серебрянной пули", применение которой одинаково хорошо в любых условиях.

Выше я объяснял как кажущееся кое-кому извращением ( за которое инженера "нужно гнать поганой метлой из разработчиков") использование бита чётности в качестве обычного бита данных оказалось наиболее оптимальным решением для описанной мной конкретной задачи.


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 21 2008, 07:05
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(zltigo @ Mar 21 2008, 01:47) *
А контроль четности имеющийся при этом тоже заодно всегда к "избыточности" относите smile.gif?


Я не имел ввиду конкетно Ваш пример. Я брал общий случай. Контроль чётности не применяю обычно. Но был случай, когда в битовом потоке применял код Хеминга. Естественно, необходимо учитывать специфику...

Цитата
Лучше то, что лучше в конкретных условиях. Для связки с мелкой CPLD байтстафинг явно менее предподчтителен. Для связки вспомогательного контроллера с основным в пределах одной платы тоже следует подумать, причем и для случая SPI в том числе. Ну за SLIP, меня агитировать не надо - я и сам кого угодно сагитирую, если нужно будет, что даже на этом форуме не раз проделывал smile.gif. Ну HDLC с его битстафингом это тоже близкое и родное для любого разработчика коммуникационного оборудования.


Я не за что не агитирую. smile.gif Сам же пишу, что в разных случаях использовал разные подходы. Но, следует признать, что в повседневной практике, в рядовых приложениях, всётаки устоканиваются рядовые решения. smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 21 2008, 07:14
Сообщение #40


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(svs39 @ Mar 21 2008, 08:21) *
1) помогите-чем хорош SLIP?

Классический пример байтстафинга, позволяющий в потоке (бинарном) байтов зарезервировать уникальный байт в качестве разделителя фреймов. Дальше естественно просто и надежно выделяются и востанавливаются фреймы в потоке. Есть более навороченные вариации на тему SLIP, позволяюшие еще минимизировать количество вставляемых байтов.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Mar 21 2008, 07:18
Сообщение #41


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(zltigo @ Mar 21 2008, 01:47) *
А контроль четности имеющийся при этом тоже заодно всегда к "избыточности" относите smile.gif?

Кстати, да. smile.gif
По большому счету, наличие контроля четности имеет смысл, если это поддерживается протоколом, когда получатель может оборвать передающую сторону. А это бывает, по моей статистике, в 3% протоколов.
Если нет, да еще блоки данных большие, то при использовании более сложной CRC контроль четности каждого байта не нужен.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 21 2008, 07:43
Сообщение #42


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(Dog Pawlowa @ Mar 21 2008, 10:18) *
По большому счету, наличие контроля четности имеет смысл, если это поддерживается протоколом, когда получатель может оборвать передающую сторону

Именно так.

Или если сама передающая сторона ведёт самоприём и при обнаружении покоцанного байта прекращает передачу - сама себя обрывает


Могу придумать только одно применение когда применение бита чётности имеет хоть какое-то значение при блочной/пакетовой передаче при отсутствии у передатчика и приёмника возможности обрывания передачи в случае обнаружения покоцанного байта.

Например, если передаётся большой пакет (например 1024 байта) с CRC32. А контроллер мелкий и он долго считает CRC. В этом случае обнаружение покоцанного байта позволяет избежать долгой и мучительной процедуры вычисления CRC32 для такого большого пакета... Но повторяю, это для "мелких" контроллеров с малым быстродействием

Сообщение отредактировал Дон Амброзио - Mar 21 2008, 07:47


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 21 2008, 07:47
Сообщение #43


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Dog Pawlowa @ Mar 21 2008, 10:18) *
..наличие контроля четности имеет смысл, если это поддерживается протоколом

Трудно возразить - если поддерживается, то нужно, а если не поддерживается, то не нужно smile.gif
Цитата
, когда получатель может оборвать передающую сторону.

Или оборвать, или просто проигнорировать. И SLIP и CRC это конечно хорошо, и еще лучше (навороченей) есть и вообще нет и не будет предела совершеству. Но как минималистичный вариант поток байтов со старым, добрым, поддерживаемым аппаратно битом четности и c уникальным 9bit разделителем фреймов совершенно нормален и не является наказуемым извращением.
Цитата
...да еще блоки данных большие, то...

Большие блоки данных - "большим устройствам" smile.gif - копили, обрабатывали и послали и не дай бог пропадет труд. Для мелочевки это обычно не характерно - чаще сыпет хоть и много, но мелких. Если что случилось - проще заново спросить (или сам повторит), чем переспрашивать а чего-там было до того как...


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Igor26
сообщение Mar 21 2008, 08:05
Сообщение #44


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



Цитата
По-моему, это всё с х51 пошло.

Точно так! После х51 перешли на AVR, и для приемственности со старыми устройствами используем 9-й бит в том виде, как почти так описАл zltigo.
Цитата
Золотые слова.

Не существует той единственной "серебрянной пули", применение которой одинаково хорошо в любых условиях.

+1. Полностью согласен.

А Вы посмотрите, как общаются между собой Люди. Как Вы определяете, что собеседник закончил фразу и настала очередь Вам отвечать? Собеседник выдержал паузу? Или он сказал - "Конец цитаты"? Или ему вообще нечего сказать?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 21 2008, 08:35
Сообщение #45


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Igor26 @ Mar 21 2008, 11:05) *
Точно так! После х51..

Нет - не надо все "валить" на 51 smile.gif. Там просто подстраивались под необходимость с одной стороны его иметь, а с другой стороны сделать экстремально просто аппаратно. Например, "ручное" управление битом четности вполне естественно реализовано и на классических 8250 работающих начиная с 8080 и до всех нынешних PCшек.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 13:43
Рейтинг@Mail.ru


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