|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
|
Page 1 of 1
|
[ 7 posts ] |
|
KIM Uno - a 6502 KIM-1 Computer on Arduino
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
В общем как-то оно так случилось, что по совокупности факторов меня зацепил один очень интересный проект: KIM Uno - a 6502 KIM-1 Computer on ArduinoЭтому проекту уже примерно около 4-х лет, насколько я понял, и он успел уже широко распростаниться, причем есть уже и клоны, и разные модификации: KIM Uno - a 6502 KIM-1 Computer on Arduinohttps://www.instructables.com/id/KIM-Uno-a-6502-KIM-1-Computer-on-Arduino/KIM Uno - a 6502 KIM-1 Computer on Arduinohttps://create.arduino.cc/projecthub/obsolescence/kim-uno-a-6502-kim-1-computer-on-arduino-e5c82cKIM Uno - a modern KIM-1 clonehttp://obsolescence.wixsite.com/obsolescence/kim-uno-summary-c1uuhА тут так вышло, что я на неделе был в магазине Радиодетали, и пока в очереди стоял, разглядывал на витрине эти самые Ардуины и всякую шнягу к ним. Почему-то отложилась в голове цена Ардуины-мини - 250 рублей, а на следующий день я поинтересовался на работе, кто пользует Ардуины, и мне сказали, что это совсем божеская цена, с доставкой из Китая к нам обходится где-то в 230 р. Второй очень приятный момент был, что проект работает на любой Ардуине, причем без кнопок и индикаторов. Он дублирует управление и вывод через COM-порт, то есть результат можно увидеть сразу! Ну и в-третьих, мне почему-то очень захотелось увидеть вживую эти самые текстовые шахматы! В общем, купил я себе 2 Ардуины: мини и нано, сутки у меня ушло, чтобы почитать сайты по Ардуине, поскольку я хотел себе Arduino IDE поставить на оба ноутбука - под Windows 98 и Windows 7. И вот что получилось в итоге, хотя шаманить и исполнить пляску с бубнами пришлось как под Windows 98, так и под Windows 7. Я, честно говоря, не поклонник Ардуин, так что пока шаманил, мнение моё о них именилось даже в более худшую сторону: тестовый код Blink - поморгать светодиодом с интервалом 1 сек на их С++ занимает аж 1414 байт Но... пришлось признать - зато это быстро. КОД Blink Кто захочет повторить, прилагаю ту прошивку, которую я проверил сам: Для того, чтобы было понятно, как работать с таким KIM Uno - желательно скачать его мануал: https://halckemy.s3.amazonaws.com/uploads/pdf_file/file/150943/KIM%20Uno%20Manual%20v2.pdfВ этом мануале пишут, что полезно иметь и оригинальный мануал от KIM-1 Computer: https://archive.org/details/KIM-1_Users_ManualНу а кто не хочет ничего этого делать - можно посмотреть видео про KIM Uno: KIM Uno: a KIM-1 replica: https://www.youtube.com/watch?v=vyhMJKvCXgABuilding The KIM Uno Kit (KIM-1 Emulator): https://www.youtube.com/watch?v=G9FZrAwcUCE
_________________ iLavr
|
31 Aug 2018 22:23 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
В общем-то, мне хотелось-таки сделать этот KIM Uno как автономный проект на батарейках. Тут основная прелесть в том, что Atmega в Arduino работает в широком диапазоне питающих напряжений, схемотехника очень проста - индикаторы, резисторы, кнопки и ничего лишнего. А в ПЗУ этого KIM-1 Computer зашиты приятные вещи, кроме микрошахмат - собственно сам монитор KIM-1 (говорят, что не хуже, чем более знаменитый Woz Monitor), также там есть дизассемблер, мощный калькулятор для чисел с плавающей точкой, и еще кой какие утилиты. Поэтому я сразу приобрел и 25 кнопок типа ПКН (у нас они по 10 р.) и два блока 7-сегментных индикаторов я тоже приобрел (по 90 р. они у нас). Но случилась засада такая, что в проекте нужны индикаторы с общим анодом, а у нас есть только с общим катодом в наличии, а с общим анодом - надо ждать под заказ. Я вообще очень ждать не люблю, поэтому взял блоки с общим катодом с той мыслью, что можно пропатчить подпрограмму сканирования индикатора и кнопок, и уж совсем накрайняк - поставить управляющие транзисторы, которые перевернут всё как надо для индикатора с общим катодом. Правда, при этом теряется вся прелесть проекта - добавятся 14 транзисторов и еще 14 резисторов. В общем я решил для начала посмотреть, как это впишется в схему KIM Uno на Arduino, для чего схему чутка перерисовал, чтобы более понятно разобраться в алгоритме сканирования: CXEMA KIM Uno на Arduino После отрисовки стало понятно "что всё совсем непонятно"... По крайней мере, обычно опрос нажатия клавиш происходит во время перебора знакомест индикатора, но по этой схеме такой алгоритм никак не вырисовывался... Выяснилось, что алгоритм автора несколько оригинален - он разделил эти два процесса, что несколько странно: индикаторы подсвечиваются отдельно, потом порты быстро переключаются и отдельно сканируются кнопки на предмет их нажатия. Я не знаю, чего автор хотел таким трюком достичь - может ему библиотеки Ардуины не позволяли, или это продиктовано индикатором с общим анодом (к "0" тянут сегменты, а не знакоместа), но как-то я не очень был рад этому трюку - я делал такую задачу на К580ВМ80 + К580ВВ55 на частоте 2 МГц и на PIC16F84 на частоте 4 МГц, и знаю, что порой весьма непросто вписаться во врем Янки, чтобы индикаторы заметно не моргали... Видимо, 16 (или 8 ) МГц Atmega здесь спасают. Также оказалось, что и на западе не у всех под рукой 7-сегментные индикаторы с общим анодом, поэтому многие начали решать эту проблему изменением алгоритма сканирования, и выяснилось, что оригинальный алгоритм не очень-то поддается правке. Всё-таки код на С++ и библиотеках Arduino IDE. На ассемблере, я думаю, было бы проще... В приложении - как некий Scott Lawrence разрешил для себя эту проблему, несколько изменив саму схемотехнику подключения как индикатора, так и кнопок к KIM Uno. И если погуглить - можно найти на GitHub библиотеку к Arduino IDE для индикаторов с общим катодом. Я себе скачал код, но прямой ссылки не сохранил, к сожалению. Есть только название: KIM Uno Common Cathode LED logic. И на GitHub таких проектов я нашел два. P.S. Да, и забыл я сказать, что в качестве терминальной программы под Windows 7 я использовал PuTTY.exe, поскольку под Windows 7 своих терминалок нет, Гипертерминал - уволили. PuTTY есть в русской версии, я её пробовал - она хуже под Windows 7, лучше её старая англоязычная версия - PuTTY-0.60. Вобще терминалок много, но мне хотелось два качества: чтобы терминал открывался во весь экран и не отсвечивал ничем лишним, и чтобы были настройки шрифта, и цвета фона и шрифта: я хотел крупный зеленый моноширинный шрифт на черном фоне. PuTTY так умеет.
_________________ iLavr
|
01 Sep 2018 06:58 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Похоже, автор просто старался максимально приблизиться к схемотехнике оригинального KIM-1. У него как раз матрица клавиш опрашивается через 3 строки, см. KIM-1 - User ManualИ индикаторы 7-сегментного дисплея в KIM-1 используются с общим анодом: P.S. Кстати, документация на KIM-1 в хорошем html-качестве есть здесь: http://users.telenet.be/kim1-6502/
_________________ iLavr
|
01 Sep 2018 14:55 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Презабавные вещи вдруг узнаешь при попытке работы с винтажной техникой! Этот самый KIM-1 в оригинале (да и его реплика KIM-Uno) умел работать в двух режимах: Мode1: со своими 24 кнопками и семисегментными индикаторами; Мode2: с внешним SERIAL TELEPRINTER (по инструкции так называется). В Мode1 функционал весьма прост и ограничивается служебными кнопками - это я быстро проверил. Перешел в Мode2. А там по мануалу, то надо нажать клавишу [LF] - Line Feed, то еще более странную клавишу [RUB OUT]. Ну и где мне их нажать? Поискал по интернету... типовой SERIAL TELEPRINTER для KIM-1 в то время был вот такой ящичек: Teletype ASR-33Он же - без "верхней одежды": Так вот у него клавиши [LF] и [RUB OUT] в наличии были: И расположены удобно - кучкой рядышком. Вот в мануале KIM-1 всё на них и завязано... Нажмите [RUB OUT]... потом [CR]... а если надо вернуться назад - [LF]... Ну с [RUB OUT] я быстро разобрался: в нынешних клавиатурах - это [Backspace]. А вот [LF] на современных клавиатурах больше нет. Но если очень надо, то это - только [Ctrl]+[J]. Кстати, [Ctrl]+[М] - это [CR]. А еще есть [Ctrl]+[G] - это BEL...
_________________ iLavr
|
01 Sep 2018 20:04 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
В общем не так всё тривиально при работе с этим самым KIM-UNO, и чтобы никто не ковырялся в Интернете или в разных мануалах при повторении этой конструкции, я решил сделать небольшую справку на русском, которая должна все основные манипуляции с KIM-UNO прояснить. На рисунке показаны: стандартная клавиатура отладочной платы оригинального KIM-1, соответствующая ей раскладка клавиатуры KIM-UNO и карта памяти KIM-UNO с загруженными программами в ПЗУ. Клавиатура включает в себя в общей сложности 23 клавиши, также имеется один движковый переключатель [SST]. В зависимости от выполняемой программы, клавиши KIM-UNO имеют разное назначение, и оно указано в соответствующих цветовых полях, на которые разделено поле клавиши. Как KIM-1, так и KIM-UNO могут работать в двух режимах: Mode 1 и Mode 2. Mode 1: работа с 23-мя клавишами пульта и с семисегментным дисплеем. KIM-UNO также дублирует вывод на семисегментный дисплей через последовательный интерфейс терминалу. KIM-UNO может в этом режиме принимать команды с клавиатуры терминала, при этом соблюдается соответствие нажатия клавиш терминала клавишам KIM, как указано в таблице: [AD] — Ctrl-A, [DA] — Ctrl-D, [PC] — Ctrl-P, [RS] — Ctrl-R, [GO] — Ctrl-G, [ST] — Ctrl-S, SST ON/OFF — ']'/'[' ( на терминале выдается сообщение). Mode 2: работа под управлением клавиатуры терминала, и вывод данных — только на терминал. Переключение между режимами Mode 1 и Mode 2 в KIM-UNO осуществляет клавиша [Tab]. Переключение возможно в любой момент.
_________________ iLavr
|
02 Sep 2018 11:21 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
| | | | Lavr wrote: Также оказалось, что и на западе не у всех под рукой 7-сегментные индикаторы с общим анодом, ... В приложении - как некий Scott Lawrence разрешил для себя эту проблему, несколько изменив саму схемотехнику подключения как индикатора, так и кнопок к KIM Uno. KIM-Uno common-cathode.zip | | | | |
При более скурпулёзном анализе оригинального текста обслуживания 7-сегментного индикатора с общим анодом, и программно-аппаратного решения, от Scott Lawrence выяснилось, что его метод несколько не совсем удачный, о чем он и сам пишет, что индикатор у него " несколько помаргивает". Я посмотрел, что ничего сверхъестественного в их кодах на С++ нет, поэтому, видимо, надо самому попробовать написать подпрограмму сканирования клавиатуры и индикатора, тем более, что я это делал многократно, правда, под ассемблером К580ВМ80 на 2 МГц. Но тут выяснилась пренеприятнейшая вещь: этa самая хваленая и кроссплатформенная Arduino IDE, как оказалось, не имеет собственного отладчика. А отлаживать свою программу на форумах Arduino советуют, посылая в интересующих точках данные по RS-232 интерфейсу, и останавливая программу на ожидание символа от RS-232 интерфейса! В общем, почти как в древнем ВАСИКЕ, только в нём было PRINT... , а в Arduino - Print.Serial( ... ). Но что можно отладить через Print.Serial( ... ), если обслуживание клавиатуры и динамическая индикация - задачи чисто аппаратные, причем в реальном времени? Я "пошуршал" по интернету и выяснил, что народ подобные вещи приспособился решать через Proteus. Есть библиотеки Proteus позволяющие моделировать аппаратные проекты на Arduino, причем для этого даже не понадобилось писать DLL-библиотеку, модели Arduino используют родную AVR2.DLL, поддерживающую ATMega168, ATMega328 etc. Собственно, эти модели Arduino в Proteus - не более, чем красивая обёртка вокруг AVR2.DLL. Но запустить проект Arduino они помогают, хотя и на самих моделях ATMega168, ATMega328 можно это сделать, но придется муторно пересчитывать выводы портов - Arduino использует нумерацию выводов по своей платке. В общем для начала я решил проблему индикатора с общим катодом, не трогая пока исходный код, следующим образом - введя инверторы (можно ввести транзисторы, но это не принципиально): К моему глубочайшему удивлению, под Proteus 7.7 работает просто замечательно! (под Windows 7, Intel Atom 1.8 ГГц.) К удивлению - поскольку Proteus все огрехи в процедурах динамической индикации показывает весьма "откровенно", поскольку он медленный, и то, что не видно глазом обычно, под Proteus-ом видать... Значит автор KIM Uno написал обслуживание клавиатуры и динамическую индикацию весьма грамотно! Здесь файлы проекта KIM Uno под Proteus: В общем, есть теперь у меня хорошая связка: компилятор C++ от Arduino IDE и аппаратный отладчик - Proteus ISIS. ( Кстати говоря, насколько я понял, разбираясь со всем этим хозяйством: так называемая кроссплатформеннаяArduino IDE, написанная на "жабе", это фактически - тоже "обёртка" вокруг WinAVR - он в пакете есть.) Что ж... продолжим наши программно-аппаратные игры, благо теперь есть с чем...
_________________ iLavr
|
06 Sep 2018 23:39 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Несколько слов про "шаманство" и "пляску с бубнами" в связи с установкой Arduino IDE, поскольку смотрю я - многие сейчас наступают на одни и те же грабли, на которые и я наступил в процессе... Эту самую Arduino IDE обычно можно взять здесь: https://www.arduino.cc/en/Main/OldSoftwareReleasesТам весьма много версий этого пакета по следующей причине: разные версии по-разному стабильно или нестабильно работают под разными ОС, поэтому есть возможность подобрать себе подходящую - это во-первых. Под Windows 7 я поставил себе arduino-1.6.7, и глюков пока не наблюдал. Хотя пишут, что arduino-1.6.5более стабильная версия, но сейчас уже и arduino-1.8.х в ходу, поэтому я просто остановился на том, что работает у меня нормально. Во-вторых, в каждом пакете Arduino IDE есть свои драйверы для USB -> RS-232 для прошивки плат Arduino. И вот в этой ситуации, бывает, что приходится вытаскивать драйверы для более новой версии Arduino IDE из более старой версии. Под Windows 98 я остановился на версии arduino-1.0.5, хотя она явно сделана для Windows ХР, и некоторые не столь важные вещи у нее не срабатывают. К примеру, свой HTML-HELP Arduino IDE вызывает через CMD.EXE, а в Windows 98 его нет. Но HTML-HELP можно и самому браузером посмотреть, а компилирует версия arduino-1.0.5 вполне нормально, к тому же имеет русскоязычную локализацию. А драйверы меня не беспокоят, поскольку на ноутбуке под Windows 98 у меня есть реальный, физический, настоящий COM-порт. Ну и последнее, возможно, самое главное... Большинство дистрибутивов Arduino IDE можно скачать в двух вариантах: 1. Вариант с инсталляцией; 2. Вариант - распаковать архив в папку и начинать работать. Я обычно предпочитаю 2-й вариант, но в варианте с инсталляцией есть опция - установить сразу драйвер USB -> RS-232. Поэтому для Windows 7 я решил сразу драйвер этот установить. И вот тут случился самый интересный фокус, к которому я был в принципе готов, но всё же он мне удовольствие несколько испортил... Когда я подключил свою Arduino Nano к ноутбуку под Windows 7, то оказалось, что он её не видит. И вместо прошивки KIM Uno и экспериментов с ним пришлось вернуться к драйверам, хотя я свято был уверен, что драйверы-то USB -> RS-232 я уже установил из дистрибутива Arduino IDE! Оказывается ( и я об этом заранее знал), в Россию в основном поступают китайские Arduinо, а наши китайские друзья установили в них свои микросхемы преобразователя USB -> RS-232 - CH340G. А для этой ИС необходим другой драйвер USB -> RS-232. Но и это еще не всё... может быть и совсем другая микросхема, и тогда драйверы на неё надо искать на сайте производителя, или частым бреднем гугля прошаривать интернет. Здесь советуют посмотреть на надписи на этой самой ИС (если они есть )... на моей платке я нашел маркировку 340H720 и решил, что, возможно, драйверы USB -> RS-232 для CH340G подойдут. Они и подошли... Драйвер в архивах один и тот же, но устанавливается по-разному. Подробнее об этом можно прочитать здесь: Драйвер для arduino CH340G
_________________ iLavr
|
07 Sep 2018 09:20 |
|
|
|
Page 1 of 1
|
[ 7 posts ] |
|
Who is online |
Users browsing this forum: No registered users and 3 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|