Category: техника

Category was added automatically. Read all entries about "техника".

IO модуль (powerd by core5277)

Забегая немного вперед...

Универсальный IO модуль позволяет подключать различные датчики на разъем внизу платы, слева.
Также поддерживает дополнительные порты для платы расширения.
На текущий момент я тестирую три платы(прототипы): Датчик температуры и влажности, инфракрасный приемник/передатчик и RGB светильник. Плат расширения будет много.









P.S. Мне недавно, на ВЭФ'е, московские специалисты из VEBVENTURES сказали, что мой проект похож на ардуино, не очень приятно было, хотя, может быть они и правы, в той части, что на базе моего проекта также легко строить решения в рамках автоматизации, только в моем проекте как минимум не нужно программировать.

Новый функционал шины 5277

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

Но, с того момента, когда я их спаял, было сделано много изменений в программной части.
В основном это новые фичи, и весьма серьезные.
Например, с тех пор я перестал писать прошивки под каждое устройство на ассемблере и реализовал свою операционную систему на ассемблере(пока без поддержки файловых систем), да и в добавок сделал окружение(типа SDK) для устройств 5277.
Ну и как обычно встал вопрос - какой прошивкой снабжать данные устрйства?
Казалось бы все просто - возьми старые прошивки и точка. Можно было бы, но как отказаться от новых фич? Как поддерживать устаревший код? Это явно не тру подход.
Поэтому, в последние две недели я работал над закрытием основных задач моего SDK.
Буквально сегодня я оттестировал механизм идентификации новых устройств на шине.
Когда-то давно похожую задачу я закрыл для DIPEX, но там другой протокол и совсем другая реализация.
В общем, я хочу сказать, что с этого момента все мои устройства имеют функционал для обнаружения их на шине, также они имеют функционал позволяющий определить наличие новых данных на устройствах в течении 0.1-0.2 секунды. Поддерживают историю(т.е. запоминают в памяти изменение показаний, действия над реле и прочее), которую считывает контроллер после восстановления связи.
Пока я закрываю глаза на почти готовый функционал обновления прошивок по сети.
А еще, я в core5277 поменял регистр Z на Y в процедурах работы с выделенной памятью, что привело к большому количеству правок и сбоев. Большая часть устранена.

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

P.S. Я помню, как мои одноклассники спрашивали меня - 'А игру сделать можешь?'. Если бы они знали сколько людей, сколько разных специализаций, сил и финансовых влияний нужно что-бы что-то сделать подобное... они бы просто не задавали подобные вопросы.
Я не знаю никого, кто бы делал что-то подобное в одно лицо. Поэтому, уж простите меня, но все объять я не могу, однако есть определенная, конкретная  цель и я прилагаю для этого максимальные усилия.

Оффтоп, stm32h750 cortex_m7

Прошло некоторое время, я изучаю периферию STM32H7 и  armasm в среде Keil(под VrtualBox)
Очень много непонятного, все сильно усугубляется отсутствием полезной документации.

Основной, текущий вопрос -  как исключить повторное добавление подгружаемого файла(include/get). В своем проекте core5277 я это легко решил проверкой дефайнов при использовании avra. Здесь не работает, в официальной документации никакого решения я не увидел. Как же так, кэп?

Мои труды вы можете посмотреть на https://github.com/w5277c/core5277_stm32

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

Оффтоп, stm32h750 cortex_m7

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

В настоящее время существует понятие в обществе, что ничего нет лучше STM32 и Си. Так как есть библиотеки, HAL, достаточно серьезные аппаратные реализации, среды разработки и тому подобное.

Просто делюсь свои опытом, сейчас я нахожусь на уровне 'пишу свою прошивку на асме без использования сторонних библиотек' параллельно создаю операционку для STM32(только первые шаги).

Изначально я выбрал стандартную IDE STMicroelectronics со стандартным проектом на Си и стандартным HAL. Я даже реализовал на 80% свою задачу(тестирование SD карт), но на определенном этапе я столкнулся со сложностями, все эти колоссальные труды производителя с аппаратной поддержкой SD привели к результату 3МБ/с, не более, для чипа в 480МГц.
Все попытки выжать большую скорость приводили к сбоям.
Вопрос, зачем нужен хал, который не может интуитивно понятно раскрыть возможности чипа? И каков уровень такого профессионала 'разработавшего HAL'?

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

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

Я конечно понимаю, что есть фанатики, и среди Си и STM их больше всего. Но я не понимаю, что их делает фанатиками? Способность следовать только шаблонам типа HAL? Он же просто кусок говна написанный индусами, неужели вы это не видите?

UPDATE.

Я вижу многие противники ассемблера не понимают, почему я пишу именно на нем, а не на Си.
1) Как схемотехник я являюсь любителем, как программист - профессионал с большим стажем работы.
И затраты времени при выполнении своих задач зачастую связаны с решением головоломок, а не с кодингом так называемой 'бизнес логики'.
Не сложно написать простую ОС на ассемблере или на Си, сложно реализовать само решение, и на это уходит гораздо больше сил, чем на кодинг на асме или си.
2) Существует предвзятое мнение, что почему-то на ассемблере, особенно при работе с регистрами, нужно постоянно дербанить даташиты и каждый раз заново писать код. Полная чушь, асм код точно также выноситься в отдельные файлы в виде библиотек, а регистры имеют хоть и сокращенное название но запоминаются не хуже названий структур Си. Более того, дербанить даташиты нужно что на Си, что на ассемблере. Если конечно Вы не пишете что-то очень простое, но много.
3) Существует мнение, что кодер на асме умственно отсталый, ведь какой специалист, будет оптимизировать код, при чипах работающих почти на гигагерцах. Может быть не стоит считать людей за идиотов основываясь чисто на своих представлениях о жизни? Лично я пишу на асме, потому, что для меня это более эффективный инструмент, а не потому, что я пытаюсь экономить каждый такт.
Хотя в моей ОС для AVR мне часто приходиться именно экономить память и процессорное время.
4) Главная отличие микроконтроллеров от остальных процессорных решений - периферия, именно для работы с периферией мне и нужны микроконтроллеры. И для того, чтобы знать эту периферию - нужно работать с даташитом и регистрами. Здесь ассемблер подходит идеально.
Не забываем, что кроме МК есть еще и чипсеты(которые, например используются с смартфонах и микрокомпьютерах - отличное решение для бизнес логики)
5) Еще раз, работая на асме вы работаете напрямую с регистрами описанными в даташите. При дебаге вы видите в точности тот код, который написали. Соответственно и выполнение, выполняется ровно то, что вы написали, без влияния компиляторов. Если вы не умеете писать алгоритмы, то да, асм не для вас, и уж точно вы не инженер-программист, максимум техник.

Для понимания, как я 'работаю с регистрами' на ассемблере:


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

А вот так я инициализирую драйвер DHT11


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

Посылка

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

Посылка кстати шла через всем известное 'село' (в котором якобы съели летучую мышь) которое размерами с маскву. Так что ждите, завтра у меня начнут расти жабры и вытекать мозг.

В основном заказ был из большого набора SMD резисторов и конденсаторов.
И здесь я хочу обратить ваше внимание на один магазин на площадке Таобао, пример покупки -
https://item.taobao.com/item.htm?spm=a230r.1.14.31.22345daakuQjUS&id=622680368583&ns=1&abbucket=11#detail
Там большой выбор SMD компонент (резисторы, конденсаторы) и адекватная цена.
Пришло все в аккуратных пакетиках с наклеечками с полной информацией, чего боле?

Кроме этого я заказал новый датчики температуры и влажности(DHT11), IR приемник и передатчик, пару модулей LORA, логический анализатор на 16 портов и dev board для STM32H7XX для реализации проекта(по работе) для тестирования SD карт.

И еще кучу мелочи, например, пришла мелочевка, которой мне не хватало для своего счетчика Гейгера.

А еще в пути новые платы устройств которые будут работать на базе core5277 и еще кое-какие компоненты, например недорогой но качественный датчик CO2.
Эти устройства, после разработки прошивки и тестирования пойдут в реализацию, хватит сидеть ровно на одном месте.

P.S. и да, я не вижу дешевых STM на столько, чтобы был смысл уходить с ATmega8,88 и подобных.

Микрокомпьютер и микроконтроллер, в чем разница?

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

Зацепились за определения микрокомпьютера и микроконтроллера.
Я считаю, что назвать плату с микроконтроллером микрокомпьютером может только тот, кто не имеет к этим устройствам никакого отношения.

Как же этот специалист, с таким уровнем знаний, может подбирать качественный товар на полки своего магазина?
Ведь коллега меня заверял, что главная цель этой компании - качество товара!

Хотя на Вики говорят ровно в этом же ключе https://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80

Пришлось лезть в интернеты, чтобы найти какое-либо стоящее объяснение, мало ли, а вдруг есть точное определение ставящее все на свои места.
Я не нашел, но несколько зарубежных статей направило мои мысли в нужное русло.


Я не вижу ни одной разумной области применения, где эти устройства были бы близки друг к другу.

Общим является только то, что оба имеют общие компоненты типа процессора, памяти и прочего.
Но если основываться на этом, то супер ЭВМ это тот-же микроконтроллер, так можно и дедку с бабкой сравнить.

Более того, цена, размеры, наборы интерфейсов и прочее обычно достаточно сильно отличаются.

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

Итак, по областям применения, которые мне пришли в голову:
- задачи требующие вычислений, в том числе и мультимедия уровня 'вполне приемлемо для просмотра фильмов' или прослушивание качественной музыки - выполняются на микрокомпьютерах, так как микроконтроллеры не имеют достаточных ресурсов для этого.
- задачи среднестатистического пользователя - выполняются также на микрокомпьютерах, а не на микроконтроллерах, по аналогичным причинам. Вы также не сможете на микроконтроллере просматривать современные веб страницы.
- задачи коммутации узлов сетей, типа маршрутизаторы, Wi-Fi точки доступа и прочее - тоже выполняются в основном на микрокомпьютерах (или на специализированных микроконтроллерах), на микроконтроллерах широкого функционала такие задачи не выполняются все по той-же причине - недостаточно ресурсов.
- опрос датчиков, работающих по специализированным шинам и протоколам, опрос кнопок, управление примитивными устройствами типа светодиода, лампы, бипера, двигателя в игрушке, передача и прием небольших радио сообщений с помощью различных модулей - здесь хорошо справится микроконтроллер, однако его зачастую можно заменить микрокомпьютером, но микрокомпьютер обычно стоит на порядки дороже.

Конечно здесь нет точных границ, например USB порт и I2C шина может быть и на микроконтроллере и на микрокомпьютере.
Но на микроконтроллере ресурсов сильно меньше, например на многих микроконтроллерах оперативная память размером всего лишь несколько килобайт а то и меньше. Микрокомпьютеры зачастую оснащены сотнями мегабайт или даже гигабайтами оперативной памяти, это же касается и о дисковом/flash пространстве и частотах и количества ядер процессора.

Т.е. категорически не верно считать, что микроконтроллер и микрокомпьютер однозначные определения.
Они предназначены совершенно для разных целей и имеют сильные различия в цене.

Срез по текущим делам проекта

У меня появился некоторый рабочий настрой и стимул, для продолжения работ по моему проекту.
Хочу здесь зафиксировать некоторый результат проделанной работы.

1) Как я уже писал, было создано ядро на ассемблере(для некоторой разновидности Atmel ATMega микроконтроллеров) с дополнительными утилитами, что по сути является уже не ядром, а операционкой(пока без поддержки файловых систем)
2) На базе этой операционки был создан фундамент и несколько прошивок для моих шлюзов и устройств.
3) Наконец, я добрался до вопроса обновления конечных устройств. Был разработан бутлоадер(пока в стадии тестирования и багфиксинга) с возможностью расшифровки данных - дабы защитить прошивку от копирования.
4) Была создана и реализована функциональная модель, позволяющая прошивать изначальной прошивкой новые устройства. Которая дала уникальный идентификатор каждому устройству и индивидуальный ключ для расшифровки данных новой прошивки. Т.е. по сути реализован функционал позволяющий автоматизировать процесс прошивки новых устройств.
5) Обновлены PCB большинства устройств - добавлен унифицированный порт для удобной и быстрой прошивки устройств, заменен линейный стабилизатор напряжения на импульсный стабилизатор(что дало возможность питать устройства даже от 5 и 36 вольт), устранены многие мелкие недочеты. Появились порты расширения и платы расширения.
6) Постоянно выполняется мелкая доработка основных компонентов, например, появилась возможность конфигурировать не только устройства, но и шлюзы.
7) Есть интерес у определенного заказчика на реализацию библиотек оборудования для гидропоники, в теории следующая неделя будет посвящена этим задачам.
8) Есть возможность выполнить легкую автоматизацию многоквартирного дома, как минимум поставить датчики на двери служебных помещений, снимать температуру стояков отопления, сигнализировать о протечках и прочее. На данный момент все упирается в конечные устройства.
9) Возможно летом проект будет задействован в теплицах, есть интерес у знакомых.

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

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

P.S. minicom не идеален, получив мусор на входе он может полностью перестать выводить корректный поток данных, кто бы знал...

core5277

Еще раз, что такое #core5277:

Это моя разработка на ассемблере #AVRA для микроконтроллеров компании #Atmel.
В процессе разработки я использую микроконтроллер ATmega328, он часто используется в #Arduino.
Соответственно поддерживаются микроконтроллеры ATMega48/88/168 так как отличаются от ATmega328 только объемами памяти. Кроме этого, на данный момент, я поддерживаю (хоть и не всегда актуализирую их файлы) ATMega16,ATmeag8,ATtiny45/85. Также планирую ввести поддержку линейки микроконтроллеров AT90CAN32

А разрабатываю я ядро, по сути операционную систему, для данных МК.
Вот часть реализованного функционала:
- параллельное выполнение нескольких задач (вытесняющий режим),
- простой режим переключения задач (задача вызывает SUSPEND для передачи управления следующей),
- драйвера (1wire, i2c, uart, ds18b20, am2301, beeper и прочее),
- логирование в порт,
- динамическое выделение памяти,
- контрольные суммы, некоторая математика, преобразование данных,
- программные таймеры,
- смена обработчиков прерываний налету,
- унифицированная логика работы с портами ввода/вывода

Для применения проекта я рекомендую использовать Linux+Geany+AVRA+avrdude, хотя теперь можно использовать и Windows+Atmel Studio7.

Этот проект, как и проект 5277, по большему счету, является моим хобби.
Тем не менее я вижу в нем ценность для других разработчиков.

Сейчас практически все современные разработчики ПО под микроконтроллеры пишут на #Си. Существует также ряд операционных систем для микроконтроллеров, также написанных на Си. Но я не нашел ни одной ОС на ассемблере.
При этом, разработка проекта на ассемблере дает неоспоримое преимущество в вопросах требований к ресурсам МК.
Да, это не особо актуально, в виду цен на STM чипы. Тем не менее, для поклонников AVR это будет интересно.

При написании ядра я уделяю особое внимание некоторой унификации.
Например работа с портами(независимо от типа МК) выглядит следующим образом:
LDI ACCUM,PD4
  MCALL CORE5277_PORT_MODE_OUT
  MCALL CORE5277_PORT_SET_LO


Введены программные таймеры, можно налету менять таблицу прерываний.
Вызов процедур(драйверов) тоже унифицирован, вот например коммуникация с устройством через шину i2c:
LDD TEMP,Z+_DRV_MLX90614_I2C_DRV
  LDI YH,high(_DRV_MLX90614_DATAPCKET)|0x80
  LDI YL,low(_DRV_MLX90614_DATAPCKET)
  MOV XH,ZH
  MOV XL,ZL
  LDI TEMP_H,_DRV_MLX90614_SEND_LEN
  LDI TEMP_L,_DRV_MLX90614_RECV_LEN
  LDI ACCUM,_DRV_MLX90614_I2C_ADDR
  MCALL CORE5277_EXEC


Или вызов процедуры проигрывания мелодии:
LDI TEMP,PID_BEEPER_DRV
  LDI YH,high(TSK_BEEPER_DATA)|0x80
  LDI YL,low(TSK_BEEPER_DATA)
  MCALL CORE5277_EXEC


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


И да, я выложил новую версию:

19.09.2020 v0.2.6
1. Скорректирован драйвер аппаратного UART
2. Идентификация программных таймеров начинается с 0x00
3. Добавлен пример работы с UART

http://5277.ru/distr/core5277/core5277.tar.gz

core5277, новая версия

Новая версия 0.2.5

1. Скорректирован драйвер DS1990A
2. Добавлена дополнительная проверка на присутствие датчика в драйвере 1WIRE
3. Восстанавливаем регистр Y в процедуре io/log_bytes.inc
4. Добавлены процедуры чтения и записи байта/блока в EEPROM
5. Добавлен проект для Atmel Studio 7 ./inc/examples/aqua_module/
6. Переименована процедура rom_to_ram_copy8.inc в rom_read_bytes.inc
7. Дополнены файлы микроконтроллеров ./inc/devices/
8. В процессе драйвер mlx90614

Главное - теперь проект можно открыть в Atmel Studio и он даже соберется.
Но все-же, я считаю, тру подход - linux+geany+avra+avrdude

Может быть на выходных запилю небольшую инструкцию для новичков.

http://5277.ru/distr/core5277/core5277.tar.gz