[uquote="asvhmao",url="/forum/viewtopic.php?p=4581664#p4581664"]С мегой по играться, закинуть в тумбочку и забыть. Или смотреть на изделие, как на память истории. А стмка ещё послужит.

[/uquote] Ну это смотря чего хотеть от меги, жили же как-то раньше без DMA. А стмка пока начнет служить - жисть пройдет

[uquote="asvhmao",url="/forum/viewtopic.php?p=4581664#p4581664"]После asm этот си инопланетный язык[/uquote] Ардуина из коробки может в асм, но, очевидно, это изврат. Примерно так выглядит асм-вставка в инопланетной среде
Спойлер
Код: Выделить всё
asm volatile
(
"ldi r16,0x20\n"
"out 0x04,r16\n"
);
BERS писал(а):В Flprog uart не умеет считывать данные которые идут сплошным потоком. Строка должна заканчиваться CR.
Всё относительно, в т.ч. место CR в "сплошном потоке" - для последующего куска данных это начало, для предыдущего - конец. И uart своих принципов не изменяет даже в FLprog.
А давайте я попробую вам показать, что не так страшен тот чёрт. В скетчах управления для HD у меня используется библиотека, не требующая даже особого понимания работы uart. Просто подключаете к своему проекту "черный ящик" и используете - всё (ну почти) уже отлажено за вас. Поехали?
Спойлер
Для общего понимания библиотек в ардуино отправляю вас полистать А.Гайвера Используем библиотеки
Моя поделка на прям полноценную ардуиновскую библиотеку пока не тянет, но пусть будет для простоты библиотека.
1. Итак, "библиотека" состоит из трех файлов, реализующих т.н. "класс" (c++ сначала так и назывался, "Си с классами ") копируем все три файла в папку целевого скетча.
- H8KHDtypes.h
- H8KHD.h
- H8KHD.cpp
Библиотека использует библиотеку GyverTimer того же Гайвера, можно взять у меня в архиве со скетчем из видео или у автора на сайте и установить штатным способом Arduino IDE из архива. Со временем вам самим начнет нравиться повторное использование кода, особенно чужого
Да, там примитивные таймеры на millis(), но особая точность не нужна, а использовать их просто и наглядно.
2. В основном скетче подключаем библиотеку и создаем объект реализованного в ней класса. Это 2 строки:
3. Для удобства работы с данными, которые отдает библиотека, создаем переменную, добавляем еще строку:
4. Для ловли и анализа байтов из "сплошного потока" uart используем соответствующее прерывание, оно описано в Ардуине как serialEvent(), мы просто наполняем обработчик этого прерывания кодом из библиотеки. Описываем, что делать в этом прерывании (в этом месте мы уже начинаем использовать "библиотечный" код), это еще пара строк в скетче:
Код: Выделить всё
void serialEvent() {
h8khd.serial_event();
}
5. Добавляем инициализацию объекта в стандартный ардуиновский setup(). 7 - это пин D7 платы ардуино, вход сигнала "Сверхток" (см. схему):
6. В основном цикле ардуино как можно чаще вызываем обновление данных из черного ящика, дергая его за функцию tick():
Код: Выделить всё
void loop() {
h8khd.tick();
driver_status = *h8khd.getDriverStatus();
....
После выполнения этого кода переменная driver_status будет содержать кучу данных, описанную как структура H8KHD_Status в файле H8KHDtypes.h Это и есть текущие (и даже часть предыдущих) данные, полученные от моторного контроллера, разложенные по полкам структуры. Кроме этого, в вашем распоряжении весь набор функций, описанных в файле H8KHD.h, например:
- isDataRecieved() возвращает true, если получены данные,
- isDataChanged() возвращает true, если текущие данные изменились по сравнению с данными от предыдущего вызова tick(),
- isStateChanged() возвращает true, если изменилось состояние
- и т.д.Вроде не сильно сложно, а? Во вложении простейший скетч-болванка, в котором добавлены контакты управления с алгоритмом "для токарного". Никакой визуализации там нет, но скетч вполне рабочий, если подключить такое железное к настоящему 8К-HD, то получится крайне урезанное управление с жестко заданными в скетче параметрами привода (частоты и темпы) без возможности регулировки.
Если кому-то вдруг зашло, то в следующей серии прикрутим к этому учебному пособию какой-нибудь простенький экранчик.