Avr компьютер собрать самому

Обновлено: 02.07.2024

Давайте порассуждаем на тему создания микрокомпьютера на основе микроконтроллера PIC16F84, как самого распространенного.

Итак, что мы имеем:

  1. DIP корпус удобный для пайки, всего 18 ног[/*]
  2. Разрядность - 8 бит[/*]
  3. Тактовая частота - 10 МГц[/*]
  4. Объем ROM-памяти - 1 Кб[/*]
  5. Объем RAM-памяти - 68 байт[/*]

Общаться с внешним миром предлагаю через RS-232 при помощи терминала, хранить программы во внешней флеш памяти. В итоге сам компьютер вместе с батарейками вполне поместится в корпус размером с пачку сигарет.

Остается только запихнуть интерпритатор в 1 Кб ПЗУ. :)

29.11.2010, 04:04
Прям мечта! Только можно прибавить к этому ещё пару восьмиразрядных портов (выход на дисплей и вход клавиатуры) и ещё пару для общения с внешним миром (я бы такой девайс размером с пару пачек сигарет с удовольствием взял бы с собой в поход для работы с радиостанцией. Да и так - для удовольствия попрограммить. Только конечно PIC16F84 уже не покатит. Но вот Атмеловские АТМЕГи. Дисплей можно любой. Хоть от сотика присобачить. Клаву - тоже вариантов масса. от самоделок до ПС/2.
29.11.2010, 04:17

Подцепить например PS/2 клавиатуру труда не составит, встречал в нете готовые решения, с VGA монитором сложнее, а вот телек подцепить вполне возможно, особенно ЖК - глаза уставать не будут. Смущают только конструктивные особенности, довольно странно будут выглядеть рядом большая ПЦ клавиатура, внушительных размеров телек и маленькая коробочка с компом. :)

Возможностей PIC-а думаю тоже не хватит, а вот меги думаю вполне.

29.11.2010, 04:21
2-й вариант - маленький ЖК экранчик (видел недорогие 16 на 2 в ЧипиДип-е), но опять же проблема с клавиатурой - на маленькой набирать неудобно, а большая все портит в плане портативности.
01.12.2010, 03:43

Смотрите. Если подцепить PS/2 клавиатуру не сложно - то это очень и очень хорошо. Смотрите. Берём маленький китайский телевизор. Например 7 или 5 дюймов. Сзади него наращиваем корпус под плату с атмегой. Ставим разъёмчик под клаву, мышь, последовательный порт. Я думаю реализовать работу этих устройств не очень сложно.

На лицевой части телевизора делаем 4-6 кнопочек. Например стрелочки и правая и левая кнопки (типа джойстика дублирующего мышь).

А теперь что бы я хотел видеть внутри! То есть программная начинка :

В общем если не заморачиваться со всякими блютусами и УСБ новшествами - такая машинка уже была в 1983. Процессор типа 8080. Конечно сегодня всё можно сделать на одной микросхеме. Следовательно и дёшево и потребление энергии маленькое.

В сети нашёл немало схем для подключения дисплеев от сотовых телефонов к разного рода МК. Сейчас у всех есть "Старый Сименс" :) Можно сдёрнуть оттуда дисплей. Один МК собственно сам компьютер. Второй МК - контроллер дисплея. Корпус - вообще что угодно.

В общем конечно есть уже и КПК навалом и смартфонов кучи. Но например я в смарт с паяльником не полезу, что бы добавит лишний порт ввода-вывода. А такое устройство, которое я описал мне и многим моим знакомым было бы очень полезно и интересно. Особенно если задействовать современные возможности МК в отношении энергосбережения :rolleyes:

Можно даже через параллельный порт реализовать запись звука - есть КОВОКС в варианте Оцифрователя. Тогда можно было бы аудио записи хранить (например заметки-дневники).

Клавиатура - продаётся в магазинах резиновая. Сворачивается в трубочку. не промокает. Служит долго. У знакомого уже 4 года служит в жутких условиях(холод, механические воздействия, агрессивные жидкости. ).

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

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

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

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

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

AVR Chip Basic

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


Из под пера автора ( Jörg Wolfram ) вышла целая плеяда устройств:

  • AVR-ChipBasic8 на базе ATMega8 или ATMega88 (та же микросхема используется в ARCAdaptor)
  • 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

Движемся дальше - следующий экспонат - одноплатный компьютер Fignition.


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



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

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

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

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

PMD-85

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

Подробнее можно почитать в Википедии , ну а пока что рассмотрим аппаратную реализацию на ATMega.


Даже по этой иллюстрации видно - на плате всего лишь 2 микросхемы - непосредственно контроллер ATMega128 и микросхема памяти.

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




А вот видео работы, правда записано с настоящего PMD:

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

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

AVR-CP/M

Дальше - больше. Если возможна эмуляция i8080, то почему бы не попытаться запустить на АТМеге операционную систему CP/M ?

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


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

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


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

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

UzeBox

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


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

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

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

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

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




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

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

Автор разработки - канадец Alec (Uze) Bourque. Проекту не один год, но сообщество, сложившееся вокруг консоли всё еще полно идей и энтузиазма для дальнейшего движения вперед.

По этой ссылке можно ознакомиться с минимальной версией UzeBox - полностью модульной системой, которая состоит из базовой платы с микроконтроллером и SCART-выходом, а также дополнений - платы энкодера NTSC, платы адаптера SD-карты и платы MIDI-переходника.

Последний, кстати, никогда не был воплощен "в металле" за отсутствием MIDI-оборудования :) Выглядит "домашняя версия" в сборе примерно так:


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

Конечно же, нужно упомянуть о недостатках.

  • Для обеспечения нужной скорости ATMega работает в режиме "overclock" - аж на 28.6 Mhz
  • Для сборки подходят только DIP-версии микросхемы
  • При использовании SMD-версий перестает работать UART, перебои с SD-картой и вообще большой риск "не завестись". Причина тому - указанный выше "разгон"
  • Чип AD725 (энкодер NTSC) в наших краях редкость и довольно дорого обходится (хотя он по большому счету и не нужен в начальной конфигурации)
  • SNES-джойстики не так распространены и уж тем более "ответные" разъемы для них
  • Нормально работают далеко не все SD-карты (точнее, большинство не работает, хотя подобрать в конце концов можно)

Достоинства консоли, кстати, с лихвой перевешивают описанные недостатки, так что её действительно можно рекомендовать к сборке даже новичкам.

Официальный сайт консоли со всей информацией, исчерпывающей документацией и весьма позитивным форумом здесь.

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. Все данные выводятся на ЖК индикатор WH1602 на контроллере HD44780. Итак, для сборки устройства понадобятся следующие радиодетали:

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, на другой, всё остальное. Платы рисовал в программе SprintLayout 4.0 и изготавливал с помощью ЛУТ. Вот готовая плата покрытая сплавом розе:

DSC04518.jpg

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

DSC04523.jpg

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

DSC04521.jpg

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

DSC04529.jpg

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

Фото БК

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

DSC04532.jpg

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

Фьюзы

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

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


Часовой пояс: UTC + 3 часа

Компьютер на микроконтроллере AVR-ChipBasic2

Если кому-то вдруг станет интересно, могу выложить фотки того чуда что у меня получилось.

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

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

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

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Лучше узнайте алгоритм вывода картинки на монитор.
В момент отподет головная боль - как вывести картинку на монитор, при изготовлении всяческих интераутивно - измерительных, и прочей лубуды комплексов. Гы
И я читал что тина с 20 мегагерцами в состоянии вытянуть картинку лишь 800Х600

Приглашаем всех желающих 25/11/2021 г. принять участие в вебинаре, посвященном антеннам Molex. Готовые к использованию антенны Molex являются компактными, высокопроизводительными и доступны в различных форм-факторах для всех стандартных антенных протоколов и частот. На вебинаре будет проведен обзор готовых решений и перспектив развития продуктовой линейки. Разработчики смогут получить рекомендации по выбору антенны, работе с документацией и поддержкой, заказу образцов.

В общем-то мне кажется что это совсем не важно, мне лично была интересна сама реализация. Я считаю что это лучше чем делать термометр на ATiny2313 с восьмисегментниками, т.к. этот девайс посложнее будет и с ним можно поковыряться как-то, а не просто узнать температуру воздуха окружающей среды. Мне хотелось в принципе увидеть что это работает. Следующим этапом я хочу подключить к нему два драйвера ШД и написать програмку управления ими на внутреннем языке этого девайса. А по поводу посмотреть как это он так видео выводит: там полностью открытый код, т.е. смотри-используй, только лицензия LGPL помоему. В наше время вообще уже практически все что можно только себе придумать можно купить в магазине и что либо собирать самому необходимости особой нет, это просто интересно. Короче, я хочу все таки получить ответы по теме. Не ужели никто не занимался подобными вещами и никому не интересен этот девайс?

Приглашаем 30 ноября всех желающих посетить вебинар о литиевых источниках тока Fanso (EVE). Вы узнаете об особенностях использования литиевых источников питания и о том, как на них влияют режим работы и условия эксплуатации. Мы расскажем, какие параметры важно учитывать при выборе литиевого ХИТ, рассмотрим «подводные камни», с которыми можно столкнуться при неправильном выборе, разберем, как правильно проводить тесты, чтобы убедиться в надежности конечного решения. Вы сможете задать вопросы представителям производителя, которые будут участвовать в вебинаре

Никто этим не будет заниматься в наше время. Поскольку формировать видеосигнал средствами самого контроллера - это черезчур. Более-менее приличная картинка будет забирать у контроллера 90% ресурсов. Простой подсчет - картинка 320x240 точек = 76800 элементов, с частотой кадров минимум 50гц (иначе монитор не примет) - 384000 элементов/сек. Это минимальные требования к скорости вывода на монитор. Точки ведь разбавлены еще импульсами синхронизации.

С меньшим количеством проблем купить одноплатную систему Raspberry Pi и изучать её.
А вышеприведенной схемой удобно только картинку выводить на экран вроде осциллографической трубки.

Ну и ладно! Все равоно девайс получился прикольный. Выкладываю фотки.

ЗЫ: если вдруг кому нужны схема и плата в формате Eagle могу поделиться


Вот именно что "прикольный" и не более. Практического смысла от него нет. Какой-нибудь "Робик" из 80-х будет пошустрее его.

Тут бы немного усложнить схему, синхронизацию и видеопамять организовать отдельно от процессорного узла - применить несложную PLM для формирования видеоимпульсов и планку динамической памяти от 286-го на 128кб. Если взять памяти чуть побольше можно вполне формировать HD-картинку.

Проект что надо. у самого желание такое сделать только на PIC24 / dsPIC30 с юсб интерфейсом для клавы. даже наработки кода на С есть для генерирования vga изображения (45х40).
Так что проект супер! Если можно, выложите схему. уж очень хочеться повозиться с таким девайсом

Das ist wunderbar, aber ist es möglich, etwas hinzufügen?
Eine solche Sprache "FORTH"?

Это чудесно, но есть ли возможность добавить что-нибудь ?
Например язык "ФОРТ" ?

_________________
< виртуальная "кнопочка" >- - ( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста

Вот именно что "прикольный" и не более. Практического смысла от него нет. Какой-нибудь "Робик" из 80-х будет пошустрее его.

Тут бы немного усложнить схему, синхронизацию и видеопамять организовать отдельно от процессорного узла - применить несложную PLM для формирования видеоимпульсов и планку динамической памяти от 286-го на 128кб. Если взять памяти чуть побольше можно вполне формировать HD-картинку.

Разработка одноплатного компьютера с нуля. Пособие для начинающих Одноплатный компьютер, Разработка с нуля, Технопрон, Радиолюбители, Technobrother, Длиннопост

Я занимаюсь разработкой электроники. Начал сравнительно недавно — когда микроконтроллеры от Atmel стали известны благодаря платформе Arduino. Тогда меня это не особо заинтересовало — на тот момент я уже программировал их из AVR Studio, читал истории DiHalt и мечтал о разработке собственного автопилота. 3 курс, Новосибирск, НГУ — это было увлекательно…

Но я с интересом наблюдаю за развитием и ростом индустрии встраиваемых и портативных систем: появление RaspberryPI, многообразия SoC и плат на их основах, системы умного дома, интернет вещей, смартфоны с растущей вычислительной мощностью — все это фантастический простор для деятельности. Результатом наблюдения стало желание поучаствовать: попробовать себя в разработке простой платформы, с целью изучения и накопления опыта.

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

Проектирование

После чтения статей о платформе BlackSwift в потенциальных кандидатах появился Qualcom Atheros AR9331, но смутило отсутствие подробной информации в открытом доступе. Жаль, занимательный кандидат.

Меня интересовала минимальная конфигурация, достаточная, чтобы запустить на ней Linux. Соответственно к процессору была выбрана микросхема памяти на 32 МБ (256 МБит) (по тому простому принципу, что она у нас была в наличии). На тот момент я еще не вычитал на десятках форумов о существовании сложностей с этим процессором, только изучил рекомендации производителя по трассировке и, довольный как слон, делал все по рекомендациям.

Вообще, процессор (или SoC, так правильнее) интереснее с той точки зрения, что при его запуске значительно дороже выходят ошибки проектирования. Например, некорректная разводка DDR памяти может выразиться как минимум в последующих ошибках чтения-записи, как максимум — в невозможности инициализации памяти вообще. Цепи питания процессора — ошибка сожжет процессор при первом включении, интерфейсы — потеря периферии на этих интерфейсах, и так далее.

Поэтому начинать проще с изучения готовых отладочных комплектов, например официальной платы и ее документации. Платы у меня не было, но документация доступна всем желающим. В придачу полезно изучить все инструкции по применению, почитать форумы (это уже жизненный опыт :)) — в общем, изучить всю доступную информацию о жертве. После изучения начинается механическая работа — нарисовать схему, а затем и плату. Четыре слоя, минимальная ширина проводника 0.2мм, зазора 0.2мм, отверстия 0.3мм.

Подключил все, что можно подключить безболезненно – аудио входы и выходы, вывел видеосигнал на контактные площадки, всякую простую периферию — микросхему памяти с I2C интерфейсом, еще одну с SPI, держатель для uSD карты, конфигурационные перемычки, обязательно отладочный порт, и потом на свободное место все что осталось. Плата получилась небольшая — 70х40мм, с минимумом компонентов. Для NAND памяти места не осталось, но я планировал запускаться с SD/MMC. Работы на одну ночь.

Разработка одноплатного компьютера с нуля. Пособие для начинающих Одноплатный компьютер, Разработка с нуля, Технопрон, Радиолюбители, Technobrother, Длиннопост

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

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

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

Разработка одноплатного компьютера с нуля. Пособие для начинающих Одноплатный компьютер, Разработка с нуля, Технопрон, Радиолюбители, Technobrother, Длиннопост

Отступление
Эта система на кристалле приглянулась мне еще и тем, что несет на борту все необходимые для ее жизни регуляторы питания — как DC/DC (импульсные) так и LDO (линейные). В том числе и зарядное устройство для Li-Pol аккумулятора. Заводишь на SoC 5 вольт от USB — получаешь 1V8, 2V5, 3V3 и 4V2 на выходе. Что-то достается самому процессору, что-то уходит на память, можно аккумулятор подзарядить. Удобно. Можно сжечь все и сразу :)

SoC bringup

Прочь сомнения, подать питание!

Начинается самое интересное — bringup. Как этот термин лаконично перевести на русский в данном контексте? Попытка вдохнуть жизнь? Не звучит.

В процессоре есть свой первоначальный загрузчик, который при включении проверяет условия старта — откуда и что грузить. Он же отвечает на запросы по шине USB. Его можно сконфигурировать перемычками на плате, или однократно прошиваемой OTP-памятью. Если перемычки перепаять я еще смогу, то перепрошить неперепрошиваемое вряд ли. Распаиваю перемычки, подаю питание, и о чудо — с отладочного порта приходят первые байты данных! Это значит, что процессор доволен питанием, самые базовые его узлы запустились, и можно что-то делать дальше. Что значат эти коды, я узнал из кривоватого заголовочного файла, в виде PDF документа, с невнятными пояснениям, пропусками и за авторством huashan. Все ясно.

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

Никаких транзакций по шине USB, даже генерации на кварце. Плохо. Начинаю думать, изучаю плату, вспоминаю все тонкие моменты. Например, на этой плате рядом с процессором я поставил свой DC/DC преобразователь, с расчетом на питание какой-либо потребляющей нагрузки, подключил его к шине питания USB 5V, и ничем не нагрузил. Промеряю осциллографом — на входе 5 вольт, на выходе 5 вольт. Всплывают слова с производства, что-то по поводу резистора. Да, так и есть — в цепи обратной связи нет резистора. (- Капитан, капитан, якорь всплыл! — Хммм, скверная примета…)

Паяю резистор, и о чудо! Плата определяется по USB! До этого я смотрел на уровень напряжения шины питания — 5.1 вольт, никаких существенных помех, никаких пульсаций. Но процессору виднее. После запайки резистора заработал и DC/DC источник, пока без нагрузки, но, по крайней мере, перестал мешать процессору. Хорошо, что дальше.

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

Разработка одноплатного компьютера с нуля. Пособие для начинающих Одноплатный компьютер, Разработка с нуля, Технопрон, Радиолюбители, Technobrother, Длиннопост

Для подключения к последовательным портам, для реализации всяких внутрисхемных JTAG отладчиков, программаторов и аналогичных задач в другом проекте был реализован USB-UART мост на FT2232. Двухслойный дизайн, выведены оба порта на гребенку с шагом 2 мм. В этом проекте другая история – USB-UART мост + платка сбора данных размещается в центре основной платы, и конструктив прибора предполагает ее удаление.

Все эти платы проектировались параллельно, поэтому я сразу заложил идентичные размеры и возможности гибкого соединения. Не зря :)

Разработка одноплатного компьютера с нуля. Пособие для начинающих Одноплатный компьютер, Разработка с нуля, Технопрон, Радиолюбители, Technobrother, Длиннопост

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

PowerPrep start initialize power…
Battery Voltage = 0.65V
No battery or bad battery detected. Disabling battery voltage measurements.
EMI_CTRL 0x1C084040
FRAC 0x92926152
power 0x00820710
Frac 0x92926152
start change cpu freq
hbus 0x00000003
cpu 0x00010002

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

PowerPrep start initialize power…
Battery Voltage = 1.74V
No battery or bad battery detected. Disabling battery voltage measurements.
EMI_CTRL 0x1C084040
FRAC 0x92926152
power 0x00820710
Frac 0x92926152
start change cpu freq
hbus 0x00000003
cpu 0x00010002
start memory test, at 0x40000000
end memory test, at 0x41FFFFFC

Замечательно! Тест памяти пройден! Это очень хорошо, теперь туда можно загрузить что-то посерьезнее.

Посерьезнее у меня это U-Boot. Я знаком с этой системой, мне она кажется вполне адекватной и функциональной. Позволяет работать с периферией — актуальные версии работают с USB, SD/MMC, Ethernet, загружать образы c FAT/ext2 разделов, передавать управление, и главное — моргать светодиодиком — все то, что нужно для счастья и более гибкой отладки на первоначальном этапе.

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

PowerPrep start initialize power…
Battery Voltage = 1.74V
No battery or bad battery detected. Disabling battery voltage measurements.
EMI_CTRL 0x1C084040
FRAC 0x92926152
power 0x00820710
Frac 0x92926152
start change cpu freq
hbus 0x00000003
cpu 0x00010002
start memory test, at 0x40000000
end memory test, at 0x41FFFFFC

U-Boot 2015.04-rc3-00209-ga74ef40 (Mar 16 2015 — 12:47:34)CPU: Freescale i.MX23 rev1.4 at 227 MHz
BOOT: USB
DRAM: 32 MiB
MMC: MXS MMC: 0
MMC0: Bus busy timeout!
MMC0: Bus busy timeout!
MMC0: Bus busy timeout!
MMC0: Bus busy timeout!
Card did not respond to voltage select!
MMC init failed
Using default environmentIn: serial
Out: serial
Err: serial
Net: Net Initialization Skipped
No ethernet found.
Hit any key to stop autoboot: 0
=>

Падает при подаче питания на DDR память. Хм. Где-то я уже читал об этом. А как до этого работало? Ладно, нестабильность найдена, надо разбираться.

Вокруг микросхемы памяти расположены ее законные развязывающие конденсаторы, 8 шт. по 100 nF. Но на выходе встроенного в SoC источника питания для памяти я поставил 2x10 uF, хотя производителем рекомендовано всего 1uF (инструкции читаю, если ничего другое уже не помогает, да). Ломать, не строить: отпаиваю один конденсатор, подключаю аккумулятор, и система стартует!

На самом первом фото виден этот конденсатор — вокруг него грязь, и он припаян только одним контактом.

PowerPrep start initialize power…
Battery Voltage = 3.75V
Boot from battery. 5v input not detected
Try poweron_pll
Try turnon_mem_rail
Try init_clock
EMI_CTRL 0x1C084040
FRAC 0x92926192
Try init_ddr_mt46v32m16_133Mhz
power 0x00820710
Frac 0x92926192
start change cpu freq
hbus 0x00000003
cpu 0x00010001

Хе-хе, работает! Ок, запишу этот факт как причину потенциальных нестабильностей в будущем, ибо остался еще один 10uF, который тоже может усложнять жизнь. Теперь пробую с внешним питанием.

PowerPrep start initialize power…
Battery Voltage = 3.74V
5v source detected.Valid battery voltage detected.Booting from battery voltage source.
Mar 18 2015
07:59:13
Try poweron_pll
Try turnon_mem_rail
Try init_clock
EMI_CTRL 0x1C084040
FRAC 0x92926192
Try init_ddr_mt46v32m16_133Mhz
power 0x00820710
Frac 0x92926192
start change cpu freq

Теперь начались зависания. Более того, ситуация не регулярная, периодически проявляется при питании от аккумулятора, периодически от внешних 5В, периодически стартует и работает. Опять правлю код, отключаю переключение процессора на PLL, ядро остается работать на 24МГц. Все стабильно. Меняю делитель PLL, скручиваю частоту, и плата успешно запускается на 320 МГц. Надо попробовать рекомендацию производителя — конденсатор на 100 pF в цепи импульсного DC/DC. Место на печатной плате под конденсатор я заложил. Позже вернусь к этому вопросу.

Linux kernel

Итак, на текущий момент есть плата, стартующая с карты памяти, и загружающая U-Boot. Дальше по плану надо загружать ядро.

make ARCH=arm CROSS_COMPILE=$ mxs_defconfig
make ARCH=arm CROSS_COMPILE=$ menuconfig
make ARCH=arm CROSS_COMPILE=$ -j4 zImage modules

Вот эти три клика

При настройке ядра надо строго указать слияние ядра+dtb

Boot options ---> Use appended device tree blob to zImage ----> Supplement the appended DTB with traditional ATAG information

Надо включить Kernel low-level debugging functions вместе с early printk

И еще enable dynamic printk() support

И еще видеоподсистему отключить

И еще половину лишних и не очень драйверов

И еще собрать dtb — device tree blob, структуру, описывающую ядру базовые вещи — количество памяти, периферию SoC, и т.д.

make ARCH=arm CROSS_COMPILE=$ imx23-olinuxino.dtb

И собрать все это в один файл

cat arch/arm/boot/zImage arch/arm/boot/dts/imx23-olinuxino.dtb > arch/arm/boot/zImage_dtb

После чего можно копировать ядро на флешь.

Запускаю, и получаю kernel panic. Логично, корневой файловой системы еще нет.

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

Дааа, есть над чем поработать.

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

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

Заключение

На самом деле это только начало. Еще есть над чем поработать — разобраться с периферией, в частности интересен аудио и видеовыход, протестировать SoC на штатных частотах, а еще лучше разогнать, измерить потребляемый ток, проверить при минусовых и плюсовых температурах (интересна устойчивость DDR контроллера), проверить на ресурсоемких задачах (например, видеотрансляция с веб камеры по USB WIFI), и в результате сделать на платке WiFi-управляемый танк с камерой и направленным микрофоном. Но не сейчас. Сейчас у меня есть деловое предложение :)

Читайте также: