104

STM32 от Булкина. Atmega и Arduino vs STM32 и HAL

Долго думал над содержанием, но всё-таки решил написать статью-сравнение Atmega vs STM32 и немного пройтись по Arduino vs HAL.


Предыдущие статьи:


Настройка Sublime Text 3, SW4 и STM32CubeMX для разработки STM32 под Windows 10

Настройка Sublime Text 3, SW4 и STM32CubeMX для разработки STM32 под Linux

STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим


Вступление


Давайте немного определимся с понятиями и что же мы будем сравнивать.


Для начала зададимся вопросом, а корректно ли сравнивать 8-битную архитектуру МК Atmega/ATtiny и 32-битную ARM STM32?


Собственно, в этой статье я обсуждаю преимущества, которая даёт 32-битная архитектура в целом, а также преимущества МК STM32 относительно МК Atmega/ATtiny в частности. Вопрос из той же оперы, как стоит ли переходить с процессоров i486 на i7.


Я сам занимаюсь автоматикой. Так что и вижу я картину с точки зрения автоматики, в основном промышленной.


Немного теории о 8 битах


Часто сталкивался с заблуждением, что программа на 8-ми битных МК оперирует только 8-ми битными данными, потому смысла в переходе на 32-битные МК нет. На самом деле, например, простые целочисленные данные и указатели в 8-ми битных МК являются 16-ти битными. Поэтому, утрируя, при работе с такими данными, МК тратит дополнительные такты там, где 32-битное ядро тратит всего один. Плюс для доступа к таким данным 8-ми битный МК производит дополнительные операции чтения/записи и операции со стеком. На деле это дополнительно приводит и к увеличению объема прошивки, и к увеличению потребления памяти.


32-битные же МК могут легко оперировать 8-, 16- и 32-битными данными за такт. Плюс наличие готовых команд для доступа к ним и преобразования, т.н. набор команд Thumb.


А что с производительностью?


Тут можно обратиться к сухим синтетическим тестам, например CoreMark. Он хорош ещё и тем, что даёт показатель CoreMark/MHz. Просто навскидку из таблицы:


- ATmega2560 (на частоте 8МГц): 0.53 CoreMark/MHz

- ATmega644 (на частоте 20МГц): 0.54 CoreMark/MHz

- STM32F103RB (на частоте 72МГц): 1.50 CoreMark/MHz

- STM32F051C8 (на частоте 48МГц): 2.20 CoreMark/MHz


Ещё раз подчеркиваю, это показатель производительности на МГц частоты. Общая производительность вообще разгромная:


- ATmega2560 (на частоте 8МГц): 4.25 CoreMark

- ATmega644 (на частоте 20МГц): 10.21 CoreMark

- STM32F103RB (на частоте 72МГц): 108.26 CoreMark

- STM32F051C8 (на частоте 48МГц): 105.61 CoreMark


Я привёл примеры наиболее используемых МК из готовой таблицы.


Если ещё коснуться ARM, то они имеют набор команд Thumb, которые позволяют делать, например, множественные пересылки данных одной командой.


Давайте сюда ещё прибавим модуль FPU, который есть на всех STM32 начиная с серий F3xx. Значительно ускоряет вычисления с плавающей точкой. Конечно, можно изгаляться с псевдо-плавающей точкой, типа умножать такие числа на 1000 и считать их целыми. Но на деле это далеко не всегда возможно и удобно.


И ещё потом добавим DMA, который на порядок ускоряет работу с периферией и не только.


Выходит очень вкусно, я считаю.

А что с потреблением?


Тут всё по канонам. В сравнении с 32-бит, 8-битные МК производят в 4 раза больше циклов обращения к памяти и большее количество команд для копирования того же объема данных. Также, например, ARM позволяют выполнять по 2 команды Thumb за такт. У 32-бит меньше работы, меньше потребление.


Если говорить про переход в спящий режим, то у ARM есть фишка - проснулись по прерыванию, отработали его и сразу заснули. С учётом того, что отработает он быстрее, чем AVR 8-бит, потребление будет значительно меньше.


Также это всё значит, что и работаем на пониженном напряжении. Это 3.3В у STM32 против 5В у Atmega. Конечно, у Atmega можно снизить напряжение, но придётся снижать и частоту в разы. Если брать те же 3.3В, то придётся снизить частоту до 10МГц.


Это кстати, ещё преимущество для STM32. Далеко не вся периферия работает на 5В, поэтому приходится ставить дополнительный регулятор напряжения для неё при использовании ATmega/ATtiny.


Хотя, чего греха таить, я сам предпочитаю использовать импульсный регулятор на входе на 4.5-5В и потом опускаю линейником до 3.3В. Это особенно важно там, где используются ADC/DAC.

Ну и не забудем про такую серию у STM32, как Lxxx. Это МК с ультра-низким потреблением. Хотя они дороговаты. Но у них, зато, есть ещё и EEPROM на борту, как у Atmega/ATtiny.

А что с ценой?


Тут вообще момент прекрасный. Если брать прям вот аналогичный в плане ног и периферии STM32, выигрыш значительный. Плюс можно сэкономить на RTC и USB.


Если брать современную серию STM32 на Cortex M4 и Cortex M7, это F3xx и выше, там цена выше, конечно, но и плюшек море.


Замучил уже, сравнивай в таблице!

Я решил разбить сравнение на 4 части:


Микро: ATtiny861A-SU vs STM32F030F4P6

Мини: ATmega328P-AU vs STM32F103C8T6

Средне: ATmega644PA-AU vs STM32F303CBT6

Макси: ATmega2560-16AU vs STM32F405VGT6


Линейка чипов огромная о обоих производителей. Я выбирал такие чипы, которые схожи по ногам, более менее по памяти и периферии. В каждом пункте ниже дам немного описаний, почему и как.
Я намеренно не сравниваю отладочные платы, особенно с Ali. Их вообще надо использовать только для отладки софта и разработки готового устройства. Мы же серьёзные люди, да?
Я не буду брать цены с Ali, только Российские поставщики. Я не буду давать тут рекламу, могу в комментах ответить, где я покупаю. Всегда есть, где подороже, а где подешевле. Нам важны относительные цены. К тому же, через неделю они могут поменяться, все зависит от курса $.

И ещё. Указать корректное количество каналов PWM может быть не везде просто. Поэтому пишу везде приставку “до”. Я считаю количество тех, которые можно вывести всей кучей на разные ноги.


Я везде в STM32 отмечаю наличие CRC32. Это очень важная и нужная фишка. Позволяет считать контрольные суммы налету. Очень нужно, если пишете свой протокол обмена данными, например. Для того же Modbus можно приспособить.


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

Микро: ATtiny861A-SU vs STM32F030F4P6


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

STM32 от Булкина. Atmega и Arduino vs STM32 и HAL Stm32, Atmega, Attiny, Arduino, Длиннопост

Слева ATtiny, справа STM32. Разница в размерах впечатляет, особенно как узнаешь возможности этой финтифлюшки.

STM32 от Булкина. Atmega и Arduino vs STM32 и HAL Stm32, Atmega, Attiny, Arduino, Длиннопост

Мини: ATmega328P-AU vs STM32F103C8T6

STM32 от Булкина. Atmega и Arduino vs STM32 и HAL Stm32, Atmega, Attiny, Arduino, Длиннопост

Слева ATmega, справа STM32. При схожих размерах, ног у STM32 больше.

STM32 от Булкина. Atmega и Arduino vs STM32 и HAL Stm32, Atmega, Attiny, Arduino, Длиннопост

Средне: ATmega644PA-AU vs STM32F303CBT6


По опыту прошлой разработки знаю, что первым делом, когда 328-й уже не хватает, но 2560 ещё как-то слишком, ATmega644 лучший вариант. 44 ноги, периферия побогаче, памяти побольше и стоит по-божески. Думал включить сюда ATmega1284, но стоит у нас непотребных денег, решил всё-таки учесть цену.


Относительно STM32F303CB стоит заметить, что это очень сбалансированный чип по всем параметрам. Богатая периферия, много памяти, нормальная цена. Есть FPU, аппаратная поддержка RS485 (умеет аппаратно дёргать ногой направления передачи данных) и куча других плюшек.

STM32 от Булкина. Atmega и Arduino vs STM32 и HAL Stm32, Atmega, Attiny, Arduino, Длиннопост

Слева ATmega, справа STM32. При сравнимом количестве ног, размер у STM32 меньше.

STM32 от Булкина. Atmega и Arduino vs STM32 и HAL Stm32, Atmega, Attiny, Arduino, Длиннопост

Макси: ATmega2560-16AU vs STM32F405VGT6


Ну выбор МК от AVR в этой категории очевиден. STM32F405 выбрал также из-за его сбалансированности. А ещё вкусной цене при таких-то характеристиках.

STM32 от Булкина. Atmega и Arduino vs STM32 и HAL Stm32, Atmega, Attiny, Arduino, Длиннопост

Выводы


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


Где-то года полтора назад я сам наткнулся на подобное сравнение и был ошарашен. К тому моменту уже больше года у меня было несколько отладочных плат на STM32 и я всё никак не мог к ним подступиться. Но тогда твёрдо решил добить. Отложил дела и потратил месяц на изучение. Через вопли, бури возмущения, сопли и ярость. А теперь не понимаю, как я раньше жил на Atmega’х и Arduino.


Ладно. Хочу отметить некоторые вещи, которые здорово влияют на выбор с обеих сторон.


Плюсы Arduino и вообще.


Конечно же сама экосистема. Огромная база знаний, огромное коммьюнити.

Библиотеки есть подо всё, прям вообще.

Доступность шилдов подо всё и вся.

Чрезвычайно низкий порог вхождения, вот для любого.

На борту есть EEPROM, это очень удобно и круто.

Отдельно стоит отметить, что даже без Arduino программировать под Atmel довольно легко. Библиотеки, Atmel Studio и прочее.


Но есть и глобальные недостатки.


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

На Arduino нет нормальной отладки. Serial.print() - это нефига не отладка.

С Atmega никогда не получишь нормальной производительности. Нормального планировщика не воткнёшь. Они есть, конечно, даже FreeRTOS можно воткнуть, но памяти и так мало, а планировщики очень голодные. Потому не сделаешь нормальный интерфейс с хорошим откликом, не сделаешь контроллер с сотней прерываний и несколькими десятками устройств на периферии.

Куча народу (не все, конечно) возомнили себя крутыми спецами и штампуют дерьмо на отладочных платах и шилдах. Частенько промышленное дерьмо. Это, у меня лично, вызывает дикое негодование.

Сама по себе платформа, не смотря даже на то, что и STM32 тоже может работать с Arduino, подразумевает усреднение. Отсюда даже на нормальных чипах ты получаешь кастрата. И по-любому приходится лезть в дебри. Ну и в чём смысл тогда?

Если касаться Atmel Studio - это тяжелейший монстр, который даже на моем i5 с 24Gb и SSD тормозит так, как Quake на 486-м.


А что сказать хорошего про STM32?


Платформа изначально очень производительная. Как я писал выше, нет кучи недостатков 8-битных МК.

У тебя всегда изначально куча периферии. И ты выбираешь, на какие ноги её вешать и плату разводишь, как тебе удобно. А МК уже конфигурируешь исходя из этого.

Из неочевидного, например, на любую ногу можно сделать как PullUP, так и PullDown. А это очень облегчает проектировку плат, поверьте.

HAL, на самом деле, очень мощный инструмент. Хотя некоторые его хают за громоздкость, но на деле это в основном набор готовых #define, которые сильно облегчают написание и чтение кода. И переносимость!

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

STM32CubeMX вообще панацея. За пару минут переносится код на почти любой другой STM32. Что-то поменял? Нет проблем, галочки расставил, пересобрал проект и всё!

Тот же SPI на F405 можно запустить на 41Мбит! Я просто EEPROM на SPI пользую на 21Мбит. А ещё прибавьте к нему DMA и вообще красота! Летает!

А наличие USB и RTC почти во всех STM32?


Ладно, плюсами можно до бесконечности. Что из минусов есть:


Довольно трудный вход. Разобраться сходу не получится, нужно иметь базис.

Библиотек в свободном доступе не то чтобы нет. Есть и много. Но они либо под устаревший StdPerif, либо заточены под конкретного человека и его собственный набор библиотек. Либо и то, и другое сразу. Так, чтобы почти без доработки большая редкость. К сожалению, сложно абстрагировать библиотеку в STM32, они часто повязаны друг с другом и заточены подо что-то конкретное

Так что да, вам придётся писать свои библиотеки довольно часто. Даже под элементарные вещи вроде LCD1602

Вас будет бесить написание HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET) в сравнении с digitaWrite(LED1, HIGH). Вас будет бесить, что вы должны ВСЕГДА указывать размер буфера приёма. Ведь какая красота в Arduino Serial.available()! Нет, в STM32 мы тоже можете сделать подобное, но придётся взрыть тонны документации, чтоб понять некоторые неочевидные, но элементарные вещи.

Вас будет бесить переход к C99 после C++, но потом даже будете этому рады.

Вас будет бесить объем и количество документации по STM32. Но потом вы проникнетесь и увидите лаконичность и очень грамотную подачу относительно документации Atmel.

На борту нет EEPROM, кроме серии STM32Lxxxx, которая дорогая, как изумруд.


Стоит ещё отметить такую штуку, как Mbed. Довольно крутая вещь для IoT. Большое коммьюнити, мощная поддержка. Куча библиотек для всего. Хотя для моих задач не очень подходит. Посмотрите, если в чистом виде STM32 пугает. STM выпускает платы Nucleo под эту платформу. Так что есть готовые решения, есть =)


Ладно. Всего не отметишь. Обо всём не расскажешь. Каждый должен сам решить, стоит ли. Я вот прошел этот рубеж и безумно этому рад. Я не пошёл по простому пути Arduino -> RPi и в результате имею сейчас гораздо более мощные инструменты. Конечно, одноплатки нужны и они крутые. Туда и Linux можно накатить, и сервачок поднять с БД. Но это другая опера.


На сегодня всё, удачи!

Дубликаты не найдены

+4
Ой ну правда? А меня ещё недавно на пикабу пытались убедить что Ардуино это даже для профи маст хэв. Главное ведь это поменьше думать и делать копипаст из кучи готовых проектов. Нам наплевать на цену, на оптимизацию, лишь бы не разводить плату, не писать свои либы, вообще ничего не делать. Ну вот когда профи так думали!?
В общем рад, что на пикабу появились адекваты в этом вопросе.
Эх написать что ли про stm8...
раскрыть ветку 6
+1
Ой, рискуете, против истины восстали ведь!😂
А напишите! Мне вот точно интересно было бы.
раскрыть ветку 1
0

Против истины едва ли)

может под НГ когда зачёты закрою)

0

Справедливости ради, замечу, что ЧПУ станки изобрели такие же лентяи.

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

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

Стыд-позор!

раскрыть ветку 3
+3

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

Но если наша цель сделать поточное производство этих фигурок, то нам ПРИДЁТСЯ задуматься о куче вещей, которые не волнуют школоту и взрослых ардуинщиков. Нам придётся подумать о том как расходовать меньше древесины, нам придётся залезть в прошивку, а может и в схемоту нашего фрезера, что бы сделать его более хорошим чем у конкурента и т.д. и т.п. Только так, разбираясь в мелочах и оптимально используя ресурсы можно рассчитывать на успех в профессиональной среде. По тому что это среда, где делают деньги.

Когда мне показывают успешный коммерческий прожект на ардуино, я уверенно говорю: "дайте мне денег, время и я гарантированно сделаю лучше". Вот глядя на тот же айфон на пример я с уверенностью так сказать не могу. В этом и соль.

раскрыть ветку 2
+3

@ComradeBulkin делает хорошие посты, нет сомнения, но на мой взгляд, он взялся за это дело не с той стороны. Ардуинщиков всё равно не перетащишь на STM, по моему опыту, для них главный критерий - дешевизна. А вот новым программистам, ещё не знакомым с микроконтроллерами, полезнее, на мой взгляд будет объяснение тонкостей архитектуры - что такое NVIC и с чем его ядять, как организовано адресное пространство МК и что такое бит-алиасы, как работает DMA и чем USART отличается от UART.


Это, конечно, чисто моё мнение, ваше может с ним не совпадать.

раскрыть ветку 5
+2

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

раскрыть ветку 1
0

Ну, посмотрим :)

Иллюстрация к комментарию
0
Ардуинщиков всё равно не перетащишь на STM, по моему опыту, для них главный критерий - дешевизна.

Они одинаково стоят. А если покупать дебильные шилды (имхо самое неудачное в ардуине), то ардуино дороже окажется.

Проблема в пороге вхождения и малом комьюнити.

Ведь активнее те, кто занимается этим из-за хобби, а не по работе.

раскрыть ветку 2
0

ну промини например стоит 100рэ, чуть ли не дешевле самого мк, который там же и стоит) для домашних поделок идеальна, а травить плату с мелкими дорожками лениво, бумагу искать и принтер... 

раскрыть ветку 1
+2
Библиотеки есть подо всё, прям вообще.
А вот под мой TDA7448 нету. Я прям конкретно упоролся и поискал, нетути, с нуля надо писать. Там вроде совсем просто, но для человека который с нуля учит, сложновато.



Я тоже года полтора столкнулся с этой темой и тогда-же начал делать свои первые шаги в направлении МК. Но достаточно медленно, маловато времени. И в целом, я всегда очень медленно учусь.

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

раскрыть ветку 18
0

Ну для подобной экосистемы у них есть Mbed. А так да, писать самому. Глаза боятся, а руки делают, как моя мама всегда говорила.

раскрыть ветку 2
0

Ах да, напоминаю :-)
#comment_101350133

раскрыть ветку 1
0
Ну так купи плату с mbed, будет очень похоже.
раскрыть ветку 5
0

Но библиотеки под TDA7448 у них один фиг нету :-)

раскрыть ветку 4
0

разберись как данные в I2C слать/принимать и тебе не понадобятся никакие библиотеки, там вообще всё просто

раскрыть ветку 8
0
и тебе не понадобятся никакие библиотеки

Ну как бы библиотеки это и делают, просто служат уровнем абстракции.

раскрыть ветку 4
0
Нет, делать либу-обвязку то правильный подход. Просто многие переоценивают сложность написания своей микролибы.
раскрыть ветку 2
+1

А ко мне едет новый полетник на F3 процессоре -_-. F4 и F7 будут избыточны, их гонщики на свои гоночные коптеры пихают, согласно последним пискам моды. Хотя, в F7 пытаются уже не только полетную прошивку запихать, но и обработку видео хотят повесить (накладывать данные с датчиков на видеопоток с камеры), и тем самым выкинуть глючный osd чип, который мрет от косого взгляда. Вывезет он такое?

раскрыть ветку 4
+1
Как-бы народ и на F4ом делал векторный осд (чип от maxim символьный).
Мощи f7 получается с избытком, так что можно всё собрать в одно. Минус только один - куча рт кода на одном чипе.
раскрыть ветку 1
0
И да, обработки видео там скорее всего нет. Только хитрое наложение аналогового сигнала осд на сигнал от камеры.
0

Не понял, вопрос про F3 или про F7?

раскрыть ветку 1
0

F7

+1
STM32CubeMX вообще панацея.

Ну для начала - может быть и да. Но не зря на околоэлектронных форумах рунета его обычно называют "калокубом" :)

раскрыть ветку 7
+1

Ну и зря. За последний год он сильно вырос и изменился. Баги почистили, возможностей нарастили. Реально мощный и полезный продукт получился.

А на подобных форумах в основном обитают те, кто изначально программил напрямую регистрами и/или в StdPerif. У них куча собственных библиотек, прикрутить к HAL Их затруднительно. К тому есть некие предрассудки насчет убогости HAL. Но это также давно уже не так.

раскрыть ветку 6
+2

Ну я давно сижу под StdPeriph, хотя могу и регистрами. Соответственно сейчас появляются небольшие проблемы с переходом от F4 к F7 и H7... но на куб переходить ни в коем случае не буду - иначе так вот возникнет необходимость использовать что-то из NXP/Atmel/что-то в этом духе - и будешь недоумевать как это сделать с одним даташитом и небольшой кучкой примеров.
Короче с кубом очень легко опуститься до уровня ардуинщиков.

раскрыть ветку 5
0

а как у стм с точностью таймеров?

сейчас делаю проект, нужно измерять малые задержки, в данный момент от 12мс (до 255 часов).  но 12 мс многовато, нужно меньше, а уменьшить эту цифру хотя бы до 10мкс, а в идеале до 1мкс.


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

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

раскрыть ветку 11
0

Сможет, в принципе, почему нет? У нас вот STM-ка на 120 МГц работает. Вот табличка.

Иллюстрация к комментарию
раскрыть ветку 8
0

я сейчас делаю говноустройство измерения скорости лыжника(gps в горах сильно врет).

Имеем прибор с  лазером и фотодиодом.  Пересекая лазер мы запускаем таймер.

ставим 2 таких прибора на расстоянии 10 метров друг от друга.

пересекаем первый - запускаем таймер. пересекаем второй - останавливаем.  обмен данными по радио с фиксированным(почти) временем доставки.


10 метров из за малой частоты таймера(1 тик - 100мкс). радиоканал вносит довольно большую погрешность и геморой.

уменьшив время тика до 1мкс можно расстояние уменьшить до 10 см, а значит можно обойтись без радиоканала. шикардос.  интересно какая реальная погрешность будет?

раскрыть ветку 7
0

1мкс это уж совсем круто как-то. Вот не пробовал с таким минимумом. Но теоретически, да, возможно. Но надо будет подбирать резонатор и настроить системную шину так, чтоб делитель таймера дал в итоге импульс 100нс хотя бы. Если речь таки про 12мс, то любой таймер можно настроить на 1мкс. Я таким таймером пользуюсь, например, для OneWire. Если смотреть осциллографом, то, например, задержка 400мкс на экране порядка 410мкс. Но это скорее погрешность курсора, который ручками выставляешь для измерений.

раскрыть ветку 1
0

да, крутовато и слегка избыточно) в 10 раз)))

0
Немного поздновато с комментарием, но все же. Почему все постоянно сравнивают STM32 и Atmega. Почему все упускают из виду Xmega. Atmega в сравнении с ней, нервно курит в сторонке. Там и DMA, и куча других приколюх. В плане переферии не дотягивает до ARM, но и сильное отличие от Atmega. В России Xmega не прижилась, но "за бугром" ее активно используют.
раскрыть ветку 1
+1

Стоимость чипов несопастовима.

0
А про пики? Будет статейка?
раскрыть ветку 1
0

Боюсь, это не ко мне =) Опыт есть, конечно, но я не тяну на гуру никак в этом вопросе.

0

А есть тут кто машинки по больше кодит? Siemens? B and R? AlenBradley? Асушники в общем?

0

В чем лучше программировать Stm32?

раскрыть ветку 2
0

Я сейчас использую связку Sublime Text 3 + TrueStudio https://atollic.com/truestudio/, я писал в целом про настройку сред программирования.

раскрыть ветку 1
0

благодарю

0
Как вы платы делаете? расскажите подавану
раскрыть ветку 10
+1
Вы будто спросили, как я детей делаю, ну вот так. И так 😀 Не знаю даже, с чего начать. В KiCAD я делаю платы, производство на заводе. Прототипы сам запекаю в печке, которую сам сделал для этого. Ну и так далее. Что конкретно интересует?
раскрыть ветку 9
0

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

а если у тебя говнопринтер с говнобумагой, то конечно проще готовую ардуинку купить чем мудохаться с лутом)

раскрыть ветку 4
0
Да, интересно как прототипы делаете. На каком оборудовании. Что применяете для изготовления прототипов плат. Мне заводское изготовление не интересно. Я радиолюбитель)
раскрыть ветку 2
-1
Приятно видеть, что мои усилия по KiCad не пропали даром.
0

Какую среду пользуешь?

раскрыть ветку 1
+1
Sublime Text 3 для кодинга, Keil или SW4 для отладки.
0
И ты выбираешь, на какие ноги её вешать и плату разводишь, как тебе удобно.

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

раскрыть ветку 3
0
Ну на некоторых чипах переферию можно подключить на любой порт. Но обычно это всякая экзотика.
0

Ну да, в таком контексте не совсем корректно звучит, ваша правда. Я имел ввиду, что периферии много и можно переназначать на разные ноги почти всегда (не на любые, к сожалению). Или просто, если нужен USART, то есть вариант выбрать из нескольких доступных (или даже больше). А GPIO можно вообще на любую ногу, хоть PullUP, хоть PullDown, хоть OpenDrain. Кра-со-та!

раскрыть ветку 1
+1
Когда небыло cubemx'а выбор портов был жудкой головной болью.
0

Слежу, читаю. Много думаю....

Вопрос: а как насчёт перехода с AVR на STM на уровне программ, т.е. перекомпиляция?

раскрыть ветку 2
+1

Что-то близкое можно получить с переходом на STM32Duino. Если использовать совместимые платы, например, с Uno, то работа минимальная.

раскрыть ветку 1
0

СПС.

0
А можешь рассказать про прошивку stm под arduino?
+1

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

раскрыть ветку 29
+2

Не смотря на огромную базу кода, Ардуино всё-таки это сегмент DIY, а STM - профессиональный.

раскрыть ветку 3
0

Ну так и я о том же. Любителям, школьникам и в детский сад - ардуину, студентам STM, а профессионалам - еще что-нибудь.

раскрыть ветку 2
+1

Да ну ладно уж. Чтобы нормально разбираться, что с AVR, что с STM надо читать даташиты, и там и там они неплохо написаны. В плюс к STM идет отличная отладка практически на любом чипе, то есть даже если чего не понял в даташите - всегда можно вручную галки потыкать в режиме отладки и посмотреть, что оно дает. На AVR мало какие чипы поддерживают отладку по JTAG, именно по этой причине в свое время начал изучение с 32ой меги, там все это есть и процесс вкуривания происходит быстро и безболезненно.


Так то, если смотреть вообще с нуля, то AVR все-таки проще и предпочтительнее, особенно, если начинать как полагается с ассемблера (варнинг, будешь хорошо знать исподнее микроконтроллера, но переход на Си будет ломкой просто). Только стоит все-таки брать камень с поддержкой отладки по JTAG-у. Ну а после основ хорошего тона в программировании для встраиваемых систем уже можно переползать на Си и на STM, ибо по железу камни реально улет.

раскрыть ветку 20
0
А знаете, что я вам скажу? Вот взялись и написали бы статейку типа "Программирование STM для чайников". Хотя нет, это громоздко, еще проще, "Мигаем светодиодом на STM и смотрим отладку по JTAG". Как-то так).

Я заглядывал, ужаснулся и закрыл. Поясню: я нисколько не профи, это так, мое хобби. В далеких 80-х годах нигде не преподавали информатику. Зато сяли бронь со студентов и призывали в армию после 1 курса ВУЗов. Так и со мной случилось. Вернувшись через 2 года, я с удивлением узнал, что программа обучения изменилась и мне надо досдать информатику, чтобы учиться дальше. Это было совершенно неизведанное поле. Друг, который не служил по здоровью, уже этим увлекся и дал мне книжку по Паскалю. Я взял задание по лабам, книжку, за 1,5 м-ца смог сделать лабы, которые заработали с первого раза. По этой же книжке я сдал экзамены на 5. И с тех пор больше не  пользовался этими знаниями. А пару лет назад, я просто открыл сайт Ардуино ру и смог делать простые вещи. Сейчас лучше получается, пользуюсь своими библиотеками, реально работают некотоые вещи (я тут про теплицу писал - она работает отлично, совсем не вызывает нареканий). Понадобилось к ней ВайФай модуль подключить, а он на STM. Сунулся - темный лес. Нашел  статью, как программировать их на ардуино, подключил, но осадочек остался. Хотелось бы пользоваться, но отсутствие базовых знаний не позволяет. А когда тебе под 50 - тяжело браться. А с Ардуиной можно. А были бы статьи не для профи по STM - я бы взялся. А так, сколь не хвали STM, да зуб неймет.)

раскрыть ветку 19
+1

Не знаю, как вы сделали вывод насчёт популярности. В DIY, очевидно, меньше. Но в вещах посерьёзнее однозначно популярен. Посмотрите на продажи хотя бы.

раскрыть ветку 3
+2

Популярность - это не продажи. Популярность - это количество информации. Любители с радостью делятся своими кривыми наработками, а профессионалы молчат, зачем им конкуренты? Да хоть и здесь посмотрите. Продажи - потому что используют, очевидно, для производства.

раскрыть ветку 2
0
Все никак не получается собраться с силами и засесть за изучение STM32. А начать надо. Подпишусь. Спасибо!
0
Ах да, сейчас появился монстр H7. У меня микропроцессор в роутере был слабее чем этот микроконтроллер.
раскрыть ветку 2
0

На него уже и линь можно накатить даже =)

раскрыть ветку 1
0
Может и можно, mmu там вроде завезли. Но зачем? Там лучше nuttx если нужно позиксовое.
0
Странно что M0 уделывает более навороченное ядро M3. F050 очень прикольная замена всяким тини. У F3 самые крутые блоки usart, там реально куча фишек. Например можно поменять местами rx/tx. Можно включить инверсию сигнала, данных. Всякие SBUS'ы заводятся без внешнего обвеса.
Меня только огорчает ущербный DMAv1 (из f1). Могли бы взять и из 2-4, особенно учитывая что порядок был 1-2-4-3-0.
раскрыть ветку 2
0

Привык к тому, что f3 любой s-bus жрет, при настройке f1 долго пытался понять, почему приемник отказывается работать с процом по s-bus. Пришлось инвертор на куске светодиодной ленты паять.

раскрыть ветку 1
+1

Аххах, а что, а выход! =)

0
Крайне занимательно было узнать такие нюансы. Рекомендую к прочтению. Спасибо, Васяня!
раскрыть ветку 1
0

Благодарю =)

-1

Espruino рулит для входа и для даже кода. А вот когда начнут вылезать с ним НЬЮАНСЫ [, Петька,] , тогда уже к нормальным вещам. И стандарт C99 я бы ставил выше чем c++ для МК по удобству и возможностям, от его извращений тут один вред, плюс вещи неявные которые есть в 99 есть только в C++13 и выше.

раскрыть ветку 1
+1

Ну тут не поспоришь. C99, конечно, не имеет некоторых фишек C++, но для программирования МК просто идеален.

Похожие посты
31

STM32F429I Discovery + SDRAM + LTDC под Arduino IDE

Сижу на карантине и придумываю себе сложности. Дома валяется STM32F429I Discovery, вот и решил проверить возможности Arduino IDE для программирования STM32 и данной платки в частности.


Для начала нужно поставить STM32 Cores под Arduino IDE. Детально этот процесс расписан тут https://github.com/stm32duino/wiki/wiki/Getting-Started так что не буду повторяться, тут ничего сложного.


Мне немного не повезло, так как именно этой платки нет в этой сборке, но это не проблема. Можно добавить практически любую стандартную отладочную STM32 вручную, так как драйвера есть в комплекте под большое количество чипов. Вот тут лежит инструкция по добавлению новой платы https://github.com/stm32duino/wiki/wiki/Add-a-new-variant-(board) Но я напишу вкратце со своими конфигами:


1) добавить плату в файл boards.txt (у меня он находится тут ...\AppData\Local\Arduino15\packages\STM32\hardware\stm32\1.8.0\boards.txt) - тут нужные строки  - https://github.com/levkovigor/stm32f429i-disk1_sdram_ltdc/bl...

2) добавить настройки пинов для платы - в папку ...\AppData\Local\Arduino15\packages\STM32\hardware\stm32\1.8.0\variants добавить папку https://github.com/levkovigor/stm32f429i-disk1_sdram_ltdc/tr...


Теперь в меню выбора плат в Arduino IDE в разделе Discovery появится наша платка.


После добавления платы я проверил все стандартные возможности:

цифровые входы/выходы, аналог, шим, уарт, SPI, I2C, прерывания, freertos и т.д.

В большинстве случаев все отлично работает, но некоторые вещи с дополнительными костылями под stm32


Также отлично завелся гироскоп, который есть на плате через библиотеку Adafruit_L3GD20 (только старую, в которой есть SPI, а не I2C)


После этого всего я дошел до экрана и тут началось веселье. Контроллер экрана здесь стоит ILI9341, поэтому для начала я попробовал завести его через SPI и библиотеку Adafruit_ILI9341. С небольшими допилами это получилось - нужно было добавить вручную инициализацию пинов под SPI:


__GPIOC_CLK_ENABLE();

__GPIOD_CLK_ENABLE();

__GPIOF_CLK_ENABLE();

GPIO_InitTypeDef GPIO_InitStruct;

GPIO_InitStruct.Pin = GPIO_PIN_2;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_LOW;

HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_13;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_LOW;

HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;

GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;

GPIO_InitStruct.Alternate = GPIO_AF5_SPI5;

HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);


Но скорость отрисовки через SPI не порадовала, а с учетом того, что особенностью данной платы есть возможность работы экрана через SDRAM , то начал ковырять все это дело. С драйверами под это все в stm32 cores проблемы, поэтому пришлось делать на регистрах.


Сначала прикрутил SDRAM  https://github.com/levkovigor/stm32f429i-disk1_sdram_ltdc/bl...

командами SDRAM_Read8 и SDRAM_Write8 можно записывать/считывать значение в памяти по адресу.


После этого прикрутил LTDC - для работы экрана через память - https://github.com/levkovigor/stm32f429i-disk1_sdram_ltdc/bl...

команда PutPixel меняет цвет пикселя по координатам x, y


Осталось только перевести экран в соответствующий режим работы, для этого нужно задать набор команда по SPI конроллеру ILI9341 - для этого я использовал все ту же библиотеку Adafruit_ILI9341, в которую дописал функцию begin_ltdc() - доработанные файлы библиотеки также лежат в репозитории.


Ну и видео на котором можно оценить разницу в скорости работы двумя методами: заливка экрана черным > синим > красным с задержкой в одну секунду через SPI и LTDC.

Кстати тачскрин тоже работает, для этого нужна библиотека Adafruit_STMPE610, тут только пини для I2C надо правильные задать.


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

Показать полностью 1
112

Вторая жизнь старому стрелочному мультиметру

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

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

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

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

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

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Выбираем провод с более резким наклоном прямой. В моем случае получилось что при максимальном отклонении стрелки напряжение равно 96,4 мВ. Для оцифровки микроконтроллером мало, но ничего страшного, это напряжение можно усилить операционным усилителем. Подойдет любой ОУ, я взял LM2904, просто потому что у меня такой был. Смотрим документ на микросхему – два ОУ в одном корпусе, максимальное выходное напряжение Vcc-1.5v. Запитывать будем от 3.3 вольт, значит надо подобрать коэффициенты усиления так, чтобы при зашкаливающей стрелке ОУ выдавал максимально возможное напряжение.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

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

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

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

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

На борту у нее микроконтроллер STM32F103C8T6. Есть АЦП и USB. Подходит. Для первоначальной настройки предлагаю воспользоваться STM32CubeMX. Включаем тактирование, настраиваем кварцевые резонаторы.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Включаем и настраиваем АЦП, не забываем про прерывание по готовности.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

АЦП будет запускаться по событию таймера, настраиваем таймер.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Таймер тактируется частотой 48 МГц, с предделителем 24 и периодом 2000 получится, что он будет запускать АЦП каждую 1 мс. В принципе так часто нет смысла, но мы будем использовать усреднение значений, поэтому пусть будет. Включаем USB, выбираем Custom HID.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Генерируем проект и переходим к написанию кода. Я использовал System Workbench for STM32. Добавляем в «main.c» запуск таймера и АЦП, и несколько глобальных переменных.


/* USER CODE BEGIN PV */

//uint16_t adc_arr[ADC_MAX_CONVERSATIONS];

uint16_t adc_to_send;

uint32_t adc_sum;

uint8_t adc_counter;

uint8_t send_flag;

volatile uint16_t x;

/* USER CODE END PV */

/* USER CODE BEGIN 2 */

HAL_ADC_Start(&hadc1);

HAL_ADC_Start_IT(&hadc1);

HAL_TIM_Base_Start(&htim3);

/* USER CODE END 2 */


В прерывании прибавляем к переменной значение с АЦП и увеличиваем счетчик. Когда счетчик достигнет 200, усредняем значение и перекладываем в буфер для отправки по USB. Поднимем флаг, что пора отправлять.


/* USER CODE BEGIN 4 */

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){

adc_sum+=HAL_ADC_GetValue(hadc);

adc_counter++;

if(adc_counter==ADC_MAX_CONVERSATIONS){

HAL_GPIO_TogglePin(LD_1_GPIO_Port,LD_1_Pin);

adc_to_send=adc_sum/ADC_MAX_CONVERSATIONS;

adc_counter=0;

adc_sum=0;

send_flag=1;

}

}

/* USER CODE END 4 */


В основном цикле все время проверяем флаг, если поднят опускаем и отправляем буфер. Получится что мы будем отправлять значения каждые 200 мс.


/* USER CODE BEGIN WHILE */

while (1)

{

// HAL_GPIO_TogglePin(LD_1_GPIO_Port,LD_1_Pin);

if(send_flag){

send_flag=0;

..USB_Send_report(adc_to_send);

}

/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

}


Дескриптор USB устройства уже создался стм кубом, его трогать не будем, только проверим интервал опроса, должно быть не больше наших 200 мс.


/* 34 */

0x07, /* bLength: Endpoint Descriptor size */

USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: */

CUSTOM_HID_EPOUT_ADDR, /*bEndpointAddress: Endpoint Address (OUT)*/

0x03, /* bmAttributes: Interrupt endpoint */

CUSTOM_HID_EPOUT_SIZE, /* wMaxPacketSize: 2 Bytes max */

0x00,

0x20, /* bInterval: Polling Interval (20 ms) */

/* 41 */


Далее составим «HID Report» дескриптор в программке HID Descriptor Tool.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Тут мы говорим, что наше устройство сообщает температуру в комнате (Usage). Report Size=8 и Report Count=4 означают, что 32 бита посылается от устройства к компьютеру (Input) и столько же от компьютера к устройству (Output). Нам из этого всего понадобится только 2 байта, остальное на будущее. Сохраняем как заголовочный файл, и копируем в наш код (куб там оставил место в файле usbd_custom_hid_if.c). Так же надо проверить соответствие размеров репорт дескриптора 35 байт и размер буфера под отправку (тут должно быть 5 байт, потому что мы еще указали Report ID – это еще 1 байт в самом начале). Прошьем и проверим, что устройство правильно определилось в системе.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Раскомментируем функцию отправки в файле «usbd_custom_hid_if.c» и заполняем, указав первым байтом Report ID, дальше наше значение АЦП.


/* USER CODE BEGIN 7 */

/**

* @brief Send the report to the Host

* @Param report: The report to be sent

* @Param len: The report length

* @retval USBD_OK if all operations are OK else USBD_FAIL

*/

static uint8_t USBD_CUSTOM_HID_SendReport_FS(uint8_t *report, uint16_t len)

{

return USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, report, len);

}

uint8_t USB_Send_report(uint16_t data){

Rep_buffer[0]=0x01;//report id

Rep_buffer[1]=data>>8;

Rep_buffer[2]=data;

Rep_buffer[3]=0xFF;

Rep_buffer[4]=0xFF;

return USBD_CUSTOM_HID_SendReport_FS(Rep_buffer,5);

}

/* USER CODE END 7 */


Проверяем в какой-нибудь утилитке что пакеты действительно идут.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Осталось написать программку под Windows, которая бы все это обрабатывала. Берем любимую среду программирования и библиотеку для работы с HID устройствами. Я взял старенькую Delphi 7 и библиотеку компонентов JEDI VCL. Из нее нужны «TJvHidDeviceController» и «TJvHidDevice». Добавляем обработчик «OnEnumerate» у девайс контроллера, в него по очереди прилетают все HID устройства при вызове энумерации. Остается отфильтровать наше устройство по VID и PID, затем связать с компонентом «TJvHidDevice».


function TUSBMeter.HidControllerEnumerate(HidDev: TJvHidDevice; const Idx: Integer): Boolean;

begin

if (IntToHex(HidDev.Attributes.VendorID,4)=VID)and

(IntToHex(HidDev.Attributes.ProductID,4)=PID) then

begin

if (HidDev.Caps.OutputReportByteLength=OUT_REPORT_COUNT_AMPERAGE) then

HidController.CheckOutByIndex(HidAmperage,Idx);

usb_ready:=true;

end;

Result := True;

end;


Данные будут приходить в обработчик «OnDeviceData». В нем вычисляем из посылки значение АЦП и выводим куда-нибудь для проверки.


procedure TUSBMeter.HidControllerDeviceData(HidDev: TJvHidDevice; ReportID: Byte; const Data: Pointer; Size: Word);


var

buf:^byte;

begin

if (IntToHex(HidDev.Attributes.VendorID,4)<>VID)or((IntToHex(HidDev.Attributes.ProductID,4)<>PID)) then exit;

buf:=Data; // rep

adc_abs:=buf^;

adc_abs:= adc_abs shl 8;

inc(buf);

adc_abs:=adc_abs+(buf^);

inc(buf);

callback;

end;


Теперь надо сделать пересчет, добавим на форму RadioGroup и настроим как на переключателе мультиметра. Я не стал добавлять шкалу сопротивлений, не нужна.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Заведем так же масштабирующий массив для пересчета и массив с единицами измерений.


const

scale_arr: array[1..18] of real = (600,300,150,60,30,15,6,3,0.75,1500,300,60,15,3,0.6,0.12,0.000012,1);

scale_arr_symb: array[1..18] of string[2] = ('V','V','V','V','V','V','V','V','V','mA','mA','mA','mA','mA','mA','mA','uA','');


Для пересчета еще понадобятся два граничных значения acd_min и adc_max. Подключаем потенциометр к мультиметру, выставляем стрелку на 0 и смотрим, что присылается в программу. Если тоже 0 – хорошо, если нет – не беда, подкорректируем. Потом выставляем стрелку на максимум и так же смотрим. Важно чтобы когда стрелка «зашкаливала» значение продолжало увеличиваться, так будет запас. Если этого нет, надо подкрутить потенциометр ОУ. У меня получилось 0 и 2365. Пересчитываем и выводим уже на основное табло.


procedure TMainForm.HID_Callback;

var

s:string;

buf:string;

rec_s:string;

begin

s:=floattostr(((meter.ADC-adc_min)/(adc_max-adc_min))*scale_arr[RadioGroup1.ItemIndex+1]);

buf:=copy(s,1,5);

buf[pos(',',buf)]:='.';

Label2.Caption:=buf;

end;

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

Большая часть готова, теперь надо прикрутить запись в файл, страницу настроек с сохранением и красивый GUI. Формат файла я взял CSV, так как из него будет легко строить графики в Экселе.

Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост
Вторая жизнь старому стрелочному мультиметру Мультиметр, Новая жизнь старых вещей, Схемотехника, Микроконтроллеры, Arduino, Stm32, Delphi, Программирование, Видео, Длиннопост

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


Надеюсь, кому-нибудь будет полезно.

Показать полностью 21 1
53

Точность ICU Atmega16/Atmega328

Всем привет. Я все ещё продолжаю борьбу с декодированием PPM.
кому интересны мои потуги ссылка на предыдущий пост:
https://pikabu.ru/story/kak_ya_spektrum_i_hitec_pyitalsya_po...

С выдачей сигнала вполне успешно справляется Timer2. С дефолтными значениями каналов сервы не дрожат, все просто замечательно. А вот с захватом сигнала все ещё затык :(

Дрейф значений получается +-3 мкс. И это при том, что используется только захват, без прерывания по переполнению. Была идея, что это виноват мой код, который считает длину импульса и вносит этим погрешность, но нет... Была написана программа для анализа данных, все расчеты в ней, а скетч только прерывается по захвату и отправляет значение таймера на ком порт. Дрейф точно такой-же.

Точность ICU Atmega16/Atmega328 Arduino, Радиоуправление, Радиоуправляемые модели, Электроника, Atmega, Длиннопост

Скрин работы декодера. Все остальные таймеры отключены.

Нижние 2 строки - максимальные и минимальные значения по каждому из каналов.

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

Отсюда вывод - либо лыжи не едут, либо точность захвата сигнала у атмеги оставляет желать лучшего :(

Товарищи, кто сталкивался с подобным? Что ещё можно придумать? Как быть дальше?

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

Точность ICU Atmega16/Atmega328 Arduino, Радиоуправление, Радиоуправляемые модели, Электроника, Atmega, Длиннопост

Помогайте, товарищи, а то крыша едет уже...

Показать полностью 1
88

Для начинающих Stm32f103C8T6

Добрый... день? Сегодня я хотел бы поделиться моим опытом начинающего экспериментатора с stm32. В данном посте мне хотелось бы помочь тем, кто хочет перейти с ардуино или просто начать использовать stm32 для своих поделок. Я и сам не имею богатого опыта работы с данными контроллерами, но буду рад поделиться своим первым опытом, и сделанными на этом пути ошибками. Надеюсь, кому-то это будет интересно.


Для начала, нам понадобится stm32f103C8T6, и дебаггер ST-Link V2. И то и другое можно купить в китае или в местных магазинах электроники, цена обоих, примерно по 2$. А так же нам потребуется 4 джампера, для соединения этих устройств. Этого будет достаточно, что-бы помигать светодиодом или управлять какими-либо внешними устройствами, но начнем с малого.


Первое, что нам понадобится - установить драйвер для программатора. Его можно найти здесь (внизу): http://www.st.com/en/development-tools/stsw-link009.html


Кроме того нам понадобятся STM32CubeMX его качаем тут: http://www.st.com/en/development-tools/stm32cubemx.html


А так же среда разработки, я предпочитаю официальный софт с поддержкой, потому берем ставую не так давно бесплатной Atollic TrueSTUDIO вот тут: http://www.st.com/en/development-tools/truestudio.html


Затем, нам нужно подключить, используя 4 джампера, наш программатор к плате контроллера следующим образом:

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

После этого, если возможность записи прошивки в память на вашей плате не заблокирована - все готово к созданию нового проекта. Если же запись в память вашей платы заблокирована, вы можете решить это, подключив плату аналогичным образом, но используя улилиту STM32 ST-Link Utility и переключив джампер Boot0 в положение 3.3v. Что такое Boot0 можно глянуть тут: http://wiki.stm32duino.com/images/a/ae/Bluepillpinout.gif но вообще эта статья не об этом.


Итак, для начала создадим проект, используя STM32CubeMX, эта программа предназначена для удобной инициализации периферии и создания проекта, для IDE в которой мы будем далее работать, поверьте, куб действительно прекрасен. После нажатия на кнопку "New Project", попадаем на окно выбора чипа. В нашем случае это stm32f103c8tx. Выбираем его и нажимаем "Start Project".

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

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

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

Вообще в stm32, в отличие от ардуино, где визуально пины делятся только на аналоговые и цифровые, пины разделены на группы, PA, PB, PC, PD. Это обусловлено тем, что stm имеет 32 разрядные регистры (GPIOA, GPIOB, GPIOC, GPIOD) для управления выходами, потому каждый регистр может управлять 16 выходами микроконтроллера, у микросхем старших поколений stm этих выходов очень много, потому было принято решение сгруппировать выходы, в соответствии с именами регистров.


Так же !ВНИМАНИЕ нужно включить возможность дебага ВНИМАНИЕ! микроконтроллера иначе, прошивка у вас зальется только 1 раз а затем вам потребуется выводить ваш контроллер из состояния легкого ступора, потому как ST-Link не будет его видеть. Если это произошло, вам прийдется потанцевать с бубном используя STM32 ST-Link Utility и так же переключив джампер Boot0 в положение 3.3v.

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

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

Stm32 может тактироваться от любого из 2х встроенных резонаторов, медленного и быстрого LSI 40KHz(по умолчанию) и HSI 8MHz, встроенных в сам чип и таким образом, обходиться без внешнего резонатора. Либо же использовать внешние резонаторы с частотой 4-16MHz (HSE), если вам нужно ускорить ваш камень или LSE c частотами 0-1000 KHz если вам нужно жертвовать скоростью ради энергопотребления.


Настройку частоты камня и переферии делаем во вкладке ClockConfiguration следующим образом, для этого просто задаем значение 72 в поле HCLK(MHz) и нажимаем enter. Затем соглашаемся с тем, что б STM32CubeMX настроил все за нас и нажимаем снова ок, готово. Внимание! Если на предыдушем шаге вы не вклчили RCC -> HSE -> Crystal/Ceramic Resonator, то вы не сможете установить значение 72 MHz и ваш камень может работать на частоте максимум 36MHz используя внутренний кварц.

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

На этом конфиг закончен, теперь необходимо создать проект, для этого выбираем кнопку в виде шестерни сверху:

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

В открывшемся окне заполняем поля:

Project Name, Project Location и ВНИМАНИЕ! выбираем IDE для которой будет создан наш проект, в нашем случае это TrueSTUDIO, если этого не сделать, то будет создан проект для IAR (EWARM).

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

Так же, я рекомендю переключиться на следующую вкладку (Code Generation) и выбрать в разделе Generated files пункт Generate peripheral initialization as a pair of .c/.h files per peripheral. Это позволит очистить ваш main файл проекта от инициализации перефирии, путем выноса ее в отдельные файлы. Я рекомендую делать так всегда.

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

Затем нажимаем ок и создаем проект. Если вы все сделали верно, то куб сразу же предложит вам скачать необходимые для вашего контроллера библиотеки и затем отрыть проект в Atollic TrueSTUDIO:

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

Все что нам необходимо, это добавить следующий код внутрь цикла while в нашем main и нажать debug, перед этим убедитесь, что оба режима бут отключены (желтые переключатели установлены, как на первом фото):

HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);

HAL_Delay(100);

HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);

HAL_Delay(100);

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

Для начинающих Stm32f103C8T6 Stm32f103, Atollic, Arduino, Stm32, Гайд, Длиннопост

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

Показать полностью 10
46

Ардуино могла быть в 25 раз быстрее! Разница скорости Arduino vs. AVR vs. STM32.

Провел тест, для сравнения скорости выполнения программы на Arduino, AVR и STM32. Результаты мягко говоря удивили. Тестовая программа написанная в Atmel Studio выполнилась в 25 раз быстрее чем на Arduino, но одном и том-же процессоре.

Ардуино могла быть в 25 раз быстрее! Разница скорости Arduino vs. AVR vs. STM32. Arduino, Avr, Stm32, Stm32f103, Тест скорости, Сравнение, Видео, Длиннопост

Еще больше удивило, что AVR обогнал STM32. И дело тут не в архитектуре процессора, не в задержках вызванных ограниченной скоростью доступа к памяти программы (flash latency). Причина в медленных функциях STDPeriph. Многие действия, которые могли бы выполниться за один такт выполняются в лучшем случае за пять, так как находятся внутри функции. Если бы перед оглашением таких функций стояла директива "inline" размер кода и скорость выполнения были-бы значительно выше. После замены медленных функций на прямое обращение к регистрам скорость STM32 утроилась. В CubeMX дела обстоят еще хуже из-за усложненных обработчиков прерываний, callback функций и т.д.

Ардуино могла быть в 25 раз быстрее! Разница скорости Arduino vs. AVR vs. STM32. Arduino, Avr, Stm32, Stm32f103, Тест скорости, Сравнение, Видео, Длиннопост

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


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

Показать полностью 1
123

Темы будущих уроков по STM32

На волне вчерашнего поста https://pikabu.ru/story/18_podrobneyshikh_urokov_po_programm...


Есть идеи по написанию уроков по различным темам в разрезе STM32. Приглашаю @DmitryAR, @witiliar, @XanderEVG, @Arimf, @Alexey9, @slonofil, и @AlexGyver к обсуждению. Сам я занимаюсь разработкой и проектированием автоматики для отопительных систем на биотопливе, готов говорить в этом разрезе.


Собственно не вижу смысла говорить об основах языка, вроде типов данных. @AlexGyver это уже осветил. Но может стоит это преподнести в разрезе C99, а не C++?


Вот темы, которые я бы мог осветить, по разделам:


Основы программирования в разрезе C99 и STM32:

- #define: хитрости и приёмы

- SWITCH/CASE или IF/ELSE: когда и где применять

- Битовые операции: хитрости и приёмы


Фишки в разрезе STM32:

- FreeRTOS: планировщик, семафоры, стэки

- CubeMX и HAL: как сохранить переносимость кода, как искать нужные функции, где искать примеры и прочее

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

- RTC

- ADC и DAC

- Обработчик ошибок с задержками с использованием FreeRTOS (собственная библиотека)

- Простая Round Robin База данных (собственная библиотека)



Среда программирования и аппаратная отладка:

- Настройка собственной среды под Linux и Windows

- Настройка Sublime Text, System Workbench for STM32, KEIL

- Отдельно по KEIL: стилизация под Monokai, дебагинг, трэйсинг, настройка компилятора

- Логический анализатор (могу рассказать про Saleae Logic)


Модули:

- Принципы работы шин I2C, SPI. Их достоинства и недостатки. Различные режимы: Polling, Interrupt, DMA

- Watchdog: IWDG и WWDG - назначение, настройка

- Использование 7-сегментных дисплеев: подключение напрямую к МК и с помощью драйвера MAXIM MAX6950/MAX6951 (собственная библиотека)

- SPI EEPROM STM M95xxx (собственная библиотека)

- I2C расширители портов NXP PCA9671 и PCF8574  (собственная библиотека)


Проектирование схем и хитрости:

- Как правильно разводить резонаторы

- Дребезг кнопок: триггеры Шмитта и RS-триггер

- Защита портов (в разрезе дискретных и аналоговых для токовых петель)

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

- Реле: электромагнитные и твердотельные. Схемы подключения и различия использования

- В разрезе твердотельных реле особенно хочу остановиться на снабберных цепях

- Энкодеры

- Токовая петля

- Onewrire

- RS485 и Modbus (может имеет смысл рассмотреть их отдельно). По Modbus могу преподнести материал по адаптации FreeModbus Slave и собственную реализацию Modbus Master с использованием DMA и FreeRTOS

- Подключение датчика температуры PT100 напрямую (без звезды) с использованием ОУ в схеме стабилизации тока

- Фазовое регулирование напряжения: датчик нуля, табличные расчёты, таймеры


Проектирование готовых изделий:

- Проектирование плат в KiCAD: принципы работы, создание деталей, 3D-моделей и прочее

- Проектирование готового изделия в FreeCAD: сборочный чертёж, 3D-модель и т.д.


Отдельно могу поговорить об учёте и хранении радиодеталей, тем более, что использую самописную программу для этого.


Ну и на закуску, вот несколько готовых изделий:

Темы будущих уроков по STM32 Arduino, Программирование, Микроконтроллеры, Stm32, Длиннопост, Ремонт техники
Темы будущих уроков по STM32 Arduino, Программирование, Микроконтроллеры, Stm32, Длиннопост, Ремонт техники
Темы будущих уроков по STM32 Arduino, Программирование, Микроконтроллеры, Stm32, Длиннопост, Ремонт техники
Темы будущих уроков по STM32 Arduino, Программирование, Микроконтроллеры, Stm32, Длиннопост, Ремонт техники
Темы будущих уроков по STM32 Arduino, Программирование, Микроконтроллеры, Stm32, Длиннопост, Ремонт техники
Показать полностью 5
103

Цифровой VU meter на базе STM32, анонс

Почему анонс? Потому что хочу понять, стоит ли тратить на это время.
Разумеется всё в контексте поста "Недорогая STM32 плата + Arduino IDE":
http://pikabu.ru/story/nedorogaya_stm32_plata__arduino_ide_4...

178

Расширители портов или что делать когда ног не осталось но очень надо!

Здравствуйте уважаемые пикабушники и читатели сообщества Arduino & Pi.

Сегодня снова небольшой обзорчик товаров с али но с небольшой объединяющей темой.

Этой темой сегодня будет "Расширители портов"


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

Поехали.



Итак, в самом начале, бесспорный лидер по цене и полезности.

Да я помню что уже обозревал этот модуль. Но повторение - мать учения. Кому-то я думаю повторный обзор этого модуля поможет. :)


PCF8574/PCF8574A

Расширители портов или что делать когда ног не осталось но очень надо! Arduino, Модуль, Полезное, Обзор Али, Stm32, Длиннопост

Этот расширитель портов не работает с ШИМ но отлично добавляет 8 портов через I2C. Есть версия расширителя под китайские экраны 1602/2004 но в них можно использовать всего 7 портов из-за разводки (но при стоимости чуть выше 70 центов я думаю это не проблема)


Расширитель несет в себе 8 квази двунаправленных портов. Т.е. расширитель может как открывать/закрывать порт из кода так и отлавливать это событие. В отличии от очень популярных сдвиговых регистров которые могут работать или как приемник сигнала или управлять сигналом на выходах. Есть правда в нем один минус. Открываемые порты подтягиваются не к питание а на ноль. Что в свою очередь несет некоторые ограничения в использовании. Но в противовес этому можно поставить очень простую работу с модулем без какой либо библиотеки.


На расширителе имеется 9й вход (int) для получения сигнала об изменении состояния других входов расширителя. Подключается в любой свободный порт и отслеживается состояние через него.


Применение: Подключение символьных экранов типа 1602/2004, подключение кнопок и энкодеров по i2c, подключение кнопочных/пленочных клавиатур через i2c, управление светодиодами, сегментными индикаторами.


Стоимость расширителя на Aliexpress начинается от 43 рублей за версию на 7 портов

и от 75 рублей за версию на 8 портов.

7 портов - http://9505.ru/5782

8 портов - http://9505.ru/7384



Следующим в нашем списке идет копия расширителя портов от Adafruit.

PCA9685 PWM Module (Arduino PWM Module)

Расширители портов или что делать когда ног не осталось но очень надо! Arduino, Модуль, Полезное, Обзор Али, Stm32, Длиннопост

По мне это очень полезный модуль. Дополнительные 16 ШИМ выводов это мощно.

В общем модeль имеет 16 выходов ШИМ по 12 бит каждый. 4096 уровней ШИМ на канал.

Работает модуль через I2C интерфейс со всеми вытекающими. Частота ШИМ настраивается от 24 до 1526 Гц хотя на плате указано от 40 до 1000 Гц.

Питание микросхемы и портов вывода может быть разделено. Питание микросхемы допускается в передлах от 3 до 5 вольт. Т.е. согласование логических уровней для управления микросхемой не требуется. Максимальное напряжение которое может выдержать микросхема - 6 вольт.

На плате присутствует место под фильтрующий конденсатор. Иногда модули приходят без него т.ч. советую вам его распаять.


Этот модуль идеально подойдет для работы с PCF8574 в тандеме. Главное не забудьте поставить перемычки на А0-А5 для настройки I2C адреса.


Применение: Управление светодиодами/светодиодными матрицами, сервомоторами, устройствами с управляющим сигналом ШИМ.


Стоимость на AliExpress начинается от 110 рубликов.

http://9505.ru/2355


Для тех кому интерфейс SPI ближе могут приобрести аналог этой микросхемы.

TLC5940 в DIP корпусе.

Стоимость этой микросхемы на AliExpress начинается от 70 рублей за штуку.

http://9505.ru/8468



Пройдем к следующему типу портов. АЦП.

Очень часто в наших проектах нам не хватает еще одного-двух портов с АЦП. Но в данном случае нам поможет расширитель АЦП на 4 порта.

ADS1115 ADC Module (Arduino ADC Module)

Расширители портов или что делать когда ног не осталось но очень надо! Arduino, Модуль, Полезное, Обзор Али, Stm32, Длиннопост

Сам по себе модуль очень компактный и подключается опять же через интерфейс I2C. 12bit.

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


Всего в микросхеме имеется 4 входа (AIN0-AIN3), которые могут использоваться как два дифференциальных входа для измерения разности напряжения между входами, либо как 4 отдельных несимметричных входа, в этом случае напряжение измеряется между одним из входов и общим проводом. Встроенный усилитель дает возможность измерения малых напряжений, не ограничивая разрешение АЦП. Модуль имеет всего 4 варианта адреса I2C в зависимости от того к какому из входов будет подключен вход ADDR (доступны для подключения пины DVV, GND, SCL, SDA). По умолчанию адрес модуля 1001000 (0x48).


Еще одна приятная особенность этого модуля - наличие оповещения от компаратора по линии ALRT при окончании преобразования. Что позволяет не опрашивать постоянно устройство для получения данных а действовать по прерыванию от самого модуля.


Стоимость данного модуля на AliExpress начинается от 118 рублей.

http://9505.ru/4593


Если у вас есть желание подробней прочитать про данную микросхему - можете почитать по данной ссылке. http://radiolaba.ru/microcotrollers/ads1115-opisanie-i-podkl...



Далее на повестке у нас обратная трансформация сигнала. ЦАП.

Преобразователь АЦП/ЦАП на базе PCF8591 (Arduino DAC Module)

Расширители портов или что делать когда ног не осталось но очень надо! Arduino, Модуль, Полезное, Обзор Али, Stm32, Длиннопост

Начнем с того что этот модуль имеет один большой минус. Разрешение каждого входа/выхода у него всего 8 бит, что хуже чем у Arduino. Но этот модуль мы должны рассмотреть т.к. в нем много того что не умеет ардуина.


Модуль имеет 4 аналоговых входа (АЦП, он же ADC), 1 аналоговый выход (ЦАП, он же DAC), разрешение каждого входа/выхода 8 бит. Управляется по шине I2C. Рабочее напряжение 2.5 - 6В. Модуль может сравнивать напряжение из 2 и более источников и выдавать результат управляющему микроконтроллеру в 4 байта со значением по каждому входу.


Как вы могли заметить на модуле распаян потенциометр (10к), термистор и фоторезистор.

Они тут не просто так. Они для отладки и тестов преобразователя ЦАП. Три джампера на модуле присоединяют эти элементы ко входным портам модуля для экспериментов и отладки программы.


Модуль конечно очень интересный но на мой взгляд разрешение маловато.


Стоимость модуля на AliExpress начинается от 68 рублей (в комплекте идут провода для подключения)

http://9505.ru/4994



Кому нужно большее разрешение - прошу любить и жаловать

Преобразователь ЦАП на MCP4725

Расширители портов или что делать когда ног не осталось но очень надо! Arduino, Модуль, Полезное, Обзор Али, Stm32, Длиннопост

Очень маленький модуль со всего 1 каналом преобразования ЦАП 12бит. Клон модуля от Adafruit с одним отличием, отсутствует вход A0. Модуль подключается по шине I2C и имеет всего 2 адреса т.ч. на одну шину получится повесить только 2 таких модуля. Модуль имеет eeprom память для записи последнего преобразования и может работать как от 3.3 вольта так и от 5 вольт.


В чем же интерес данного модуля помимо большего разрешения. Во первых у него есть собственный EEPROM. В нем хранятся данные о последнем преобразовании. т.ч. вы в любой момент можете взять эти данные. Во вторых модуль работает через Fast Mode I2C т.е. 3.4Mbps.


Преобразованные данные снимаются с пина OUT.


Более детально ознакомиться с работой можете тут -

https://learn.adafruit.com/mcp4725-12-bit-dac-tutorial


Стоимость модуля на AliExpress начинается от 70 рублей. К комплекте с модулем только гребенка для макетной платы.

http://9505.ru/4374


Ну и в заключение хотелось бы показать маленький экранчик с низкой ценой и тач экраном :)

2.0" TFT Sensor lcd + stilus

Расширители портов или что делать когда ног не осталось но очень надо! Arduino, Модуль, Полезное, Обзор Али, Stm32, Длиннопост

5 модных резистивных кнопок, резистивный тач экран но работает только от 3.3 вольта. Для 5 вольт нужен преобразователь логических уровней.

Разрешение экрана: 240X320

Встроенный микроконтроллер с оперативной памятью: S6D1121

Монитор поддерживается Arduino библиотекой: UTFT


Этого я думаю более чем достаточно перед тем как узнать что стоит он всего 177 рублей да еще и стилус в подарок. Я заказал себе несколько  т.к. это подарок богов относительно дорогущего 1.8" tft со слотом для карточки.


Еще раз повторю.

Стоимость этого экрана на AliExpress составляет смешных 177 рублей. В подарок еще идет стилус.

http://9505.ru/6554



На этом сегодняшний обзор я закончу.

Надеюсь вы найдете для себя то что вы искали и что хоть кому-то этот пост будет полезен.

Удачных вам компиляций, минимум багов и быстрых доставок.


P.S. Простите меня за такие короткие ссылки. :( Пикабу что-то делает с короткими ссылками али поэтому приходится делать вот так :(


Не забывайте подписываться на наше сообщество "Arduino & Pi"

http://pikabu.ru/community/arduino

Показать полностью 6
156

О вычислительной технике, пару десятков лет назад

Репортажи программы "Время" по теме компьютеров и вычислительной техники в период с 1985 по 1990 год.


Там в начале показывают вычислительный центр, мощность которого всего 3 MIPS(миллиона инструкций на секунду), а у Arduino 16, а у недорогой отладочной платы на базе stm32 этот показатель в несколько раз больше.


Чёрт, даже ATtiny10 размером со спичечную головку выдаёт до 12 MIPS.

https://habrahabr.ru/post/251919/


Страшно представить что нас ждёт в последующие 20 лет в плане роста вычислительной мощи...

Похожие посты закончились. Возможно, вас заинтересуют другие посты по тегам: