Ну нифига себе ваша Ардуина скока памяти съедает. Я специально сейчас посмотрел на TruStudio - 2040 байт потратил для миганмия светодиодом. Это без оптимизации.
Ну нифига себе ваша Ардуина скока памяти съедает. Я специально сейчас посмотрел на TruStudio - 2040 байт потратил для миганмия светодиодом. Это без оптимизации.
Ну и как это влияет на применение. Сначала напиши реальную программу которая "не влезет", а потом начинай "старые песни".
PS. Мне кажется, если бы с самого начала Ардуина развивалась на STM32, сейчас проблем было бы намного меньше:
- не потребовалось бы согласования по уровням с периферией, которая почти вся работает на 3.3В,
- возможно было бы обойтись меньшим числом различных контроллеров,
- возможно было бы провести гораздо более глубокую унификацию софта,
- ну и ресурсы...
На меня, я думаю, обрушаться с критикой сторожилы всея ардуино. Но все таки осмелюсь сказать что есть "ардуина" изначально развитая на STM32 (и не только), это MBED. Порог вхождения такой же легкий, а во многом даже более удобный. Куча готовых библиотек. Сообщество (правда на англицком). Постоянно развивается.
Порог вхождения в мбед выше. Что бы что-то найти типа аналогрид нужно как минимум знать английский на хорошем уровне. Как только потребовалось сделать шаг в сторону, проще стало куб с атоликом взять. По крайней мере всё в твоих руках.
Порог вхождения в мбед выше. Что бы что-то найти типа аналогрид нужно как минимум знать английский на хорошем уровне. Как только потребовалось сделать шаг в сторону, проще стало куб с атоликом взять. По крайней мере всё в твоих руках.
Я не к тому чтобы поспорить, просто интересно что в этом сложного?
Скачать и поставить MinGW, arm-none-eabi-gcc и GNU make (для пользователей Windows 10 первый пункт не нужен, достаточно из Магазина поставить свежую Ubuntu)
Скачать и распаковать последний релиз RIOT с Гитхаба
cd RIOT/examples/hello-world
make BOARD=nucleo-l152re
залить полученный HEX-файл любым способом на Nucleo (в свежих версиях ST-Link это можно сделать просто киданием его на виртуальный диск)
У Ардуино 1 и 2 пункт умещаются в один, а 3, 4 и 5 - во второй. Т.е. скачать, распаковать и нажать кнопку. Без всякой командной стироки.
И, кстати, самый серьезный пункт в "доардуиновскую эпоху" был 5: "залить любым способом". Когда мой сын занимался микроконтроллерами, а это было в "доардуиновскую эпоху", самым сложным было как раз это - в качестве программатора использовался какой-то микроконтроллер, который:
- использовался в нестандартном режиме,
- уже был снят с производства, поэтому была проблема его найти,
- ну и в него тоже надо было как-то залить прошивку.
Кстати, для прошивки Ардуины ST-Link необязателен, и это один из важнейших факторов "уровня вхождения".
Скачать и поставить MinGW, arm-none-eabi-gcc и GNU make (для пользователей Windows 10 первый пункт не нужен, достаточно из Магазина поставить свежую Ubuntu)
Скачать и распаковать последний релиз RIOT с Гитхаба
cd RIOT/examples/hello-world
make BOARD=nucleo-l152re
залить полученный HEX-файл любым способом на Nucleo (в свежих версиях ST-Link это можно сделать просто киданием его на виртуальный диск)
У Ардуино 1 и 2 пункт умещаются в один, а 3, 4 и 5 - во второй. Т.е. скачать, распаковать и нажать кнопку. Без всякой командной стироки.
И, кстати, самый серьезный пункт в "доардуиновскую эпоху" был 5: "залить любым способом". Когда мой сын занимался микроконтроллерами, а это было в "доардуиновскую эпоху", самым сложным было как раз это - в качестве программатора использовался какой-то микроконтроллер, который:
- использовался в нестандартном режиме,
- уже был снят с производства, поэтому была проблема его найти,
- ну и в него тоже надо было как-то залить прошивку.
Кстати, для прошивки Ардуины ST-Link необязателен, и это один из важнейших факторов "уровня вхождения".
Я говорил про MBED, а вы зачем-то из статьи выдернули кусок про RIOT и машете им как крассной тряпкой. Тем более ниже про RIOT написано
"В принципе, это был сложный путь..."
Что бы начать программировать в MBED вообще ничего устанавливать не надо. Там онлайн компилятор. Достаточно зарегиться. ST Link да, нужен. В родных платах он встроен.
Если есть любой USB-UART конвертер, то не нужен. Можно загружать через UART хоть голый микроконтроллер. Или MBED не поддерживает встроенный загрузчик STM32 ? А Arduino IDE поддерживает загрузчик STM32 или тоже нет? Я просто никогда не пробовал, загружал только фирменными утилитами.
Если есть любой USB-UART конвертер, то не нужен. Можно загружать через UART хоть голый микроконтроллер. Или MBED не поддерживает встроенный загрузчик STM32 ? А Arduino IDE поддерживает загрузчик STM32 или тоже нет? Я просто никогда не пробовал, загружал только фирменными утилитами.
Если напрямую из онлайн MBED IDE то нужен ST Link V2-1 (который можно состряпать самому из maple mini ну или из f103c8t6 120 кб), а если загружать из Platformio то там все варианты возможны (и UART и обычный ST Link)
nikantovik - вы не о том совсем. Лучше скажите - у концепции MBED есть хоть какие-то преимущества перед Ардуино? Ардуино все обвиняют в неэффективности работы с реальным МК
Насколько я знаю. MBED это еще более монструозная и далекая от реального железа конструкция. заточенная на то, чтобы тупые пользователи вообще не углублялись в нюансы периферии конкретного контроллера В итоге тот код, что в каком-нибудь Кэйле занимает 8К - в MBED дай бог в 100к флеша влазит.
Короче - один фреймворк для кухарок (Ардуино) у нас уже есть. Зачем нам второй?
А вообще - у вас же есть своя тема в Отвлеченных для рекламы MBED. Зачем вы сюда, извиняюсь, "ходите" ? :)
nikantovik - вы не о том совсем. Лучше скажите - у концепции MBED есть хоть какие-то преимущества перед Ардуино? Ардуино все обвиняют в неэффективности работы с реальным МК
Насколько я знаю. MBED это еще более монструозная и далекая от реального железа конструкция. заточенная на то, чтобы тупые пользователи вообще не углублялись в нюансы периферии конкретного контроллера В итоге тот код, что в каком-нибудь Кэйле занимает 8К - в MBED дай бог в 100к флеша влазит.
Короче - один фреймворк для кухарок (Ардуино) у нас уже есть. Зачем нам второй?
А вообще - у вас же есть своя тема в Отвлеченных для рекламы MBED. Зачем вы сюда, извиняюсь, "ходите" ? :)
Ну то что на меня обрушаться с критикой я об этом сразу сказал ))
Да это фреймворк, а то что ардуино для кухарок и тупых пользователей вы тем самым оскорбили всех пользователей ардуино. А среди них очень грамотные люди на этом сайте есть!. Оскорбление не лучший способ вести конструктивную беседу. Насчет преимуществ перед ардуино, то вы видать не прочитали статью ссылку на которую я выше оставил.
MBED OS занимает не мало места, но и FREE RTOS тоже на 8кб не поместиться.
А если использовать библиотеку MBED без оськи, то к примеру под Platformio на STM32f103c8t6 (зная некоторые фишки) блинк получается всего 7 кб. На ардуино меньше?
Дело не килобайтах. Я чесно пытался посидеть на мбеде пару месяцев. С 411 нуклеей и блю пилом. Нуклею в ардуине не запрграмируешь, а блю пил вполне. Поимел кучу головной боли при попытках сделать что то отличное от блинка. То что на ардуине я делаю за пол часа с блюпилом в мбеде потребовало несколько дней и чтения кучи доков на ангийском, при том что дэйташиты на нем я читаю свободно без словарей. Вобщем уже больше года только письма приходят от туда об очередной версии ОС. С ней я пытался разобраться, но оказалось что на FreeRTОS разобраться проще и быстрее из куба. Это личное мнение. Если надо что то быстро проверить, то я предпочитаю ардуиновскую иде.
Каждый имеет право на личное мнение. Я поделился своим, может кто-то попробует MBED и понравиться. Я не против ардуино, самого ни раз выручала. Так же как и не против кейлов, кокосов и т.д. просто мне кажеться что уж много времени они отнимают. Но как вы и сказали это мое личное мнение, ни кому ни чего не навязываю,
То что на ардуине я делаю за пол часа с блюпилом в мбеде потребовало несколько дней и чтения кучи доков на ангийском, при том что дэйташиты на нем я читаю свободно без словарей. .
Давайте не плодить сущности. Кто и за сколько натыкает код вообще не предмет спора, тут больше больше дело привычки и навыков. КУБ вообще никакого кода не генерирует, кроме инита периферии. А тело основной проги можно допиливать долго и нудно, несмотря на очень быстрый старт. Так что... бег, при состоянии прогрессируещего поноса, не является олимпийским видом спорта.
Прости, я не знаю что такое платформио, но и тогда всё нормально конфигурилось, компилилось и заливалось в плату. Вот только работали только 2 канала. Третий ни как не хотел выдавать напряжение в реальном железе.
Ребята, помогите, что за фигня с библиотекой wire для stm32 стандартный скетчь сканер i2c не видит slave с адресом 0х78 (10 битная шина i2c).
Вот пример скетча:
// --------------------------------------
// i2c_scanner
//
// Version 1
// This program (or code that looks like it)
// can be found in many places.
// For example on the Arduino.cc forum.
// The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
// Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26 2013
// V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
// by Arduino.cc user Krodal.
// Changes by louarnold removed.
// Scanning addresses changed from 0...127 to 1...119,
// according to the i2c scanner by Nick Gammon
// http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
// As version 4, but address scans now to 127.
// A sensor seems to use address 120.
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//
/* Example pinmap for Bluepill I2Cs (by Testato)
I2C-1 standard pins: PB7(sda) PB6(scl)
Use it by "Wire" without pin declaration
Wire.begin();
I2C-1 alternative pins: PB9(sda) PB8(scl)
Remap the first I2C before call begin()
Wire.setSDA(PB9);
Wire.setSCL(PB8);
Wire.begin();
I2C-2: PB11(sda) PB10(scl)
Remap the second I2C before call begin()
Wire.setSDA(PB11);
Wire.setSCL(PB10);
Wire.begin();
If you want to use the two I2Cs simultaneously, create a new instance for the second I2C
TwoWire Wire2(PB11,PB10);
Wire2.begin();
*/
#include <Wire.h>
void setup() {
Serial.begin(115200);
//Wire.setSDA(PB9);
//Wire.setSCL(PB8);
Wire.begin();
Wire.setClock(100000);
Serial.println("\nI2C Scanner");
}
void loop() {
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++) {
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission(true);
if (error == 0) {
Serial.print("I2C device found at address 0x");
if (address < 16)
Serial.print("0");
Serial.println(address, HEX);
nDevices++;
}
else if (error == 4) {
Serial.print("Unknown error at address 0x");
if (address < 16)
Serial.print("0");
Serial.println(address, HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found");
else
Serial.println("done");
delay(5000); // wait 5 seconds for next scan
}
Мега 2560 без проблем видит этот slave 0x78 с этим же скетчем. Естественно др. скетчи в stm32 так же не работают с этим slave, др. slave находит без проблем, например OLED SSD1306 дисплей по i2c 0х3с работает отлично.
Нашел в библиатеках wire.cpp & twi.c выбор режима шины i2c 7 бит или 10 I2C_ADDRESSINGMODE_7BIT изменил на 10, но ничего не дало, даже oled дисплей перестал работать. Как же заставить работать с 10 битным slave-ом stm32?
Проверил i2c сниффером, вместо slave c адресом 0х78 создал на меге slave с аналогичным адресом, подключил его к stm32 сканер по прежнему ничего не увидел, но в логах i2c sniffer видно что stm32 шлет запрос на адрес 0x78 и получает на его ответ ACK, но зачем то игнорит ACK. Познее проверил тоже самое но с адресом 0х77 тут все отлично, находит сканер. В чем же дело?
krepton85 - вполне возможно, что дело в разнице уровней - на СТМ32 это 3.3в, а на меге 5в, поэтому сигналы с Меги ваше I2C устройство видит, а с СТМ нет
А скетч сканера, что вы привели - очень простой и "не работать" там нечему
Нет. С мегой тоже не видит 0x78 адрес. Дело не в уровнях, пробовал и через конвертор уроаней, тоже самое, кто то специально в библиотеке заблокировал работу с адресами выше чем 0х77.
Да немного запутал вас, прошу прощения. Есть чип от картриджа с тонером, который определяется по i2c шине по 0х78 адресу. Так вот STM32 при любом раскладе не видит этот адрес, и чип от тонер-картриджа, и мегу2560 каторую я использовал для проверки в качестве slave с таким же адресом как и тонер-чип(папробуйте у себя такой эксперемент в связке по i2c stm32 и slave например на AVR c адресом 0х78). А вот если скетчь - сканер i2c залить в Мегу то сканер без проблем находит тонер-чип по адресу 0х78.
Сканер на stm 32 выдает ошибку error=4 "Unknown error at address 0x78" и далее все адреса сканирует с этой ошибкой, начиная с 0 по 126 адрес, даже если подключить oled дисплей, то и на его такая же реакция, пока не перезагружу плату stm32.
Да, по 10к каждый, в связке с мегай резисторы не нужны, она сама их подключает, это я заметил, а вот в stm32 резисторов подтягивающих нет на i2c, думаю так специально сделали т.к. шина i2c здесь талерантна и к 5 вольтам и 3,3 вольт, по этому пользователь сам выбирает к какому питанию подтянуть.
krepton85, адрес 0x78 -не выходит за рамки 7-битной адресации (max 0x7F) . Косяк у вас очевидно в аппаратной части.
Димакс, там не все так просто. 7битный адрес посылается в байте, для некоторых адресов 7бит посылаются выравненные по нижней границе байта, для некоторых - по верхней
Тогда наоборот сдвинуть адрес вправо 0x78 >> 1 = 0x3C
Вся это вытекает из того, что старший бит адреса - это Read/Write bit - некоторые библиотеки и производители железа включают его в адрес, а некоторые нет - вот и выходит, что одни пишут на девайсе адрес 0x78, а другие 0x3C, хотя на самом деле это одно и то же
Нет, нет, нет, тут бит направления передачи данных не причем и функции Wire.begin(adress), Wire.beginTransmission(adress)
даже из стандартной библиатеки Wire не имеют доступа при установке адреса к этому биту. 10 битная шина данных совместима с 7 битной, за счет зарезервированных адресов формата 11110ХХ , где ХХ являются старшими битами 10 битного адреса , а остальные 8 младших битов передаются как данные (2-ым байтом).
В любом случае slave должен ответить на 7 битный запрос ACK, а потом принять остальных 8 бит (младших) своего адреса и так же их подтвердить ACK. И все это так и работает, но почему игнорит ACK stm32?
Вообще конечно класно, у СТМ32 шустрая математика, большая и быстрая переферия, но реальных задач где СТМ32 лучше АТмег я не вижу...
Прочтите несколько первых страниц этой темы, дабы не повторяться в поднадоевшем холиваре. Никто же никого не заставляет юзать СТМ32.
обрабатывать звук никто в здравом уме не станет ни на ATmega328P ни на STM32F103C.
Ну, видать, у меня со "здравым умом" что-то случилось:
http://arduino.ru/forum/proekty/konstruktsiya-vykhodnogo-dnya-prostoi-spektranalizator-480-polos-60-db-na-stm32f103-i-
32 КБ флеша это гдето 3000 - 8000 строк СВОЕГО кода, если не пихать мусор в скетч.
Во-первых, 3к-8к строк - это не так много.
А во-вторых, есть такая вещь, как табличная функция. Особенно актуальная для МК, минимум, по двум причинам:
- в них, как правило, нет аппаратной поддержки плавающей точки,
- нередко требуется функция "под конкретное железо", т.е. даже не имеющая аналитического выражения.
А табличная функция сама по себе способна сожрать тысячи строк, а вместе с ними и десятки килобайт.
Для меня блинк на СТМ32 вообще стал откровением:
ATmega328P как UNO "Скетч использует 930 байт (2%) памяти устройства. Глобальные переменные используют 9 байт"
STM32F103C8T6 как STM32F103C "Скетч использует 14356 байт (21%) памяти устройства. Глобальные переменные используют 3088 байт (15%) динамической памяти" что!? 14 КБ флеша и 3 КБ оперативки!!!
Да, у меня, когда я впервые с этим столкнулся, тоже был шок.
Но постепенно я себя убедил, что 20к-3к - это больше, чем 2048-9.
Меня пока устраивают(работают без ошибок) согласователи из 1-2х резисторов, а вот в схемах на STM32 согласователи на микросхемах вижу постоянно.
Это если пользоваться шилдами для Ардуино, где уже стоят преобразователи 3.3->5 именно для подключения к AVR.
Ну нифига себе ваша Ардуина скока памяти съедает. Я специально сейчас посмотрел на TruStudio - 2040 байт потратил для миганмия светодиодом. Это без оптимизации.
Ну нифига себе ваша Ардуина скока памяти съедает. Я специально сейчас посмотрел на TruStudio - 2040 байт потратил для миганмия светодиодом. Это без оптимизации.
Ну и как это влияет на применение. Сначала напиши реальную программу которая "не влезет", а потом начинай "старые песни".
PS. Мне кажется, если бы с самого начала Ардуина развивалась на STM32, сейчас проблем было бы намного меньше:
- не потребовалось бы согласования по уровням с периферией, которая почти вся работает на 3.3В,
- возможно было бы обойтись меньшим числом различных контроллеров,
- возможно было бы провести гораздо более глубокую унификацию софта,
- ну и ресурсы...
На меня, я думаю, обрушаться с критикой сторожилы всея ардуино. Но все таки осмелюсь сказать что есть "ардуина" изначально развитая на STM32 (и не только), это MBED. Порог вхождения такой же легкий, а во многом даже более удобный. Куча готовых библиотек. Сообщество (правда на англицком). Постоянно развивается.
Порог вхождения в мбед выше. Что бы что-то найти типа аналогрид нужно как минимум знать английский на хорошем уровне. Как только потребовалось сделать шаг в сторону, проще стало куб с атоликом взять. По крайней мере всё в твоих руках.
Порог вхождения в мбед выше. Что бы что-то найти типа аналогрид нужно как минимум знать английский на хорошем уровне. Как только потребовалось сделать шаг в сторону, проще стало куб с атоликом взять. По крайней мере всё в твоих руках.
Я не к тому чтобы поспорить, просто интересно что в этом сложного?
Определение пина AnalogIn AI (PA_1)
а считывание данных AI.read()
https://os.mbed.com/docs/mbed-os/v5.12/apis/analogin.html#analogin-hello-world
да и в описании API на сайте можно интуитивно по примерам разобраться.
По секрету, я оч плохо знаю англиский ))
Кстати, насчет порога вхождения https://habr.com/ru/post/420435/
...есть "ардуина" изначально развитая на STM32 (и не только), это MBED. Порог вхождения такой же легкий, а во многом даже более удобный.
Кстати, насчет порога вхождения https://habr.com/ru/post/420435/
Вот прямо по этой ссылке:
У Ардуино 1 и 2 пункт умещаются в один, а 3, 4 и 5 - во второй. Т.е. скачать, распаковать и нажать кнопку. Без всякой командной стироки.
И, кстати, самый серьезный пункт в "доардуиновскую эпоху" был 5: "залить любым способом". Когда мой сын занимался микроконтроллерами, а это было в "доардуиновскую эпоху", самым сложным было как раз это - в качестве программатора использовался какой-то микроконтроллер, который:
- использовался в нестандартном режиме,
- уже был снят с производства, поэтому была проблема его найти,
- ну и в него тоже надо было как-то залить прошивку.
Кстати, для прошивки Ардуины ST-Link необязателен, и это один из важнейших факторов "уровня вхождения".
Вот прямо по этой ссылке:
У Ардуино 1 и 2 пункт умещаются в один, а 3, 4 и 5 - во второй. Т.е. скачать, распаковать и нажать кнопку. Без всякой командной стироки.
И, кстати, самый серьезный пункт в "доардуиновскую эпоху" был 5: "залить любым способом". Когда мой сын занимался микроконтроллерами, а это было в "доардуиновскую эпоху", самым сложным было как раз это - в качестве программатора использовался какой-то микроконтроллер, который:
- использовался в нестандартном режиме,
- уже был снят с производства, поэтому была проблема его найти,
- ну и в него тоже надо было как-то залить прошивку.
Кстати, для прошивки Ардуины ST-Link необязателен, и это один из важнейших факторов "уровня вхождения".
Я говорил про MBED, а вы зачем-то из статьи выдернули кусок про RIOT и машете им как крассной тряпкой. Тем более ниже про RIOT написано
"В принципе, это был сложный путь..."
Что бы начать программировать в MBED вообще ничего устанавливать не надо. Там онлайн компилятор. Достаточно зарегиться. ST Link да, нужен. В родных платах он встроен.
ST Link да, нужен. В родных платах он встроен.
Если есть любой USB-UART конвертер, то не нужен. Можно загружать через UART хоть голый микроконтроллер. Или MBED не поддерживает встроенный загрузчик STM32 ? А Arduino IDE поддерживает загрузчик STM32 или тоже нет? Я просто никогда не пробовал, загружал только фирменными утилитами.
Если есть любой USB-UART конвертер, то не нужен. Можно загружать через UART хоть голый микроконтроллер. Или MBED не поддерживает встроенный загрузчик STM32 ? А Arduino IDE поддерживает загрузчик STM32 или тоже нет? Я просто никогда не пробовал, загружал только фирменными утилитами.
Если напрямую из онлайн MBED IDE то нужен ST Link V2-1 (который можно состряпать самому из maple mini ну или из f103c8t6 120 кб), а если загружать из Platformio то там все варианты возможны (и UART и обычный ST Link)
nikantovik - вы не о том совсем. Лучше скажите - у концепции MBED есть хоть какие-то преимущества перед Ардуино? Ардуино все обвиняют в неэффективности работы с реальным МК
Насколько я знаю. MBED это еще более монструозная и далекая от реального железа конструкция. заточенная на то, чтобы тупые пользователи вообще не углублялись в нюансы периферии конкретного контроллера В итоге тот код, что в каком-нибудь Кэйле занимает 8К - в MBED дай бог в 100к флеша влазит.
Короче - один фреймворк для кухарок (Ардуино) у нас уже есть. Зачем нам второй?
А вообще - у вас же есть своя тема в Отвлеченных для рекламы MBED. Зачем вы сюда, извиняюсь, "ходите" ? :)
nikantovik - вы не о том совсем. Лучше скажите - у концепции MBED есть хоть какие-то преимущества перед Ардуино? Ардуино все обвиняют в неэффективности работы с реальным МК
Насколько я знаю. MBED это еще более монструозная и далекая от реального железа конструкция. заточенная на то, чтобы тупые пользователи вообще не углублялись в нюансы периферии конкретного контроллера В итоге тот код, что в каком-нибудь Кэйле занимает 8К - в MBED дай бог в 100к флеша влазит.
Короче - один фреймворк для кухарок (Ардуино) у нас уже есть. Зачем нам второй?
А вообще - у вас же есть своя тема в Отвлеченных для рекламы MBED. Зачем вы сюда, извиняюсь, "ходите" ? :)
Ну то что на меня обрушаться с критикой я об этом сразу сказал ))
Да это фреймворк, а то что ардуино для кухарок и тупых пользователей вы тем самым оскорбили всех пользователей ардуино. А среди них очень грамотные люди на этом сайте есть!. Оскорбление не лучший способ вести конструктивную беседу. Насчет преимуществ перед ардуино, то вы видать не прочитали статью ссылку на которую я выше оставил.
MBED OS занимает не мало места, но и FREE RTOS тоже на 8кб не поместиться.
А если использовать библиотеку MBED без оськи, то к примеру под Platformio на STM32f103c8t6 (зная некоторые фишки) блинк получается всего 7 кб. На ардуино меньше?
Дело не килобайтах. Я чесно пытался посидеть на мбеде пару месяцев. С 411 нуклеей и блю пилом. Нуклею в ардуине не запрграмируешь, а блю пил вполне. Поимел кучу головной боли при попытках сделать что то отличное от блинка. То что на ардуине я делаю за пол часа с блюпилом в мбеде потребовало несколько дней и чтения кучи доков на ангийском, при том что дэйташиты на нем я читаю свободно без словарей. Вобщем уже больше года только письма приходят от туда об очередной версии ОС. С ней я пытался разобраться, но оказалось что на FreeRTОS разобраться проще и быстрее из куба. Это личное мнение. Если надо что то быстро проверить, то я предпочитаю ардуиновскую иде.
Это личное мнение...
Каждый имеет право на личное мнение. Я поделился своим, может кто-то попробует MBED и понравиться. Я не против ардуино, самого ни раз выручала. Так же как и не против кейлов, кокосов и т.д. просто мне кажеться что уж много времени они отнимают. Но как вы и сказали это мое личное мнение, ни кому ни чего не навязываю,
То что на ардуине я делаю за пол часа с блюпилом в мбеде потребовало несколько дней и чтения кучи доков на ангийском, при том что дэйташиты на нем я читаю свободно без словарей. .
Я ,если честно, не понимаю куда проще....
https://os.mbed.com/users/hudakz/code/STM32F103C8T6_Hello/
а API все задокументированы так, что знание англицкого не нужно... или я вундеркинд ))) (что врятли!)
https://os.mbed.com/docs/mbed-os/v5.12/apis/drivers.html
без обид (надеюсь)
Отлично. На нуклее303 включить 3 канала DAC и выдать напряжения. Я не смог на мбеде. В кубе ровно за 5 минут.
А что... куб уже стал поддерживать ардуину?
Отлично. На нуклее303 включить 3 канала DAC и выдать напряжения. Я не смог на мбеде. В кубе ровно за 5 минут.
А сколько интересно времени уйдет на то чтобы сконфигурировать пин
AnalogOut aout (PA_5)
и считать или записать данные
aout.read()
aout.write()
https://os.mbed.com/docs/mbed-os/v5.12/apis/analogout.html
думаю меньше пяти минут ))
Давайте не плодить сущности. Кто и за сколько натыкает код вообще не предмет спора, тут больше больше дело привычки и навыков. КУБ вообще никакого кода не генерирует, кроме инита периферии. А тело основной проги можно допиливать долго и нудно, несмотря на очень быстрый старт. Так что... бег, при состоянии прогрессируещего поноса, не является олимпийским видом спорта.
Два канала включить не проблема. Третий канал DAC проблема.
Не куб ардуину, а ардуину научили брать кубовую генерацию инициализации перефирии, ну а остальное ручками дописывается в ардуино иде.
Два канала включить не проблема. Третий канал DAC проблема.
а какая именно nucleo 303 у вас? всмысле буквенный индекс?
Как плата нано. К8 кажется. Я сейчас от неё далеко.
Два канала включить не проблема. Третий канал DAC проблема.
насколько я понял в расширенной версии mbed-dev это вопрос решен...
В реале, на железе проверю при первой возможности )
Ну это лишнее. Я уже всё сделал и свободных плат больше нет. Просто полтора года назад именно этот нюанс не позволил полностью поверить в мбед.
Просто полтора года назад именно этот нюанс не позволил полностью поверить в мбед.
Радует именно то что они не стоят на месте )
Два канала включить не проблема. Третий канал DAC проблема.
насколько я понял в расширенной версии mbed-dev это вопрос решен...
В реале, на железе проверю при первой возможности )
Проверено в Platformio. Все три канала конфигурируются без проблем и работают на железе )
Прости, я не знаю что такое платформио, но и тогда всё нормально конфигурилось, компилилось и заливалось в плату. Вот только работали только 2 канала. Третий ни как не хотел выдавать напряжение в реальном железе.
Прости, я не знаю что такое платформио...
https://platformio.org
отличная штука. поддерживает кучу фреймворков. cube, ардуино в том числе и mbed
На виндовсе правда тормозит, а вот на линуксе очень даже шустро работает.
Ребята, помогите, что за фигня с библиотекой wire для stm32 стандартный скетчь сканер i2c не видит slave с адресом 0х78 (10 битная шина i2c).
Вот пример скетча:
Мега 2560 без проблем видит этот slave 0x78 с этим же скетчем. Естественно др. скетчи в stm32 так же не работают с этим slave, др. slave находит без проблем, например OLED SSD1306 дисплей по i2c 0х3с работает отлично.
Нашел в библиатеках wire.cpp & twi.c выбор режима шины i2c 7 бит или 10 I2C_ADDRESSINGMODE_7BIT изменил на 10, но ничего не дало, даже oled дисплей перестал работать. Как же заставить работать с 10 битным slave-ом stm32?
Проверил i2c сниффером, вместо slave c адресом 0х78 создал на меге slave с аналогичным адресом, подключил его к stm32 сканер по прежнему ничего не увидел, но в логах i2c sniffer видно что stm32 шлет запрос на адрес 0x78 и получает на его ответ ACK, но зачем то игнорит ACK. Познее проверил тоже самое но с адресом 0х77 тут все отлично, находит сканер. В чем же дело?
krepton85 - вполне возможно, что дело в разнице уровней - на СТМ32 это 3.3в, а на меге 5в, поэтому сигналы с Меги ваше I2C устройство видит, а с СТМ нет
А скетч сканера, что вы привели - очень простой и "не работать" там нечему
Чаво???????
Либо скетч корявый... адресация... либо сама либа... А сам СТМ32 тут каким то боком виноват???
Нет. С мегой тоже не видит 0x78 адрес. Дело не в уровнях, пробовал и через конвертор уроаней, тоже самое, кто то специально в библиотеке заблокировал работу с адресами выше чем 0х77.
ну если вы знаете, что там блокировка - так разблокируйте, исходники библиотеки открыты
Ты определись какта
Или
С мегой тоже не видит 0x78 адрес.
Хрен тебя поймёшь
Да немного запутал вас, прошу прощения. Есть чип от картриджа с тонером, который определяется по i2c шине по 0х78 адресу. Так вот STM32 при любом раскладе не видит этот адрес, и чип от тонер-картриджа, и мегу2560 каторую я использовал для проверки в качестве slave с таким же адресом как и тонер-чип(папробуйте у себя такой эксперемент в связке по i2c stm32 и slave например на AVR c адресом 0х78). А вот если скетчь - сканер i2c залить в Мегу то сканер без проблем находит тонер-чип по адресу 0х78.
Сканер на stm 32 выдает ошибку error=4 "Unknown error at address 0x78" и далее все адреса сканирует с этой ошибкой, начиная с 0 по 126 адрес, даже если подключить oled дисплей, то и на его такая же реакция, пока не перезагружу плату stm32.
i2c шина подтянута резисторами к плюсу?
Да, по 10к каждый, в связке с мегай резисторы не нужны, она сама их подключает, это я заметил, а вот в stm32 резисторов подтягивающих нет на i2c, думаю так специально сделали т.к. шина i2c здесь талерантна и к 5 вольтам и 3,3 вольт, по этому пользователь сам выбирает к какому питанию подтянуть.
а от какого картриджа чип?
lexmark mx310
В общем вырезана в библиатеках поддержка 10 битной шины i2c все адреса с 0х78 - 0х7B не видятся на шине i2c в STM32.
В общем вырезана в библиатеках поддержка 10 битной шины i2c все адреса с 0х78 - 0х7B не видятся на шине i2c в STM32.
Вы уже второй раз это пишете. Откуда дровишки-то? В исходниках нашли?
Если нашли - почему не поправите?
Если бы я знал в каком именно месте то поправил бы.
Вот этот пакет для плат использую: https://github.com/stm32duino/Arduino_Core_STM32/
попробуйте законнектить с адресом 0xF0
то есть сдвинуть адрес влево на 1 ( 0x78 << 1 ) = 0xF0
krepton85, адрес 0x78 -не выходит за рамки 7-битной адресации (max 0x7F) . Косяк у вас очевидно в аппаратной части.
Комбинация бит 11110ХХ адреса зарезервирована для 10-битной адресации. Можно почитать здесь: https://ru.wikipedia.org/wiki/I%C2%B2C
krepton85, адрес 0x78 -не выходит за рамки 7-битной адресации (max 0x7F) . Косяк у вас очевидно в аппаратной части.
Димакс, там не все так просто. 7битный адрес посылается в байте, для некоторых адресов 7бит посылаются выравненные по нижней границе байта, для некоторых - по верхней
Комбинация бит 11110ХХ адреса зарезервирована для 10-битной адресации. Можно почитать здесь: https://ru.wikipedia.org/wiki/I%C2%B2C
так вы попробовали или просто так спорите?
krepton85, а как вы включали 10 битную адресацию? Привидите полный скетч.
Тогда наоборот сдвинуть адрес вправо 0x78 >> 1 = 0x3C
Вся это вытекает из того, что старший бит адреса - это Read/Write bit - некоторые библиотеки и производители железа включают его в адрес, а некоторые нет - вот и выходит, что одни пишут на девайсе адрес 0x78, а другие 0x3C, хотя на самом деле это одно и то же
Нет, нет, нет, тут бит направления передачи данных не причем и функции Wire.begin(adress), Wire.beginTransmission(adress)
даже из стандартной библиатеки Wire не имеют доступа при установке адреса к этому биту. 10 битная шина данных совместима с 7 битной, за счет зарезервированных адресов формата 11110ХХ , где ХХ являются старшими битами 10 битного адреса , а остальные 8 младших битов передаются как данные (2-ым байтом).
В любом случае slave должен ответить на 7 битный запрос ACK, а потом принять остальных 8 бит (младших) своего адреса и так же их подтвердить ACK. И все это так и работает, но почему игнорит ACK stm32?