Это плус! , ни где такого нету а у Sam_soft есть. Не плохо придумано, начинающим это очень даже хорошо.Komrad писал(а):...
Да, Сэм хитро придумал...сварочное Лего для взрослых.
Реанимация древних машин. На фанерке.
Re: Реанимация древних машин. На фанерке.
Re: Реанимация древних машин. На фанерке.
Komrad, а как это себя проявляло?Komrad писал(а):Если будеш по UATR обмениваться не с терминала, а со своего интерфейса, между символом команды и \r ( и после \r) делай задержку не менее 5 милисек, иначе не читаются.
Я занимался написанием интерфейса (компутер по ком-порту), прошита была версия 1002, обмен шел без вопросов. Руки дошли прошить пвмку версией 1004, и ожидаемый ответ приходит только от первой команды, последующие возвращают ?InvalidCommand. Введение задержек не помогло, с терминала команды проходят нормально.
Re: Реанимация древних машин. На фанерке.
ОТ какой именно команды есть ответ? В принципе давать команду зачитать версию софтваре и вывести полученый ответ уже само по себе интересная задача. Хотя это делать и не обязательно. Включить режим, пусть ММА, командой, а потом уже кулера, клапаны, ШИМ после включения режима. Опять-же лог получить ( пригодится опыт с зачиткой версии). А вообще-то команды передавать символами, а не строками. В моем случае включить ТИГ ДС будет выглядеть примерно так:
Serial1.print( ' d ' );Pausa();Serial1.print( ' \r ' ); Pausa(); Кавычки ОДИНАРНЫЕ, иначе интерпретируется как строка, а не символ. Pausa(); это моя собственная функция задержки времени.Она основана на функции , которая возвращает время с момента начала работы программы. Дальше читаем (или не читаем) что пришло в буфер от фанерки. Числа нужно из int-ов переопределить в char и так передать. Как передать - я пыхтел почти неделю, пока не получил в ответ "о".
Serial1.print( ' d ' );Pausa();Serial1.print( ' \r ' ); Pausa(); Кавычки ОДИНАРНЫЕ, иначе интерпретируется как строка, а не символ. Pausa(); это моя собственная функция задержки времени.Она основана на функции , которая возвращает время с момента начала работы программы. Дальше читаем (или не читаем) что пришло в буфер от фанерки. Числа нужно из int-ов переопределить в char и так передать. Как передать - я пыхтел почти неделю, пока не получил в ответ "о".
Re: Реанимация древних машин. На фанерке.
Ну, дак Сэм писал 16 байт(на запрос), свободные если есть такие, тоже(а вот это мои доводы, но пустыми оставить нельзя). Запрос должен быть всегда, этим значением(16 байт). Иль я чего путаю.?
Re: Реанимация древних машин. На фанерке.
Не на запрос, а на ответ. Терминал на компе автоматом его выведет, напечатает. А нам самим нужно это сделать. Причина проста - кроме "О" могут быть еще два символа в ответе. Использовать их или нет - второе дело.
Дело в том, что у Kish Инвалид команд в ответе, значит он его читает. А команда отдается не верно.
Дело в том, что у Kish Инвалид команд в ответе, значит он его читает. А команда отдается не верно.
Re: Реанимация древних машин. На фанерке.
Другими словами,читает не знает чего.Это может из за тактирования,на SPI тактирование всегда задаёт мастер.Конфликт может быть и как пишут, инициатива определения исходит от мастер.Так в общим ясно.Komrad писал(а): Дело в том, что у Kish Инвалид команд в ответе, значит он его читает. А команда отдается не верно.
Re: Реанимация древних машин. На фанерке.
Да нет же... Представь, что в буфер PWM пришла инфа, неважно по SPI или UART. Как определить, что там. Команда или задание тока к примеру? Эту инфу из буфера нужно с чем-то сравнить и после сравнения выполнить действие. А если мы напишем прогу так, что даные будут представлены в НЕ правильном, не читаемом и не определяемом фанеркой виде - ответ будет один - invalid. Хоть азбукой Морзе передавай. Ну , я так понимаю. Мы же не знаем как там устроен Термит, и чего он творит с символами, которые мы набрали на экране? Он представляет данные в понятном для нас виде, хотя вместо "1" вполне мог-бы писать 48, или 49. ( не помню, кто из них "0")PAVEL писал(а):Другими словами,читает не знает чего.
Re: Реанимация древних машин. На фанерке.
Не, термита там нет, коды символов или их значения должны быть. Как писал Сэм общение одинокова, что для uart что для spi. Знаю что по spi, принятый байт, возвращается обратно. Значит мастер знает что байт дошёл, другое дело в адекватности составленного байта, слайв может не понять о чём речь. Как-бы интерфейс и определяет порядок общения. В общим будем думать. ![Улыбается :)](./images/smilies/icon_e_smile.gif)
![Улыбается :)](./images/smilies/icon_e_smile.gif)
Re: Реанимация древних машин. На фанерке.
Правильно, преобразовывает в char. Символ `1` передается как число #31 (49), `a` - как #61 (97) и т. д. Фанерка принимает байты, пока не получит `ENTER` #D (13). Если принятая последовательность корректна по протоколу, выполняет команду, иначе - Invalid command.Komrad писал(а): Мы же не знаем как там устроен Термит, и чего он творит с символами, которые мы набрали на экране? Он представляет данные в понятном для нас виде, хотя вместо "1" вполне мог-бы писать 48, или 49. ( не помню, кто из них "0")
Re: Реанимация древних машин. На фанерке.
От любой. Например, включаю фанерку, командую "v\r" - получаю версию, снова командую "v\r" - инвалид. Первая (после включения питания) любая (v, m, c...) команда отвечает нормально, вторая (например после "v\r" - "m\r", или после "m\r" - "a10\r") проходит не правильно - ответ инвалидкомманд.Komrad писал(а):ОТ какой именно команды есть ответ?
Просто как столкнулся с этим, возникло пара вопросов:
1. Komrad, что у тебя было, когда ты не делал паузы?
Остальные риторические - почему прекрасно все работало на версии фанерки 1002? Понятно, что фишка программная, в терминале то работает. Паузы вводить пробовал, посимвольно передавать команды тоже.