www.open-tager.ru
http://www.open-tager.ru/forum/

Прошивка. Реализация протокола Miles Tag II
http://www.open-tager.ru/forum/viewtopic.php?f=5&t=293
Страница 2 из 8

Автор:  jong73 [ 22 сен 2011, 11:39 ]
Заголовок сообщения:  Re: Прошивка. Реализация протокола Miles Tag II

Посмотри выше я и код накрапал формирования данных для передачи. Ты Просто как то изначально усложнил структуру данных. Глянь что не ясно я в поясню

Автор:  tommy [ 22 сен 2011, 11:52 ]
Заголовок сообщения:  Re: Прошивка. Реализация протокола Miles Tag II

Pingvin писал(а):
А как же Вы протестировали код?
И как вы "рисуете" logicdata файлики?
скомпилировал, залил в мк, подключил два канала анализатора на ноги а5 и а7, в saleae утилитке поставил условие включения записи на высокое значение на а5, вот оно так и нарисовалось.

Автор:  jong73 [ 22 сен 2011, 11:55 ]
Заголовок сообщения:  Re: Прошивка. Реализация протокола Miles Tag II

а че за утилита такая и к чему она подвязывается? или это ISIS?

Автор:  tommy [ 22 сен 2011, 12:03 ]
Заголовок сообщения:  Re: Прошивка. Реализация протокола Miles Tag II

а я уже давал ссылку на неё - для просмотра данных работает и без железки-анализатора.
tommy писал(а):
работает. файл logicdata с анализатора (http://www.saleae.com/downloads/ ) выложил на http://thesimplestone.net/ltag_pingv.logicdata
у меня не оригинальный анализатор, а китайский 30$ клон (который ещё умеет переключаться в режим USBee AX-Pro без режима осцилографа). удобная штукенция + софт простой, понятный и быстрый.

Автор:  jong73 [ 22 сен 2011, 12:27 ]
Заголовок сообщения:  Re: Прошивка. Реализация протокола Miles Tag II

Как варик можно в протеусе погонять

А железко на DX покупал вот бы ссылу или хоть примерные координаты где ты выкладывал ссылки, а то у меня цифровик то есть но в качестве запоминающего он работает как то стремно. Тут как бы анализатор рулит.

Автор:  jong73 [ 22 сен 2011, 12:30 ]
Заголовок сообщения:  Re: Прошивка. Реализация протокола Miles Tag II

to Pingvin

Посмотрел добавления? Согласен что так гораздо проще чем страница переключателей и побитная подготовка данных?

Автор:  Pingvin [ 22 сен 2011, 12:45 ]
Заголовок сообщения:  Re: Прошивка. Реализация протокола Miles Tag II

jong73 писал(а):
tommy писал(а):
суровые свитчи, блин. и работа с битами отправки тож бескомпромиссная :)
в milesI передаются сначала старшие. возможно, что и в II тож старшие вперёд.


И бессмысленные. Гораздо проще работать с индексами массивов чем с enum и потом switch

GunDamage[16] = {1,2,4,5,7,10,15,17,20,25,30,35,40,50,75,100} индекс массива определяет уровень ущерба

можно и символьные имена добавить

enum GunDamage { Damage_1, Damage_2, Damage_4, Damage_5,
Damage_7, Damage_10, Damage_15, Damage_17,
Damage_20, Damage_25, Damage_30, Damage_35,
Damage_40, Damage_50, Damage_75, Damage_100 };

и обращаться к массиву не по индексу а по нумерованному символьному имени. Тогда отпадает необходимость в длинных switch


В итоге подготовка даннах к выстрелу будет представлять из себя

unsigned char TeamColor; // Цвет команды
unsigned char id_gamer // Номер игрока в команде
unsigned char SourceDamage] // Номер индекса уровня поражения
unsigned char bufer_ir_tx[2] // Буфер данных излучателя

// Процедура подготовки данных для выстрела
void load_tx_data( void )
{
bufer_ir_tx[0] = id_gamer;
bufer_ir_tx[1] = TeamColor;
bufer_ir_tx[1] = bufer_ir_tx[1] << 4;
bufer_ir_tx[1] += GunDamage[ SourceDamage ];
bufer_ir_tx[1] = bufer_ir_tx[1] << 2;
}


/*
Данные готовы можно отправлять указатель на буфер данных излучателя
и методом сдвига влево передаем сначало 8 бит даныых из масиива по индексу [0] а затем
6 байт из массива по индексу [1]
*/


Можно еще проще. Прямо ничего не формировать а при програмировании ( смене ) i_gamer и Team_Color + GunDamage просто занести в EEprom в виде двух байтов

eeprom unsigned char id_gamer = 01010101; // Игрок с номером 85 ( 0x55 )
eeprom unsigned char Team_Color + GunDamage = 10010100; // Цвет команды 2 ( желтые по твоей нумерации ) и ущерб составит 10% индекс массива [5]

как бы так.


Теперь понял! :) Вы предлагаете работать на уровне бит. Я и такой вариант рассматривал, но пока не стал реализовывать, так как в прерывании придется крутить-вертеть битами, а это дополнительное процессорное время, что для прерывания не есть хорошо.
Но я и это вариант не исключаю ни коем образом. Сперва именно так и хотел сделать. Поживем - увидим. Пока делаю как проще (лично для меня).
Что касается хранения установок eeprom - разумеется! Так и будет, дайте срок.
И меняться значения будут по команде через COM-порт и/или посредством кнопок управления.
Пока нужно сделать основные вещи - обеспечить транспортный уровень (прием/передача), потом и до остального доберёмся.

Автор:  Pingvin [ 22 сен 2011, 12:48 ]
Заголовок сообщения:  Re: Прошивка. Реализация протокола Miles Tag II

jong73 писал(а):
to Pingvin

Посмотрел добавления? Согласен что так гораздо проще чем страница переключателей и побитная подготовка данных?

1. Посмотрел
2. Не согласен. :) (хотя с индексами и массивами можно попробовать, в этом что то есть). Сложнее будет код в прерывании, нужно будет сдвигать биты, потом брать следующий байт и по новой. А если длинна структуры не постоянна (например пакет с командой - длиннее)? Как определить конец структуры?
Подготовка пакета может и будет проще, но передача усложнится!

И менее наглядно в коде (читабельность хуже).

Я Вас не "слабо" не развожу (Боже упаси), но ...

Может "сбацаете" - посмотрим, сравним ... ;)

P.S. И смотреть надо не сколько строчек кода (целая страница) в исходниках, а сколько байт это займет в памяти программ, а тут корреляция весьма сложная. :)

Автор:  jong73 [ 22 сен 2011, 13:06 ]
Заголовок сообщения:  Re: Прошивка. Реализация протокола Miles Tag II

Pingvin писал(а):
Теперь понял! :) Вы предлагаете работать на уровне бит. Я и такой вариант рассматривал, но пока не стал реализовывать, так как в прерывании придется крутить-вертеть битами, а это дополнительное процессорное время, что для прерывания не есть хорошо.
Но я и это вариант не исключаю ни коем образом. Сперва именно так и хотел сделать. Поживем - увидим. Пока делаю как проще (лично для меня).
Что касается хранения установок eeprom - разумеется! Так и будет, дайте срок.
И меняться значения будут по команде через COM-порт и/или посредством кнопок управления.
Пока нужно сделать основные вещи - обеспечит транспортный уровень (прием/передача), потом и до остального доберёмся.


Не бит а байт :oops: и ничего крутить не надо. Передаем в прерывание сначала байт с id_gamer ( это данные в буфере передатчика по индексу 0 ) последовательно сдвигая вправа а затем точно так же байт с цветом команды и ущербом. Время нахождение в прерывании равно толко времени инициаллизации передачи одного бита и установки идентификатора окончания передачи. У меня это около 8-10 циклов. Ниже написана процедура отправки бита в прерывание.



for( count_byte = 0; count_byte < length; ++count_byte )
{
for( count_bit = 0; count_bit < 8; ++count_bit )
{
if( bufer_ir_tx[count_byte] & 0x80 )
// передаю 1 ( в прерывании )
else // передаю 0
bufer_ir_tx[count_byte] <<= 1;
++count_bit;
while( // ожидание передачи бита )
}
}

Автор:  tommy [ 22 сен 2011, 13:10 ]
Заголовок сообщения:  Re: Прошивка. Реализация протокола Miles Tag II

jong73 писал(а):
Как варик можно в протеусе погонять

А железко на DX покупал вот бы ссылу или хоть примерные координаты где ты выкладывал ссылки, а то у меня цифровик то есть но в качестве запоминающего он работает как то стремно. Тут как бы анализатор рулит.
чёт я туплю и слабо въехал, что тут написано. но, да - как вариант, можно и в протеусе прогнать. анализатор брал здесь - http://www.aliexpress.com/product-gs/40 ... alers.html

Страница 2 из 8 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/