Skip to content

Instantly share code, notes, and snippets.

Created September 26, 2017 04:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/c4d5d69b76bcae3786afea4e9e61cae4 to your computer and use it in GitHub Desktop.
Save anonymous/c4d5d69b76bcae3786afea4e9e61cae4 to your computer and use it in GitHub Desktop.
Avr учебный курс

Avr учебный курс



Ссылка на файл: >>>>>> http://file-portal.ru/Avr учебный курс/


Форум радиолюбителей
AVR. Учебный Курс. Конфигурация FUSE бит
Файлы
























Внезапно наткнулся на совершенно вменяемо оформленную документацию по сишному тулчейну от ATmel , это тот, что встроен в студию. Интересно и давно она существует? А тут все красиво разложено. В разделе Modules есть кратенькое описание всех встроенных функций тулчейна, прям по хидерам. В общем, изучающим AVR будет очень полезно. Вот приспичило вам сделать себе могучую светодиодную хреновину, чтобы моргала и переливалась. Да еще в RGB и плавненько так. Собрали вы это дело, поглядели на количество каналов которыми нужно рулить и призадумались…. Да все с ним хорошо, только аппаратных каналов обычно всего несколько штук. А программный ШИМ имеет ряд недостатков. Да, можно взять и на базе алгоритма управления кучей сервомашинок , используя всего один таймер собрать многоканальный ШИМ, но сколько у нас будет вызовов прерываний? Каждый отдельный фронт потребует своего прерывания на смену уровня. А представьте, что у нас этих каналов будет не 4, а 40? Да контроллер из прерываний вылезать не будет. Прерывания будут налезать друг на друга, порождая джиттер. Не говоря уже о том, что все эти каналы надо будет при любом изменении скважности заново сортировать по длительности. В общем, тупилово будет еще то. Зовется этот метод BAM. Суть его в том, что мы включаем нагрузку импульсами, поразрядно, с длительностью равной весу разряда. В результате мы имеем высокую дискретность, но при этом у нас всего 7 прерываний на любое число каналов. Для связи с сетью для Pinboard II была разработана сетевуха: Вот такой вот модуль:. Иногда приходится делать очень маленькое устройство, например, велокомпьютер. Или конструктив не позволяет разместить много кнопок. В общем есть у нас одна кнопка на ввод и ничего более. Спартанские условия, но и тут можно развернуть мощный функционал, многоуровневые меню и прочие прелести жизни. Поэтому в первую очередь я решил проверить, а можно ли юзать FT в том же режиме, что и FTRL. И пнул дудку в адрес включенной FTDI. Она мне отозвалась, что мол устройство ft0 найдено и работает, но вот контроллер не подключен. Осталось только выяснить соответствие выводов у FT и написать конфиг для avrdude. Все оказалось проще чем я думал. С точки зрения avrdude микруха FT представляет собой всего лишь две FTR которые она видит как ft0 и ft1 ну либо другие ft в зависимости от числа FTDI микросхем воткнутых в систему. А дальше все оказалось совсем элементарно — выводы шины ADBUS принадлежали интерфейсу ft0, а BDBUS устройству ft1. Обновился я тут недавно до AVR Studio 4. Либо компилятся, но не отлаживаются. После недолгого выяснения и теребления народа из сообщества выяснилось, что WinAVR как самостоятельный проект ныне не существует, а полностью перешел под крыло Atmel и ныне зовется AVR Toolchain. Ставить его нужно отдельно с сайта Atmel , предварительно снеся старый WinAVR, поверх студии 4. Ставится он теперь в дебри папки студии. В целом ничего не изменилось, по крайней мере все старые проекты скомпилились без проблем. Обычно для вывода информации сигнального дисплея на HD более чем достаточно. Но иногда нужно нарисовать картинку, график или хочется сделать красиво, с модными менюшками. Тут на помощь приходят графические дисплеи. Одним из самых простых и доступных является дисплей на контроллере KS или аналоге. Например, WGA от Winstar. Сам дисплей вполне свободно достается, имеет довольно большой размер диагональ около 80мм и разрешение х64 пикселя. Хоть резистивный touchscreen и является устаревшим и активно вытесняется емкостными сенсорами, но тем не менее он еще не скоро канет в Лету. Во первых из-за простоты и дешевизны, а во вторых из-за элементарной работы с ним. Конструктив Итак, как он устроен. Там все очень и очень просто. Есть две пленки, сделанные из проводящего материала, а между ними гранулы диэлектрика. Когда касаемся пальцем, то продавливаем зазор между пленками и контачим верхнюю на нижнюю. Ну, а определить координаты касания уже дело несложное. Для этого на каждую пленку нанесено по два электрода. Слева-справа на одной и сверху-снизу на другой. Крест на крест, в общем. Поскольку сопротивление пленки довольно большое, под сотни ом, то образуются как бы два перпендикулярных резистора, висящие друг над другом. Иногда полезно иметь в системе часы отсчитывающие время в секундах, да еще с высокой точностью. Часто для этих целей применяют специальные микросехмы RTC Real Time Clock вроде PCF Вот только это дополнительный корпус, да и стоит она порой как сам МК, хотя можно обойтись и без нее. Тем более, что многие МК имеют встроенный блок RTC. В AVR его правда нет, но там есть асинхронный таймер, служащий полуфабрикатом для изготовления часиков. Почему кварц именно Гц и почему его зовут часовым? Да все очень просто — является степенью двойки. Два в пятнадцатой степени. Поэтому пятнадцати разрядный счетчик, тикающий с частотой Гц, будет переполняться раз в секунду. Это дает возможность строить часы на обычной логической рассыпухе без каких либо заморочек. А в микроконтроллере AVR организовать часы с секундами можно почти без использования мозга, на рефлексах периферии. Асинхронный режим таймера Помните как работают таймеры? Тактовая частота с основного тактового генератора RC внешняя или внутренняя, внешний кварц или внешний генератор поступает на предделители, а с выхода предделителей уже щелкает значениями регистра TCNT. Либо сигнал на вход идет с счетного входа Тn и также щелкает регистром TCNT. Для этого на выводы TOSC2 и TOSC1 вешается кварцевый резонатор. Низкочастотный, обычно это часовой кварц на Гц. На Pinboard он смонтирован справа от контроллера и подключается перемычками. Причем тактовая частота процессора должна быть выше как минимум в четыре раза. У нас тактовая от внутреннего генератора 8Мгц, так что нас это условие вообще не парит: Часовой кварц вешается просто на выводы. Без конденсаторов и каких либо заморочек. Данная статья является продолжением предыдущей о подключении клавиатуры к МК с помощью трех сигнальных проводов. В этой часте я расскажу вам о том, как увеличить число кнопок на клавиатуре до 16, опишу алгоритм обработки нажатий этих кнопок и то, как ассоциировать с каждой кнопкой свою функцию. Аппаратная часть Как вы уже догадались, чтобы подключить дополнительные кнопки к блоку клавиатуры, нужно добавить дополнительный сдвиговый регистр, который будет захватывать нажатия других восьми кнопок. Ниже приведена блок схема этой конструкции:. Рассмотрим режим работы, когда при каждом клике ногой CLK происходит сдвиг битов влево по направлению к старшему S0 поднята, S1 опущена. Взглянем на сдвиговый регистр U1. Но так как биту, который находится на ноге Q7 уже некуда сдвигаться, то он по идее должен бы был пропасть. Чтобы этого не произошло, мы посылаем его на следующий сдвиговй регистр U2, подключив Q7 регистра U1 к ноге SR SER регистра U2. Объясню, что же это за нога. В рассматриваемом нами режиме работы сдвигового регистра S0 поднята, S1 опущена биты смещаются в cторону старшего, а на место младшего становится бит, который в данный момент находится на ноге SR SER. Так как два наших сдвиговых регистра тактируются от одного источка микроконтроллера , то бит на ноге Q7 сдвигового регистра U1, при сдвиге не теряется, а перескакивает на сдвиговый регистр U2, где продолжает свой путь в микроконтроллер. Часто возникает необходимость использования в своем проекте большого количества кнопок для различный целей. Существуют разные варианты реализации данной задачи. Сегодня я расскажу вам о решении, которое пришло мне в голову однажды вечером. Тогда мне нужно было повесить клавиатуру на контроллер с ограниченным количеством свободных ножек. Скорее всего данное решение уже описывалось и использовалось где-либо ранее, но упоминаний в интернете я не нашел. Суть Подключение клавиатуры осуществляется по трем сигнальным проводам. Максимальное количество кнопок ограничивается лишь максимально допустимым временем на сканирование клавиатуры. Я использовал в своем проекте 16 кнопок, но путем добавления новых сдвиговых регистров, можно увеличить данное число до необходимого вам значения. Вас будет ограничивать лишь пропорционально возрастающее время сканирования клавиатуры. Аппаратная часть Сдвиговые регистры — вещь довольно удобная за счет своей дешевизны и универсальности. Их часто используют для подключения светодиодов, семисегментных индикаторов и т. В нашем случае, будем проделывать почти все тоже самое, но в обратную сторону: Для наглядности привожу блок схему работы данного устройства:. Блок клавиатуры представляет собой набор кнопок, которые одним выводом подключены к земле, а другим подключаются к соответствующему входу сдвигового регистра. При построении разных роботов порой приходится использовать несколько сервоприводов. А если это какой-нибудь шестиногий паук, то приводов там этих просто тьма. На форуме кое кто даже сокрушался, что ему бы для этих целей плисину применить. Хотя на кой черт там ПЛИСка, когда с рулением даже трех десятков сервоприводов справится самый рядовой микроконтроллер, затребовав под это дело всего один таймер. Итак, кто не помнит как управляются сервы может прогуляться в старую статью и освежить знания. На каждую серву со своей ноги контроллера должна идти такая вот последовательность. Как сгенерировать эту бодягу? Импульсы медленные — всего то 50Гц, меняются тоже нечасто — серва штука инерционная, поэтому даже сто раз в секунду ей не подергаешь. Так что времени на обработку у нас вагон и маленькая тележка. Сами импульсы будут генерироваться одним таймером, в фоновом режиме. Все импульсы стартуют одновременно, выставляя свои уровни в 1. Затем в таймер, в регистр сравнения, заносится время длительности первого импульса. По прерыванию сравнения происходит:. При разработке программ для микроконтроллеров МК работа с внутренний и внешней периферией является очень важной частью а иногда и единственной программы. Это своего рода фундамент, на котором основывается более высокоуровневая логика программы. От эффективности взаимодействия с периферией напрямую зависит эффективность программы в целом. Под эффективностью здесь следует понимать не только скорость выполнения и минимальный размер кода, но и эффективность написания и сопровождения кода. Многие внешние устройства подключаются к МК через порты ввода-вывода общего назначения GPIO. Эффективность взаимодействия с этими устройствами во многом зависит от способа работы с портами ввода-вывода. Почти для всех проектов на микроконтроллере с экранчиком требуется система меню. Для каких-то проектов одноуровневое, для других — многоуровневое древовидное. Памяти, как обычно, мало, поэтому хочется запихнуть все во флэш. Попутно, из проекта в проект, развивалась своя псевдоОС — таймеры, события, диспетчеры. Я ее полностью писал на си, оптимизацией и вылизыванием еще не занимался. Перебирая разные системы, наткнулся на MicroMenu:. Попробуем разобрать ее на части и прикрутить к системе. Про инкрементальный энкодер и про обработку его сигналов с помощью МК уже была статья. Вроде-бы ничего сложного — два бита текущего состояния, два бита предыдущего — автомат с 16 состояниями. Рассмотрим эту задачу ещё раз с позиции максимально эффективной по скорости и размеру кода обработки сигналов множества энкодеров одновременно. Всего 4 бита — 16 состояний. Запишем все возможные состояния в таблицу. Такая ситуация теоретически может иметь место если энкодер это две оптопары и колесо с отверстиями, причем размер отверстия меньше расстояния между оптопарами. На практике это встречается редко, по этому будем иметь этот случай ввиду, но учитывать не будем. Энкодеры бывают абсолютные — сразу выдающие двоичный код угла и инкрементальные, дающие лишь указание на направление и частоту вращения, а контроллер, посчитав импульсы и зная число импульсов на оборот, сам определит положение. Если с абсолютным энкодером все просто, то с инкрементальным бывают сложности. А дальше пляшем от типа энкодера. А они бывают разные. Введение На написание данной статьи меня сподвигло практически полное отсутствие какой либо вменяемой информации по теме бутлоадеров на русском языке, и конкретно для чипов основанных на архитектуре AVR. В общем то DI как то писал о вкусностях этих тулз для пользователей будь то мобила, либо девайс в труднодоступном месте, но процесс работы самого кода подробно не был рассмотрен. И в один прекрасный день мне на работе дали партийное задание — разработать систему позволяющую дистанционно обновлять прошивку кое-каких устройств, сами железки стоят под взрывозащитными кожухами в шахтах на значительной глубине. Лазить туда и разбирать каждый девайс чтобы воткнуть шлейф ISP понятное дело не самая лучшая идея, однако устройства соединены интерфейсом RS это позволяет использовать бутлоадер в проекте. Конечно можно взять один из OVER чем готовых бутлоадеров на Сях и доработать напильником, переделать под задачу, но мне давно было интересно разобраться в теме самопрошивки МК. И, думаю, не только мне, поэтому вооружившись даташитом и найдя скудную документацию на утилиту AVRprog я сел за AVR Studio изобетать велосипед — писать свой загрузчик. Естественно на асме под 8ми битки только на асме пишу. Так, для разгрева, разработаем проект бутлоадера с прошивкой по RS и поддержкой протокола AVRprog v1. Часто бывает так, что приходится обрабатывать жутко нелинейные величины, задаваемые каким-нибудь извращенным законом. Простейший пример — датчики расстояния SHARP GP2D Только поглядите на его характеристику:. Сам черт ногу сломит, а ведь нам бы неплохо иметь выход в человеческих величинах, ну или, хотя бы, линейно зависящие от расстояния. Вариантов тут, на самом деле, всего два. Первый очень быстрый, но жадный до памяти ПЗУ — табличный. То есть мы просто берем и эту кривулину расписываем в памяти. Например, у нас с 8ми разрядного АЦП идет значение напряжения от 0 до , а мы на каждое значение создаем в памяти значение расстояния. Тогда с АЦП сразу гоним в индекс массива, где эти значения хранятся и получаем расстояние:. Недостаток один — прожорливость до памяти, растущая в геометрической прогрессии с ростом разрядности АЦП. Вариант второй — написать функцию, переводящую одну величину в другую. Про шину IIC я писал уже неоднократно. Вначале было описание протокола , потом пример работы в лоб , а недавно камрад Ultrin выложил пример работы с i 2 c на базе блока USI. Да и в интернете полно статей по использованию этой шины в своих целях. Одно плохо — все они какие то однобокие. Да еще и на программном мастере. И ни разу я не встречал материала, чтобы кто то сделал Контроллер-Slave или описал многомастерную систему, когда несколько контроллеров сидят на шине и решают арбитражем конфликты передачи. Пустоту пора заполнять, решил я и завязал узелок на память… Да только веревочку пролюбил: Обещаного три года ждут, вот я таки пересилил лень, выкроил время и сообразил полноценную библиотеку для работы с аппаратным модулем TWI, встроенным во все контроллеры серии MegaAVR. Кошмар на крыльях ночи Во-первых, я сразу же отказался от концепции тупого последовательного кода. Когда у нас есть некоторая функция SendByte Address,Byte которая шлет данные по шине, а потом возвращает 1 или 0 в зависимости от успешности или неуспешности операции. Метод прост, дубов, но медленный. Да, шина i2c может быть очень быстрой. До кбит ЕМНИП, но даже это время, а я все же за высокоскоростное выполнение кода, без тормозных выдержек. Наш выбор — диспетчеризация и работа на прерываниях. Суть в том, что мы подготавливаем данные которые нужно отослать. Дальше запускаем аппаратуру передачи и возвращаемся к своим делам. А зверский конечный автомат, что висит на прерывании TWI передатчика сам передает данные, отвлекая основную программу только тогда, когда нужен какой-либо экшн например сунуть очередной байт в буфер передачи. Когда же все будет передано, то он генерит событие, которое оповещает головную программу, что мол задание выполнено. Ну это уже от конкретной реализации событий программы зависит. Может флажок выставить или байт состояния конечного автомата подправить, а может и задачу на конвейер диспетчера набросить или Event в почтовый ящик задачи скинуть. Возникла необходимость использовать EEPROM совместно с контроллером ATTiny Соответственно выбор пал на AT24C64, работающую по интерфейсу I 2 C TWI по атмеловской терминологии. Порыл в документации и в инете — с виду вроде все просто, но при реализации алгоритма несколько раз возникали вилы нигде толком не обозначенные, поэтому решил написать статейку. Я не мега-гуру, поэтому если будут ошибки или недочеты — надеюсь спецы в комментах поправят. Код буду приводить на Си в простом быдло-кодерском исполнении, так как пока нет нужды заморачивать более сложные варианты. Теперь обо всем по порядку…. Электроника для всех Search. Форум Сообщество Чат Магазин Ссылки Справочная Язык программирования С 1. Использование комментариев в тексте программы 1. Целый тип данных 1. Данные плавающего типа 1. Переменные перечислимого типа 1. Переменные с изменяемой структурой 1. Определение объектов и типов 1. Операнды и операции 1. Преобразования при вычислении выражений 1. Операции отрицания и дополнения 1. Операции разадресации и адреса 1. Операции увеличения и уменьшения 1. Оператор do while 1. Определение и вызов функций 1. Вызов функции с переменным числом параметров 1. Передача параметров функции main 1. Исходные файлы и объявление переменных 1. Время жизни и область видимости программных объектов 1. Инициализация глобальных и локальных переменных 1. Методы доступа к элементам массивов 1. Указатели на многомерные массивы 1. Операции с указателями 1. Динамическое размещение массивов О проекте. Учебный курс AVR Libc Reference Manual AVR. Учебный курс 5 Март DI HALT 5 Comments. Или это я просто слоупок и она была всегда? Учебный курс 27 Апрель DI HALT 52 Comments. Интегрируется все аналогично обычному ШИМу. Но есть ряд нюансов: Частота плавает и на малых разрядах она повышается. Для светодиода или грелки это наплевать. А вот двигатель или еще какую нагрузку с реактивными элементами вроде обмоток или емкостей я бы таким сигналом питать не стал. При переходе с малых весов к одному большому наблюдается мерцание. Но с этим можно бороться, подробности ниже. Выдавать вес лучше с большего к меньшему, так меньше заметно влияние второго пункта. Учебный курс , Готовые устройства 5 Июнь DI HALT 82 Comments. Вот такой вот модуль: Учебный курс 4 Май DI HALT 37 Comments. Итак, что у умеет наша кнопка? Учебный курс , Готовые устройства 1 Октябрь DI HALT 83 Comments. Учебный курс , Новости 1 Октябрь DI HALT 84 Comments. Чтобы вам не париться с регистрацией на сайте Atmel я бросил пару файликов: Учебный курс 27 Июль DI HALT Comments. Учебный курс 28 Июнь DI HALT 43 Comments. Учебный курс 26 Апрель DI HALT 63 Comments. Первым делом нам нужен часовой кварц на Герц. Учебный курс 4 Февраль Medik 28 Comments. Ниже приведена блок схема этой конструкции: Учебный курс 3 Январь Medik Comments. Для наглядности привожу блок схему работы данного устройства: МК Блок клавиатуры представляет собой набор кнопок, которые одним выводом подключены к земле, а другим подключаются к соответствующему входу сдвигового регистра. Учебный курс , Робототехника 8 Октябрь DI HALT Comments. Возьмем, для начала, 8 сервомашинок. На каждую серву идет вот такой сигнал: По прерыванию сравнения происходит: Учебный курс 12 Сентябрь Neiver 75 Comments. Тут возникают два, на первый взгляд, противоречивых требования: Учебный курс 16 Май Steel. Перебирая разные системы, наткнулся на MicroMenu: Учебный курс 6 Апрель Neiver 20 Comments. Учебный курс 5 Апрель DI HALT Comments. Энкодер это всего лишь цифровой датчик угла поворота, не более того. С Энкодера выходят два сигнала А и В, сдвинутых на 90 градусов по фазе, выглядит это так: Учебный курс 1 Апрель Exp10der 38 Comments. Учебный курс 12 Март DI HALT 48 Comments. Только поглядите на его характеристику: Тогда с АЦП сразу гоним в индекс массива, где эти значения хранятся и получаем расстояние: Учебный курс 25 Февраль DI HALT Comments. Учебный курс 25 Февраль Ultrin 42 Comments. Теперь обо всем по порядку… Примечание: Учебный курс MegaHard Lab MSP Учебный курс Автоэлектроника Готовые устройства Диагностика и ремонт Инструмент Книги Начинающим Новости Радиолюбительские Технологии Робототехника Софт Регистрация Войти RSS записей RSS комментариев WordPress.


Лазерная коррекция зрения в казахстане
Реквием по мечте текст билли
Найти интеграл 1 log x
Primary Menu
Чертами глобальных проблем являются
Как настроить веб камеру на компьютере
Рюкзак для металлоискателя своими руками
DI Halt. AVR. Учебный курс. 2008
Структура центрального аппарата фтс россии
Ir2110 схема сварочного инвертора
Архив рубрики «AVR. Учебный курс»
Алгоритм технологическая схема кролиководческой фермы
Пример расчета лизинговых платежей
Расписание автобуса томск курлек 133
Архив рубрики «AVR. Учебный курс»
Какое давление в шинах форд куга
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment