Программирование STM32 без программистов? Нейросети против человека! | Батарон№18

Описание.
В этом подробном видеоуроке мы погружаемся в мир микроконтроллеров с помощью трех мощных инструментов: ChatGPT-4, Copilot и Gemini. Рассмотрим процесс инициализации энкодера и модуля LoRa SX1278, используя стандартную библиотеку HAL для оптимизации работы с оборудованием. Этот ролик станет отличным ресурсом как для начинающих, так и для опытных разработчиков, желающих глубже изучить возможности программирования микроконтроллеров и беспроводной связи. Откройте для себя, как эти инструменты могут упростить и ускорить разработку проектов, связанных с IoT и встраиваемыми системами, обеспечивая надежное и эффективное взаимодействие между устройствами.

Пересказ видео:

пересказ первых 30 минут

Вступление:

В видео автор ставит вопрос: могут ли нейросети заменить программистов в будущем?

Тестирование нейросетей:

Автор решил проверить возможности нейросетей на примере двух задач:

Инициализация инкрементального энкодера:
    ChatGPT:
        Справилась с задачей, но допустила ошибки в настройке прерываний.
        Код требовал доработки.
    Copilot:
        Справилась с задачей без ошибок.
    Вывод: Copilot показал себя лучше.
Инициализация чипа LoRa SX1278:
    ChatGPT:
        Допустила несколько ошибок в коде, в том числе неверно указала адреса регистров.
        Требовалась помощь человека для исправления ошибок.
    Copilot:
        Справилась с задачей без ошибок.
    Вывод: Copilot снова показал себя лучше.

Заключение:

На данный момент нейросети не могут полностью заменить программистов.

Плюсы:
    Могут помочь в решении простых задач.
    Могут генерировать код на основе примеров.
    Могут помочь в поиске ошибок.
Минусы:
    Не всегда могут правильно понять задачу.
    Допускают ошибки, которые требуют исправления человеком.
    Не могут заменить анализ и логическое мышление человека.

В целом, нейросети могут стать полезным инструментом для программистов, но не заменить их полностью.

Дополнительно:

Автор видео использовал нейросети ChatGPT, Copilot и Gpt-3.
Тестирование проводилось на микроконтроллерах STM32 с использованием библиотеки H.
Автор подчеркнул, что важно проверять код, генерируемый нейросетью, и при необходимости его дорабатывать.

Важно:

Этот пересказ является кратким изложением видео.
Для более подробной информации рекомендуется посмотреть видео целиком.

https://gemini.google.com

Расшифровка видео

Введение
0:00
Привет всем сейчас на слуху Тема что программисты скоро не понадобятся искусственный интеллект способен
0:05
заменить людей занятых такой работой и вполне успешно справляться с написанием кода Мы конечно на слово никому верить
0:13
не будем не будем ничего голословно утверждать а проведём исследование в
0:18
этом видео протестируем несколько нейросетей на навыки написания кода ответим на вопросы Может ли не россеть
0:25
запрограммировать микроконтроллер полностью вместо человека с минимальным вмешательством со стороны человека
0:31
второе Может ли не росет заходить с подсказками третье Сможет ли не россеть заходить если разработан детальный план
0:38
работы программы с подсказками и указаниями где нейросеть
0:44
[музыка]
0:53
ошибается вообще мы редко решаем нетиповые задачи если кто-то думает что решает какие-то задачи отличные типовых
1:01
Ответьте на следующие вопросы писал ли кто-то код решающий эти задачи ранее
1:07
Можно ли найти исходники такого кода есть различные исходные файлы с
1:12
различными решениями если на все эти вопросы Вы ответили да то вы решаете
1:18
далеко не уникальные задачи Я думаю что такие задачи может вполне решать искусственный интеллект что и предстоит
1:25
нам проверить в этом видео Меня интересует только результат А именно как справиться с решением моих задач
1:31
различные нейросети и на основании оценки результатов работы нейросетей
1:36
будет проведена оценка различных нейросетей а также составлен общий вывод
1:42
относительно возможности применения нейросетей для решения задач программирования которые я решаю для
1:48
тестирования Я выбрал наиболее знаменитые и разрекламированные сети упоминания о которых я встречал чаще
1:55
всего это copilot G Mini и Chat gpt выбрал две задачи разной сложности
2:02
которые мы программировали ранее на канале первый уровень сложности задача простая Типовая по инициализации
2:09
энкодера второй уровень сложности Типовая задача инициализация периферии Лора для задач которые я определил как
2:16
третий уровень ни одна из тестируемых нейросетей не дошла Кроме этого результаты решения задач каждого уровня
2:23
будет оценено по трх балльной шкале к этому мы ещ вернёмся при подведении итогов после все Результаты будут
2:31
сведены в таблицу на основании которой мы сделаем выводы начнём сравнение нейросети с чат gpt версия 4 здесь я
ChatGPT Энкодер
2:40
говорю нейросети о том что буду использовать микроконтроллер STM f103 с библиотекой H и прошу её это запомнить
2:46
она подтверждает о том что запомнила говорит о том что знает что такое библиотека H и всё и дальше в этом
2:53
контексте Она говорит что будет мне давать ответы теперь я даю задание на инкрементальный энкодер у него пять
3:00
выводов называю эти выводы ну и прошу написать код для инициализации и
3:05
подключения этого энкодера обработка событий от этого энкодера должна производиться по прерываниям дальше
3:12
нерас показывает последовательность действий для того чтобы это реализовать то есть лизация пинов настройка
3:18
прерывания обработка прерывания тут всё верно дальше показывает пример с кодом сначала определяет символьные имена
3:24
выводов я это добавляю всё в Main H файл вот в Cube IDE смотрим о том что у меня
3:31
тут всё добавлено возвращаюсь опять к не сети и дальше она мне пишет обработчик
3:37
прерываний по обратному вызову callback Вот это всё я согласен с этим
3:44
тут всё правильно И это всё я копирую вот в mainc File здесь есть вот callback
3:50
и вот э процедура просто скопировал её сюда то есть мы сюда будем переходить
3:55
по-любому ирование и дальше проверять состояние выводов для того чтобы
4:00
определить Э что же Какое событие произошло дальше она мне пишет пример
4:06
функции Main и дальше написано что H init функция но
4:13
при этом она забыла указать функции конфигурации тактирования системы Вот
4:18
это выглядит вот так у меня в коде Ну это я э функцию добавляет Cub Mix э
4:23
Кстати по поводу настройки контроллеров Cube и Mix открываю Cube MX
4:30
и тут мы видим что почти Никаких изменений на порты ввода и вывода Я не вносил из изменений добавил только
4:38
внешний кварцевый резонатор а также настройку дебаггер также Прошу обратить
4:44
внимание что аналогичные настройки использованные для всех остальных нейросетей и всех других все другие
4:51
задания которые даю нейросети микроконтроллер будет настроен именно так также нейросеть вот нам показывает
4:58
как она настроила порты ввода-вывода Также прошу Прошу обратить вот здесь внимание о том что
5:05
здесь вот у неё Ну не совсем верно я не говорю что это будет работать но будет работать и
5:12
по нарастающего фронту прерывания происходить и по спадают на вот этих вот
5:19
S1 S2 пинах также про энкодер у меня уже есть видео мы эту задачу уже решали
5:25
реализовали Я часто его использую есть библиотека в моих предыдущих видео пот
5:30
Ну код очень похож на тот что писал я но вот здесь вот у меня допустим прерывание
5:37
происходит по одному из фронтов это будет трудно обрабатывать когда Сначала вы повернули у вас происходит прерывание
5:44
S1 и S2 по нарастающего фронту потом s12 по падающему фронту и поэтому я добавил
5:50
этот код функцию GP видно и здесь я вот изменил Но почему это изменил дальше я
5:57
сказал о том что я функции настройки пинов S1 S2 настроил прерывания по
6:02
нарастающим и с падающему фронтам ты уверен что нужны прерывания По обеим фронтам и всё и дальше нейросеть
6:08
исправляется и пишет вот более правильный код по моему мнению для данной Задачи о том что прерывание будет
6:15
происходить по нарастающего фронту что я в принципе и скопировал вот сюда это работает всё хорошо опять к чату gpt
6:23
после того как мы настроили выводы скопировали Вот функции jpu обратного
6:29
вызова вот настроили приоритет прерываний Это я всё также скопировал Как видим у нас есть три прерывания
6:37
номера этих прерываний зависят от того к какому выводу был подключён кодер здесь
6:43
росет прекрасно понимает Какое прерывание отвечает за Какой вывод я намекаю что использую Q bde и она мне
6:51
пишет как правильно сконфигурировать в qde повторяет то что она уже писала
6:56
ранее вывод обратный вызов Ну это код Я говорю что этот код не
7:03
работает чего-то не хватает И она мне говорит о том что обратный вызов должен
7:08
происходить по внешнему прерыванию вот того что вот мы настроили уже и дальше
7:15
пишет Вот такой пример как это должно выглядеть и что важно указывает вот файл
7:20
Конечно же это не полный вывод здесь учитывается только прерывание вот одного из пинов А нам надо прерывание по всем и
7:29
нам Поэтому вот я прошу её вот конкретно написать прерывание для S1 S2 и для K и
7:37
Ну то есть прерывание по поворотам и прерывание при нажатии на кнопку что
7:43
нейросеть успешно вот пишет и я её добавляю файл STM interrupt C и здесь
7:50
вот этот код всё с комментариями всё также я оставил как и было этот код
7:55
настроен верно я уже его проверил Ну и проведём отладку посмотрим как это
8:00
работает на реальном железе я буду поворачивать энкодер влево вправо нажимать на кнопку всё подключил
8:08
запустил режим отладчика про то как подключать я уже говорил в видео не об этом э Здесь я ничего не буду упоминать
8:15
об этом теперь посмотрим что же происходит в отладчике запустил код всё ну и теперь поворачиваю кнопку мы видим
8:22
повернул влево происходит сначала первое прерывание э заходит в функцию обратного
8:28
вызова потом происходит это второе прерывание так как настроили мы на два прерывания Ну
8:35
вообще я попросил не роть о том что у меня прерывания должны происходить и при повороте налево и при повороте направо
8:42
конечно было бы идеально если бы она одно прерывание заменило на просто
8:48
считывание вывода уровня и по её как как я в принципе и делал сво библиотеки Ну
8:54
можно и так и дальше опять функция callback определяем из-за какого прерывания Мы сюда пришли теперь
9:00
поворачиваю направо опять сначала первое прерывание обработчик второе прерывание
9:07
обработчик теперь нажимаю на кнопку происходит прерывание по нажатию опять обработчик всё отлично работает код
9:14
работает дальше здесь без проблем составить свой обработчик здесь Также можно
9:20
пользоваться светом от сети никаких проблем тут не будет теперь протестируем
ChatGPT LoRa
9:25
нейча gpt для задач уровня два всё как и в предыдущем видео я делаю видео на
9:31
YouTube где буду сравнивать различные нейросети для решения задач программирования я использую STM 323 с библиотекой H дросить подтверждает о том
9:39
что поняла мою задачу Теперь будет использовать библиотеку H ssm f103
9:46
теперь я прошу чтобы нерас на писала код инициализации Чипа lora SX 1278
9:53
используя dma используя dma библиотеку H для STM f103 напомню что эту зада
10:00
мы уже решали Но посмотрим как же с ней справиться нейросеть дальше Я указываю что пло распа и указываю выводы которые
10:07
мы будем использовать также Прошу обратить внимание что выводов на доске у
10:14
меня значительно больше но также вот есть вот этот пин сброса Чипа Я его
10:20
специально указал дальше Лора должен быть инициализирован в режиме в режиме
10:26
передачи одного пакета из ВС дальше Несе понимает
10:33
задачу говорит нам примерный алгоритм Как нам нужно действовать для
10:39
того чтобы достичь какого-то результата Ну и дальше пишет код Прошу обратить внимание Вот это является ошибкой Ну мы
10:48
это понимаем использовать не будем дальше символьные имена выводов далеко не всех почему-то Ну я это добавил
10:56
вж вот эти выводы в не россеть смотрим предлагает первую функцию для управления
11:04
выбора ведомого тут всё верно можно было конечно не заворачивать в отдельную
11:10
функцию Ну пусть будет так отправка команды через SPI Прошу обратить
11:15
внимание что вот есть вызов передачи через SPI использую
11:21
dma тут всё верно но вот здесь вот посмотрите происходит Что вы видите устанавливается выбор видом опять в
11:28
единицу То есть сейчас я укажу на этой нейросеть она исправит эту ошибку сейчас
11:33
там всё будет написано почему то есть она прекрасно понимает э видит где это
11:39
используется также функция init Ну тут у меня пока никаких Замечаний нет Всё
11:45
хорошо дальше пишет Как должна выглядеть Main всё хорошо смотрим дальше то есть
11:52
это она говорит о том что Это скорее всего уже настроено у вас должно быть с помощью
11:57
qb вот ну а мы конечно же в будущем попросим сделать это нейросеть она
12:04
справится там не совсем успешно и допустит ошибки которые она не сможет
12:11
найти ну без явного указания места где эта ошибка будет нуно об этом ещё поговорим вот Я указываю что есть ли в
12:18
этой функции ошибка SPI transmit то есть вот эти функции что на мне написала я добавил в
12:25
отдельный файл gpt L Вот она выбор ведомого
12:31
Ну и передача Ну массив я вынес С командами вынес отдельно вот объявил его
12:37
как внешний эту функцию я буду вызывать из M Ну тут вроде всё понятно
12:42
возвращаемся обратно gpt указываю что пере спрашиваю
12:49
уверена ли она что вот в этой функции мит Нет ошибка вот я обращал ше внимание том что здесь есть ошибка О это
12:58
ви к этому моменту в примере который я привёл была неточность то есть э функция
13:04
асинхронная Вот передача по dma то есть мы будем продолжать выполнять следующие задачи
13:11
пока в фоновом режиме модуль управления адресация памяти будет сам загружать в
13:18
модуль SPI нужные нам байты из памяти об этом есть у меня видео и про модуль dma
13:24
и про модуль sx1278 и вот здесь то есть когда мы
13:30
начнём передачу мы сразу же отключим ин который отвечает за выбор ведомого ч он Это говорит о том что просто приёмник не
13:37
будет принимать байты переданные с помощью блока Дема и вот здесь неть исправляет нашу ошибку Вот и говорит о
13:45
том что обычно включают этот пин опять в единиц после завершения передачи обычно в колб
13:52
функции так и дальше Вот говорит что SPI – это асинхронная функция Вот видите я
13:59
написал правильно То есть я явно указал на ошибку и после чего она её нашла хорошо смотрим дальше дальше я прошу
14:06
написать код инициализации SPI на работу с SX 1278 конечно это можно было сделать
14:12
в Cub MX и тогда бы не возникло никаких ошибок но вот нам пишет шаги то есть вот
14:18
нам не россеть пишет шаги и вот здесь вот да уже первая ошибка То есть сейчас я покажу В чём была эта ошибка пока я об
14:27
этом ничего не говорю то есть инициализация SPI на работу то есть и что ещё хорошо
14:34
что что она понимает хорошо что она понимает Сам настройку SPI на работу именно с
14:41
этим чипом То есть она правильно настраивает выводы указывает что выбор ведомого программно Ну тут всё правильно
14:49
здесь я изменил проскар на 256 чтобы мы могли в будущем посмотреть
14:54
успешную передачу по SPI на логическом
15:01
анализаторе и дальше она мне пишет что надо проинициализировать SX 1278 то есть вот она опять это
15:08
переписывает что мы использовали ранее конечно же мы это не будем
15:14
переделывать теперь Мы спрашиваем Нужно ли настроить порты ввода-вывода на
15:19
работу с sp1 дальше мы говорим что в такой это функции вот используется D ма
15:26
то есть Нама тоже надо настроить мы указываем на этой сети и она
15:32
вот пишет нам шаги для настройки причём D ма она настроила верно указала
15:38
обработчики прерываний сейчас мы всё это посмотрим то есть всё это определил в MC
15:46
вот файл для настройки портов ввода-вывода порты ввода-вывода
15:53
Я тут настроил самостоятельно вот функции GP Ну я думаю она с этим
16:00
справится тут я не стал её об этом просить дальше мы используем функцию обратного вызова то есть кроме этого вот
16:08
настройка SPI о чём я уже говорил И вот в чём была ошибка которая не нашла то
16:14
есть Нам нужно разрешить работу модуля SPI вот этой вот
16:21
вот этим макросом также смотрим дальше настройка функции тут вс хорошо настроено в
16:29
примере ма она настроила дальше Она говорит что надо нам включить прерывание
16:34
от блока д ма это всё верно я вот только это я сделал функции
16:41
GP вот настроил тут прерывание от канала д ма она мне пишет что нужно добавить
16:47
прерывание то есть для того чтобы обратный вызов происходил блока после окончания
16:55
передачи для того чтобы перевести бит вот в единицу смотрим вот прерывание я
17:02
определил это вот в файле interc хорошо Кстати что она указывает файл в котором
17:07
Это должно быть определено вот всё сделал Как в примере хорошо дальше
17:13
реализация обратных вызовов TX Complete callback то есть
17:18
после успешного окончания передачи по SPI мы переведём выбор ведомого в
17:24
единицу Что я сделал функции MC вот вот это добавил всё тут хорошо
17:31
Теперь я прошу ей написать массив то есть команд Ну вот здесь как мы видим в
17:37
самом начале мы уже спрашивали Она привела нам пример инициализации где был пустой массив теперь как мы видим тут
17:44
используются вот адреса какие-то То есть это адреса которые отвечают первоя адрес
17:52
регистра второе второй байт сами сами биты которые будут туда записаны
17:59
Ну вот откроем документацию посмотрим реально ли у нас этот регистр расположен по этому адресу вот мы видим регистр
18:07
0 то есть Ну по крайней мере название напишет правильно теперь поговорим об
18:14
ошибках то есть вот я вам покажу пример как это реализовано было
18:19
в примере от
18:24
производителя здесь видите указывается Первый БИТ который означает
18:32
о том что будет запись об этом мы уже говорили и после отправки
18:38
устанавливается опять высокое состояние нерас этого не учла то есть и
18:44
наш наши байты не будут распознан как на запись они не будут просто записаны в
18:51
ячейке даже если вот тут ВС правильно это не будет работать на этом этапе
18:57
понял что нет смысла дальше добиваться работоспособности Конечно можно было бы
19:02
указывать на все недостатки и Скорее бы Всего вам удалось бы достичь
19:08
работоспособности этого кода Но если вы понимаете В чём ошибка то есть значит вы
19:14
либо изучаете пример с исходным кодом Либо вы уже
19:19
очень хорошо изучили документацию на Чип и прекрасно понимаете как работает нейросеть и тут вот мы подходим к ответу
19:28
то на первоначальный вопрос может ли нейросеть заменить
19:34
программиста вот на данном этапе развития то есть без подсказок как мы
19:39
видим она не сможет решить эту задачу это работать не будет то есть да
19:45
какие-то простые общие задачи она решает но проще будет конечно же и быстрей
19:51
взять пример этого исходного кода зайти на сайт производителя используемый вами
19:58
периферии найти там примеры библиотеки и уже с помощью этих примеров разобраться
20:04
в исходном коде и написать его самостоятельно Потому что если вы вот этого не знаете не изучили
20:11
документацию либо не видели примеры вы не поймёте Почему у вас это не работает да Хоть она и понимает конечно
20:19
вот где Какие регистры расположены Но что тут будет записываться неправильно
20:24
что сюда ничего не запишется не понимает то есть я вот
20:30
прошу её проверить вот ошибки и она мне пишет вот да прекрасные алгоритмы про то
20:36
как мне правильно нужно действовать то есть проверить пины проверить провести
20:43
настройки SPI проверить что я в принципе и сделал вот по совету не сети проверил
20:48
настройки SPI и нашёл Почему у меня это не работало потому что я забыл при
20:55
настройках SPI при инициализации блока вот разрешить работу этого
21:01
блока Ну ладно Потом она мне говорит Убедитесь
21:07
что вы правильно отправляете команды на Чип то есть опять же вы бы начали искать документацию вы бы нашли эти ошибки но
21:15
нужно ли было Вот тратить время на того на то чтобы добиться работоспособности вот этой нейросети для того чтобы она
21:22
вам сказала о том что вы должны вот сами прочитать эту документацию тогда какой смысл вообще использовать теперь
21:29
проверка подключений Всё мы правильно подключили то есть использование логического анализатора или
21:38
логратко и правильно передаём Но может может быть у нас команды и правильные но
21:44
передача например не происходит и мы это узнаем путём анализа состояния на
21:51
выводах то есть я говорю всё равно что вот у меня проблема Это я не нашёл ещё Почему у меня не работает и вот она мне
21:57
опять пишет как мне нужно действовать алгоритм действий Да алгоритм действий написан
22:04
прекрасно всё правильно действительно для начинающих это может быть и полезной
22:10
информацией кто Вот только начал этим заниматься а также Вот у меня возникла проблема то есть из-за
22:17
непонимания Почему у меня вот здесь сейчас я покажу из-за непонимания определённых
22:24
аспектов реализации языка си вот я функции почему она возникла у меня эта
22:31
проблема функции вот я использую вот эту команду но массив у меня объявлен как
22:38
внешний вот gpt H у меня фай есть и здесь вот у меня
22:44
есть массив коман здесь я как не рать не указывал количество элементов объявлен
22:50
был как внешний этот массив А так как он обв не там не сказал так как он объявлен
22:56
внешний Я просто ВЛ ошибку вот Исеть не объясняет так как внешний
23:02
без указания размера если массив объявлен с ключевым словом компилятор ожидает определение размера массива в
23:09
другом месте Размер должен быть явно указан при определении массива то есть Поэтому функция моя определяла длину
23:15
указателя вот здесь в то есть не размер
23:22
массива уза ма функция не хотела определять
23:32
количество элементов и Вот что хорошо что не это заметила я бы сам наверное и не нашёл эту ошибку Ну или бы нашёл не
23:39
так быстро то есть да она может оказать существенную помощь но никак не Замените
23:45
человека который будет анализировать то что она написала здесь она объясняет
23:51
причину говорим вот вот количество
23:57
э работать что я в принципе сделал подключил логический анализатор как вот
24:02
здесь написано там я уже говорил и схемы также включение приводил теперь поставим
ChatGPT LoRa Логический анализатор
24:08
точки останова Нас интересуют функции обратного вызова поставим точку останова
24:14
интересуют также функции прерывания включаю логический анализатор
24:20
настроен на падающий фронт вывода выбора ведомого запускаю анализатор запускаю
24:27
код всё смотрим были переданы только что наши байты вот видим
24:36
0180 и последняя 0183 то есть проверяем байты
24:43
080 и 0183 всё Как видим байты переданы
24:49
успешно с помощью человека Нера сеть смогла настроить передачу по pii с
24:55
использованием dma теперь тести нейросеть от Microsoft называется на
Copilot Энкодер
25:02
Pilot задание ставлю также как и для Chat gpt я делаю видео на YouTube Где
25:07
будут сравнивать различные нейросети для решения задач программирования я использую STM f103 с библиотекой H
25:14
Запомни это следующие все следующие ответы должны основываться на использовании этой библиотеки росе
25:21
подтверждает что она запомнила микроконтроллер запомнила что будет использоваться H и дальше я ставлю такое
25:27
же задание как ставил то есть что у меня есть инкрементальный энкодер у него пять выводов называю эти выводы ну и дальше
25:35
не россеть пишет код инициализации для подключения моего энкодера так тут всё
25:41
правильно но вот здесь возникает вот эта же ошибка что и была у ча G5 но при этом
25:49
она не забывает добавить же добавить функции инициализации Порто вывода вот
25:56
приоритет прерываний каждого из выводов я переспрашивать ты уверен
26:02
что прерывания должны происходить по двум фронтам и тут вот отличие отча gpt она уверена и доказывает нам что это
26:10
нужно для того чтобы увеличить разрешение точность чтения
26:15
дальше этот код я добавил в Q pde для инициализации портов функции mxgp которая
26:23
создаётся кстати проект Я конфил Ира видим здесь прерывание я
26:29
изменил на по нарастающего фронту вот не расе же мне показалось что надо и по
26:36
нарастающего и по падающему фронту Кроме этого она мне когда Я
26:42
указал на то что прерывания могут может быть не нужно делать прерывание по двум
26:50
фронтам не рать начала доказывать что она уверена что для энкодера обычно
26:56
используется прерывание По обеим для того чтобы увеличить разрешение И точность чтения Ну хорошо я согласился с
27:03
этим попросил написать арабок прерывание также как и
27:09
неть gpt нам предлагает файл в который нужно
27:15
добавить обработчик и здесь есть Отличие в том что у нас обработчик происходит не
27:21
по обратному вызову а непосредственно прини
27:28
и на каждое прерывание она вот запускает обработчика этот код верный Я его
27:35
добавил вот функцию 32 но теперь Я указываю явно В
27:42
чём ошибка То есть первый раз я повернул энкодер у меня войдёт в обработчик прерывания и предположим выполнит код
27:49
после по нарастающего фронту опять зайдёт в это прерывание и выполнит обработчик прерывания снова Зачем
27:57
это здесь вот она уже себя исправляет Вы абсолютно правы Я извиняюсь за путаницу
28:02
и дальше уже мне исправила так как я изначально и написал функции mnc MX GPU
28:10
Unit Ну теперь посмотрим в отладчике всё ли запускается запустил отладку поставил
28:15
точки останова в нужные места Ну и теперь посмотрим что будет происходить
28:21
поворачиваю энкодер влево сначала происходит прерывание ноль Потом происходит прерывание один
28:29
поворачиваю вправо сначала происходит прерывание один потом прерывание ноль теперь
28:36
нажимаю вот происходит обработчик при нажатии на кнопку то есть всё отлично
28:42
код рабочий нерас справилась с этим заданием успешно продолжаю тестировать copilot
28:49
прошу его написать прошу его написать код инициализации Чипа lora SX 1278
Copilot LoRa
28:54
используя дама в библиотеку H для stm32 f103 чип lora SX 1278 распаянная
29:01
все выводы которые у меня есть то есть использую те выводы которые планирую использовать дальше чип lora должен быть
29:07
инициализирован в режиме передачи одного пакета из 15 байт Дальше мне пишет Несе
29:13
пример кода также инициализирует порты ввода-вывода здесь она объявила как
29:18
аппаратное управление альтернативное функции этими пинами которые будут использоваться для SPI этот код в
29:25
будущем будет изменён так как э управление будет происходить аппаратно
29:30
одним из выводов что в принципе и видно из библиотеки тека на этот чип также конфигурируется
29:36
вот эти два Пина для того чтобы использовать Ну планирует она использовать Di порты di1 и 0 выходы
29:45
которые указывают в программе Том Какое событие произошло на чипе Лора но в
29:52
будущем она конечно же не будет делать Этот настройку этих выводов и не будет
29:57
их использовать ну здесь это указано ВС равно также ставит прерывание вот указывает что
30:03
обработчики прерывания 0 чтобы обработать сигналы 01 от Чипа Лора то
30:09
есть вот как я определил в коде вот видно что в
30:16
файле Я указал что пин nss будет у меня управляться програмно дальше это
30:23
исправит по нашей просьбе пока это она е не делает Роме этого тройка выводов
30:28
Также идёт вот функции которая настраивает SPI на работу и здесь вот я определил
30:36
только missa моси и Clock nss как я уже сказал будет управляться программно пины
30:43
э используется как альтернативная функция Ну и настройка прерывания от SPI
30:49
Это всё что нам вот показала нейросеть теперь я говорю что не россеть
30:56
проинициализирован зации Лора для работы в режиме TX инициализации Чипа вот неть
31:02
отвечает что нужна такая структура Вот она тут указывает структуру сразу хочу
31:07
заметить что многие константы она вообще не будет записывать в конфигурационные
31:14
регистры Чипа Лора также в принципе как и чать gpt не стал этого делать Ну
31:20
некоторое значения Она конечно запишет но я скажу заранее что для инициализации
31:25
Чипа Лора на передачу отсут многих записей которые она почему-то не делает
31:30
это нес copilot чип lora работать не будет дальше нам пишет Вот такие функции
31:37
которые нужны для того чтобы начать для того чтобы проинициализировать чип вот
31:44
хорошая запись Мне нравится всё хорошо тут кстати по поводу этой структуры эту структуру я определил вра H Если не
31:50
ошибаюсь и здесь структура Ну кроме этого также я добавил вот эти данные
31:57
которые неть будет записывать в будущем при том что она изначально не добавила структуру
32:04
как мы видим эти записи вот их тут нет но в будущем она почему-то будет их
32:09
использовать то есть вот уже какие-то начинаются Проблемы в том что необходимо понимать что она делает и
32:17
исправлять Эти ошибки дальше лизация Лора процедуру установку
32:26
Лора всем согласен я прошу чтобы она определила функцию SX 1278 ИТ вот дальше
32:35
она определяет и вот начинает прям записывать мне в структуру Лора какие-то вот пины то есть Несмотря на то что до
32:42
этого она вообще о них ничего мне тут не сообщило пришлось мне конечно же добавить
32:48
самому То есть самостоятельно Конечно этот код работать уже не будет но я всё равно
32:55
продолжаю добиваться попыток написать правильный
33:00
код от нейросети вношу изменения с учётом того что она делает для того чтобы хоть как-то заставить это работать
33:07
также вот хочу обратить Ваше внимание о том что вот здесь производит сброс Чипа Лора В отличие
33:14
например от того же ча gpt э вот этого ча gpt не делал и здесь вот она
33:20
прекрасно понимает о том что необходимо перед использованием записью в конвертационный регистры микросхемы
33:26
необходимо сбросить состояние и что она здесь и делает эту функцию не использовал Мне
33:33
это не нужно проверку связи дальше Вот она [музыка]
33:56
закомментировать она в будущем напишет это мы её попросим настраивает
34:02
SPI пока что мы тоже об этом ничего не просили Ну и вот этот сброс
34:07
микроконтроллера теперь я проверяю правильно ли
34:12
она определила выводы Да она уверена в том что выводы определены правильно и Да
34:18
так и есть выводы определены правильно теперь я прошу чтобы она написала
34:24
процедуру инициализации по SPI такую
34:30
функцию тут ВС верно Ну конечно же я изменил как и в предыдущем примере при
34:36
делитель поставил на 256 чтобы можно было что-то увидеть разрешает работу
34:42
модуля SPI Ну в принципе она делает это также она здесь не использует
34:49
макрос разрешение работы модуля SPI это ошибка та же которую
34:56
допустил п Но я это исправлю Кроме этого она определяет ещё одну функцию msp
35:03
init где разрешает тактирование SPI правильно в этот раз настраивает
35:11
правильно настраивает пины на передачу То есть как мы видим здесь она использует будет использовать
35:19
программное управление выводом выбора ведомого Ну это всё правильно я с этим согласен
35:25
здесь вот я это так и написал Вот функция SPI о init всё кроме того что я
35:32
здесь добавил разрешение работы H SPI Ну и дальше SPI msp init Всё я также
35:40
оставил вот здесь как она написала и разрешил прерывание zpi всё как и
35:45
написано было Вот здесь ну продолжаем
35:51
дальше теперь я прошу написать обработчик прерывания от SPI она мне
35:56
пишет в общем виде дальше мы просим уточнить этот Я пока не буду добавлять Хорошо ты настроил SP Pi
36:04
написал обработчик прерывания но функции SX 1278 init ты написал комментарий для
36:09
настройки Лора здесь должен быть код настройки Лора Напиши мне эту функцию настройки которая записывает в регистре
36:16
lor SX 1278 pspi байты для настройки Чипа lora в режим TX она здесь всего
36:22
лишь записывает три регистра этого мало для работы и причём хочу заметить Сразу же переводит
36:28
лору в режим передачи это ошибка э так как мы ещё не записали буфер
36:35
данных то есть после этой команды чип Лора должен начать передавать данные с буфера в эфир но буфер мы не заполнили
36:43
микроконтроллер не настроили то есть здесь уже ошибка Ну ничего страшного я это всё равно добавляю хотя бы Посмотрим на логическом
36:51
анализаторе что передаётся Всё я определил всё хорошо тут со всеми я
36:56
согласен Дальше она сама определяет функцию записи в регистре вот тут всё правильно но что
37:04
тут хорошо в том что она не допустила ошибку связанную
37:11
с отсутствием конфигурации выбора Чипа то есть вот она
37:16
Мы видим что она конфигурируется negative SL Select То есть она выбирает
37:21
чип верно Вот здесь причём чего не учла наша
37:27
предыдущая сеть чат gpt она кроме регистра она
37:32
добавляет значение которая указывает чип Лора о том что
37:39
будет производиться запись После записи адреса причём создаёт буфер из двух
37:47
команд всё здесь Отлично вот это мне решение нравится также примерно как и
37:53
эта функция реализована в библиотеке тека Ну и после передачи она возвращает
38:02
пин опять высокое состояние выбора ведомого тут всё правильно вот я это всё
38:09
добавил запись регистра вот дальше я прошу определить константы которые
38:15
использует нейросеть эти все константы вот я определил в разных файлах вот Main
38:21
H пины определил и в lora си lora H
38:30
определил вот эти константы причём дальше я Прошу уточнить Какие значения должны быть То
38:37
есть те значения которые будут записываться дальше в конфигурационные регистры ра не рассеять эти значения мне
38:46
конечно же вот то есть Я указываю что меня интересуют какие-то конкретные
38:52
константы обс что это но не датс ние мне пришлось искать в документации
39:00
отте то есть библиотеке отте нашл я и записал Ну я планировал то
39:06
что она в будущем всё-таки будет использовать эти значения поэтому я их нашёл и вот здесь
39:12
вот в дефай нах я определил их все теперь я опять прошу что был написан
39:18
обработчик рвание Но в нём не написали код который сй пото в
39:26
будущем её написать код для передачи по DM и она
39:32
почему-то будет писать код для отправки через прерывания который почему-то я не
39:37
смог добиться работоспособности этой части кода Ну об этом Мы ещё поговорим когда будем исследовать код с помощью
39:44
логического анализатора Ну и вот она мне пишет обработчик прерывания здесь я тоже
39:49
не совсем согласен поэтому я прошу чтобы она написала код для
39:56
передачи тно количества байт через SPI теперь я прошу определить два массива 15
40:04
байт для приёма передачи по SPI после напиши код для получения следующего байта данных в обработчике прерывания
40:12
spi1 И вот она мне пишет уже тот код который я туда скопировал и уже использовал Вот то есть она определяет
40:19
массивы она пишет прерывание ВС хороо для отправки для получения вот их в
40:27
файле stm32 interrupt Вот spi1
40:32
обработчик прерываний вот здесь я это добавлял но всё равно у меня ничего не заработало то есть перево перевод Пина в
40:39
низкое состояние не россеть этого не сделала Ну хотя это ошибка потому что мы
40:45
определились с тем что мы будем работать всё-таки с пином выбора ведомого в программном
40:53
режиме поэтому здесь мне пришлось исправить и добавить вот эту часть кода
40:58
Ну и дальше не россети вычисляет Следующий байт данных который в этом массиве и начинает передачу с помощью
41:06
HPI transmit interrupt это тоже неправильно потому
41:11
что мы просили использовать блок dma Ну хорошо то есть здесь я скопировал этот код Теперь прошу переписать мне Set
41:20
TX переписывать всё так же как и раньше Хотя я показываю указываю что явно тут
41:26
много ошибок и справ чтобы было верно то есть я прошу сейчас не россеть
41:34
обратить внимание на те байты которые он отправляет Ну и возможно учесть то что у
41:42
нас ещё много другой информации в структуре Лора которую также необходимо
41:47
перед передачей записать в Конкура онные регистры но всё же она остаётся при
41:55
своём пишет мне всё тоже самое что было до Это всё что я уже
42:00
скопировал поэтому предположим что ну этого будет
42:05
достаточно Теперь прошу написать мне функцию SX 1278 transmit массив данных
42:11
массив с данными определён как внешний Дальше она мне пишет вот такую функцию её использовать не буду потому что мне
42:19
не нравится вот в это вот запись по одному байту в буфер FIFA
42:28
почему-то она записывает тут Хотя в библиотеке от того же симтек байты
42:36
записывается скопом непрерывно она не устанавливает
42:41
указатель на то место Откуда будет производиться запись Ну это всё неправильно я эту функцию не учитываю а
42:49
говорю о том что тоже есть ошибки тут в этом всм Она мне опять пишет совсем
42:56
неправильно штуку с этим я не согласен то есть как-то в разнобой она мне уже три раза
43:03
эти выводы переопределить ней работаем И вообще сомневаюсь о том что с помощью неё можно
43:11
без помощи человека создать какой-либо более-менее работающий сложный код О чём нам
43:19
говорили много раз что это всё возможно Ну это невозможно вот если она так будет каждый раз переопределять не понимать о
43:26
том что она тут делает Вот запись вот в этих процедурах Ну хорошо то есть мы это
43:32
пропускаем и дальше Прошу определить структуру
43:37
ээ причём заметить в этот раз структура вот 1278 которая мы определили она в
43:44
этот раз э учитывает здесь эти данные которые он записал до этого Что странно иногда
43:53
всё-таки она может учитывать то что написала нестабильно причём Ну ладно мы
43:58
это продолжаем то есть определение этой структуры я сделал уже до этого
44:04
самостоятельно где-то здесь эта структура вот эта структура чуть по-другому но смысл я не изменял всё
44:11
равно она это использовать не будет Вот из того что она тут по
44:19
написывает най библиотеки от смка на этот чип То есть это похоже на истину но
44:25
мы продолжаем просим её чтобы она использовала reset настроила наш reset
44:32
Pin который нужен для того чтобы сбросить она опять настраивает всё
44:38
неправильно тут ну в этот раз она настраивает reset Pin Теперь прошу уже
44:45
конкретно так как она не
44:54
сконфигурировать я говорю о том что ну хоро используем SX 1278 transmit который
45:00
отправляет массив байт данных используя рование И вот уже та функция которая мне
45:07
больше нравится всё установка длины пакета переход в режим сна установка
45:13
режима передачи опять ошибка сначала необходимо было
45:18
записать данные в массив модуля
45:25
ра после в режим передачи о ЧМ я уже говорил Ну и вот дальше она мне пишет О
45:34
том что запускается передача p5 с прерыванием
45:40
указывает заголовочные структуру на модуль SPI который мы настроили ранее
45:47
придаёт адрес первого элемента и оказывает что элемент всего один эту
45:52
функцию скопировал хоро заработать у меня почему-то
45:59
вот эта функция записывая три регистра дальше начинает передачу эту
46:06
функцию мы уже рассматривали посмотрим ещё раз на неё вот она это всё прекрасно
46:13
написано Pin wr Rec всё
46:19
хорошо смотрим как настроен ещё раз обработчик прерываний этот обработчик
46:24
прерываний мы уже смотрели всё хорошо и дальше я говорю о том
46:31
что у меня не передаёт почему-то на логическом анализаторе нет никаких
46:39
данных Ну и всё равно у меня закончились сообщения мы здесь лимит в 30
46:46
сообщений Ну не имеет смысла добиваться ра способности если передачи массива
46:53
если у нас неправильно конфигурирован чип Лора Ну теперь по
47:00
поводу работы она неудовлетворительная не россеть
47:05
путается переписывает заново свой код изменяя его при том что изначально он
47:12
может быть был написан и верно забывает о том что она писала ранее и не
47:17
учитывает этого причём не правильно отвечает на первоначальный запрос о том
47:25
что я бы хотел использовать модуль д ма но в целом что-то какой-то
47:31
работоспособности С моей помощью небольшими изменениями удалось достичь что мы и
Copilot LoRa Логический анализатор
47:37
посмотрим на логическом анализаторе всё запускаю отладку в Cub Mix
47:44
конфигурировать всё как обычно минимальные настройки Ну и перейдём к первой точке
47:50
останова эта функция настраивает сейчас вот эта функция в не
47:57
мы уже вс рассмотрели здесь я настраивал
48:04
структуру Можем даже посмотреть вот в теории это те данные которые должна была
48:11
нейросеть отправить в конфигурационные регистры
48:18
Лора Чипа Лора s76 чего она не сделала но она какие-то
48:24
три команды отправляет вот три команды отправляются в этой функции мы
48:31
уже их рассмотрели Ну теперь запустим логический анализатор посмотрим на эти
48:40
команды вот эти три команды сть байт передаётся всё
48:47
правильно первоя байт тоже указывается на запись адрес регистра Ну и значения
48:54
которые записываются по этому регистру дальше перевод выбора выбора ведомого высокое
49:01
состояние снова в низкое опять передаётся байт и тут всё верно теперь вернёмся в следующую
49:07
функцию это Функция которую я не изменял Это всё что написала неть copilot то есть она опять же
49:15
передаёт три команды которые по её мнению должны настроить которых достаточно для того чтобы настроить чип
49:21
Лора теперь перейдём в эту функцию вот эти три команды
49:27
запускаю логический анализатор всё в теории должны были три команды
49:33
отправиться смотрим вот всё все три команды которые по мнению Чипа которые
49:38
по мнению достаточны для настройки Чипа Лора на работу Вот они правильно
49:44
отправились Ну и дальше Вот в этой функции должен был передаться нас массив здесь я ничего не изменял ВС осталось по
49:52
умолчанию но почему-то ничего не передане надоело находить
49:57
есть Это точно не будет работать без человека самостоятельно и чтобы добиться работоспособности надо хорошо
50:04
разбираться в принципе всё тоже о чём я говорил в случае
50:10
с В некоторых случаях э Несе показала лучшие результаты в некоторых худшие Ну
50:16
запустим логический анализатор посмотрим что ничего не передаётся
50:25
вотже перешёл в состояние нулевое Ну хорошо здесь мы это
50:31
делаем как бы эту функцию я сам добавил переводит ногу в состояние которое необходимо для
50:39
передачи вот мы перевели Но почему-то вот мы видим ээ байты вообще не передаётся
50:47
тактирование не происходит что-то нога всегда в нуле по тактирования не знаю в
50:54
чём ошибка Мне надоело искать её я ничего не изменял в коде который мне
51:00
предложила кот отсюда сделаем Вывод
51:06
что для того чтобы добиться более-менее работающего кода с помощью копа надо
51:14
очень хорошо разбираться самому и тогда уже при таких знаниях проще будет
51:19
написать код с нуля своему чем пытаться допи работоспособного кода от
51:27
сети что в принципе было из ча G5 но в этом случае я
51:35
потратил более куда более усилий на то чтобы добиться хотя бы такой
51:42
работоспособности теперь протестируем сеть от Гугла G minini я
Gemini
51:49
пишу у меня есть инкрементальный энкодер у него пять выводов называю выводы напиши мне код инициализации для
51:55
подключения этого ум что нажатия на кнопку поворот ра влево и вправо должны обрабатываться прерывания это надо
52:02
написать на контролер st32 F библиотека вот мне сеть пишет
52:09
определение водов их портов и вот здесь уже пишет обработчик
52:16
прерываний Ну здесь вот мы видим уже ошибка название прерывание
52:25
неправильно энкодера почему-то используют выводы не по прерываниям
52:32
эти почему-то использует пятиволновая
52:56
для микроконтроллера либо питание с его
53:02
линейного стабилизатора который также есть на этой плате в 3,3 в Что я
53:08
делаю то есть это не совсем правильно также в библиотеке л Вот такая
53:13
инициализация вложенных прерываний не используется структура обычно
53:19
пишут приоритет и под приоритет для инициализации так и здесь вот вот так
53:26
вот устанавливается приоритета то есть сначала устанавливается Какое
53:31
прерывание дальше приоритет и под приоритет здесь мы видим неть нам
53:39
почему-то определяет Вот так вот обычно да в библиотеке эта функция не используется не знаю может быть где-то
53:45
она есть в каком-либо из файлов ну здесь изначально код был неверный Ну и устанавливает да питание
53:55
Пина в ноль и питание пятиволновая
54:07
ты уверен что именно так называется прерывание Несе говорит что не уверено
54:14
теперь анализирует ещё разход и вот пишет мне уже правильный обработчик по
54:20
которому просто пытается переключить какой-либо из пинов
54:26
в в обратный режим То есть это это не ошибка это делается энкодер сам
54:33
выставляет нужное положение Поэтому нам нужно было
54:38
задать эти порты ввода-вывода на прерывание То есть она мне определила
54:43
как пуш-пул а мне надо было вот такой режим задавать прерывании по нарастающего А в данном случае в данном
54:50
кодер попадающего фронту Здесь тоже ошибка поэтому вот
54:56
опять же она использует всё тоже и ранее неправильно Хорошо теперь я говорю что почему у меня выходной режим а не
55:04
входной теперь мне пишет что ны должны быть вот в таком
55:09
режиме входной режим Но вот это вот тоже неправильно то есть исправляет код он
55:16
опять неправильный то есть здесь обычно надо было написать какую-либо функцию
55:22
обработчика пустую например задать если мы вс-таки просили просто инициали Ну я не скажу что э
55:29
нейросеть плоха до каких-то задач она хорошо работает Я часто обращаюсь к ней
55:35
для того чтобы получить какие-либо актуальные резюме Ну для своих для задач
55:41
программирования не думаю что она подходит Ну и Google не позиционирует её как нейросеть для написания кода в
55:50
отличие от предыдущей копай от майкрософта поэтому
55:55
Ну для таких задач я скажу сразу что Судя по тому что здесь написано она не
56:01
совсем подходит Возможно это высокий уровень творчество у неё какое-то что вот она сама определяет что вот надо эти
56:08
пины вот Граунд и пин 5 как-то определить я не знаю где где С чего это
56:13
она взяла ссылки Обычно она предоставляет ссылки на Исходный код может предоставить ссылку на библиотеку
56:20
с гитхаба так результаты исследования Я свёл в такую таблицу здесь проводил оценивание по
Результаты
56:29
трёхбалтаево
56:38
требовали подсказок и уточнений э минус считаю что не справилась
56:44
рассмотрим сначала инициализацию энкодера считаю что чать gpt справилась
56:51
с небольшими подсказками э капала также код Я считаю по сложности равнозначный
56:58
поэтому Оценил Одинаково не считаю что не справилась она путалась в названиях функции требовало много подсказок и в
57:05
итоге не достигла поставленной задачи изначально теперь по поводу
57:12
инициализации Лора то есть gpt справился с задачей и реализовал с
57:19
использованием передачу массива Нон не
57:25
с которые необходимо передавать Кроме этого не использовал многие выводы
57:31
распаять Поэтому я считаю что справился но справился не полностью Капай же
57:38
справилась с трудом так как массив команд почему-то мне не получилось передать Но почему я поставил не два
57:45
плюса потому что нейросеть забыла о том что я просил её использовать блок д ма я
57:53
об этом не стал напоминать Ну несмотря на это Она прекрасно написала функции передачи
58:00
байта в конфигурационные регистры лора и поэтому я считаю что она справила с
58:06
задачей вообще можно было конечно же оценить ча gpt copilot одинаковыми
58:12
оценками но всё же часть gpt я читаю получила код с меньшим количеством
58:19
подсказок и при этом более простой и читаемый код копай потребовалось
58:25
проявлять повыше внимание коду много писать всяких
58:32
функций также не использовался dma по поводу gini Ну почему у меня
58:39
такие оценки Ну вообще это не сеть хорошая Но в данной ситуации Я считаю что она не слишком подходит для задач
58:45
программирования Ну вот такие оценки Несмотря на то что я Оценил кат хуже чем
Выводы
58:51
CH gp4 при решении задач конфигурации Лора код Отт мне понравился больше но
58:57
при этом он сложнее для понимания и потребовалось больше усилий чтобы добиться его написания от сети Везде
59:03
есть свои достоинства и недостатки не имеет смысла использовать нейросеть когда её необходимо поправлять и
59:09
сравнивать её код с эталоном так как будет проще изначально найти библиотеку
59:14
с примерами использования и копировать оттуда код так будет эффективнее и известно заранее что библиотека Рабочая
59:22
возможно в будущем всё ещё изменится но на сегодняшний день мой Вывод таков для себя я не вижу проектов программирования
59:29
где Я бы мог применить нейросети всё равно приходится всё проверять а под проверкой
59:35
подразумевается что ты уже достаточно разобрался в вопросе и самому писать код
59:40
пока у меня выходит лучше Хотя я неоднократно в прошлом обращался к нейросети за описанием назначения и
59:46
принципов работы используемых функций мой вывод на текущем этапе развития нейросетей заменить человека Они не
59:53
смогут Хотя показываю значительный потен и Прогресс и возможно с такими темпами
59:58
развития нейросети научатся писать код без человека на этом всё подписывайтесь
1:00:04
на канал Всем пока

Поделиться: