Уже в продаже: первая в своем роде книга «BEAM-робототехника. От азов до создания практических устрйств». Книга для кружков робототехники и самостоятельного обучения на дому. Книга доступна по цене 699 руб Подробнее о книге
Здравствуйте! Недавно начал увлекаться микроконтроллерами, а именно их программированием. На данный момент работаю только в симуляторах (Proteus, VMlab и т. д.), но в скором будущем перейду на реальное железо.
Тем не менее, подумал что мне очень понадобится разные библиотеки, для упрощения роботы с МК, не работать же всегда через регистры (на данный момент пишу на чистом Си, компилятор WinAVR). Начал я штурмовать UART (Универсальный Асинхронный Приемо/Передатчик) в народе называемый RS-232 или СOM (хотя это не правильно), так как он будет очень полезен для отладки программ, и вообще Я ориентирован на робототехнику для меня это очень полезная штука! Если купить радио-модули можно дистанционно управлять роботом отправлять разную информацию на ПК и много разных вкусностей. Очень бы хотелось знать как библиотека поведет себя в Реальных Условиях, если вам не лень прошу протестировать ее и сообщить мне о результатах.
Приведу простой пример работы с ней (некоторые функций очень похожи на Паскаливские :-)
Code
#include <avr/io.h> // стандартные библиотеки #include <util/delay.h> #include "uart_driver.c" // собственно моя библиотечка
#define F_CPU 1000000UL // частота МК #define MAX_LINE_LENGHT 40 // макрос определения максимальной длины строки ввода/вывода
int main(void) { char name[MAX_LINE_LENGHT]; // строка в которой будет храниться имя пользователя unsigned int delete; // метка которое указывает сколько по что удалять
uart_init(9600); // в качестве параметра функция принимает //бауд-рейт uart_write("UART INIT COMPLET...\r"); // выводим сообщение об успешной инициализаций uart_write("START WHILE!"); // начало главного цикла delete = cSend; // сSend – счетчик отправленных символов, здесь мы вставляем //метку которая указывает по что удалять while (1) { uart_write("\rHellow! My name is Linch! What you the name? "); // Привет! Меня зовут Линч! Как тебя зовут (перевод) uart_readln(name); // cохраняем имя в строке name (после ввода имени нужно нажать enter) uart_write(name); uart_write(" it's cool name! \r"); uart_wait("Plees press enter...\r", '\r'); // Выводим сообщение и ждем нажатия клавиши (в данном случае enter'a) for (int i = 1; i <= 3; i++) { uart_write_int(i); uart_putc('\!'); _delay_ms(1000); uart_write("\b\b"); } uart_write("\rRESTART WHILE!"); _delay_ms(1000); uart_clr(delete); } return 0; }
Вот такие проги :). В будущем планирую создать библиотеки для каждого модуля (АЦП, ШИМ, Таймеры, SPI и т.д. и т.п.). Все вопросы, пожелания, предложения, (жалобы!?) прошу отправлять в ящик sciencefan@yandex.com , или пишите в комментариях. Весь код является полностью открытым(Open Source, однако :). Код хорошо комментирован, полное описание находится в самом файле библиотеки. Если есть идей что можно добавить, убрать, оптимизировать пишите вместе и обсудим. При копирование/распространений прошу указывать автора (то есть меня). С уважением Савчук Александр…
Попробовал скомпилировать в AVRGCC3.3.2.31 без оптимизации и получил 14 ошибок: http://bsvi.ru/10506125ab256 Еще варнинги насчет константы F_CPU, т.к. она определяется после подключения delay.h и uart_driver.c а не до. Вынес прототипы функций в .h файл, определил переменную cSend в uart_driver.c и _cSend в uartDriver.c, исправил ошибку на строке:
Code
uart_wait("Please press enter...\r", '\r');
Надо так, а то ожидания не происходит:
Code
uart_wait("Please press enter...", '\r');
Пробую ввести имя через Terminal by bray и не вводится оно. В остальном работает в железе на atmega32. Занимает всё это 1 кб памяти с оптимизацией по размеру.
uart_clr(), cSend какая-то, переменная delete, зачем это всё? Лучше не выносить это за пределы uart_driver.c
А вообще вот такого набора функция для работы с юартом достаточно (см. See also): http://arduino.cc/en/Serial/Begin Добавить еще прерывания и будет вообще хорошо Подключить прерывание можно так: передаем в функцию, которая включает прерывание указатель на функцию, которая вызовется когда произойдет прерывание. Т.е. также как в Procyon avrlib в файле uart.c
Попробовал скомпилировать в AVRGCC3.3.2.31 без оптимизации и получил 14 ошибок:
Ухты не ожидал что кто то отзовется, nightmare спасибо за роботу которою вы проделали! Вот мне уже МК пришел (тоже кстати ATmega32) на будущее буду болле детально свой софт тестировать. nightmare еще раз спасибо!
Открыт набор на БЕСПЛАТНОЕ ОБУЧЕНИЕ в кружке BEAM-робототехника на 2022 - 2023 год!
Для учащихся г. Санкт-Петербург: Уважаемые учащиеся и родители! Мы сообщаем Вам о начале открытой регистрации в кружок "BEAM-робототехника (радиоэлектронные системы управления)" Центра робототехники Президентского физико-математического лицея №239 на новый 2022-2023 учебный год!
Записаться в нашу группу может совершенно любой учащийся города Санкт-Петербург в возрасте от 10 - 18 лет. Обучение в кружке полностью бесплатное. В рамках обучения в кружке ребята получат необходимые теоретические и практические знания по электротехнике, схемотехнике, созданию электронных схем и своих собственных печатных плат для роботов. Научатся работать с ручными инструментами, 3D-принтерами для изготовления деталей робота, лазерным станком для изготовления корпусов робота. Количество свободных мест - ограниченное, успейте подать Вашу заявку первыми! Перешлите этот пост своим друзьям и знакомым, кого может заинтересовать BEAM-робототехника
***
Давайте поближе разберемся, что же мы изучаем на кружке BEAM-робототехники. И так, приступим:
1. Вы начинающий робототехник Смотрите видео BEAM-робототехника
Вы новенький в робототехнике. Вам интересно это современное направление, вы очень хотите научиться создавать крутых роботов самостоятельно, но вы пока не знаете как именно это делать? Не беда! Мы с удовольствием обучаем начинающих робототехнике всем необходимым навыкам настоящего робототехника, с которыми в последствии вы с легкостью будете собирать крутых роботов , участвовать в соревнованиях , выставках или просто делать крутые поделки для себя. Для этого мы открыли специальное направление: Радиоэлектроника (#BEAM-роботы). В ходе обучения в этом кружке вы научитесь понимать и разбираться в электронике - знать что такое резистор, транзистор, светодиод, мотор и как это работает. Закон #Ома - куда же без него :) Вы изучите схемотехнику - будете разбираться и уметь читать схемы - без этого робота не сделать. Вы научитесь делать свои собственные платы роботов (куда паяют детальки по крутому - без проводков!) Вы поработаете с механикой - нужно знать как и каким образом использовать моторчики, редукторы и различные хитрости их применения. Конечно же научитесь правильно и профессионально паять - это очень важно, иначе ваши роботы постоянно будут разваливаться. Также в рамках этого кружка вы сможете собрать несколько роботов для участия в соревнованиях, и выставках, так как мы считаем, что ваш творческий потенциал очень важен для робототехники в целом.
***
В этом году мы соберем с вами шагающих роботов, будем участвовать в соревнованиях "шагающих роботов", роботов для "следование по линии", роботов для участия в "сумо", а также в творческих выставках.
*** 2. Как подать заявку в кружок?
Прошлый год показал, что желающих заниматься аналоговой робототехникой, создавать beam'ов и участвоват ьс ними в соревнованиях - достаточно много. Поэтому на новый учебный год мы решили увеличить количество мест, создав две группы.
Первая группа по BEAM-робототехнике #261РЭ Радиоэлектроника (BEAM-роботы). Эта группа рассчитана на ребят, кто только начинает изучать робототехнику и кому необходимо получить базовые знания по электротехнике, схемотехнике, и самим бим-роботам. Для того, чтобы записаться в группу 261РЭ , вам нужно пройти по этой ссылке https://robofinist.ru/educationcenter/main/groups/id/1?groupId=796 (кликай) и заполнить анкету (чтобы подать заявку - сперва зарегистрируйтесь на сайте Робофинист как "ученик". Обязательно сохраните логины и пароли - потом они вам очень понадобятся!).
Вторая группа по BEAM-робототехнике #371РЭ Радиоэлектроника (BEAM-роботы). Эта группа рассчитана для учащихся, кто уже сталкивался с направлением BEAM или сам изучал электротехнику и схемотехнику, кто уже принимал участие в соревнованиях с этими роботами. В рамках этой группы мы будет улучшать ваши теоретические и практические навыки, создавать сложных роботов и большую часть занятий посвящать интересным проектам и соревнованиям. Для того, чтобы записаться в группу 371РЭ , вам нужно пройти по этой ссылке https://robofinist.ru/educationcenter/main/groups/id/1?groupId=797 (кликай) и заполнить анкету (чтобы подать заявку - сперва зарегистрируйтесь на сайте Робофинист как "ученик". Обязательно сохраните логины и пароли - потом они вам очень понадобятся!).
Преподаватель данного направления: Мельников Сергей Алексеевич, педагог дополнительного образования Президентского физико-математического лицея №239, руководитель образовательного проекта SERVODROID - Центр робототехники для начинающих. Группа № 261РЭ и 371РЭ. Будьте внимательны, при заполнении анкеты.
*** Краткий план годового обучения:
1. Повторение теоретических знаний по электротехнике, схемотехнике, радиоэлектронике. Закрепление знаний на практике на основе создания самых простых конструкций роботов.
2. Создание роботов для участия в соревнованиях и выставках. Творческие проекты. Много много соревнований
3. Закрепление знаний для дальнейшего перехода с аналоговой робототехники (от BEAM-роботов) к цифровой робототехнике (роботам на Arduino). На последних занятиях вы соберете BEAM-ARDUINO подобного робота ;)