Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: нужна прогамма для ATMega8
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Luditel
Помогите по описанию составить программу на AVR Studio C для ATMega8, формирующую пакеты данных по протоколу RFM's Virtual Wire®.
Формат пакета:
Преамбула--Стартовый символ--кому байт--от кого байт--Пакет число--размер/статус байт--Данные--CS старший--CS младший
Описание пакета:
Пакет начинается с необязательной преамбулы, которая улучшает обнаружение слабого сигнала в приемнике с помощью настройки data slicer'а для наилучшего шумового иммунитета, и обеспечивает изменения сигнала для настройки процессов восстановления отсчета. Преамбула обычно состоит из нескольких байтов, содержащих 101010... Длина преамбулы зависит от времени соединения приемника, tBBC, которое не изменяется. Обычно длина преамбулы - три-четыре байта.

За преамбулой следует стартовый символ (часто называемый стартовым вектором), который указывает на начало информационной секции пакета. Чем длиннее стартовый символ, тем меньше вероятность того, что шумы совпадут со стартовым символом и вызовут получение неправильного пакета. 16-битный символ обеспечивает разумную надежность.

После стартового символа следует информация об адресах "кому" и "от кого". RFM использует в своих протоколах 4-битную и 8-битную адресацию. Обычно один адрес резервируется для широковещательного сообщения всем адресам. Если необходимо очень большое количество уникальных адресов, можно использовать для адресации 48 и более бит. Поле "Пакет" (тип пакета) позволяет специфическим пакетам идентифицироваться и безошибочно распознаваться. Также это поле может использоваться для сборки мультипакетного сообщения, когда пакеты принимаются без определенной последовательности. В протоколе RFM после типа пакета следует поле "размер данных/состояние". Сохранение в нем информации о размере данных позволяет передавать данные без обрамляющих символов.

Далее следует поле с данными. Последние два байта пакета содержат 16-битный код нахождения ошибок (последовательность проверки кадра), основанный на пакетном стандарте X.25 (ISO 3309). Принимающее устройство вычисляет этот код, и сравнивает с полученным кодом для выявления ошибок. Последовательность проверки кадра ISO 3309 обеспечивает очень уверенное нахождение ошибок для пакетов длиной до 256 байт.

Протокол Virtual Wire® обеспечивает следующие характеристики:

Вычисление 16-битного кода нахождения ошибок в соответствии с ISO 3309
Маршрутизация адресов кому/от кого с программируемой адресацией
Поддержка двоичных или ASCII-сообщений
Автоматическое повторение передачи пакета пока не будет принят; 8 попыток с полуслучайным back off(???) плюс оповещения типа "подтверждение" и "неудачная попытка связи"
Каждый байт, передаваемый по радио, преобразуется в 12-битный DC-балансированный символ. DC-баланс хорошо защищает данные от шумов. В сбалансированных символах количество одинаковых, идущих друг за другом битов, не более четырех. Ограничение длительности не изменяющегося сигнала, позволяет приемнику легче настраиваться после шумовых вспышек или сильных помех.
WHALE
мда,неслабый протокольчик..На AVR Studio имеется в виду асм? И что вы имеете в виду под словом "помогите"?
sensor_ua
Берёте DS на ATmega8 - там есть примеры инициализации USART-a и отправки байта - USART_init USART_Transmit, на http://faq.embedders.org/_examples_code/ есть исходники для WinAVR - http://faq.embedders.org/_examples_code/re...f_Joerg_Wunsch/
также там есть исходники по работе с CRC http://faq.embedders.org/_examples_code/ready/crc/
Пишете прогу типа
void main(void){
unsigned int CRC = 0xffff;
USART_Init();
USART_Transmit(Preamble);
CRC= CRC_Update(CRC, Preamble);
USART_Transmit(Start_Symbol);
CRC= CRC_Update(CRC, Start_Symbol);
USART_Transmit(Address_To);
CRC= CRC_Update(CRC, Address_To);
....
}
Если хотитие, чтобы сделали за Вас, то есть раздел "Предлагаю работу" - http://electronix.ru/forum/index.php?showforum=24
=AVR=
10000$
Luditel
Цитата(WHALE @ Sep 2 2007, 11:00) *
мда,неслабый протокольчик..На AVR Studio имеется в виду асм? И что вы имеете в виду под словом "помогите"?

Нет не асм, а C конечно. Под словом "помогите" имею в виду советы как это сделать, возможно у кого-нибуть есть исходники чего-то похожего. Описание протокола для меня пока что не проясняет как все это реализовать.
Вот что у меня вызывает вопросы:
Цитата
Пакет начинается с необязательной преамбулы, которая улучшает обнаружение слабого сигнала в приемнике с помощью настройки data slicer'а
Что такое data slicer'а и почему посылка несколких байт вида 10101010 должно улучшать обнаружение сигнала?
Цитата
За преамбулой следует стартовый символ (часто называемый стартовым вектором), который указывает на начало информационной секции пакета.
Что значит указывает на начало информационной секции?
Цитата
Каждый байт, передаваемый по радио, преобразуется в 12-битный DC-балансированный символ.
Что такое DC-балансированный символ и какой алгоритм его получения?
Цитата
Если хотитие, чтобы сделали за Вас, то есть раздел "Предлагаю работу"
Я и сам не имею коммерческой заинтересованности, только стремление научиться использовать микросхемы RFM для обмена данными по радиоканалу между двумя ПК (http://electronix.ru/forum/index.php?showtopic=35941). Поэтому работы к сожалению никому предложить не могу.

Цитата(=AVR= @ Sep 2 2007, 12:36) *
10000$

Ну у вас и расценки, господа. Я столько в год еще не зарабатываю laughing.gif .
sensor_ua
Цитата
Что такое data slicer

http://www.maxim-ic.com/appnotes.cfm/an_pk/3435
Для установления режима (напряжения после ФНЧ) нужно некоторое время ->
Цитата
Длина преамбулы зависит от времени соединения приемника, tBBC, которое не изменяется. Обычно длина преамбулы - три-четыре байта.

Вот для этого применяются такие преамбулы.
Цитата
Что значит указывает на начало информационной секции?

Это Вам сообщают, что преамбулы не несут информацииwink.gif Кроме того Вы же можете напихать и постамбулы и они тоже не будут информационной секциейwink.gif))
Цитата
Что такое DC-балансированный символ и какой алгоритм его получения?

http://www.rfm.com/products/apnotes/AN43.pdf
=AVR=
Цитата(Luditel @ Sep 2 2007, 12:51) *
Ну у вас и расценки, господа. Я столько в год еще не зарабатываю
А я потому и зарабатываю, что такие расценки smile.gifsmile.gifsmile.gif
bodja74
Цитата(=AVR= @ Sep 2 2007, 12:55) *
А я потому и зарабатываю, что такие расценки smile.gifsmile.gifsmile.gif


Пока по миру бродят лохи,дела у нас идут неплохо. smile.gif
Правильно ,я так тоже делаю. smile.gif

Теперь по теме.

С пол года назад здесь была тема с ссылкой на практическую реализацию похожего протокола ,и кажется на той же меге8 ,может быть даже и прошивку или исходники найдете ,но подробное описание работы по ссылке точно было.
Вообще протоколы цифровой радиопередачи очень похожи ,в этом протоколе нет ничего выдающегося.
Правда это тупиковый ИМХО путь управлять непосредственно модулятором,или получать из демодулятора программным путем ,есть аппаратные решения гораздо более эффективные.
Дело конечно Ваше,мучайтесь smile.gif.

Преамбула - дает определение поднесущей и начальную синхронизацию,то что Вы назвали стартовым символом ,называется еще синхрословом - дает окончательную синхронизацию и указывает на начало пакета.Потом может быть длина ,адресс пакета и т.д.
GDI
Вот эта статья на стр 50 http://soel.ru/issues/?id=299316
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.