Своя ардуино с блэкджеком и шлюхами

Так исторически сложилось, что свое знакомство с микроконтроллерами я начал не с ардуино а с pic12f629. Маленькая черная штучка с 8 ножками, но опа и 20МГц 🙂

1.75кб памяти для программ — это число мне сразу показалось подозрительно маленьким и я его надолго запомнил. 21-ый век на дворе. Что такое 1.75кб ???

Нет, я конечно подозревал что память в микроконтроллерах не измеряется гигабайтами — для этого есть внешняя память, но беглый осмотр тех же ардуин дал понять что 32-64-128кб это в среднем норма для нижнего ценового сегмента.

К этому pic12f629 естественно нужен был программатор. Нашел схему через COM-порт, спаял на макетке, почитал примеры, наморгался светодиодом от души. И душа захотела чего-то большего.

«Яжпрограммист!» подумалось внутри. А тут такая не охваченная тема… Оба синих диплома по программированию уже хлопали по ушам, сертификаты по javascript, php, html+css перешептывались в сторонке с СИ++.

Тут надо сказать что к тому моменту моя дача уже имела некую автоматизацию в виде 1-wire шины, состоящей из 12 датчиков температуры, разбросанных по дому, земле и воздуху, и 14 реле, отвечающих за свет и отопление. На asus1000 крутилась ubuntu c php+mysql, которые писали каждую минуту показания с датчиков, а так же отправляли все состояние автоматики на домашний сервер, от которого я уже имел доступ к даче, как сейчас модно говорить, «из любой точки мира».

А тут микроконтроллеры… Я вообще сторонник минимизации кода. Люблю чтобы все работало максимально быстро, было компактно, дешево и надежно. Так пришло понимание, что в принципе микроконтроллеры мне могут заменить ноутбук. А слово «минимизация» это вообще про них. 1.75кб, я помню 🙂

И понеслось переделывание своей системы под микроконтроллеры. Тут встал вопрос: какую шину выбрать для обмена данными между микроконтроллерами ? Их же будет несколько. Каждый будет выполнять свою маленькую задачу. 1-wire ? — опять master-slave. Не хочу. CAN? что-то сложно очень. Арбитраж, идентификаторы… UART ? — всё равно master-slave, да и адресация не фонтан… I2C, modbus, RS-485 ? Перепробовал все доступные интерфейсы. Даже свой изобрел, похожий на i2c. Всё не то. Наигрался в передачу данных по самые помидоры.

В этот момент я уже конечно сменил pic12f629 на pic16f887. Уже в корпусе DIP40 и TQFP44. Заодно набил руку в рисовании плат и пайке мелких ножек. А так же вместо MPLAB подсел на MikroС. И тут пришло озарение… В микроСИ обратил внимание на библиотеку CANSPI. Там отличные примеры и кода и подключения железа.

Опа… знакомый камень. Блин… это же проще пареной репы. Микроконтроллер-SPIшина-контроллерCAN-передатчикCAN. А что с кодом ?

SPI1_Init();
CANSPIInitialize(1,3,3,3,1,Can_Init_Flags);
while (1) {
Msg_Rcvd = CANSPIRead(&Rx_ID , RxTx_Data , &Rx_Data_Len, &Can_Rcv_Flags);
if ((Rx_ID == ID_1st) && Msg_Rcvd) {
PORTB = RxTx_Data[0];
RxTx_Data[0]++ ;
CANSPIWrite(ID_2nd, RxTx_Data, 1, Can_Send_Flags);
}}

И всё ??? А я уже успел испугаться… Так CAN стал моим любимым интерфейсом. И дело не в том, что там аппаратное разрешение коллизий (в отличие от эзернетовского обнаружения), и даже не в том, что дальность передачи может быть до 5км (при 20кб/сек), а в том, что каждый узел может самостоятельно начать передачу в любой момент. Ура! В жопу master-slave!

Про идею «умного дома» на CAN я напишу отдельную статейку, а пока отвлеклись от темы. Есть у меня привычка (благодаря админскому стажу работы) оставлять что-то про запас. Всегда иметь некий резерв. Отсюда пошла привычка добавлять на свои платы внешнюю i2c память 24LC64. Маленькая микросхема с 8 ножками, каскадируемая, 64кбит или 8кб по шине i2c. Интерфейсы ведь я уже раскурил 🙂 По ногам совместимая вплоть до 24LC512, т.е. до 64кб. Согласитесь, не плохо к имеющимся у pic16f887 аж 14кб памяти, иметь еще 8кб, используя всего 2 ноги микроконтроллера.

Когда встал вопрос о закупке железок, не знаю что меня дернуло поискать аналоги pic16f887 и полезть опять в примеры MikroC. Открываем библиотеку CAN и смотрим:

Бля… а где контроллер CAN ? Правильно… он в микроконтроллере. А что с кодом ?

CANInitialize(1,3,3,3,1,Can_Init_Flags);
while (1) {
Msg_Rcvd = CANRead(&Rx_ID , RxTx_Data , &Rx_Data_Len, &Can_Rcv_Flags);
if ((Rx_ID == ID_1st) && Msg_Rcvd) {
PORTB = RxTx_Data[0];
RxTx_Data[0]++ ;
CANWrite(ID_2nd, RxTx_Data, 1, Can_Send_Flags);
}}

Это гениально… вместо CANSPIInitialize стало CANInitialize. Вместо CANSPIRead — CANRead. CANSPIWrite — CANWrite. Так Pic18f46k80 стал моим любимым микроконтроллером. Новой любимой женой, дороже pic16f887 аж на 20 рублей и избавляющий от необходимости использования 18-и ножного контроллера CAN MCP2515 в схемах. Минус кварц с конденсаторами. Еще и SPI интерфейс освобождается. Сам pic18f46k80 это 64МГц! и 64кб памяти под программу. 1.75кб? помню, помню…

Разработки стали ну не сказать что простыми, но проще. Вот старый и новый вариант:

Тогда я еще не рисовал двухсторонних плат и использовал цвета слоев по своему усмотрению. Так хорошо было видно где компоненты, а где дорожки и пятачки. Рисовал достаточно быстро. В среднем 1 день уходил на реализацию любой задумки в готовую плату. Но что-то напрягало каждый раз рисовать всё заново. Везде же по сути одно и то же. Микроконтроллер, питание, память, передатчик, пищалка.

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

Недели 2 я вылизывал плату с этим pic18f46k80. Хотелось минимального размера и со всем необходимым на борту. В итоге родил вот это:

Размер платы 42х35мм. Помимо pic18f46k80, тут питание от 12в, разъем для программирования под pickit, память 24lc64, передатчик CAN, и пищалка. Плата двухсторонняя, но другая сторона только для цепей питания. Совершенно магическим способом все аналоговые ножки оказались на нижней гребенке. То есть можно входные сигналы обрабатывать с нижней платы, а индикацию сделать на верхней, установив модуль между ними вертикально. (ниже будут фото). Свободного места почти не осталось. Битва шла за каждые 0.3мм.

Изготовил плату, проверил и молниеносно отправил на завод. Хочу много и сразу. Платы приехали через 5 дней.

Надо сказать что камни я покупаю пачками — так значительно дешевле.

Дальше начался веселый и весьма увлекательный процесс пайки всего этого добра 🙂 Напомню… 55 плат… 44 ноги у микроконтроллера… память, передатчик…

Всего было запаяно 45 таких модулей (из 55 плат) и именно их я использую практически во всех своих разработках,

кроме случаев какой-то совсем уж минимизации размеров или специфических задач с другими корпусами или камнями.

Модуль показал себя весьма удобным даже на примере вышеупомянутого 4-х кнопочного CAN-выключателя. Если убрать модуль с платы — на ней останутся только кнопки, резисторы, конденсаторы, светодиоды (которые раньше вообще не помещались) и коннекторы. Плата 56х56мм с функционалом ого-го 🙂

И вот в этот момент я обратил внимание на ардуино и всякие проекты с ними связанные. По сути я конечно изобрел велосипед. Свой модуль с неким камнем и питанием. Но он удобен мне. Имеет необходимую мне периферию. Ардуинщики поймут о чем я, если попробуют прикрутить к ардуино CAN шину и память. Это будет 3 разные платы, которые надо будет как-то соединить между собой или воткнуть типа такого:

Да простит меня автор сего творения, но это пиздец… Обратись ко мне — я сделаю тебе нормальную человеческую плату за 1 день.

Согласен, модули для ардуино позволяют очень быстро учиться и прототипировать устройства, но все эти поделки останутся прототипами. Ардуино — это как синяя изолента. Всё что сделано с помощью синей изоленты выглядит как синяя изолента и продается по цене синей изоленты.

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

Не скажу что мои устройства выглядят красивее, проще, компактнее. Пусть на этот вопрос ответят читатели моих опусов.

          

Модуль устанавливается в плату, выполняющую конкретно свою задачу. Все модули объединяются в шину CAN.

Обо всех устройствах расскажу поподробнее в других статьях. Всем спасибо что дочитали 🙂

Об авторе demid

Однажды открыл для себя микроконтроллеры и с тех пор не отпускает...
Запись опубликована в рубрике модуль PIC18F46K80. Добавьте в закладки постоянную ссылку.

2 комментария на «Своя ардуино с блэкджеком и шлюхами»

  1. A1 говорит:

    Пеши ищщо!

  2. Александр говорит:

    Хорошая статья. Прям захотел себе такую платку…

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

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