Tag Archives: PinBoard II

FreeRTOS. Пример

Обещал я как то пример программы похожей на реальность, но с использованием FreeRTOS. Обещанного, как водится, три года ждут. Правда прошло уже пять… ой… В общем, ужасно не люблю писать бесполезные примеры. А полезные, которые можно выложить, как то не попадались под руку. И вот оно, нашло таки.

В общем, суть задачи, управление несколькими шаговиками не приходя в сознание. Причем все должно вращаться одновременно и сигнализировать о приходе на точку, а также прерываться по требованию. Да это все можно сделать десятком разных способов. И программно и полуаппаратно. Как угодно, короче. А у меня будет на FreeRTOS. Надо же на чем-то показать :)

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

▌Железо
Ну тут все элементарно. Pinboard II с STM32F103C8T6. Да шаговые драйверы TB6600. У драйверов этих есть сигнал STEP сигнал DIR и сигнал EN. Подаем разрешение на EN, выбираем направление на DIR и гоним тактовые импульсы на STEP. И таких четыре драйвера.

▌Среда
Делаю я все в EmBitz кто то ее в комментариях упомянул. Я попробовал и протащился. Работает НАМНОГО шустрей чем любая монструозная хрень на эклипсе. Так что атолик студио, кокос — все нахер. А внутре у ней тот же GCC.

▌Установка
Как ставить FreeRTOS описывалось в прошлой статье. С тех пор ничего не поменялось. Кинуть файлы в проект и подцепить их в среде. Элементарно. Также бегло пробегитесь по первой статье.

(далее…)

Read More »

Генератор отрицательного потенциала

Иногда нужен потенциал ниже нуля, т.е. отрицательное напряжение. Такое бывает нужно в аналоговой технике или, например, чтобы запустить LCD индикатор от низкого напряжения. Контроллер дисплея какого нибудь HD44780 часто отлично работает от 3.3 вольт, но на панели ничего не видно по причине низкого контраста, даже выкрутив потенциометр в землю не удается получить яркие символы. Нужно опустить Vss ниже нуля. На некоторых дисплеях даже стоит специальная схема, генерирующая минус. Но не везде. А тем не менее на простейшей конденсаторной схеме можно сделать такой генератор на ровном месте.

Итак, вот такая вот простая схема легко дает небольшой отрицательный потенциал .

На вход ей надо подать прямоугольный сигнал, от нуля до Vcc, а с выхода снимется отрицательный потенциал. Зависящий от частоты, уже от нескольких сот герц там будет -1 вольт, а вообще можно и больше накачать.

(далее…)

Read More »

STM32 CubeMX и Pinboard II. Настройка и тестовый проект-моргалка

У меня тут последнее время часто спрашивают, можно ли через Pinboard II работать с CubeMX и у кого-то возникли даже проблемы с этой приблудой. Так что пришлось запилить видеопример простой моргалки сгенерированный в кубе. Ну, а раз это взлетело так просто, то и остальное должно тоже. Ну и в двух словах описал, что есть HAL, откуда он взялся и что собой заменил.

Read More »

Установка и конфигурация FreeRTOS

На самом деле это скорей интеграция ее в проект. С технической точки зрения выглядит как подключение библиотек. Как той же CMSIS или SPL. Добавляем инклюдники, добавляем файлы в проект и все. Можно взять готовый пример и переколхозить, но в этом случае есть шанс прозевать какие-нибудь детали и получить странные эффекты. Поэтому начну с нуля, в качестве основы будет модуль Pinboard STM32F103C8T6 и Keil uVision. Под него все мы и соберем.
 

▌Качаем ОС
Тащим архив с freertos.org. Это довольно толстая солянка где 99% занимают примеры под разные архитектуры. Вот его примерная структура:

 

Вся ОС по большей части прячется вот в этих нескольких файлах:

  • queue.c — функции очередей и мутексов
  • tasks.c — функции работы с задачами
  • timers.c — функции работы с таймерами
  • croutine.c — функции работы с сопрограммами
  • event_groups.c — функции работы с флагами
  • list.c — тут все для отладки
  • port.c — платформозависимые параметры. У каждого МК этот файл свой
  • portmacro.h — настройки платформы. Тоже индивидуальный для каждого типа МК
  • FreeRTOSConfig.h — настройки ОС. Платформозависимо, а еще зависит от целей и проекта

 
(далее…)

Read More »

Производственное

Итак, у нас монтажники, наконец то, пользуясь весенне-летним затишьем намолотили продукции и теперь есть складские запасы. И теперь можно заняться сборкой тех модулей которые закончились и были убраны из магазина. В частности уже вернулся модуль под Altera MAX2. Который пропадал со складов.
 

▌Не почтой единой
Также расширяем способы доставки. Курьерская служба у нас и раньше была по спец запросу, теперь же она будет внесена постоянно. Ну и попробуем работать с транспортными компаниями, благо у них появились отделения не за тридевять земель. В частности, совсем недалеко от нас образовался пункт Автотрейдинга, попробуем через них.
 

Хотя, в целом, Почта России последнее время радует. По крайней мере сроками и надежностью доставки внутри страны. Редкая посылка едет больше двух недель.
 

▌Дилерская сеть и дружественные магазины
А еще у нас с некоторых пор есть свой дилер на Дальнем Востоке. Это магазин Далькон, что присутствует во Владивостоке.
 

Ну и наш старый Киевский дилер тоже никуда не делся. У них те же самые платы, что и у меня. Правда наборы модулей есть не все, но доступны под заказ.
 

Если будут желающие, то можно на базе chipster.ru организовать то же самое и в Москве. Сейчас как раз есть излишки, которые я могу Диме сгрузить.
 

Read More »

Вести с полей. Новый урожай.

Наконец то все собрано и платы модуля FTDI, о котором я писал не так давно, есть в наличии в большом количестве.

 
Отдельные плашки для него тоже есть и продаются отдельно. Хоть их и нет в магазине, но скоро будут выложены (надо сфоткать и офомрить все) пока же о них можно договориться при заказе в переписке.
 
 

Есть в наличии следующие насадки:

  • AVR JTAG ICE без контроллера, т.е. как те, что идут на PBII в виде AVR модуля — 150р
  • AVR JTAG ICE с контроллером, т.е. полностью собранный — … пока не знаю во сколько мне обойдется партия меги16 в TQFP. Меги еще не закуплены.
  • CoLink JTAG (только JTAG! без SWD) -150р
  • Переходник на модуль Altera (просто планка с разъемом и выводами, для удобства) — 15р.

 
 

Также, после долгого отсутствия у нас снова появился JTAG/SWD отладчик CoLinkEX Clone

 
 

Ну и после небольшого перерыва вновь в наличии появился модуль на STM8.

Read More »

Модуль ПЛИС Altera MAX II EPM240T100C5 для Pinboard II


Линейка процессорных модулей для PB2 неспешно пополняется новыми персонажами. После STM8 и PICа с езернетом к ней добавился модуль с ПЛИС.
 

Для тех, кто эти четыре буквы видит впервые — ПЛИС это программируемая микросхема, поведение которой можно задавать на уровне отдельных логических элементов (И, ИЛИ…). Как если бы мы рисовали схему на логике. Внутри она состоит из однотипных блоков (logic blocks), соединенных между собой. Функцию каждого блока и соединения между ними можно программировать, задавая ту логику работы, которая тебе нужна. В итоге мы имеем устройство, которое делает именно то что необходимо, не совершая никаких лишних действий. И делает это очень быстро. Во первых за счет того, что даже простые ПЛИС (как наша) могут работать с высокими тактовыми частотами (на модуле установлен генератор на 100Мгц, например). Во-вторых, в ПЛИС (в отличие от МК) нету ядра, конвеера, памяти с командами. Алгоритм работы, который мы описываем на специальном языке HDL — Hardware definition language, синтезируется в готовую логическую схему, а не последовательность команд.
 
(далее…)

Read More »

Модуль PIC18F67J60 для Pinboard II


 
Коллекция модулей для Pinboard II пополнилась еще одним необычным девайсом. На этот раз это PIC, но не общего назначения, а специализированный, со встроенным 10Base-T Ethernet контроллера с интегрированным MAC и PHY.
 

  • Семейство: PIC18
  • Разрядность: 8 бит
  • Частота: до 40MHz
  • Флеша: 128KB
  • ОЗУ: 3.84KB
  • Периферия: ADC, Comparator, PWM, Timer
  • Интерфейсы: Ethernet, EUSART, I2C, SPI
  • Тактовый генератор: внешний и внутренний.
  • Питающее напряжение: 2…3.6V
  • Корпус: TQFP 64

 

Причем физический уровень реализован внутри МК, т.е. развязывающий трансформатор вешается прям на контроллер. Фактически, на одном только разъеме, кварце и микроконтроллере да мизерной обвязке можно сделать самодостаточный вебсервер. Под него Microchip написал неплохую библиотечку реализующую TCP-IP стек.
 
(далее…)

Read More »

Модуль STM8L для Pinboard II


 

Автор статьи и разработчик модуля dcoder
 
Контроллеры от STM плодятся с ядерной скоростью и почти заполонили всю планету. Для STM32 у нас модуль уже есть, а теперь пришла пора STM8. Контроллер линейки L я взял потому, что они выглядят более вкусными по сравнению с S серией — более продвинутая периферия более низкое потребление. Правда у них нету CAN, вот. И хоть сверхнизкое потребление для нашей платы погоду не делает, серию S я использовать не захотел. Кроме того, устройство периферии у S и L практически одинаковое, так что изучив L можно смело садиться и писать код под S.
 

Описание
На модуле установлен МК STM8L152K6T6.
 

Не самый продвинутый МК из линейки STM8, но точно выше среднего. Практически весь набор периферии, которой есть у топовых МК есть и у него. Разница лишь в объеме памяти, количестве выводов и некоторых фичах вроде второго канала DAC. Характеристики у нашего МК такие:
 

  • 32 Кб flash памяти, 2 Кб RAM, 1 Кб EEPROM
  • 28 линий GPIO
  • АЦП ПП 12 бит, 21 канал (!), до 1MSPS на быстром канале и до 760 кГц на всех остальных. А еще у него встроенный градусник.
  • ЦАП 12 бит, 1 канал
  • Интерфейсы: USART (IrDA, синхронный режим), SPI, I2C, SWIM
  • Контроллер ЖК дисплея: 4 разряда по 17 сегментов
  • Максимальная частота: 16 Мгц
  • Диапазон напряжений питания 1.8 – 3.6 Вольт
  • Часы реального времени (RTC). Кварц 32.768кГц установлен на плате.

 
(далее…)

Read More »

ARM. Учебный Курс. Прерывания и NVIC — приоритетный контроллер прерываний

Стандартной плюхой ядра Cortex M3 является NVIC — контроллер приоритетных векторных прерываний. Сейчас я разжую что это такое и с чем это едят.
 

Прерывания и события
Вообще, если пошерстить мануал, то везде при разборе периферии рассматриваются interrupt/event. Может сложиться ощущение, что это одно и то же. Но это не так.
 

Interrupt — это прерывание. При прерывании обычно программа пакует регистры в стек и бросается по вектору, а оттуда через JMP сигает уже в обработчик прерывания. В кортексах все немного не так. Тут вектора прерывания это просто вектор-адреса лежащие в нужном месте. В виде констант. А при прерывании прога не прыгает на вектор, а берет этот вектор-адрес и сразу же пихает его в програмный счетчик, тем самым переходит сразу на обработчик. Так быстрей, исчезает лишняя операция по переходу на вектор.
 

Event — это аппаратное событие. Опустел буфер UART — держи event, натикал таймер — еще один event. Событие может вызвать прерывание, может запустить какую-либо периферию, например пнуть DMA, чтобы оно выгрузило данные. Но событие далеко не всегда может вызвать прерывание. Каждое прерывание вызывается событием, но не каждое событие вызывает прерывание. Вот. Так что надо отличать.
 

Как и в AVR в STM32 существуют вектора прерываний. Это особые адреса, куда контроллер бросается если происходит прерывание. Они записаны в таблицу и располагаются вначале памяти. Впрочем, система гибкая и переконфигурировав NVIC можно засунуть ее куда угодно. Если вы пишите на Си, то по дефолту, в стартовом файле, вектора прерываний забиты затычками которые ведут в бесконечный цикл. Так что если вызывать прерывание не указав ему обработчик контроллер тупо повиснет. Что является максимизацией ошибки и это хорошо.
 

(далее…)

Read More »

Определение текущей тактовой частоты при отладке

Тактовая частота это важнейший параметр, точное знание которого необходимо при расчете многих значений. Начиная от банальных выдержек, до генерации UART передачи.
 

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

То в STM32, где описание системы RCC занимает 35 страниц убористого текста, схема не влезает на экран, а куча библиотек, вроде CMSIS и SPL или визардов, наподобие того что есть в CoIDE, генерируют стартовый код, определить текущую тактовую частоту превращается в непростую задачу. Ее и будем решать.
 

Как же понять, что у нас получилось на SYSCLOCK после всех этих HSI, HSE, делителей, мультиплексоров и PLL умножителей?
  (далее…)

Read More »

Работа с микросхемой FTDI FT2232 в режиме BitBang

Скромная и незаметная
На демоплате Pinboard в качестве интерфейса для связи с компом установлена микросхема USB< ->UART преобразователя от FTDI. В 99% случаев ее используют именно для этого и никак иначе. Нужен один UART ставят — FT232xx, нужно два канала — FT2232xx.
 

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

(далее…)

Read More »

Pinboard II. Концепция краевого модуля

На Pinboard II есть боковой разъем расширения, вот его распиновка:

Туда можно выткать какую-либо периферию. Например сейчас разрабатывается и скоро пойдет в производство модуль двухканального RS232/RS432 с гальванической развязкой (опционально) каналов. Но речь не о нем, а о общей концепции при создании таких модулей.

Вся соль в том, чтобы сделать модуль самодостаточной единицей. Т.е. на нем должен быть точно такой же разъем под процессорный блок, как на PBII. C точно такой же распайкой на периферию модуля расширения. Тогда у нас получается ситуация, что можно будет отлаживать систему в двух схемах:

  • Полная: Процессорный блок — главная плата — краевой модуль. Допускающая удобную и быструю перешивку проца, связь с компом по интерфейсам, отладку и прочие блага наличия FTDI и всяких примочек демоплаты.
  • Удаленная: Процессорный блок — краевой модуль + внешнее питание с адаптера. Что удобно когда надо закинуть, например, наш блок куда-нибудь в автономное плавание. И дать ему там побыть одному, половить глюки и баги. Причем не занятый краевой разьем модуля расширения может дополняться чем либо еще. Например какими нибудь доп интерфейсами (плата расширения на плату расширения :) ), или как под доп входы-выходы под управление использоваться. Этот режим чем то напоминает концепцию Arduino + Shield где в роли арудины наш процессорный модуль, а в роли шилда краевой модуль расширения. Конечно можно в таком режиме его и на постоянное дежурство куда-либо повесить, но это нерационально.

(далее…)

Read More »

Отладочная плата Pinboard II

Собрав многолетний экспериментаторский опыт, а также два года непрерывной эксплуатации платы Pinboard 1.1, я разработал новую демоплату, куда более совершенную и функциональную — Pinboard II.

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

(далее…)

Read More »