Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Переконвертить с AVR C на ASM
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
QuickWitted
Нужен конвертор с AVR C на ASM
Иногда видел в енете перекодированные с С на АСМ исходники...
(видно что в автомате...)

конечно можно взять дизасм но при этом все пояснения потеряются...
А вообще существуют проги для создания алгоритмов из исходников на C или ASMе?

подскажите очень надо...
prottoss
Цитата(QuickWitted @ Apr 21 2008, 13:20) *
Нужен конвертор с AVR C на ASM
Иногда видел в енете перекодированные с С на АСМ исходники...
(видно что в автомате...)

конечно можно взять дизасм но при этом все пояснения потеряются...
А вообще существуют проги для создания алгоритмов из исходников на C или ASMе?

подскажите очень надо...
Любой нормальный С-компилятор может генерить АСМ-листинг.
Kovrov
Цитата(QuickWitted @ Apr 21 2008, 10:20) *
конечно можно взять дизасм но при этом все пояснения потеряются...

так они полюбому потеряются....
QuickWitted
Цитата(prottoss @ Apr 21 2008, 11:26) *
Любой нормальный С-компилятор может генерить АСМ-листинг.


Ну давай возьмём отвлечённый пример
http://www.lourensrozema.nl/index.php/swk8630.inc
с софтом тут
http://www.lourensrozema.nl/files/swk8630c.tar.gz

Идея перевести на мегу8 и с USB используя ГОТОВУЮ мою разработку
http://www.swordgreenline.narod.ru/IgorPlug2.html
она на АСМе...

Посоветуй НОРМАЛЬНЫЙ С компилятор. ПЛИИИИИЗ help.gif
Непомнящий Евгений
Цитата(QuickWitted @ Apr 21 2008, 10:20) *
А вообще существуют проги для создания алгоритмов из исходников на C или ASMе?

Очень сомневаюсь. В инсте в свое время писал построитель алгоритма (правда для VB). Но он просто брал конструкцию языка и рисовал для нее графический элемент. Польза этого в реальной жизни стремится к нулю...
Может вы поподробней объясните, что вам конкретно надо?
QuickWitted
Цитата(Kovrov @ Apr 21 2008, 11:30) *
так они полюбому потеряются....


А я надеялся что есть с пояснялкой...
(в том примере который я видел даже глубина ухода в стек в
каждой процедуре указывалась)

Вопрос тогда в виде алгоритме С код как нить представить АВТОМАТОМ можно?

Цитата
Может вы поподробней объясните, что вам конкретно надо?

Использовать IRDA клавиатуру вместо пульта дистанционного управления...
Kuzmi4
2 QuickWitted - в своё время колупал что-то похожее - IDA и экзешник на сях писанный - ида делала пояснения к коммандам, да только они бесполезны по своей сути....
(экзешник для х86 машин писанный был - но в процессорах вроде и меги встречались..)
Палыч
Цитата(QuickWitted @ Apr 21 2008, 09:39) *
А я надеялся что есть с пояснялкой...
Да попробуйте Вы посмотреть на Asm-текст, который генерит транслятор С. Обычно в нем в виде коментариев присутствуют исходные строки программы на языке С. Может быть этого Вам будет достаточно. Что ещё в asm Вы хотели, чтобы Вам пояснили?

Цитата(QuickWitted @ Apr 21 2008, 09:39) *
Использовать IRDA клавиатуру вместо пульта дистанционного управления...
Опа! А это какая связь с вопросом?
prottoss
Цитата(QuickWitted @ Apr 21 2008, 13:39) *
Возьмите IAR - генерит и листниг и мап-файл (для того, чтоб измерить глубину стека и т.п. smile.gif )
QuickWitted
Цитата(Палыч @ Apr 21 2008, 11:52) *
Да попробуйте Вы посмотреть на Asm-текст, который генерит транслятор С.
Может быть этого Вам будет достаточно.


У меня нет С компилятора.... который бы давал асм листинг...
(пригодный для компиляции - без переделок)
в комплекте шол листинг но это откомпилить в асме не выйдет...
правда можно написать программу выделения асм кода самому, но
по-моему такая уже существует и изобретать велосипед...


526 /* #NOAPP */
47:keyboard.c ****
48:keyboard.c **** // check for mega-space (start-bit)
49:keyboard.c **** // if(kb_counter < (8 << (kb_state << 1))) return;
50:keyboard.c **** if(kb_state && kb_counter < 32) return;
527 .stabn 68,0,50,.LM18-_interrupt0_
528 .LM18:
529 009a 8091 lds r24,kb_state
529 0000
530 009e 8823 tst r24
531 00a0 21F0 breq .L38
532 00a2 8091 lds r24,kb_counter
532 0000
533 00a6 8032 cpi r24,lo8(32)
534 00a8 58F0 brlo .L29
535 .L38:
51:keyboard.c ****
52:keyboard.c **** // fake 5 zero-bits already came in
53:keyboard.c **** kb_state = 1;
536 .stabn 68,0,53,.LM19-_interrupt0_
537 .LM19:

Цитата
Опа! А это какая связь с вопросом?

Меня спросили зачем - я ответил... (смотри выше)
Непомнящий Евгений
а в чем проблема - иметь в проекте и с-файлы и asm? Зачем руками конвертить?
QuickWitted
Цитата(Непомнящий Евгений @ Apr 21 2008, 12:10) *
а в чем проблема - иметь в проекте и с-файлы и asm? Зачем руками конвертить?


А потому что целиком проект мне не подходит...
мне от туда нужно только протокол выдрать...
С я не знаю. Проект не коммерческий. И не в качестве дипломной.
И на данный момент кроме http://www.swordgreenline.narod.ru/IgorPlug2.html
других бесплатных модификаций IR работающих на USB2 доступных для сборки
в интернете - НЕТ!!!!

HELP!!!! Как перевести http://www.lourensrozema.nl/index.php/swk8630.inc в алгорит
или в исходник на АСМ (готовый к компиляции) ???
SasaVitebsk
Ваш вопрос звучит так:
HELP!!! Хочу собрать танк. Есть запорожец, собранный другим, хочу оттуда вырвать коробку передач и москвич, также собранный другим, хочу выдрать оттуда двигатель. Хочу чтобы вы мне всё это оттуда грамотно вырвали, а также хочу найти программу, которая всё это поймёт и мне "вкрутит". Помогите!!!
PS: Сам я ничего не знаю, ни в автомобилях ни в танках не разбираюсь и разбираться нехочу!!!
QuickWitted
Цитата(SasaVitebsk @ Apr 21 2008, 13:43) *
Ваш вопрос звучит так:
PS: Сам я ничего не знаю, ни в автомобилях ни в танках не разбираюсь и разбираться нехочу!!!


Неа... Танк я собрал сам!!! из запчастей от запорожца... Причём бесплатных аналогов
этому чуду в интернете нет... Вот хочу его доработать...

отсюда и вопрос как из С сорца получить нечто понятное (исходник на асме) или алгоритм?

PS к SasaVitebsk: На твои авторские разработки глянуть можно?
(только именно твои, а не завода...)
Непомнящий Евгений
Цитата(QuickWitted @ Apr 21 2008, 14:06) *
отсюда и вопрос как из С сорца получить нечто понятное (исходник на асме) или алгоритм?

а все-ж таки: вариант найти книжку по С, потратить на нее пару дней и разобраться в С-сорце не рассматривается?
Kuzmi4
Цитата(Непомнящий Евгений @ Apr 21 2008, 13:15) *
а все-ж таки: вариант найти книжку по С, потратить на нее пару дней и разобраться в С-сорце не рассматривается?


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

Хотя если прога не сложная - то пары дней для понятия синтаксиса, если сильно жмёт - думаю будет достаточно...
Baser
Цитата(QuickWitted @ Apr 21 2008, 13:06) *
отсюда и вопрос как из С сорца получить нечто понятное (исходник на асме) или алгоритм?

Получить алгоритм из исходника на Си на порядок проще, чем получить алгоритм из исходника на асме.

А получить алгоритм из ассемблерного листинга, полученного после хорошего компилятора Си, да еще с включенной максимальной оптимизацией biggrin.gif : такой работенки я даже врагу не пожелаю...

Так шта.. разбирайтесь с Си, дешевле выйдет smile.gif
QuickWitted
Цитата(Непомнящий Евгений @ Apr 21 2008, 15:15) *
а все-ж таки: вариант найти книжку по С, потратить на нее пару дней и разобраться в С-сорце не рассматривается?


Потом всё равно на асме писать придётся...
у меня мало свободных регистров... (под USB заняты)
prottoss
Цитата(QuickWitted @ Apr 21 2008, 18:01) *
Потом всё равно на асме писать придётся...
у меня мало свободных регистров... (под USB заняты)
smile.gif Если освоите Си о регистрах думать придется на порядок меньше времени.... А может вообще не придется
GDI
Вот тут посмотрите, тоже драйвер USB только сделан так что его можно прицепить к проекту на Си, бесплатен если открываете свой код, используют они WinAVR который тоже бесплатен.
QuickWitted
Цитата(prottoss @ Apr 21 2008, 16:38) *
smile.gif Если освоите Си о регистрах думать придется на порядок меньше времени.... А может вообще не придется


Во во т.к. система ВООБЩЕ не запустится... И думать тут поэтому нечего...
(ответственный куски отвечающие за USB даже в исходниках на СИ на асме созданы
по той простой причине что алгоритм должен быть по тактам рассчитан...)


Цитата(GDI @ Apr 21 2008, 17:23) *
Вот тут посмотрите, тоже драйвер USB только сделан так что его можно прицепить к проекту на Си, бесплатен если открываете свой код, используют они WinAVR который тоже бесплатен.


Да одно но он не совместим с имеющимся программным обеспечением сторонних производителей...
(я имею в виду программы управления компом рассчитанные на IgorPlug)

Да кстати я видел в енете попытку переписать проект IgorPlug на С...
USBTiny назывался... USB там работал, но с измерениями производительности не хватило...
Даже неприхотливый SlayContrl с оригинальным программным модулем под IgorPlug отказывался
с ним работать... (мы этот модуль потом переписали под тормознутый сишный USBTiny)

Цитата
А получить алгоритм из ассемблерного листинга, полученного после хорошего компилятора Си, да еще с включенной максимальной оптимизацией : такой работенки я даже врагу не пожелаю...


Как я давно уже понял если нужна максимальная производительность и оптимальный код
писать надо ручками, а не корявыми компиляторами...

Ладно отвлеклись от темы...

Вопрос остаётся в силе как из C выдрать алгоритм в автомате?

Дело не в том что мне лень, но ковырять исходник неделю не зная о существовании
(в теории предположим что он существует) готового модуля который бы сделал
это за минут 5 по-моему глупо... поэтому и решил сначала спросить
Непомнящий Евгений
Цитата
Вопрос остаётся в силе как из C выдрать алгоритм в автомате?

Встречный вопрос: А что вы подразумеваете под алгоритмом? В каком именно виде вы хотите его получить?

PS Насчет корявых компиляторов - вы имхо загнули...
QuickWitted
Цитата(Непомнящий Евгений @ Apr 22 2008, 09:38) *
Встречный вопрос: А что вы подразумеваете под алгоритмом? В каком именно виде вы хотите его получить?


Дано - клавиатура с неизвестным протоколом
Метод мозгового штурма ничего не дал...
есть 3 набора данных - при нажатии удержании и отпускании...
в комп передавать нельзя... теряются данные пришедшие во время передачи в комп...
при удержании кнопки несколько кнопок дают один и тот же код...
также рассчитано нажатие разом 2х и более кнопок...
надо сидеть и ковыряться...
но если удастся вытащить из исходника на С это упростит задачу...

P.S: Я не прошу что бы кто либо это сделал за меня...
просто думал что уже есть готовые софтины и велосипед по энному разу изобретать не надо...

Цитата
PS Насчет корявых компиляторов - вы имхо загнули...


Реальный случай НЕ РАБОТАЕТ по причине нехватки быстродействия...
и что я тут загнул?
Непомнящий Евгений
Цитата(QuickWitted @ Apr 22 2008, 08:47) *
Дано - клавиатура с неизвестным протоколом
...
но если удастся вытащить из исходника на С это упростит задачу...

Т.е. вам нужна программа, которая скушает текст на С и выдаст что-то вроде:
"Если нажата клавиша 1, то передается такой код, если клавиша 2 в течении 3 секунд - такой код ..." Вы серьезно полагаете, что такие программы существуют? smile.gif
Как вариант, можно попытаться запустить эту программу на компе, смоделировать входные воздействия и записать результаты, но ИМХО, это потребует от вас как минимум знания С, чего вы хотите избежать...

Цитата
Реальный случай НЕ РАБОТАЕТ по причине нехватки быстродействия... и что я тут загнул?

"Для написания программы XXX для процессора YYY я не могу использовать С в силу жестких требований по производительности..." Слово "корявый" тут явно лишнее...
QuickWitted
Цитата(Непомнящий Евгений @ Apr 22 2008, 10:05) *
Т.е. вам нужна программа, которая скушает текст на С и выдаст что-то вроде:
"Если нажата клавиша 1, то передается такой код, если клавиша 2 в течении 3 секунд - такой код ..."


Это не алгоритм это блок схема
мне не блок схема нужна, а подробный алгоритм...
(есно блок схему ни одна программа на автомате не сделает)

в идеале как в алгоритм буилдере...

а под алгоритмом понимается
------------------------------------------------------
алгори́тм — это точный набор инструкций, описывающих последовательность
действий некоторого исполнителя для достижения результата, решения некоторой
задачи за конечное время.

АЛГОРИТМ – система правил, сформулированная на понятном исполнителю языке, которая
определяет процесс перехода от допустимых исходных данных к некоторому результату и
обладает свойствами массовости, конечности, определенности, детерминированности.
------------------------------------------------------

Цитата
"Для написания программы XXX для процессора YYY я не могу использовать С в силу
жестких требований по производительности..." Слово "корявый" тут явно лишнее...


Любой язык верхнего уровня для АВР транслирует результат в ассемблерный код... twak.gif
А если при написании это кода ручками всё прекрасно работает причём с большим запасом smile.gif ,
а при трансляции НЕТ crying.gif
то такая трансляция как называется? lol.gif
Ладно соглашусь - не оптимальной...
Непомнящий Евгений
Цитата(QuickWitted @ Apr 22 2008, 09:31) *
Это не алгоритм это блок схема
мне не блок схема нужна, а подробный алгоритм...
...

Вы не могли бы привести кратенький пример того, что хотите получить? (с алгоритм-билдером я не знаком). К примеру для программы
Код
void main()
{
  DDRA = 255;
  for (int i = 0; i< 100; ++i)
    PORTA = i;
while(1);
}

Цитата
Любой язык верхнего уровня для АВР транслирует результат в ассемблерный код... twak.gif
А если при написании это кода ручками всё прекрасно работает причём с большим запасом smile.gif ,
а при трансляции НЕТ crying.gif
то такая трансляция как называется? lol.gif
Ладно соглашусь - не оптимальной...

Не оптимальной по какому критерию? По критерию быстродействия для программы YYY на процессоре XXX. А по другим критериям или на другом процессоре или на другой программе - возможно оптимальной...
Я к тому, что если инструмент вам не подходит в вашем конкретном случае, не стоит называть его корявым или неоптимальным...
prottoss
Цитата(QuickWitted @ Apr 22 2008, 12:31) *
Это не алгоритм это блок схема
мне не блок схема нужна, а подробный алгоритм...
(есно блок схему ни одна программа на автомате не сделает)

в идеале как в алгоритм буилдере...

а под алгоритмом понимается
------------------------------------------------------
алгори́тм — это точный набор инструкций, описывающих последовательность
действий некоторого исполнителя для достижения результата, решения некоторой
задачи за конечное время.

АЛГОРИТМ – система правил, сформулированная на понятном исполнителю языке, которая
определяет процесс перехода от допустимых исходных данных к некоторому результату и
обладает свойствами массовости, конечности, определенности, детерминированности.
------------------------------------------------------



Любой язык верхнего уровня для АВР транслирует результат в ассемблерный код... twak.gif
А если при написании это кода ручками всё прекрасно работает причём с большим запасом smile.gif ,
а при трансляции НЕТ crying.gif
то такая трансляция как называется? lol.gif
Ладно соглашусь - не оптимальной...
Блин, ну Вы так умом блещщщите, что мне бы, например, было бы стыдно на Вашем месте создавать такую тему в форуме smile.gif

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

Я, для себя, вариантов больше не вижу.

Вам, возможно стоит разыскать терминатора - он машина умная, все расскажет biggrin.gif
QuickWitted
Цитата(prottoss @ Apr 22 2008, 10:56) *
Блин, ну Вы так умом блещщщите, что мне бы, например, было бы стыдно на Вашем месте создавать такую тему в форуме smile.gif


Стыдно потратить неделю на изобретение велосипеда по не знанию...

Ладно делаю общий вывод:
1) Народ программы для построения алгоритмов на основе СИ кода не знает.
(т.е. если она и есть то не распространенна)
(я сам видел такую для дельфи и паскалей - в упор не помню как называется)

2) Как перекинуть код с СИ на асм в готовом к компилированию виде
с сохранением исходного текста в качестве комментариев тоже пока никто не знает.
(то что в файле *.lst не годится для компиляции на асме в автомате без изменений)

Вывод - ТЕМА ЗАКРЫТА
Kuzmi4
2 QuickWitted - а банальный дебуг в аврстудии пробовали - там окошко есть - строчки си-кода а под ними асм....
Вроде как максимально приближено к тому что вам надо..
XVR
Цитата(QuickWitted @ Apr 22 2008, 10:12) *
Стыдно потратить неделю на изобретение велосипеда по не знанию...

Ладно делаю общий вывод:
1) Народ программы для построения алгоритмов на основе СИ кода не знает.
С программа уже и есть алгоритм smile.gif
Цитата
(т.е. если она и есть то не распространенна)


bb-offtopic.gif

Едут 2 ковбоя по прерии, вдруг на обочине дороги зашевелились кусты. Один ковбой хватается за пистолет. Второй

- Не беспокойся, это неуловимый Джо!

- А что, его так трудно поймать?

- Нет, просто он никому не нужен.



Так вот, такая программа - это тот самый неуловимый Джо 08.gif



Цитата
(я сам видел такую для дельфи и паскалей - в упор не помню как называется)
И что она выдаст для программы тысяч на 10 строк? А программу на 100 строк проще понять по тексту.


Цитата
2) Как перекинуть код с СИ на асм в готовом к компилированию виде
с сохранением исходного текста в качестве комментариев тоже пока никто не знает.
Сто раз уже говорили, ключ -s выдаст ассемблер, вполне готовый к компиляции

Цитата
(то что в файле *.lst не годится для компиляции на асме в автомате без изменений)
Разничу между листингом (.lst) и ассемблером (.s) надо объяснять?


А может вы не там спрашиваете - получать из C программы Ассемблер, что бы разобраться с алгоритмом - это занятие для настоящих мазохистов cranky.gif Там и надо искать, а здесь люди предпочитают работать, а не создавать себе трудности, которые потом героически преодолевают biggrin.gif



PS. Если программа на C небольшая, то бросили бы ее сюда вместе с вопросами, на которые хотите получить ответы - это будет быстрее, чем поиск мифических конверторов с С на Асм.
prottoss
Цитата(XVR @ Apr 22 2008, 14:36) *
PS. Если программа на C небольшая, то бросили бы ее сюда вместе с вопросами, на которые хотите получить ответы - это будет быстрее, чем поиск мифических конверторов с С на Асм.
ПрАграмма как раз из разряда "100 строк" - я специально скачал чтоб посмотреть - там в основном работа с портами - пиши хоть на Ассемблере, хоть на Си - код будет практически одинаков - вобщем вся тема - пыль.
SasaVitebsk
Цитата(prottoss @ Apr 22 2008, 13:16) *
вобщем вся тема - пыль.

Это понятно из названия темы. smile.gif Конвертер из Си в ASM, то есть программа переводящая программу написанную на Си в другой вид - это по определению транслятор. Одной из разновидностей транслятора - компилятор. Современные распространённые компиляторы Си построены по принципу C/ASM/OBJ/HEX. Таким образом ASM текст присутствует.

Программа построения алгоритма из Си программы (или ASM) большинству разработчиков ненужна ввиду того, что цикл разработки обратный, а именно сначала разрабатывается алгоритм (причём как правило укрупнённый), а уж потом пишется си прога. Иными словами программа строящая алгоритм из текста проги нужна в основном тем, кто разбирает чужие программы, причём, в основном, той части которая слабо разбирается в программировании. В связи с этим - потребность в таких программах - практически нулевая.

Можно рекомендовать лишь то, что вам уже посоветовали другие.

1) Разобраться надо ли вам вообще программирование. (Дальнейшие пункты будут актуальны только если ответ - да)
2) Разобраться в базовых понятиях
3) Начать изучать язык Си
Непомнящий Евгений
Цитата(SasaVitebsk @ Apr 22 2008, 14:39) *
Иными словами программа строящая алгоритм из текста проги нужна в основном тем, кто разбирает чужие программы, причём, в основном, той части которая слабо разбирается в программировании. В связи с этим - потребность в таких программах - практически нулевая.

оффтоп, конечно, но по-моему такая программа была бы весьма востребована. Многим приходится разбираться в чужих исходниках и некий инструмент, который получив текст на ЯП выдал бы осмысленное укрупненное описание был бы весьма полезен. Хотя врядли сегодня доступно что-то подобное...
XVR
Алгоритм работы программы:

Посылка с IR: 3 байта (старшим битом вперед)



1) 07 - Синхронизация

2) 50 - Отпускание клавиши / 5A - Нажатие

3) xx - Номер клавиши (>=80)



В PC отсылаются коды (по порядку):

E0 - Если клавиша принадлежит расширенному набору (см. ниже)

F0 - Для отпускания клавиши

xx - Скан код



Таблица скан кодов лежит в файле keys.h (первый столбец - скан код, второй - признак расширенного набора)

Если скан код равен 0 - клавиша игнорируется
vvs157
Цитата(QuickWitted @ Apr 22 2008, 10:12) *
1) Народ программы для построения алгоритмов на основе СИ кода не знает.
В стародавние времена (лет 20-30 тому назад) алгоритмы было принято публиковать на распространенном в те времена языке АЛГОЛ. И заметьте это официаль считалось публикацией алгоритма. А знает или нет читатель АЛГОЛ - это проблема читателя. Программ, которые из скажем кода на С чего-нибудь вроде БПФ сделает вам описание алгоритма как в учебнике - нет и не предвидется.
Цитата(QuickWitted @ Apr 22 2008, 10:12) *
2) Как перекинуть код с СИ на асм в готовом к компилированию виде
с сохранением исходного текста в качестве комментариев тоже пока никто не знает.
(то что в файле *.lst не годится для компиляции на асме в автомате без изменений)
С точки зрения повышения быстродействия бессмысленная идея, так АСМ код, получаемый таким транслятором в точности соответствует тому, что сгенерит компилятор. Если вам надо оптимизировать с точки зрения быстродействия или ресурсов что-то написанное на С, то ничего, кроме тупого вникание в сишный код и переложение его на асм руками не придумано. Идея заниматься оптимизацией АСМа из-под С не продуктивна, так как в рамках модели компилятор генерит достаточно оптимальный код.
QuickWitted
Цитата(XVR @ Apr 22 2008, 17:50) *
Алгоритм работы программы:
Посылка с IR: 3 байта (старшим битом вперед)
1) 07 - Синхронизация
2) 50 - Отпускание клавиши / 5A - Нажатие
3) xx - Номер клавиши (>=80)


Может я захватываю не все байты (т.е. устройство переключается на передачу данных в комп)
но первая посылка максимум на 7 бит тянет... (больше похоже на 6)
(в пределах (длинна посылки)*5 следующей посылка не начинается)

результат измерений и вьювер для их просмотра тут
http://swordgreenline.narod.ru/Soft.html
файл IROscil.zip (он там один)
в архиве программа и принятые файлы
надо открыть файл Klava.txt
далее просмотреть кодировку во вкладке осциллографа
в файле сохранено 6 нажатий ентера

наблюдается старт посылка
посылки при удержании
и посылка при отпускании
QuickWitted
Цитата(XVR @ Apr 22 2008, 17:50) *
Посылка с IR: 3 байта (старшим битом вперед)


В связи с тем что принимаемые посылки устойчивы во времени для
заданной кнопки то выкинув повторы собрал разновидности для 3х кнопок
Нажмите для просмотра прикрепленного файла
вьювер для просмотра тут
http://swordgreenline.narod.ru/Soft.html
файл IROscil.zip (он там один)

Цитата
1) 07 - Синхронизация


во всех посылках повторяется начало
ДЛИННА первых 4х бит 70h; 23h; 27h; 23h (импульс - пауза - импульс - пауза)
Хвост разный для разных кнопок...
разброс +-2 даже в посылке от одной кнопке

Вопрос как из длинны 4х бит получить цифру 07 ?
(не обязательно все 4 бита входят в 07
там может быть стартовый и может быть захвачен кусок след цифры)

P.S: Все измерения проходили в крякозябриках IgorPlug2 (за 1 ед. принято ~= 42.62 us)
XVR
Цитата(QuickWitted @ Apr 23 2008, 10:11) *
Может я захватываю не все байты (т.е. устройство переключается на передачу данных в комп)
но первая посылка максимум на 7 бит тянет... (больше похоже на 6)
(в пределах (длинна посылки)*5 следующей посылка не начинается)

результат измерений и вьювер для их просмотра тут
http://swordgreenline.narod.ru/Soft.html
файл IROscil.zip (он там один)
Я не смог освоить эту крутую программу 05.gif Видимо получить от нее длинну посылки невозможно, а одного вида импульсов недостаточно wacko.gif



В сорце импульсы принимались просто по длительности. Начало посылки выделялось по паузе (более 32х интервалов) и импульсу длинной 3 интервала (т.е. код 07). Затем заводился таймер, который сэмплировал значение с входа приемника каждый интервал. Все захваченные биты складывались в байты, которые анализировались, как я писал раньше. Длинна интервала - 800 mks



Коды повтора похоже игнорировались
QuickWitted
Цитата(XVR @ Apr 24 2008, 00:14) *
Я не смог освоить эту крутую программу 05.gif Видимо получить от нее длину посылки невозможно, а одного вида импульсов недостаточно wacko.gif


Поводи мышкой по виду – сразу над диаргаммой показывается над каким импульсом
мыша и длинна импульса эти же цифры в строчках сверху, суммарную длину не считал.

Цитата
В сорце импульсы принимались просто по длительности.
Начало посылки выделялось по паузе (более 32х интервалов)
и импульсу длинной 3 интервала (т.е. код 07).


Т.е. алгоритм примерно такой
(в скобках замеренные модулем IgorPlug2 числа в hex - они в 16 раз больше и прыгают +/-2)
1) ждать тишины в большей 32х интервалов (мин тишина 395h между посылками)
2) принять старт бит - код 07 (замерено около 71h)
3) потом что?

Цитата
Затем заводился таймер, который сэмплировал значение с входа приемника каждый интервал. Все захваченные биты складывались в байты, которые анализировались, как я писал раньше.


как складываются биты в байты? (как различаются бит0 от бита1)
сравнивается замеренное с числом если меньше то ноль если больше единица?
или сдвижка импульса относительно центра посылки?
(хотя мне кажется тут другая методика)

наблюдается куча мелких посылок и иногда крупные
причём очень похоже что крупные состоят из нескольких мелких
причём при этом вторая часть крупной посылки идёт с инверсией
(видно по стартовой части 072 023 026 023) в середине

-------------------------------------------------------------------------
пример мелкой на 6 импульсов - при нажатии кнопки
первый импульс - 072 023 026 023 04B 023 026 023 025 049 025 049 06E
пауза больше 800h
-------------------------------------------------------------------------

-------------------------------------------------------------------------
пример крупной на 15 импульсов
первый импульс - 071 023 026 023 026 091 026 023 026 048 026 023 04A 000
далее длинный импульс 192
это пауза в середине - 070 023 026 023 049 025 025 024 025 024 06E 026 06D 000
293 - большая пауза
-------------------------------------------------------------------------

-------------------------------------------------------------------------
пример крупной на 12 импульсов
первый импульс - 071 023 026 023 04B 023 027 022 027 047 027 047 06E 000
далее длинный импулс 393
это пауза в середине - 070 023 026 023 026 091 026 048 026 048
пауза больше 800h
-------------------------------------------------------------------------

все полученные коды методом тыка на клавиши...
до 100 - по 1 клавиши от 101 до 180 жали на несколько разом...
Нажмите для просмотра прикрепленного файла
QuickWitted
Цитата(XVR @ Apr 24 2008, 00:14) *
Я не смог освоить эту крутую программу 05.gif


1) все импульсы имеют постоянное знакоместо их начала... т.е. на одном и том же расстоянии от начала
возможны варианта 1)импульс есть 2)импульс есть, но он слился с несколькими последующим или отел часть паузы
3)импульса нет. Стандартная длинна импульса 26h или 49h
2) начало всегда одинаковое - после длинного молчания 1)импульс71h - пауза23h - 2)импульс26h - пауза23h
(071 023 026 023)
3) на 3 знакоместе может быть 2 варианта длинны импульса стандартный 26h и удлинённый за счёт паузы 49

Нажмите для просмотра прикрепленного файла
XVR
Цитата(QuickWitted @ Apr 24 2008, 09:11) *
Поводи мышкой по виду – сразу над диаргаммой показывается над каким импульсом
мыша и длинна импульса эти же цифры в строчках сверху, суммарную длину не считал.
Меня смутило то, что на импульсы визуально разной длинны (для разных клавиш) он показывал одно и тоже значение
Цитата
Т.е. алгоритм примерно такой
(в скобках замеренные модулем IgorPlug2 числа в hex - они в 16 раз больше и прыгают +/-2)
1) ждать тишины в большей 32х интервалов (мин тишина 395h между посылками)
2) принять старт бит - код 07 (замерено около 71h)
3) потом что?
Алгоритм такой:
  1. Ждать тишины > 32х интервалов
  2. Ждать начала посылки
  3. Отсчитать пол-интервала, с этого места начать непрерывно считывать сигнал с IR датчика с заданным интервалом (около 23h по IgorPlug2)
  4. Считанные биты обрабатываются следующим образом:

  1. Первые 3 бита должны быть 1 (есть сигнал с IR входа) - Стартовый маркер
  2. Далее биты складываются в байты (по 8 битов) начиная со старшего бита в байте, т.е. бит 7, бит 6, бит 5 ... бит 0, всего 2 байта
  3. 1й байт из этих 2х - кон нажатия/отпускания клавиши
  4. 2й байт - номер клавиши + 128 (старший бит установлен)
Если протокол не соблюдается (стартовые биты не все 1 или код нажатия/отпускания не правильный или старший бит в номере клавиши не установлен), посылка игнорируется и все начинается сначала


Цитата
наблюдается куча мелких посылок и иногда крупные
причём очень похоже что крупные состоят из нескольких мелких
причём при этом вторая часть крупной посылки идёт с инверсией
(видно по стартовой части 072 023 026 023) в середине
Оригинальная программа все это игнорирует


Цитата
-------------------------------------------------------------------------
пример мелкой на 6 импульсов - при нажатии кнопки
первый импульс - 072 023 026 023 04B 023 026 023 025 049 025 049 06E
пауза больше 800h
-------------------------------------------------------------------------

  • 072 - Стартовый импульс
  • 023 026 023 04B 023 026 023 - 01011010 - 5A - Нажатие
  • 025 049 025 049 06E - 10010011 (1) - Клавиша с номером 19 - ESC
Цитата
-------------------------------------------------------------------------
пример крупной на 15 импульсов
первый импульс - 071 023 026 023 026 091 026 023 026 048 026 023 04A 000

  • 071 - Старт
  • 023 026 023 026 091 - 01010000 - 50 - Оттускание
  • 026 023 026 048 026 023 04A - 10100101 (1) - Клавиша с номером 37 - PrtScr
Остаток посылки будет проигнорирован
QuickWitted
Цитата(XVR @ Apr 24 2008, 13:07) *
Меня смутило то, что на импульсы визуально разной длинны (для разных клавиш) он показывал одно и тоже значение


Это из за авто зума покрути вкладку сетингс...
а для большей визуальности я переделал алгоритм отображения импульса под мышкой
добавил расчёт позиции, цену одного деления и т.д.
т.е. добавил рюшечек и бантиков... результат выложил тут
http://swordgreenline.narod.ru/Soft.html
файл IROscil.zip (он там один)

Цитата
  • 071 - Старт
  • 023 026 023 026 091 - 01010000 - 50 - Оттускание
  • 026 023 026 048 026 023 04A - 10100101 (1) - Клавиша с номером 37 - PrtScr
Остаток посылки будет проигнорирован


За пояснения спасибо - буду разбираться...
XVR
Цитата(QuickWitted @ Apr 24 2008, 12:33) *
а для большей визуальности я переделал алгоритм отображения импульса под мышкой
добавил расчёт позиции, цену одного деления и т.д.
т.е. добавил рюшечек и бантиков... результат выложил тут
http://swordgreenline.narod.ru/Soft.html
файл IROscil.zip (он там один)
Советую добавить показ временной сетки (в тиках или mks) на осцилограмме. Так же приходит на ум какая-нибудь внешняя прилада для экспериментов с обработкой принятых данных для оперативных экспериментов с кодированием и пр. Например в виде внешней программы, читающей последовательность через поток ввода (или параметр) и выдающая обработанное значение на вывод в виде текста или такой же последовательности.
Corvus
Насчёт преобразования кода на С в блок-схему. Есть такая программа, CrystalCPP Flow Chart
http://www.sgvsarc.com/product_crystalflow.htm
QuickWitted
Цитата(Непомнящий Евгений @ Apr 22 2008, 10:42) *
Вы не могли бы привести кратенький пример того, что хотите получить? (с алгоритм-билдером я не знаком). К примеру для программы
Код
void main()
{
  DDRA = 255;
  for (int i = 0; i< 100; ++i)
    PORTA = i;
while(1);
}


Теперь могу
Нажмите для просмотра прикрепленного файла
во клас - 3 клика мышкой и алгоритм готов

За программу большое спасибо beer.gif
Непомнящий Евгений
Прогу тож скачал, скормил ей функцию, получил схему. ИМХО, читать С-программу проще, чем блок-схему (подписи на которой - это куски той же С-программы). Хотя на вкус и цвет...

зы В вашей картинке цикл for он чего-то запихал в один блок...
muravei
Цитата(QuickWitted @ Apr 25 2008, 09:03) *

Теперь , бы другую программку: нарисовал какую-нить хрень, а она тебе -код на Си smile.gif
QuickWitted
Цитата(muravei @ Apr 25 2008, 11:48) *
Теперь , бы другую программку: нарисовал какую-нить хрень, а она тебе -код на Си smile.gif


такая давно существует - алгоритм буилдер...
(выход правда на асме, но по принципу - нарисовал - получил...)
QuickWitted
Цитата(XVR @ Apr 24 2008, 13:07) *
Алгоритм такой:
  1. Ждать тишины > 32х интервалов
  2. Ждать начала посылки
  3. Отсчитать пол-интервала, с этого места начать непрерывно считывать сигнал с IR датчика с заданным интервалом (около 23h по IgorPlug2)
  4. Считанные биты обрабатываются следующим образом:
  1. Первые 3 бита должны быть 1 (есть сигнал с IR входа) - Стартовый маркер
  2. Далее биты складываются в байты (по 8 битов) начиная со старшего бита в байте, т.е. бит 7, бит 6, бит 5 ... бит 0, всего 2 байта
  3. 1й байт из этих 2х - кон нажатия/отпускания клавиши
  4. 2й байт - номер клавиши + 128 (старший бит установлен)


За исключением того, что старший бит второго байта оказался синхроимпульсом
всё примерно так и работает:

http://www.mindrunway.msevm.com/

29.05.08. В рамках проекта IgorPlug2 удалось добиться аппаратного распознавание сигнала от двух независимых источников:
А) IR клавиатуры SWK-8630. (клавиатура от интернет приставки NetBox).
Б) "Обученного" через прилагаемую программу ПДУ от бытовой техники.
В связи с этим была доработана программа осциллографа и перекомпилирован набор экспериментальных прошивок для управляемого реле.

всем спасибо...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.