Программирование контроллеров Propeller

Опубликовано в рубрике "Статьи", 15.04.2010.

В прошлой статье мы познакомились с главными особенностями архитектуры ИМС Propeller, поэтому пора перейти к конкретным реализациям. Если вы хотите начать разрабатывать свои Propeller-приложения, советую обратить внимание на фирменную схему PropellerDemoBoard.

PropLogo

Скачать схему можно тут:

 

    Мы видим на ней знакомую EEPROM и PropPlug, а также трехбитный ЦАП комплексного видеосигнала, двубитные резистивные ЦАП для генерации RGB при подключении VGA-монитора. Поскольку порог срабатывания каждой линии чипа равен точно половине питания, поэтому возможно использовать его как компаратор и сделать простой АЦП на измерении времени заряда и разряда емкости, что и продемонстрировано на этой плате с чипом в корпусе LQFP44.

     Да, кстати, чип доступен в корпусах DIP40 для лентяев, LQFP44 для любителей SMD, и в QFN44 для особо аццких эмбеддеров, экономящих место на всем и паяющих платы утюгом или феном не боясь перегреть дорогой чип. 🙂 Я же не стал особо себя утруждать и выбрал корпус DIP40. Почему? Все просто. Во первых, выглядит архаично и по-своему эстетично, это, наверное, наиболее мощный процессор в мире в подобном исполнении, да и выводы расположении очень юзерфрендли, запоминается легко, достаточно раз глянуть в даташит. И, что самое главное, цанговая панель, позволяющая вытащить его из отладки и вставить в разработанный прибор без покупки/выпаивания чипа. Это особенно актуально, если вспомнить, что пропеллер — штука отнюдь не дешевая(обычная цена колеблется на уровне 20..25 евро). Что интересно, цена полностью независима от типа корпуса — довольно таки необычно, согласитесь. Пора привыкнуть, что Parallax нарушает все известные стереотипы. 🙂

    Отладочная плата не представляет вообще ничего интересного – просто выведенные пины с терминирующими резисторами как это удобно делать в таких случаях если вдруг что-то замкнешь по недосмотру, к тому же резисторы подобраны так, что могут быть использованы для вышеупомянутых ЦАП. На контакты можно одевать разные модули интерфейсов – PS/2 мышь, PS/2 клавиатура, VGA-монитор, комплексный видеовыход.

 debug

    Самое время сказать пару слов о среде отладки. Первое и самое главное – она очень простая и интуитивно понятная. Рассказывать можно долго о всех возможностях, так что смысла в этом не вижу, ибо в документации и туториалах это все детально расписано, о чем смотрим в качественной русскоязычной документации тут (на нее я еще буду ссылаться):

 

PM-v1.0-RUS-v1.0.pdf

 

    Следует отметить, что проект выглядит очень просто – это файлы самой программы с расширением «.spin». Никаких дополнительных настроек, никаких «.hex» или «.bin» прошивок. Еще бы, среда создана под один единственный чип с уникальной архитектурой и создана почти что идеально. Программа транслируется в байт-коде непосредственно в ОЗУ, где с ней уже работает Spin-интерпретатор. Язык Spin уникален, как и сам чип, хотя существует компилятор под С, но он не прижился из-за своей неэффективности.

    Проект обычно разбит на самодостаточные модули – объекты. При этом необходимо указывать объект, с которого будет начата компиляция, т.н. TopObjectFile, который также станет стартовой точной приложения. Каждый объект состоит из следующих блоков:

CON – Определяет глобальные константы.

VAR – Определяет глобальные переменные.

OBJ – Определяет ссылки на объекты.

PUB – Определяет Public-метод (может быть доступен из другого объекта).

PRI – Определяет Private-метод (доступен только внутри объекта).

DAT – Определяет данные, буферы и код ассемблера.

 

    В объекте могут встречаться несколько блоков каждого типа, распределенных в любом необходимом порядке, но обязательно должен быть как минимум один блок PUB даже если вся остальная программа будет находится в блоке DAT и написана на ассемблере.

    Среда Propeller Tool сама окрашивает каждый блок в свой цвет, облегчая чтение, возможны также разные способы отображения как полного кода, так и сокращенного для более легкого чтения. Сама среда очень проста и интуитивно понятна, форматирование текста очень важно, так как операторные скобки в языке Spin как таковые отсутствуют и задаются форматированием текста. На мой личный взгляд, это недостаток, среда подчеркивает что к чему относится, но если .spin-файл смотреть, скажем, блокнотом, или распечатать текст, то суть может теряться. Еще один незначительный по моему мнению недостаток – Propeller Tool в упор не понимает кириллицу, невозможно даже написать комментарий. Поскольку я никогда не пишу комментарии по-русски, этот недостаток был замечен лишь со слов других. Привыкнув работать в Си, нечувствительность к регистру тоже зачислю в «недостатки». 🙂

    О среде Propeller Tool детально расписано в вышеупомянутой документации, так что можно перейти к самому примеру кода. А именно – классическая задача «Hello, world!» для микроконтроллера, то бишь, мигание светодиодами, пример из официального туториала от Parallax, немного видоизмененный под мои нужды.

 

Outputspin

 

    Этот объект мигает светодиодом на ноге Pin с задержкой DelayMS миллисекунд Count раз. В блоке переменных VAR определяется длина стека для нового ядра а также его номер.

    Метод Start останавливает уже работавший до этого процессор и запускает новый командой cognew на выполнение метода Toggle, при этом будет использоваться память для стека начиная с адреса Stack (символ @ — взятие адреса). При этом в переменных Success и Cog будет ID (номер) запущенного процессора (1..8) или нуль, если свободного процессора не нашлось. Это используется в методе Stop. Команде cogstop передается номер последнего запущенного процессора, после чего переменная Cog обнуляется (символ ~ означает постустановку в ноль).

    В методе Toggle после установки нужного выхода на вывод (значение соответствующего бита в регистре dira устанавливается в единицу) следует цикл, в котором осуществляется переключение вывода и задержка. Команда waitcnt ждет до того момента, пока не осуществится совпадение со значение системного счетчика равным текущее значение сnt плюс количество задержанных циклов. Дальше, используя операцию #> (ограничение по максимуму) реализуется бесконечный цикл, если методу Toggle передано нулевое значение Count (декремент нуля ограничивается -1, что всегда есть «истина»). После выполнения операции процессор остановится, но переменная Cog будет содержать его ID, поэтому она обнуляется для того, чтобы метод Stop не пробовал остановить уже остановившийся процессор, а также чтобы методу Active была передана верная информация о активности cog’а.

 

Объект Blinker.spin

Blinker2spin

    В блоке констант CON идет определение тактового источника – типа используемого резонатора, его частоты и множитель PLL. В блоке объектов OBJ создается сразу массив из шести объектов, названных LED. Основной метод Main последовательно вызывает метод Start объекта Output для переключения светодиодов с различными частотами при этом метод NextObject ищет и возвращает индекс свободного объекта, или ожидает пока такой не появится.

    Вот, собственно, и вся задача, более подробно написано в туториале. Она исполняется действительно параллельно, а также демонстрирует тот факт, что все объекты могут быть заняты и приложение будет ждать до освобождения одного из них. Это можно наблюдать на видео.

 

 

    Приятен тот факт, что множество объектов уже разработаны или пользователями ИМС Propeller, или инженерами компании Parallax, в том числе самим Сip’ом Gracey, основателем компании. Множество библиотек уже наличествуют в самой среде PropellerTool. В качестве таких примеров – генерация видеосигнала VGA (в том числе высокого разрешения) или монохромного комплексного видео с подключением стандартной PS/2 мыши, что продемонстрировано на картинках и видео. Также показано использование встроенного шрифта Parallax, позволяющего даже рисовать электронные схемы.

 

 

    Из недостатков этого необычного микроконтроллера – почти полное отсутствие периферии, а хотелось бы иметь I2C (а так имеем, но только для связи с внешней памятью), SPI, USART (есть, но только для связи с хостом, а программный вряд ли сможет дать больше 9600 бод), элементарную аналоговую периферию, как АЦП, ЦАП в качестве разделяемых ресурсов. Внешняя память ничем не защищена от внешнего копирования, отсутствует система отладки. А так, впечатления в целом положительные, прибор и в самом деле очень необычен и стоит того, чтобы уделить ему внимание и поразмять мозги, так как при его программировании действительно надо научиться мыслить в рамках систем реального времени. Возможно, в будущем мной будет реализован девайс для отображения информации с других микроконтроллеров на видео через программный SPI, для отладки, например. А так, Propeller – идеальное решение для создания ПИД-регуляторов, робототехники, но прижился он больше там, где был создан, то есть, на Западе.

 

HiResText

 

    Хотелось бы напоследок также вспомнить о самой компании Parallax, так как производство собственного микроконтроллера «с нуля» — неимоверное достижение для компании такого небольшого масштаба. По словам Сip’а Gracey, Propeller был изготовлен чуть ли не с уровня каждого отдельно взятого транзистора и, думаю, есть основания этому верить. Даже PLL и выходные буферы выводов были разработаны ими специально для этого микроконтроллера. Не зря на разработку ушло более чем 8 лет работы команды увлеченных людей. Было закуплено дорогостоящее оборудование и создана своя лаборатория, в которых велась отладка микроконтроллера на открытом кристалле с помощью электронного луча, подобно микроскопическому щупу осциллографа. Смотря на неимоверные затраты на его создание, возникает вопрос – насколько окупился этот проект, учитывая небольшую распространенность продукта? Вопрос риторический, и мне было бы интересно получить на него ответ. Если даже Parallax создал даташит с полными электрическими параметрами не сразу, а только после язвительных шуточек пользователей из-за его отсутствия. 🙂

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

Так что вывод один. Это стоит того, чтоб хотя бы раз попробовать. 🙂

P.S. Здесь перечислю все ссылки, которые могут быть полезны для работы с микроконтроллером Propeller.

Русскоязычные статьи Игоря Коваленко, посвященные ИМС Propeller:

 

Удачи в ваших разработках!

Raymond

Комментарии
  1. BSVi написал(а) 16th Апрель, 2010 в 8:06

    ОМГ, только заметил — это ты руками диоды под музыку подбирал, али там микрофон присутствует?

  2. Ray написал(а) 16th Апрель, 2010 в 12:40

    Как я упоминал, подключить микрофон несложно, но я этого пока не делал. Заметил совпадение c музыкой случайно когда прослушивал альбом Romantic Tragedy’s Grescendo 1998-го года в исполнении Macbeth, одного из наиболее любимых Gothic-Metal-коллективов. Использовано начало композиции Thy Mournful Lover.

  3. aeore написал(а) 16th Апрель, 2010 в 16:54

    omg, ну и шрифт у них.. если бы ты не сказал, что e, это @, я бы никогда не догадался))

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

    А вообще мне понравилось.. Надо бы найти где-то этот чип и покопаться)

  4. Ray написал(а) 16th Апрель, 2010 в 21:28

    Да, конечно, язык учить придется, хорошо хоть хорошие детальные мануалы есть, как по Spin, так и по ассемблеру. Касательно наработок, соглашусь, но тут разработчики позволили легко собирать свои проекты с готовых легкодоступных объектов, поощряя их свободный обмен, тем самым создается что-то сродни комьюнити пропеллерщиков. 🙂

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

  5. Spiriter88 написал(а) 18th Апрель, 2010 в 17:45

    Очень интересная весч ! 🙂
    А вот на сайте микроконтроллера он стоит 8 $ .
    Item code P8X32A-D40
    Stock 2858
    Price $7.99
    Starting from: 20 pieces $7.59

  6. Ray написал(а) 19th Апрель, 2010 в 12:39

    А вы еще прибавьте плату за пересылку. 😉 Я говорил о обычном радиомагазине, в котором можно взять чип «с прилавка».

    Хотя да, вижу, Пропеллер подешевел, даже Elfa продает за 13 евро поштучно.

  7. Spiriter88 написал(а) 20th Апрель, 2010 в 4:46

    Да я почти заказал на их сайте 2 штуки плюс программатор, но вот там надо визу а у меня в долларах только E-c@rd 🙁 еще хотел набрать солнечных панелей 🙂

  8. Spiriter88 написал(а) 20th Апрель, 2010 в 5:51

    А нет оказалось это visa e-c@rd такая 🙂 сняли 169.71 как обещали 🙂

  9. unit написал(а) 10th Август, 2010 в 12:35

    а на ТВ тоже в цвете выводит или только ЧБ?

  10. unit написал(а) 10th Август, 2010 в 12:48

    собрал схему как в даташите, VGA в цвете, а на телевизор всё только в чб выдаётся, использовал демки с сайта пропеллера. в чём тут может быть дело?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт защищен reCAPTCHA и применяются Политика конфиденциальности и Условия обслуживания применять.