Компьютеры на базе AVR-микроконтроллеров. Микроконтроллеры - это что такое

8 апреля 2015 в 12:32

Передача данных из компьютера в микроконтроллер через монитор

  • DIY или Сделай сам

Увидев о том, как один человек использовал клавиатуру в качестве программатора AVR-микроконтроллеров, я воскликнул: «Да он безумец!». А потом подумал, а чем же я хуже?.. И решил написать эту статейку о безумном способе передачи информации из ПК в микроконтроллер.

Вся суть состоит в том, что на экран выводятся квадраты, которые могут быть окрашены в белый, либо чёрный цвет, то есть иметь два состояния. Как биты. И их восемь штук. Как байт.

Чем отличается чёрный цвет от белого? Забавно, но не цветом, а яркостью, интенсивностью света. Интенсивность белого много больше интенсивности чёрного. В качестве регистратора интенсивности я использовал самое простое специально предназначенное для этого устройство - фоторезистор. Фоторезисторами называют полупроводниковые приборы, проводимость которых меняется под действием света. В моём случае проводимость затемнённого фоторезистора много меньше проводимости освещённого. Подключение фоторезистора к микроконтроллеру выбрал самое простое - между пином и землёй, включив встроенную подтяжку к питанию. Проверил напряжение, которое получает АЦП МК ATMega8: слева фоторезистор смотрит на белый фон, справа на чёрный. Напряжение в вольтах.

Да, да - Arduino IDE. Потому-что там я могу быстро набросать код и сразу залить его в плату нажатием одной кнопки, использовать обкатанные и растолкованные до безумия библиотеки.

Как видно, при считывании в цифровом режиме, мы получим 0 на белом и 1 на чёрном, что несколько идёт в разрез с моими шаблонами (чёрный ноль и белая единица), зададим чёрную единицу в программе на ПК.

Для вывода информации на монитор в необходимом нам представлении была написана простая программа на Си - Opto_Байт. Написал её по моей просьбе сосед по общежитию - kinetik161, за что ему большое спасибо и литр пива молока. Программа имеет ввод значения в десятичной системе счисления от 0 до 255 ((2^8)-1) через поле ввода и через текстовый файл TEXT.txt. Текстовый файл располагается в том же каталоге, что и исполняемый файл, каждое значение вводится с новой строки, при достижении конца списка вывод значений останавливается. Интервал - 1 секунда. Имеется кнопка инверсии.

Использовал микроконтроллер ATMega8, который в DIP28 корпусе имеет два полноценных (8 битных) порта - порт B и порт D. На порте B висит кварцевый резонатор, на D - UART. В итоге, я использовал безумную солянку портов, из которых потом составлял один байт. Подключение фоторезисторов от старшего разряда к младшему, слева направо: PC3, PC2, PC1, PC0, PB2, PB1, PB0, PD7.

Быстренько собрал всё на макетной плате и окончательно проверив работу с отправкой данных обратно по com-порту, я решил подключить знакосинтезирующий ЖК экран для вывода информации. Прилагаю код для Arduino IDE.

Код прошивки МК

#include // Подключаем библиотеки #include LiquidCrystal_I2C lcd(0x20, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE); // Настройка подключения дисплея(есть разные) int led = 2; // Указываем пин светодиода byte data = 0; // Полученный байт byte dataold = 170; // Предыдущий байт byte k=0; // Переменная для красивого форматирования байта на LCD void setup() { lcd.begin (16,2); // Инициализация экрана lcd.setBacklight(1); // Включить подсветку lcd.print("Hello, Geektimes"); // Приветствие lcd.setCursor(2, 1); // Сдвиг курсора lcd.print("from NikitosZs"); // Serial.begin(9600); // Инициализация UART DDRC = DDRC & 0b11110000; // Задаём порты ввода/вывода DDRB = DDRB & 0b11111000; DDRD = DDRD & 0b01111111; PORTC = PORTC | 0b00001111; // Включаем подтяжку фоторезисторов PORTB = PORTB | 0b00000111; PORTD = PORTD | 0b10000000; pinMode(led, OUTPUT); // Индикатор приветствия digitalWrite(led, 1); delay(2000); // Держим приветствие на экране lcd.clear(); // Очищаем экран digitalWrite(led, 0); // Индикатор приветствия выключен } void loop() { data = get(); // Присваиваем переменной data текущий байт if(data!=dataold) // Перерисовываем информацию на экране, если байт изменился { // Serial.println(data); // Отправляем байт в терминал lcd.setCursor(1, 0); lcd.print("DEC:"); lcd.setCursor(6, 0); lcd.print(" "); // Очищаем локальную область lcd.setCursor(6, 0); lcd.print(data); lcd.setCursor(1, 1); lcd.print("BIN:"); lcd.setCursor(6, 1); lcd.print("00000000"); // Создаём правильную подложку if(data>127) k=0; // Определяем старший бит для сдвига else if(data>63) k=1; else if(data>31) k=2; else if(data>15) k=3; else if(data>7) k=4; else if(data>3) k=5; else if(data>1) k=6; else k=7; lcd.setCursor(6+k, 1); lcd.print(data, BIN); dataold=data; // Присваеваем значение байта переменной хранящей предыдущее значение } } byte get(){ byte raw=1, rawold=0; // Локальные переменные raw и rawold while(raw != rawold) // Выполняется, пока не равны (для устойчивости значения) { rawold = raw; // Сохраняем старое значение byte data1 = 0b10000000 & PIND; // Считываем солянку из пинов byte data2 = 0b00000111 & PINB; byte data3 = 0b00001111 & PINC; raw = data3 << 4; // Сдвигаем, создаём целый байт raw = raw + (data2 << 1); raw = raw + (data1 >> 7); } return raw; // Возвращаем готовый байт }


Выполним проверку правильной адресации фоторезисторов с битами, закрывая источник света пальцем. Должно получиться следующее:

И так-как всё получилось, то можно прислонять макетную плату с фоторезисторами к экрану компьютера. Длинноногие фоторезисторы, воткнутые в макетную плату, нехотя, но всё же согласились никуда не убегать на время съёмки видео, хотя позиционировать их было не очень просто.

Теперь немного занудства… По сути монитор это управляемый транспарант (матрица световых вентилей, возбуждаемых некоторыми внешними сигналами: электрическими, акустическими, оптическими, магнитными). Каждый квадратик - бит - занимает площадь 60*60 пикселей (50 - сторона квадрата и 10 - промежуток). Я имею монитор с разрешением 1920*1080 пикс, частота 60Гц. 1920/60=32 квадрата по ширине, 1080/60=18 квадратов по высоте, 32*18=576 бит на кадр. Не вдаваясь в тонкости, в секунду мы сможем рисовать 60 кадров, а это 576*60=34560 бит/с или 4320 Байта/с. Сократив размер квадратов до 30 пикселей по стороне, получим четырёхкратный прирост скорости (17280Б/с). К сожалению, если уменьшать дальше, то наши каналы будут засвечивать друг друга.

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

Время идёт, и раритетных компьютеров становится всё меньше и меньше. Какие-то ломаются, какие-то разбираются на запчасти, а какие-то просто выкидываются. К сожалению, этот процесс не остановить – ничего вечного нет.
Но если взять и придумать такой компьютер, который по всем параметрам походил бы на ретро-компьютеры, но был сделан на современной элементарной базе? И такой компьютер есть – это AVR ChipBasic.
1. Предисловие
AVR ChipBasic – серия радиолюбительских компьютеров, разработанных немецким инженером Йоргом Вольфрамом (Joerg Wolfram). Все они представляют собой компьютеры, собранные всего на одной микросхеме – микроконтроллере фирмы Atmel AVR. В этих компьютерах микроконтроллер выполняет функции видеоконтроллера, контроллера клавиатуры, звукового генератора, бейсик-интерпретатора и других устройств, которые в обычных компьютерах состоят из множества микросхем. Серия AVR-ChipBasic состоит из четырёх моделей.
1. Младшая . Основана на микроконтроллере AtMega8, содержит 1 КБ ОЗУ, 8 КБ ПЗУ. Имеет встроенный интерпретатор языка TinyBasic, генерирует чёрно-белое изображение с разрешением 180*230, подключается к композитному входу телевизора (тюльпану).

2. Первая средняя . Основана на микроконтроллере AtMega16, содержит 2 КБ ОЗУ, 16 КБ ПЗУ. Имеет расширенный интерпретатор бейсика. Выводит цветное изображение (8 цветов) с разрешением 180*230. Имеет знакогенератор без строчных букв.

3. Вторая средняя . То же, что и первая средняя, только на микроконтроллере AtMega32 и с полным знакогенератором.
4. Старшая . Самая мощная модель.
Основана на микроконтроллёре AtMega644, содержит 8 КБ ОЗУ, 64 КБ ПЗУ. Имеет мощный встроенный интерпретатор бейсика. Генерирует цветное изображение (16 цветов) разрешением 180*230 Единственная из моделей, которая поддерживает тригонометрические функции и графический режим. Все эти компьютеры распространяются свободно по лицензии GNU GPL, на официальном сайте представлены схемы, прошивки и исходники.

Сейчас мы более подробно рассмотрим младшую модель компьютера AVR ChipBasic.
2.Общее описание
Младшая модель компьютера AVRChipBasic, как уже говорилось ранее, состоит из всего одной микросхемы – микроконтроллера AtMega8 фирмы Atmel, и поэтому возможности этого компьютера будут определяться возможностями микроконтроллера. Компьютер имеет 1 КБ ОЗУ, 8 КБ FLASH?памяти, в которой хранится интерпретатор бейсика и 512 байт EEPROM, в котором хранится запускаемая программа. Единственный видеорежим компьютера – текстовой 30*23 символа, где каждый символ размером 6*10 точек, и поэтому общее разрешение экрана 180*230 пикселей. Изображение выводится на обычный бытовой телевизор, который подключается к компьютеру по композитному входу.
Также, в компьютере AVR?ChipBasic предусмотрено подключение внешнего дискового модуля на микросхеме 24с16, в которую помещается четыре программы. Ещё компьютер умеет воспроизводить звук через бипер, соединятся с ПК через последовательный порт для обмена программам и управлять внешними устройствами через 4 линии ввода-вывода.
По характеристикам этот компьютер очень похож на компьютеры 70-80-ых годов. Вот в таблице приведены сравнительные характеристики компьютера AVR-ChipBasic и других ретро-компьютеров.

Как видно из таблицы, этот микрокомпьютер больше всего похож на компьютер ZX80, у него, как и у AVR ChipBasic’a, 1 КБ ОЗУ, 8 КБ ПЗУ, чёрно-белый экран и самое главное, видео тоже формируется центральным процессором, а не отдельной схемой видеогенератора. Причём вычисления проводятся в свободное от генерации видео время, а не наоборот, как у ZX80.
Также компьютер умеет воспроизводить звук. Есть два типа звука: первый похож на звук «бим», а второй – на звук «пшш», причём первый звук может делать разной высоты.
3.Особенности конструкции
Схема компьютера проста, как молоток: она состоит из микроконтроллера и небольшой обвязки резисторов и конденсаторов.
Для соединения компьютера с ПК используется аналог микросхемы MAX232 на двух транзисторах.
Схема компьютера

Единственное, что можно добавить к схеме, это что резистор 330 Ом, который стоит перед видеовыходом, следует заменить на 800 Ом, тогда изображение станет более чётким.

Отдельное слово хочется сказать о прошивке микроконтроллера. В архиве находится несколько прошивок, нам надо выбрать cb8_050_mega8_kbd?en_pal.hex, которая находится в папке mega8
Компьютер собирается на печатной или макетной плате. Для него нужен источник питания 5 вольт, для этого можно взять БП от ПК форм фактора ATX, но лучше для этих целей подойдёт зарядка от телефона и стабилизатор 7805.
4.Особенности работы
После сборки и включения компьютера на экране на несколько секунд появляется логотип компьютера. Пока он находится на экране, надо нажать какую-нибудь кнопку, тогда запускается редактор программ, иначе – происходит автозапуск программы из EEPROM.


После открытия редактора можно сразу приступать к написанию программ. В любой момент времени на экране находится вся программа, прокрутки экрана нет. Также нет функции переноса строк, то есть при нажатии клавиши Enter строки смещаются на одну вниз, а курсор просто перемещается к началу следующей строки.
При редактировании есть несколько горячих клавиш:
F1 – Загрузить программу из EEPROM
F2 – Изменить название программы
F3 – Открыть диалог для работы с дисковым модулем
F4 – Запуск программы – Остановить выполнение программы
CLRL+P – Отправляет скриншот по последовательному порту
А теперь мы рассмотрим одну интересную особенность этого компьютера: посмотрите сами, экранная область занимает 690 байт памяти (30*23) и программа 500 байт (20 строк по 25 символов). Это вместе получается 1190 байт, но как это может быть, ведь памяти у микроконтроллёра всего 1024 байта. К тому же нужно ещё несколько байт для системных переменных. А сделано всё вот так хитро: во время редактирования программа находится в видеопамяти и не занимает дополнительного места. После нажатия кнопки F4 программа копируется из видеопамяти в EEPROM, а видеопамять очищается. Далее, программа интерпретируется уже не из ОЗУ, а из EEPROM.
После завершения программы она снова копируется в видеопамять, и можно продолжать редактировать.
Такое положение дел позволяет сэкономить память, но ведёт к другим неудобствам.
Дело в том, что EEPROM поддерживает всего 100000 циклов перезаписи. Это значит, что если каждый день делать по 100 запусков, то через три года микросхема сгорит. К счастью, у компьютера есть небольшая защита: перед тем, как переписывать программу в ППЗУ, она сравнивается с той, что уже там находится, и если они равны, то программа не переписывается.
После завершения работы программы в правом нижнем углу появляется надпись PRESS ESC!. Если программа запускалась клавишей F4, то откроется редактор, а если же программа запускалась автозапуском, то она перезапустится.
5.Бейсик
Компьютер AVR?ChipBasic имеет встроенный интерпретатор языка бейсик. Для экономии памяти используется его диалект Tiny Basic, который не очень сильно отличается от обычного бейсика. Сейчас мы рассмотрим главные особенности этого языка.
Первое, что сразу бросается в глаза, – это сокращённые команды. Вместо GOTO используется GO, вместо GOSUB – SUB, вместо NEXT – NXT. Некоторые команды вообще заменены символами. Например, команда?@2,2;%17 означает вывести в координатах 2, 2 символ номер 17 (кружок). Это делает программы на этом бейсике немного нечитаемыми, но если вникнуть, то всё понятно.
Tiny Basic поддерживает 26 переменных типа byte, каждая обозначается одной буквой (A-Z). Массивы и строки не поддерживаются.
Также стоит отметить ряд интересных возможностей этого языка. Например, несколько способов доступа к клавиатуре. С помощью одного из способов можно сделать, что при на? жатии на кнопку «вправо» будет выдаваться значение 1, а при нажатии на «влево» – 255 (-1). С помощью других методов можно отлавливать нажатия Ctrl, Shift и других кнопок, и они будут принимать значения 1 и 255. Это сделано для облегчения написания игр, так как в них часто используются стрелки и другие кнопки, которыми надо управлять движением различных объектов.
Ещё одна интересная команда – LIM. Она задаёт границы для значения переменной.
Например, команда LIM D, 10, 20. После её выполнения значение переменной D будет находиться в диапазоне 10..20. Если до выполнения команды значение переменной было меньше десяти, то оно станет 10, а если же больше 20 – станет 20.
К тому же этот бейсик поддерживает псевдографику разрешением 60*46. Можно рисовать точки, линии и квадраты.
Напишем какую?нибудь простую программу на этом языке. Пусть это будет простенькая игра «угадай число». Вот её полный код:
1 a=rv(100)+1:?”Vvedi chis”
2 inp b
3 if b>a:go 6
4 if b5 ?”Molodec!”:no 255:go 0
6 ?”Vvedi menshe”:no 5:go 2

7 ?”Vvedi bolshe”:no 8:go 2

Разберём эту программу поподробнее.
В первой строчке этой программы загадывается случайное число от 1 до 100 и выводится надпись.
Во второй – вводится число с клавиатуры.
В третьей и в четвёртой введённое число сверяется с загаданным, и программа отправляется куда нужно.

6.Заключение
Вот такой вот это компьютер, AVRChipBasic.
Несмотря на свою простоту, он обладает достаточно большими возможностями.
Конечно, есть некоторые недочёты/недоработки, но надо помнить, что в крохотные 8 килобайт памяти, куда и бейсик с трудом влезет, удалось впихнуть бейсик, видеогенератор, контроллер клавиатуры, и чтобы это всё вместе ещё и работало, причём, достаточно быстро.
Поэтому компьютер ARV-ChipBasic можно смело назвать произведением искусства. Работать с ним – одно удовольствие. :?)
Ссылки:
Официальная страница компьютера:
http://jcwolfram.de/projekte/avr/chipbasic8/main.php
В пятой-седьмой строчках выводится нужное сообщение, играет звук, и программа отправляется или к вводу, или выходит.

Александр Завгородний (Kakos_Nonos)
http://kabardcomp.narod.ru/

Многие профессионалы-разработчики электроники часто "воротят нос" от семейства микроконтроллеров производства Atmel - фи, мол, эта ваша Атмега - только лампочками поморгать. Однако, это спорное утверждение.

Дешевизна, легкость программирования (как физической "заливки" прошивки, так и создания самих программ) превращают микроконтроллеры семейства AVR в универсальный инструмент, доступный начинающему радиолюбителю, а богатейшая линейка устройств - от самых простых ATTiny до устройств Mega256 с огромным количеством периферии "на борту" позволят реализовать самый смелый и амбициозный проект.

В этот раз мы рассмотрим конкретные примеры реализации одноплатных (и не очень) конструкторов на базе микроконтроллеров семейства ATMega. Все они вполне реализуемы в домашних условиях, а некоторые можно приобрести на сайте авторов. Для начала - небольшое отступление про "одноплатники" вообще.

Название говорит само за себя - все компоненты компьютера, необходимые для его базового функционирования размещены на одной плате. Совсем юные читатели сразу подумают о новинках вроде Raspberry Pi, а те, кто уже имеют понятие о мироустройстве - вспомнят РК-86, ZX-Spectrum и БК-0010, например.

Именно так - те самые "компьютеры в клавиатуре" были одноплатными. Да, допускались различные расширения, но кто о них помнит сейчас, тем более приобрести их в магазине было довольно проблематично. Да и нужды не было по большому счету.

И вот 21 век сдвинул "окно ностальгии" в нужную позицию и радиолюбители по всему миру не сговариваясь выпустили несколько проектов, которые по характеристиками ну очень напоминают те самые "эр-кашки" и "спектрумы" конца восьмидесятых годов прошлого века. А некоторые - в точности повторяют, но обо всём по порядку.

AVR Chip Basic

Первый персонаж нашего обзора - компьютер AVR Chip Basic, точнее это целое семейство компьютеров, различающееся по степени "навороченности" и наличию той или иной периферии.

  • AVR-ChipBasic8 на базе ATMega8 или ATMega88 (та же микросхема используется в )
  • AVR-ChipBasic на базе ATMega16
  • AVR-ChipBasic32 на базе ATMega32
  • AVR-ChipBasic2 на базе ATMega644

Все они имеют (как минимум) ТВ-выход и общаются с пользователем с помощью языка BASIC. В качестве устройства ввода используется стандартная PS/2 клавиатура.

Как уже говорилось, каждое из устройств обладает разными характеристиками, так например, AVR-ChipBasic8 имеет чёрно-белый видеовыход, может хранить программы на языке BASIC на подключаемой микросхеме EEPROM, ибо память самой микросхемы оставляет лишь 512 байт для хранения исходного текста.

Тем не менее - имеется и звуковой выход, и даже "свободные ножки", на которые можно повесить дополнительное оборудование.

Диалект бейсика очень сильно урезан, но позволяет вдоволь наиграться с этим языком программирования.

Из "фишек" интересное - прошивку можно собрать самостоятельно как под PAL развертку, так и под NTSC.

Остальные аппараты уже в состоянии выводить цветной видеосигнал через разъем SCART, и даже подключаться к совместимой TFT-матрице. Также к услугам пользователя возможность работы с периферией, последовательный интерфейс RS-232 с возможностью общения с "большим братом" и даже "картриджи памяти"! - съемные блоки памяти с записанными на них программами.

Более того, версии на ATMega16,32 и 644 используют одну и ту же плату, то есть достаточно поставить микросхему в панельку и загрузить нужную прошивку.

Остальные подробности можно почерпнуть на . К сожалению страничка на немецком языке, но онлайновые переводчики значительно облегчат жизнь.
Кстати, среди его проектов есть и эмулятор компьютера ZX-81 на микроконтроллерах AVR.

FIGnition

Автор Julian Skidmore создал "одноплатник", работающий под управлением ФОРТ-машины. Устройство способно управляться с экраном размером 25x24 символов, 16 пользовательскими символами, ну или графикой размером 160x160 точек.

Стоит отметить, что устройство может работать как с PAL-телевизорами, так и с NTSC - зависит от загруженной прошивки микроконтроллера ATMega168.

Особый интерес вызывает способ ввода данных. Обычно с AVR-устройствами часто интегрируют поддержку PS/2 клавиатуры, коих в избытке (пока что). Автор подготовился к вселенской катастрофе и организовал ввод с помощью восьми кнопок... Перебор значений на них организован по образу и подобию набора SMS в кнопочных мобильных телефонах.

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

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

PMD-85

Первый в списке - компьютер PMD-85. Это довольно интересное устройство, которое выпускалось с 1985 по 1989 в социалистической Чехословакии. По характеристикам он очень похож на семейство "РК-86", выпускавшийся в СССР в середине и конце восьмидесятых годов прошлого века - процессор i8080 и небольшой объем памяти.

Проект был бы весьма интересен отечественным фанатам РК-86, тем более что уже есть реализация на микроконтроллере PIC в проекте Maximite.

AVR-CP/M

Это стоит сделать хотя бы ради великого и ужасного ZORK! И ведь запускают.

В качестве устройства отображения используется serial port.

Для него в плату установлен конвертер Serial->USB, но вполне можно обойтись и без него, точнее - обойтись внешним конвертером.

Сама схема представляет собой контроллер ATMega328 и несколько чипов памяти (из старых видеокарт или материнских плат).

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

UzeBox

Постепенно переходим к жемчужинам этого собрания. Первая в списке - самодельная, полностью открытая приставка UzeBOX.

Мало того, что приставка полностью "повторяема" в домашних условиях - её программное обеспечение имеет вполне достойный уровень, и более того - игры для неё разрабатываются энтузиастами прямо-таки в промышленных количествах.

Что "под капотом":

  • Низкая стоимость. Всего 2 чипа (микроконтроллер и кодер NTSC), более того - второй не обязателен, если есть телевизор с полноценным разъемом SCART.
  • Ядро управляется прерываниями. Нет "тормозов", никто не отсчитывает такты процессора, генерация аудио и видео происходит в фоне.
  • 256 цветов 4 звуковых канала - 3 wavetable +1 шумовой
  • MIDI-интерфейс
  • Стандартные джойстики от SNES (на можно приобрести несколько штук).
  • Есть возможность использовать NES (Dendy), но потребуется перекомпиляция игр, хотя это вообще не проблема
  • Поддержка манипулятора "мышь" от SNES
  • Поддержка SD-карточек UART и SPI интерфейсы доступны, также есть некоторое количество свободных "ножек" ATMega
  • Есть эмулятор для разработки игр Загрузчик игр/программ с SD Развитое API для разработки Полностью открытая схемотехника и код

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

Сама приставка базируется на микросхеме ATMega644 в DIP-исполнении (об этом чуть подробнее ниже). Этого контроллера вполне хватает для вышеописанных задач, а на выходе можно наблюдать игры примерно такого качества:

Без сомнения - классика не стареет.

Неплохо для микроконтроллера, правда?

AVR ZX Spectrum 2.0

Ну и в финале - действительно потрясающий проект нашего соотечественника - Василия Лисицына - полностью функциональный "клон" компьютера ZX-Spectrum!

Спецификации впечатляют:

  • Разрешение экрана: 256 х 192 точки
  • Матрица знакомест экрана: 32 х 24
  • Количество цветов на знакоместо: 2
  • Число цветов экранной области: 8
  • Число цветов бордюра: 8
  • Число градаций яркости для каждого цвета: 2
  • Эквивалентная частота ЦП: 2,333 МГц
  • Порты ввода/вывода: 0xFE, 0x7FFD, 0x7FFD, 0xBFFD
  • Клавиатурный интерфейс: PS/2
  • Число задействованных клавиш: 82
  • Число каналов звукового сопровождения: 4
  • Перечень каналов звукового сопровождения: левый AY8910, правый AY8910, средний AY8910, бипер
  • Видеовыходы: ЧБ выход, RGB выход, отдельный выход синхронизации
  • Поддержка загрузки/выгрузки «на ленту»: имеется
  • Дополнительные устройства ввода/вывода: micro-SD карта
  • Поддерживаемые модели ZX Spectrum: Pentagon 128 K, ZX Spectrum 128 K, ZX Spectrum 48 K, ZX Spectrum +2, ZX Spectrum +3, ZX Spectrum 48 K ` 2006, OPEN SE BASIC 128 K, OPEN SE BASIC 48 K
  • Дополнительная операционная система: SD DOS
  • Файловая система: FAT32
  • Разъём шины ввода/вывода: имеется
  • Конструкция: двухсторонняя печатная плата 140 х 22 мм, установка внутри клавиатуры или в отдельный корпус
  • Питание устройства: соединитель mini-USB «F», напряжение +5 В

На фото - плата AVR ZX-Spectrum 2.0 с установленным эмулятором AY8910(12), кстати тоже на ATMega.

Плата в базовой конфигурации имеет на борту 3 микроконтроллера и микросхему динамической памяти аж на 512 кб:

  • Центральный процессор (ATMega128)
  • Видеопроцессор (опять ATMega128)
  • Контроллер клавиатуры (ATTiny2313)

Это позволяет "в теории" реализовать компьютер с таким объемом памяти. Помимо этого на плате есть некоторое количество микросхем мелкой логики.

Уже сейчас помимо "спектрума" плата может функционировать, как Robotron 1715. То есть на этой базе можно реализовывать и другие компьютеры!

Что может быть лучше ретро-платы все в одном! Впрочем, о тайнах и возможностях может поведать сам

Заключение

Микроконтроллеры - отличная возможность прикоснуться с миру разработки микроэлектроники. Для "олдскульщиков" - возможность "нырнуть" в то время, когда они были молодыми, а компьютеры простыми. Для поколения Arduino - шаг вперед в образовании. И пусть фанаты навороченных FPGA и ARMов утверждают о том, что время ATMega прошло - мы-то знаем на что она способна.

Удачных самоделок!

В данной статье я опишу создание мною простого бортового компьютера для автомобиля или мотоцикла. Никаких экзотических функций устройство не содержит, но зато в нём есть часы, термометр и вольтметр. Основа, это AVR микроконтроллер ATmega8 с восьми килобайтами флеш память, этого нам как раз достаточно. Часы реализованы на специальной микросхеме (часов реального времени RTC) DS1307, это позволяет идти часам очень точно довольно длительное время, даже тогда когда устройство выключено. Но конечно для работы микросхемы DS1307 требуется дополнительное питание 3 вольта, например батарейка CR2032. Датчик для термометра взял DS1820 работающий по интерфейсу 1-Wire. Все данные выводятся на ЖК индикатор на контроллере . Итак, для сборки устройства понадобятся следующие радиодетали:

1. Микроконтроллер Atmega8 - 1шт.
2. Микросхема DS1307 - 1шт.
3. Датчик DS1820 - 1шт.
4. Панелька DIP-8 - 1шт.
5. Панелька DIP-28 - 1шт.
6. Микросхема LM7805 - 1шт.
7. Микросхема LM7809 - 1шт.
8. Тактовые кнопки - 4шт.
9. Кнопки с фиксацией положения - 2шт.
10. Кварц 14.3 МГц - 1шт.
11. Кварц часовой 32768 Гц - 1шт.
12. Конденсатор керамический 22 пф - 2шт.
13. Конденсатор керамический 100 нф - 4шт.
14. Транзистор КТ315 - 2шт.
15. Конденсатор электролитический 100 мкф - 1шт.
16. Конденсатор электролитический 47 мкф - 2шт.
17. Диод 1N4001 - 1шт.
18. Подстроечный резистор 20 кОм - 2шт.
19. Резистор 1 кОм - 2шт.
20. Резистор 10 кОм - 2шт.
21. Резистор 4,7 кОм - 3шт.
22. Резистор 100 кОм - 1шт.
23. Резистор 20 Ом - 1шт.
24. Резистор 68 Ом - 1шт.
25. Динамик 0.2 Вт - 1шт.
26. ЖК индикатор WH1602 (на контроллере HD44780 или совместимом) - 1шт.
27. Текстолит - 1шт.
28. Корпус пластиковый - 1шт.
29. Отсек для батареек 2xAA - 1шт.
30. Батарея 1.5v AA - 2шт.

Принципиальная схема устройства:

Подстроечный резистор R4 устанавливает контрастность ЖК индикатора, а R12 подстраивает вольтметр до точного значения. Кварц Z2 на 14.3 МГц, его можно найти на старых материнских платах. Кнопка S1 - "Отмена", S2 - "Вниз", S3 - "Ок", S4 - "Вверх". Резистор R3 подтягивает Reset микроконтроллера к плюсу питания чтобы предотвратить случайный сброс. Резисторы R1, R2 и R7 также подтягивают порты микроконтроллера к плюсу питания. Керамические конденсаторы C1 и C2 нужны для стабильной работы кварца Z2. Я собрал устройство на двух печатных платах, на одной содержатся микросхемы LM7805 и LM7809, на другой, всё остальное. Платы рисовал в программе и изготавливал с помощью . Вот готовая плата покрытая сплавом розе:

Плата с запаянными на ней деталями:

С обратной стороны:

Все потроха собрал в корпус, в итоге получилось красиво и компактно.

Фото готового бортового компьютера (вид спереди):

Фото готового бортового компьютера (вид сзади):

Для удобства, спереди я разместил только ЖК индикатор и кнопки управления S1, S2, S3 и S4. Разъём, кнопки включения устройства и выключения звука, подстроечный резистор R12 я разместил сзади корпуса. Прошивку для микроконтроллера писал в среде (исходник прилагается), микроконтроллер прошивал программатором USBtiny с помощью программы SinaProg. После прошивки микроконтроллера нужно установить следующие фьюз-биты:

Правильно собранное и прошитое устройство запускается сразу, и не требует настройки, разве что, точной подстройки вольтметра и настройки часов. Из дополнительный функций присутствует регулировка яркости ЖКИ и часовой бипер (часы подают сигнал в начале каждого часа). При включении устройства на ЖКИ появляется заставка и плавно загорается подсветка индикатора, потом появляется главный экран, где отображается время, дата, температура и напряжение. Если в это время нажать кнопку S3 то вы войдёте в меню настройки времени, S2 - в информационную вкладку, где написана информация о версии устройства и его авторе, S4 - в меню настройки яркости ЖКИ и управления часовым бипером. Кнопка S1 возвращает обратно, на главный экран. Наглядно посмотреть, как управлять устройством вы можете на видео:

В файлах к статье есть исходники программы, прошивка, проект в программе .

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
IC1 Часы реального времени (RTC)

DS1307

1 В блокнот
IC2 МК AVR 8-бит

ATmega8

1 В блокнот
VR1 Линейный регулятор

LM7805CT

1 В блокнот
VR2 Линейный регулятор

LM78L09

1 В блокнот
VT1, VT2 Биполярный транзистор

КТ315Б

2 В блокнот
VD1 Выпрямительный диод

1N4001

1 В блокнот
Z1 Кварц 32768 Гц 1 В блокнот
Z2 Кварц 14.3 МГц 1 В блокнот
C1, C2 Конденсатор 22 пФ 2 Керамические В блокнот
C3-C5, C8 Конденсатор 100 нФ 4 Керамические В блокнот
C6, C7 47мкФ 16В 2 В блокнот
C9 Электролитический конденсатор 100мкФ 35В 1 В блокнот
R1, R2, R7 Резистор

4.7 кОм

3 В блокнот
R3, R10 Резистор

10 кОм

2 В блокнот
R4, R12 Подстроечный резистор 20 кОм 2 В блокнот
R5 Резистор

20 Ом

1 В блокнот
R6, R9 Резистор

1 кОм

2 В блокнот
R8 Резистор

Поскольку дистанционное управление компьютером весьма удобно, в Интернете опубликовано немало схем подобных устройств. К примеру, в статье «Дистанционное управление компьютером на микроконтроллере AVR Mega 8» описано одно из них, а в этой статье речь пойдёт о подобной схеме, но собранной на широко распространённом микроконтроллере AVR Tiny 2313. Она сделана на основе известного устройства «IgorPlug» предназначенного для работы под Windows XP, но в схему были внесены некоторые изменения по следующей причине: в оригинальном устройстве, как и в множестве подобных, распространённых в Интернете, не согласованы по напряжению выходные уровни сигналов с портов микроконтроллера со стандартом USB.

В авторской схеме микроконтроллер питается напряжением 5 вольт, а размах сигнала USB 3,3 вольта. Для согласования этих уровней после внесения изменений вся схема питается напряжением 3,3 вольта от стабилизатора на стабилитроне. Микроконтроллер с таким питанием работает нормально, а фотоприёмник применён другой – BRM-1022 (BRIGHT LED ELECTRONICS). Он допускает диапазон изменения питающего напряжения в пределах 2,7 – 5,5 вольт. Можно без труда подобрать другой аналогичный фотоприёмник, например TSOP-4838. Описанное устройство можно настроить для работы с почти любым из уже имеющихся пультов ДУ.

Инструкция по установке:
1. Соберите устройство (Рис. 1) . Переделанная схема устройства дистанционного управления компьютером прилагается к этой статье (Рис. 2) . Она отличается от вышеназванного оригинала, как уже упоминалось, типом фотоприёмника и схемой питания. Для изготовления устройства применена печатная плата устройства дистанционного управления компьютером на микроконтроллере (Рис. 3) ;



2. Скачайте папку с драйвером и прошивкой после статьи;

3. Запрограммируйте микроконтроллер, записав в него соответствующую прошивку (для этой цели подойдёт, например, параллельный программатор микроконтроллеров AVR), и установите его в устройство. Микроконтроллер можно программировать уже установленным в схему, предварительно припаяв провода к соответствующим площадкам на плате. О таком методе программирования можно прочесть в литературе, содержащейся в категории «Электроника» книжного интернет-магазина «Bookwell».

4. Установите на компьютер программу Girder;

5. Подключите устройство к компьютеру и, когда система запросит драйвер, укажите путь к нему;

6. Скопируйте в папку Girder/plugins библиотеку IgorPlug.dll. Она предназначена для стыковки драйвера устройства с программой Girder. Скачать её можно после статьи;

7. Запустите Girder, затем на вкладке «Файл - настройки» выберите соответствующий модуль и укажите порт USB. Закройте окно, нажав «Сохранить». После этого программа должна реагировать на команды пульта и отображать их номера.

8. Настройте Girder, сопоставив пронимаемым номерам команд требуемые действия.

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

Скачать архивы:

У вас нет доступа к скачиванию файлов с нашего сервера