Ясней не становится как писать код под LGT, мне нужна полное инфо - как программировать, все аппаратные заморочки чтобы на ASM писать оптимизированный код, а ардуино это просто ограничение возможностей многократное.
Без адуринки (железа программатора на её основе из нанки сделанного) с прошивкой не справиться. Так что в любом случае для начального старта или покупной программатор или портабле ардуина для старта понадобится. Под Си там проще - программа от изготовителя дружит с АВР студией 4.19. Да и попадаются в продаже эти LGTшки только как платки группы ардуино. Для работы под ассемблером первичной документации вроде достаточно, но требуется время на обработку - там минимум "двойной перевод" - сначала с китайского на английский, затем с английского на русский. Короче надо весьма внимательно вычитать и редактировать по трем-четырем первичным оригиналам. Насколько актуальным может быть - зависит от стабильности производства (что весьма под вопросом - микры для адуринки то поставляются, но... "с затертым логотипом и наименованием") Если интерес будет - заброшу собранный комплект док в сундук и/или сюда/в личку. Пока жду ещё поступления ардуиновской версии LGT а-ля про-мини (без USB моста на палатках). Да пытаюсь доки просматривать.
Говорится в той статье "LGT8F328P: импортозамещение по-китайски (окончание)" про файл lgt8f328Pdef.inc присущ всем чипам, но чёто я его не нашёл, у вас он есть?
Такой файл самостоятельно составляется по документации МК. Под соответствующий компилятор ассемблера. За основу берем примеры по уже имеющимся в наличии и делаем свой. Я такое не раз для 51й делал под с51asm. Да и АВРкины разбирал... не так уж и сложно - вписываем отличия по карте регистров. Только у LGT будет еще возня с картированием ОЗУ и 16-разрядным доступом и соответствующим ядром. Пока тот садомазохизьм в неспешных планах...
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Говорится в той статье "LGT8F328P: импортозамещение по-китайски (окончание)" про файл lgt8f328Pdef.inc присущ всем чипам, но чёто я его не нашёл, у вас он есть?
Смотрите внимательнее, в конце статьи архив с вашим lgt8f328Pdef.inc.
С великим прискорбием сообщаю о завершении практической тест-поддержки проектов на базе ПК с Win XP x32... По причине кончины кома с данной ОС... Комп честно и героически отработал свой ресурс... Прощальный салют В дальнейшем базой средств разработки будут использоваться ресурсы программ под ПК с win 7/10/11 х64.
Весьма вкусненькие инструменты для всякоработы с *.pdf ... https://tools.pdf24.org/ru/creator жаль только что "полный фарш" оффлайн только для виндовс 10 и 11... под 7кой/8кой некоторый функционал лишь "он лайн" (в тырнете)...
СпойлерPrintf support Unlike the official Arduino cores, MiniCore has printf support out of the box. If you're not familiar with printf you should probably read this first. It's added to the Print class and will work with all libraries that inherit Print. Printf is a standard C function that lets you format text much easier than using Arduino's built-in print and println. Note that this implementation of printf will NOT print floats or doubles. This is disabled by default to save space but can be enabled using a build flag if using PlatformIO.
If you're using a serial port, simply use Serial.printf("Milliseconds since start: %ld\n", millis());. You can also use the F() macro if you need to store the string in flash. Other libraries that inherit the Print class (and thus supports printf) are the LiquidCrystal LCD library and the U8G2 graphical LCD library.
Pin macros Note that you don't have to use the digital pin numbers to refer to the pins. You can also use some predefined macros that maps "Arduino pins" to the port and port number:
// Use PIN_PB5 macro to refer to pin PB5 (Arduino pin 13) digitalWrite(PIN_PB5, HIGH);
// Results in the exact same compiled code digitalWrite(13, HIGH);
Write to own flash MiniCore uses the excellent Urboot bootloader, written by Stefan Rueger. Urboot supports flash writing within the running application, meaning that content from e.g. a sensor can be stored in the flash memory directly without needing external memory. Flash memory is much faster than EEPROM, and can handle at least 10,000 write cycles before wear becomes an issue. For more information on how it works and how you can use this in your own application, check out the Serial_read_write for a simple proof-of-concept demo, and Flash_put_get + Flash_iterate for useful examples on how you can store strings, structs, and variables to flash and retrieve then afterward. ... меги 328/Р/РА/А/РВ 168/Р/РА/А/РВ 88/Р/РА/А/РВ 48/Р/РА/А/РВ 8 а вот про мегу 8А забыли...
А Вы, уважаемый OKF, пробовали соответствующие окошки в работающей IDE открывать и на соответствующие графы выбора типа МК смотреть? В списке свойств платформы для тех, что "с буковками" есть опция "variant" в которой выбираем тот вариант буковок, с которым будем работать. Я пишу о том, что проверил при пробе настроить эту платформу по факту. Было бы для меги8 соответствующее расширение (как для других вариантов) я бы это указал. Не всегда общее описание на страничке проекта соответствует тому, что во вкладках платформы установить можно. Возможно при редактировании авторы забыли указать соответствующие буковки, а может и нет- это уже на конкретном кристалле тестом поверить надо. Но лучше без особых причин (и запасов времени и подопытных МК) не экспериментировать с подобной проверкой. Да и грубость как то Вам не к лицу, уважаемый OKF.
Возможно и одна из будущих платформ. Это ж вроде как ARM - просто один из вариантов DIP микро сборки. Будет соответствующая платформа под ардуино IDE - почему бы и не воспользоваться? В то же время может и что-то отдельно для такой платки выпустят (из IDE и/или иного софта сопровождения) ...
А Вы, уважаемый OKF, пробовали соответствующие окошки в работающей IDE открывать и на соответствующие графы выбора типа МК смотреть? Я пишу о том, что проверил при пробе настроить эту платформу по факту. Было бы для меги8 соответствующее расширение (как для других вариантов) я бы это указал. Не всегда общее описание на страничке проекта соответствует тому, что во вкладках платформы установить можно.
Буковки типа МК определяют набор фузов и тип загружаемого бутлоадера для опции "записать загрузчик". (совместно с другими вкладками опций в менюшке текущей платформы). Да и возможные отличия начинки МК там также учитывается. Насколько глубоко - то нужно или полностью документацию вычитывать или пользоваться тем, что задано. По крайней мере для других подобных платформ это оговаривается- та же платформа DIY ATMEGA 8/88/48/168/328 при выборе атмега8 имеет опцию processor version для раздельного указания атмега 8 и атмега 8а... Детально мне сегодня в тех тонкостях разбираться не особо интересно - этих кристаллов сегодня в массовом количестве не так уж и много - хватит и "штатного" адуринкина применения. (разбирал в прошлом аналогии "диагоналек" 51й в DIP8/20/40, а до "бабочки" меги 8й так дело и не дошло - появились более навороченные да и адуринка многие вопросы сняла с повестки дня). Но рисковать проверками смысла не вижу (если только то не спец по Си и устройству IDE, для собственного удовольствия сей вопрос рассматривать будет).
Последний раз редактировалось BOB51 Сб апр 19, 2025 15:08:37, всего редактировалось 1 раз.
В том то и дело, что в софте никакого отличия нет. Ни в фузах, ни в бутах, ни даже в id. B не надо для этого быть спецом по Си и IDE. А в тех МК где отличия есть, они (МК с буковками) и указываются в соответствующих подпунктах.
Но факт отсуствия выборки варианта и/или указания на то, что данное действие не требуется в соответствующей опции платформы таки есть. О чем я собственно и сообщил в своем посте выше, на который Вы, OKF, так накинулись. Кстати... насчет того "...* All variants (A, P, PA and PB)..."... я что то не встречал атмегу 8 с буковками "P, PA and PB" - следовательно там, откуда взята строчка надо еще и примечания под "*", что где-то в остальном тексте запрятаны, смотреть... Как и наличие в той же платформе прямого указания на применение кристаллов с разными буковками к примеру в той же 328й там прямо указан вариант "328/328А". Или не добавили по невнимательности или таки чего то но там есть - то уж не столь и интересно для прикладного применения. хотите - копните глубже(если время и желание позволяет).
при решении "примитивно в лоб" и только референсом там будут ограничения на максимальную частоту счетных импульсов - минимальная длительность импульса 2mS минимальная длительность паузы 3mS (проверка проводилась симулятором UnoArduSim 2.9.2). Можно б еще одно действо применить убрав loop - но то уже из "ухищрений" за рамками "референса
Продолжение садизьма... Итого малость ужал... Но таки быстродействие как было, так и осталось 2mS импульс на 3mS паузы...Маловато... Спойлер
Код:
/* проект taho простейший автомат селектор количества импульсов в секунду диапазон контроля от 0 до 200 импульсов в секунду (120 км/час) ориентировочный порог (уставка) 33 импульса в секунду решение для ардуино нано в рамках средств референса параметры входных импульсов не известны, но оговорено: 1. отсутствие дребезга фронтов (аппаратный антидребезг в источнике сигнала) 2. длительность активной части импульса не менее 2 милисекунд 3. длительность паузы не менее 3 милисекунд точность сработки +/- 2 импульса */
// линия водного сигнала const byte Taho = 4; // D4 // активный уровень входного сигнала byte AlTaho = LOW; // линия выходного сигнала const byte RelOut = 8; // D8 // активный уровень выходного сигнала byte AlRelOut = LOW; // флаг захвата фронта начала импульса или начала паузы byte Fl = 0; // флаг начала окна измерительного интервала byte Fw = 0; // счетик - накопитель импульсов byte cntTaho = 0; // пороговое значение контрольной уставки количества импульсов const byte MaskTaho = 33; // контрольный накопитель текущего времени в милисекундах unsigned long tmslot = 0;
//----------
void setup() { // put your setup code here, to run once:
Поскольку параметры импульсов произвольны это в принципе близко к "гаданию на кофеной гуще"... Но все же ... можеть и чего таки выжму. Надо еще "простейшие фокусы" попробовать - но то "за рамками "референса""...
Немножко дополнительного садомазохизма в попытке поднять максимальное быстродействие (количество считанных импульсов) для пародии на частотомер в рамках ардуиньего референса (а заодно и симулятор погонять)... Условие - не использовать ничего за рамками "стандарно - адуринко" - ни таймеры в режиме счета, ни дополнительные фокусы с дополнительным генератором 1mS на Т0, ни отказа от LOOP()... Захват входного сигнала проводится обычным чтением лапок, а вот формирование измерительного окна чуток с извратом - использована генерация tone c последующей обработкой счетчика в прерывании от INT0. Ну и компаратор по количеству входных импульсов - поставлено 33 - если меньше выход D8 = 1, ежли больше D8 = 0. При такой схемке максимум корректно считанных импульсов возможен для условия длительность активной части импульса (0) = 1100 микросекунд, длительность пассивной части импульса (1) =1150 микросекунд. Собственно несколько измененная схемка: https://img.radiokot.ru/files/20529/3qzplyk6yn.GIF скрин окна симулятора с максимальным количеством корректно считываемых импульсов
/* проект taho простейший автомат селектор количества импульсов в секунду диапазон контроля от 0 до 200 импульсов в секунду (120 км/час) ориентировочный порог (уставка) 33 импульса в секунду решение для ардуино нано в рамках средств референса параметры входных импульсов не известны, но оговорено: 1. отсутствие дребезга фронтов (аппаратный антидребезг в источнике сигнала) 2. длительность активной части импульса не менее 1.1 милисекунд 3. длительность паузы не менее 1.15 милисекунд точность сработки +/- 2 импульса */
// линия водного сигнала #define Taho 6 // D6 // активный уровень входного сигнала исключительно LOW //byte AlTaho = LOW; // линия выходного сигнала #define RelOut 8 // D8 // активный уровень выходного сигнала byte AlRelOut = LOW; // выход тактового сигнала на формирователь счетного окна #define tonout 4 // D4 // вход тактового сигнала на формирователь счетного окна #define toninp 2 // D2 (= INT0) // флаг захвата фронта начала импульса или начала паузы byte Fl = 0; // флаг начала окна измерительного интервала byte Fw = 0; // счетик - накопитель импульсов int cntTaho = 0; // пороговое значение контрольной уставки количества импульсов #define MaskTaho 33 // контрольный накопитель формирователя счетного окна byte tmslot = 0; // пороговое значение контрольной уставки накопителя формирователя счетного окна #define MaskCtms 50 // функция бработчика прерывания формирователя счетного окна void timeslot();
//----------
void setup() { // put your setup code here, to run once:
В принципе для релюшки, срабатывающей на требуемый порог вполне сгодится. Для частотомера явно не особо пригодное решение, разве что обороты считать. Но и исходные требования к входным импульсам зверские - от постоянного 0 до постоянной 1 при старте (и в любой момент работы)... Да плюс тренировка мозгам и навыков пользования симулятором.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения