LPC1102 и тёплый ламповый индикатор

в 8:44, , рубрики: Программинг микроконтроллеров

LPC1102 и тёплый ламповый индикатор
Написать этот текст меня заставила статья – “Freescale уменьшила размеры самого маленького в мире микроконтроллера на архитектуре ARM.” За три дня до публикации этой статьи я закончил свой маленький проект, в котором был использован контроллер NXP LPC1102, — это прямой конкурент описанного в статье Freescale KL02 и возможно нового KL03. Далее будет сравнение двух микроконтроллеров от NXP (Филипс) и Freescale (Моторола), и мой проект на LPC1102.

Сравнение

На данный момент документация на KL03 не доступна (только анонсирован) поэтому он участвовать в сравнении не будет, собственно не сильно и хотелось, новый KL03 мало отличается от прошлогоднего KL02. Вот главные отличия:

  • уменьшены габариты на целых 0.33мм, у KL02 1.99x1.94мм, у нового KL03 — 1.99 x 1.61мм;
  • добавлено 8 кБайт ПЗУ в которой располагается заводской загрузчик.
  • уменьшен размер ОЗУ с 4кБайт у KL02 до 2кБайт у KL03.

Урезание в два раза самого ценного ресурса – ОЗУ не самая гениальная идея, но очевидно такова цена добавления 8 кБайт ПЗУ и уменьшения размеров корпуса. Ведь корпусом здесь, по сути, является сам кремниевый чип.

И так, сравнивать будем два наиболее близких представителя.

LPC1102UK MKL02Z32CAF4R
Размеры 2.17 х 2.32 мм 1.99 х 1.94 мм
Шаг выводов 0.5 мм 0.4 мм.
Количество выводов 16 20
Архитектура ARM Cortex-M0 ARM Cortex-M0+
Напряжение питания 1.8 – 3.6 В 1.71-3.6 В
Рабочая температура -40-85 °С -40-85 °С
Частота ядра 50 МГц 48Мгц
ППЗУ 32К 32К
ОЗУ
ПЗУ 16К -
АЦП 10бит 12бит
ЦАП - 6бит
SPI 1 1
I2C 1 2
UART 1 1
Таймеры 2-32бит, 2-16бит 3-16бит
Отладка SWD SWD

Отличия на десятые доли миллиметра в размерах корпусов мне кажутся совсем незначительными, я очень сомневаюсь, что это может как-то повлиять на выбор между этими двумя процессорами.
Шаг выводов, 0.4 у Моторолы против 0.5 у Филипса, с точки зрения разработки печатной платы выбор очевиден в пользу последнего. Столь мелкий шаг неизбежное следствие миниатюризации корпуса. Маленький шаг позволил добавить ещё один ряд выводов, у KL02 их 20, у LPC — 16.
Добавить “+” к названию архитектуры, несомненно, стоило, основной и неоспоримый плюс этого плюса это экстремально низкое энергопотребление. В оправдание LPC1102 можно сказать, что он старше, чем архитектура ARM Cortex M0+.
Учитывая разницу в архитектуре, сравнивать производительность, опираясь на тактовую частоту просто не корректно, я затрудняюсь сказать, что лучше/выше/быстрее/ производительнее. 50 и 48 МГц это очень много для тех задач, где может потребоваться такая миниатюризация, в большинстве случаев частота будет снижена для снижения энергопотребления. Поэтому тактовая частота будет одним из последних критериев при выборе того или иного.
32Кбайта флеш памяти “под программу” для такой крошки более чем достаточно, да и ещё свой загрузчик поместиться, тут вопросов нет. А вот с оперативной памятью вопросы есть. NXP постарался и впихнул невпихуемое целых 8 килобайт в таком крохотном корпусе. У Freescale в два раза меньше — 4 килобайта, пожалуй, это минус, но если подумать, 4К не так уж и мало учитывая габариты и количество выводов, но хотелось бы больше. Всегда будет хотеться больше…
ПЗУ постоянное запоминающее устройство, т.е. память без возможности перепрограммирования. В этой памяти располагается заводской (прошитый при изготовлении чипа) загрузчик позволяющий прошить пользовательскую программу в новый чип. Прошивка осуществляется по одному из доступных интерфейсов, например UART. И такой заводской загрузчик есть только в LPC1102, в KL02 подобного просто нет. Согласно анонсу заводской загрузчик появится в KL03.
Последовательный интерфейс SPI наличествует в обоих контроллерах, однако, в контроллере от NXP этот интерфейс гораздо более функционален, чего стоит только буфер FIFO на 8 фреймов (у Freescale – 1 фрейм) и ещё много фишек которых нет в KL02. Но есть один существенный минус — вывод SPI_CLK совмещён с SWD_CLK. Это означает, что не получится отлаживать работу SPI с помощью JTAG/SWD адаптера. Выход есть, на период отладки запаять LPC1104 вместо LPC1102, там эти сигналы разнесены на разные выводы.
I2C ничем не примечателен, но у KL02 два таких интерфейса, у LPC1102 один. Зачем два лично мне не понятно, интерфейс шинного типа, т.е. к одному интерфейсу можно подключить множество устройств, так зачем два?… ну да ладно, пусть будет, вроде не мешает.
С таймерами и их разрядностью у LPC1102 богаче, чем у конкурента. Есть 32хразрядные и больше выходов захвата/сравнения. Сторонников NXP это не может не радовать.
В обоих контроллерах имеется интерфейсc SWD для отладки и программирования. Кто не в курсе это двухпроводный интерфейс, не считая общего провода. Очень удобно в отличие от JTAGа с его множественными сигналами.
В копилку плюсов контроллера от Freescale хочу ещё добавить наличие в каждом чипе уникального 80 битного идентификатора, порой очень полезная вещь.

Как итог скажу, что в свой проект при прочих равных я бы выбрал контроллер фирмы Филипс (NXP), тупо из-за 8К ОЗУ, ну и ближе он как-то и родней что ли. Хотя конечно всё зависит от задачи.

Проект на LPC1102, тёплый ламповый светодиодный индикатор.

Hard

Бороздил интернет, уж не помню в поисках чего, и тут на глаза попалось вот такое чудо.
LPC1102 и тёплый ламповый индикатор
Индикатор HDSP-2001 производства HP

Миниатюрный светодиодный графический индикатор размером в стандартный корпус DIP14. Позолоченные выводы, керамический корпус, стеклянная крышка (продавец утверждал, что сапфировое стекло…) — просто восторг, сейчас таких не делают. Индикатор имеет четыре знакоместа, 7х5 пикселей каждое. Способ управления виден из структурной схемы — сдвиговый регистр 4*7бит плюс пять входов перебора столбцов. Также имеется выход сдвигового регистра, что позволяет легко наращивать разрядность.
LPC1102 и тёплый ламповый индикатор
Структурная схема индикатора HDPS-2001

Заказал. Приехали. Нужно срочно включить, посмотреть как работает. Для этого берём, нет, не Arduino, не RasberryPi, не какой-нибудь старт кит коих хватает, и даже не STM32xxx, и даже не AVR, храни его господь, а берём LPC1102, который пылится в шуфлядке уже очень давно.
LPC1102 и тёплый ламповый индикатор
Подарок от NXP

Нет ну, а что гулять так гулять нужно ведь ознакомиться с функциональными возможностями перспективного микроконтроллера. Опять-таки господам из NXP приятно, что не зря прислали, абсолютно безвозмездно, между прочим. Сказано – сделано!
LPC1102 и тёплый ламповый индикатор
Вид сверу.
LPC1102 и тёплый ламповый индикатор
Вид низу
LPC1102 и тёплый ламповый индикатор
Ещё не залитый эпоксидной смолой LPC1102

На снимках виден уже конечный результат, когда делал этот макет, не планировал писать статью — нет промежуточных снимков.
А видно следующее:

  • макетная плата
  • стандартный 20 пин разъём JTAG;
  • линейный стабилизатор напряжения на 3.3В;
  • два индикатора HDSP-2001 вставленные в разъём.
  • микроконтроллер LPC1102 распаянный для удобства вместо кристалла в какой-то ДИП микросхеме.
  • с обратной стороны ключи для зажигания столбцов.

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

Soft

Софт был написан на Си в среде IAR. Ставил целью сделать простенькую бегущую строку. Первым делом “буфер экрана” – двумерный массив 8x5 байт; 8-знакомест, в каждом знакоместе 5 столбцов, каждый столбец 7 бит. Прерывание системного таймера 2мс. В прерывании выключаем предыдущий столбец, загружает в сдвиговые регистры из “буфера экрана” данные следующих 8и столбцов и зажигаем их, и так далее каждые 2мс. Внимательный читатель помнит, что сигналы SWD_CLK и SPI_CLK совмещены на одном выводе, поэтому SPI программный, 7битный. Самое сложное сделано!
Далее пишем свой putchar который будет работать с нашим “буфером экрана”, потребуется шрифт 5х7. Шрифт не сложно сделать самому но я взял готовый(ссылка ниже). Пишем функцию SetPos – для указания в какое знакоместо выводить. Ну, а стандартный printf подхватит наш переопределённый putchar. Дальше каждые 200мс выводить строку в новое место — бегущая строка готова.

Заключение

Всё описанное было сделано за три вечера, больше всего времени ушло на “разваривание” LPC1102 внутри какой-то микросхемы – тема достойная отдельного поста. Имея опыт, готовый и настроенный инструментарий, местами прямые руки и самое главное непреодолимое желание, это реально. Проект не имеет практического применения, просто хотел, мог, сделал.

Ссылки

[1] www.nxp.com/products/microcontrollers/cortex_m0_m0/lpc1100/LPC1102UK.html#documentation — LPC1102
[2] www.freescale.com/webapp/sps/site/prod_summary.jsp?code=KL02&fpsp=1&tab=Documentation_Tab – KL02
[3] www.freescale.com/webapp/sps/site/prod_summary.jsp?code=KL03&fpsp=1&tab=Documentation_Tab – KL03
[4] electronix.ru/forum/lofiversion/index.php/t44983.html — Шрифт 5х7, спасибо пользователю с ником “AHTOXA”
[5] www.hparchive.com/PARTS/HP-Displays-HDSP-2010.pdf — Техническая документация на индикатор

Автор: Dark_Purple

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js