Официальный сайт компании Arduino по адресу arduino.cc
Терминал для DigiUSB.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вс, 06/09/2015 - 18:59
Терминал для DigiUSB.
Терминал для DigiUSB.
и, скетч для просветления - зачем, почему, как... нужное раскомментить.
Клапауций 001, что , прямо сам его пофиксил?)) Здорово. Кстати в тему, интересно какие аппаратные ресурсы отъедает этот терминал. Сдаётся мне что таймер1 и прерывание PCINT, интересно бы точно узнать . А таймер1 там очень крутой, хоть и 8-битный, но у него 14-битный прескалер и возможность тактироваться через встроенный PLL синтезатор с тактовой 64MHz.
Клапауций 001, что , прямо сам его пофиксил?))
скорее не пофиксил, а переписал логику работы.
за USB там libusb отвечает - просто инициализируется железка, никакой логики, оставил как есть.
за ввод и отрисовку экрана PDCurses - настроил.
дальше C++ - читаешь символ из клавы и отправляешь в окно или usb.
исходник здесь валяется, просмотрев его, поймёшь, что писал упоротый LSD, периодически приходящий в сознание чел.
Кстати в тему, интересно какие аппаратные ресурсы отъедает этот терминал. Сдаётся мне что таймер1 и прерывание PCINT, интересно бы точно узнать . А таймер1 там очень крутой, хоть и 8-битный, но у него 14-битный прескалер и возможность тактироваться через встроенный PLL синтезатор с тактовой 64MHz.
нуу, я не готов ответить, сколько ресурсов что отъедает - у меня оно крутится в программаторе USBasp на Atmega8 и частоте 12 мегагерц.
у меня оно крутится в программаторе USBasp на Atmega8 и частоте 12 мегагерц.
а для чего он в программаторе? Я думал это исключительно для дижиспарка монитор.
у меня оно крутится в программаторе USBasp на Atmega8 и частоте 12 мегагерц.
а для чего он в программаторе? Я думал это исключительно для дижиспарка монитор.
это монитор для дижиспарка, дижиспарк у меня крутится на atmega8 12 мегагерц, которая аппаратно находится в железе программатора USDasp - смысл городить аппаратный интерфейс V-USB, который использует дижиспарк, если готовая железка под руками валяется?
Кстати в тему, интересно какие аппаратные ресурсы отъедает этот терминал.
Я имел ввиду аппаратные ресурсы, что со стороны МК для обслуживания USB ( скорее всего не только для терминалки, а для любой эмуляции) отьедается целиком таймер, прерывание. И об этом нигде не написано, по крайней мере на глаза не попадалось.
написано. вся информация есть в свободном доступе
со стороны МК работает интерфейс V-USB об этом явно сказано в Readme.txt, который лежит в папке библиотеки DigisparkUSB
обобщённая информация в википедии
https://ru.wikipedia.org/wiki/V-USB
V-USB — название программной библиотеки, позволяющей получить поддержку протокола USB на микроконтроллерах AVR (семейств Classic, Tiny и Mega компании Atmel), которые не имеют аппаратной поддержки USB. V-USB — название программной библиотеки, позволяющей получить поддержку протокола USB на микроконтроллерах AVR (семейств Classic, Tiny и Mega компании Atmel), которые не имеют аппаратной поддержки USB.
*мне не попадалась информация, что V-USB катастрофически занимает ресурсы
**пока, что нашёл в вики - но, это и из схемы подключения понятно
Из аппаратных ресурсов используется только прерывание по изменению сигнала на выводе (обычно INT0, подсоединенный к сигналу D+ шины USB). Таким системным требованиям удовлетворяют большинство микроконтроллеров семейства AVR.
Клапауций 001, это информация общая. У дижиспарка на тини 85 своя специфика, и по ней -ни слова. INT0 там точно свободен,т.к. это нога физически не подключена к USB. И главное про таймер нет ни слова нигде, хотя он явно используется.
Клапауций 001, это информация общая.
ну, как так "общая"? - есть исходники V-USB, есть исходники библиотеки DigisparkUSB, которые снабжены подробнейшими комментариями.
У дижиспарка на тини 85 своя специфика, и по ней -ни слова. И главное про таймер нет ни слова нигде, хотя он явно используется.
вся специфика дижиспарка на тини 85 не выходит за рамки спецификации V-USB.
если желается узнать точно, то достаточно сравнить исходники библиотеки DigisparkUSB и V-USB
INT0 там точно свободен,т.к. это нога физически не подключена к USB.
ну, да.
для ATtiny85 в файле usbconfig.h указаны следующие настройки - посмотри, где там таймер - я плаваю в этом.
Я изучал этот таймер, всё было хорошо пока не попытался выводить иформацию через терминал. Стоит поменять настройки таймера при работе терминала -либо всё сразу отваливается от usb, либо скорость вывода меняется. либо просто терминал отваливается, но таймер продолжает работать. Причём любые операции не связанные с таймером проходили без глюков, осюда сделал вывод, что таймер1 занят. Возможно таймер0 свободен, до него руки не дошли.
Кстати ещё любопытно, если ресет запрограммировать как обычный порт. Можно ли будет так-же через бутлоадер заливать прошивки? :) Жирно больно из 6 портов один отдавать под ненужную функцию..
Кстати ещё любопытно, если ресет запрограммировать как обычный порт. Можно ли будет так-же через бутлоадер заливать прошивки? :) Жирно больно из 6 портов один отдавать под ненужную функцию..
в оригинальном дижиспарке так и сделано - всё льётся посредством их самописного лоадера и их софтового программатора micronucleus
Наверное потому, что протокол USB довольно требователен к частоте при передаче данных, любое отклонение от допустимых по стандарту значений вызывает в драйверах аварийную ошибку и отключение устройства.
Клапауций 001, спасибо, терминал - это хорошо, а то приходилось извращаться методом вывода в блокнот через DigiKeyboard.println() :)
все юзающие, зачисляются в роту тестеров и обязуются докладывать о неполадках и прочих неудобствах.
А какое жалование у тестеров?
они не будут расстреляны за невыполнение приказа.
т.е. им будет пожаловано самое ценное в этом мире - жизнь.
*невидимые руны лицензионного соглашения читать нужно, что бы вопросов не возникало.
Живём!
Правда непонятно, чья жизнь им гарантирована.
Да и не расстрелян не значит не повешен
Эхх, как говорил один мой коллега, если что то не получается, ляг поспи и все пройдет
не гарантирована, а пожалована - я не страховая компания, а простой командир роты тестеров.
вероятность путаницы не исключаю - заменю из обменного фонда.
*шо там у тебя не получается?
В тестеры выйти не получается, прощай жизнь. Нету у меня Digisparkа
ну, да - а, кто подключал фейс V-USB и загрузчик USBaspLoader пилил?
Ах жеж, точно. Не вникнул значит в тему, видел знакомые слова, но не осознал, только щас дошло :) Хотя Дигиспарк я всё таки погуглил W
Ах жеж, точно. Не вникнул значит в тему, видел знакомые слова, но не осознал, только щас дошло :) Хотя Дигиспарк я всё таки погуглил W
Честное слово, не могу придумать, зачем мне это сейчас нужно. Хотя может когда и пригодится, тогда и вспользуюсь.
хм. приходит чел в тему, задаёт вопросы, получает ответы, затем заявляет, что не понимает, что он здесь делает и зачем это всё ему нужно именно сейчас.
*kisoft, ты заблудился? - никто тебя не принуждает всё бросать и заниматься дижиспарком. если шо, то выход здесь Форум.
Мне этот терминал щас не нужен, вот я о чем, а не про что то еще. Ок, я закончил, хотел разговор поддержать, да не получилось :)
Мне этот терминал щас не нужен, вот я о чем, а не про что то еще.
ок - на планете Земля существует несколько миллиардов человек, кому не нужен терминал, ты один из них.
нет необходимости всем, кому не нужен терминал об этом отписываться - форум разорвёт вклочья.
На то он и форум, каждый пишет что хочет
вопрос программистам:
в каком виде выводить в терминал непечатные символы канонически правильно в виде %d(целое десятичное со знаком)?
*запилил запись ввода-вывода в текстовый файл - потестирую и опубликую позже.
Я предпочитаю в HEX "0x%02X", ещё можно в десятичном и в скобках HEX.
Специальных канонов нет, зависит от типа информации.
Только в HEX удобно тем, что числа в колонках одно под другим.
Вообще вопрос философский, как аффтор посчитает понятным и удобным, так и хорошо
ну, в монитор печатается и пересылается в USB переменная char - пытался выводить её в виде %x, но как-то оно криво отрицательные значения выводятся. остановился на %d - легко читаемое и интуитивно понятное десятичное число.
думаю так
Если нужны числа со знаком, то HEX неудобен, это да. Хотя привести char к беззнаковому типу - не вопрос
не в знаке дело, а в том, что отрицательные числа если делать %x выводятся с fffff перед значением HEX - не знаю почему.
Явно перед выводом char конвертируется, потому это и происходит (более точно щас не смогу объяснить, сам не очень помню, не охота по асму лазить). Потому перед выводом char надо конвертировать, например, в unsigned char. Для примера в третьем варианте привел к unsigned int. Да, всё это на винде компилировалось и выполнялось.
Пример (Visual Studio 2013):
городить костыли форматирования этого в нечто единообразное как-то не желается да и читается оно хреново - привык уже что числа от -128 до 127 у меня летают.
Asm только чтобы посмотреть приведение типов.
Насчёт %s не понял. %s - вывод строки, что у меня и есть, а %c - вывод char. Впрочем это и так понятно. Значит я вопрос не понял.
Кстати %x так и написано, что это беззнаковое целое, значит 100% происходит преобразование из char в unsigned int или типа того.
В общем можно с этим завязывать, тема HEX раскрыта :) Может кому будет полезно почитать.
Про дополнительный код для отрицательных чисел:
http://microkontroller.ru/programmirovanie-mikrokontrollerov-avr/pryamoy...
Судя по примерам, происходит преобразование в long int (процессор 32-разрядный). Но конверсия (unsigned char) уменьшает число до одного байта и помогает уменьшить количество F в старших разрядах числа.
для меня не раскрыта - как напечатать в HEX отрицательный char.
в byte перевести и затем?..
HEX изначально беззнаковый формат, потому отрицательный HEX - нонсенс
HEX изначально беззнаковый формат, потому отрицательный HEX - нонсенс
т.е. вывод char в формате HEX практически невозможен и не имеет смысла.
ок.
Я всё объяснил в сообщении #32 повторять нет смысла.
ничего ты не объяснил - ты сказал, что для лично тебя это не проблема.
для меня это проблема - вернуть отрицательное число из HEX
HEX изначально беззнаковый формат, потому отрицательный HEX - нонсенс
Как это беззнаковый, куда-ж знак растворяется что ли? :))
Вот код для примера , выдаст в сериал -15.
dimax, получается, что всё правильно тут #35
17
-15
18
fffffff1
*кароче, шото у меня подозрение, что оптимальным способом будет конвертация числа в восьмибитный код, а затем - представлять его, как желается.
Клапауций 001, да я и не особо понял в чём собссно проблема. Отрицательные в хексе -да, непривычно выглядят, с ходу даже не поймёшь ,большое это число или маленькое:) Можно даже загадки новичкам загадывать, что больше, (int) 0xFFF1 или (int)0x7FFF ? )))
Клапауций 001, да я и не особо понял в чём собссно проблема.
вкратце: думаю, как выводить на экран непечатные сканкоды клавиатуры - потому как printf("%c", ch) печатает бред.
HEX изначально беззнаковый формат, потому отрицательный HEX - нонсенс
Как это беззнаковый, куда-ж знак растворяется что ли? :))
Вот код для примера , выдаст в сериал -15.
-15 это DEC, а не HEX.
В общем как хотите, но ужеибез меня. В гугле поискать c++ printf и в нём формат %x, там написано явно, что это беззнаковый формат. Point.
да, нет уж - снова пришёл, нагородил чепухи и свалил...
рассказывай, нафига ты мне предложил выводить char в формате HEX?
kisoft, я иногда торможу, и чего-то не понимаю, просьба разъяснить :) В данном случае не понимаю причём тут HEX, DEC и их знаковость? Где тут взаимосвязь? Есть знак, или нету знака задаётся в типе данных int16_t или uint16_t, другими словами в int старший бит несёт не числовую, а знаковую информацию. Но как это связано с хексом или dec, вот что я не пойму..
да, нет уж - снова пришёл, нагородил чепухи и свалил...
рассказывай, нафига ты мне предложил выводить char в формате HEX?
А вернуться и прочитать моё сообщение слабо? Я написал "я предпочитаю", и меня совершенно не интересует, что, при этом, предпочитают другие. И объяснений я уже тонну выкатил, да никто не хочет прочитать внимательно.
Теперь по поводу HEX, DEC. Я слегка удивлён, что вы тут все дружно начали тупить и смешивать понятия хранения и отображения. HEX, DEC это всего лишь формат для отображения информации в удобном для человека виде. Попгуглите "C++ printf" и почитайте там про %x.
Мля, всё это есть в инете, объяснять рутину нет никакого желания. Считайте как хотите. Я больше на эту тему не отвечаю, гуглите.