среда, 15 июня 2016 г.

2.12. Выходной сдвиговый регистр

Урок: 2.12. Выходной сдвиговый регистр

Транскрибация урока: Мы же сейчас в нашем эксперименте будем использовать другую микросхему, которую называют «выходной сдвиговый регистр», маркировка ее 74HC595, и в ее data sheet, ее описании, я предлагают разобраться самым стойким, а по умолчанию, мы снова будем рассматривать ее как черный ящик, потому что это не самая простая микросхема, но очень полезная. Ее основное предназначение — это расширение портов. С помощью нее мы можем использовать всего 3 пина Arduino и получать 8 выходов. То есть как это происходит? Мы последовательно, через 1 пин передаем в микросхему 8 бит информации. То есть там, 0, 0, 0, 1 1, 0, 1, в общем, нужные комбинации. Еще один пин служит для того, чтобы синхронизировать эту передачу данных. И третий пин позволяет подать команду на одновременный вывод этих 8 бит на 8 ножках микросхемы. Сейчас я вам покажу схему, по которой я собирал эксперимент, и вы, пожалуйста, очень внимательно ее изучите. За основу схемы я взял один из iii экспериментов. Спасибо ребятам, что когда-то эту сложную схему отрисовали. Я убрал из него кнопку, потому что она будет нам не нужна. Давайте посмотрим что здесь осталось: собственно сам сдвиговый регистр, с улыбкой слева семисегменник, в том виде как он был у нас установлен на макетку, только теперь его ножки подключены не напрямую к Arduino, а к выходам в сдвиговый регистр. Теперь через него он будет получать команды на включение тех или иных сегментов. А сам сдвиговый регистр получает данные и команды через вот эти 3 провода. То есть 8 бит данных в него загружаются, а потом по команде отправляются на выходы, то есть на семисегменник в нашем случае. Также обратите внимание на то, что некоторые из ножек микросхемы, помимо основной земли и питания, также могут быть подключены к земле или питанию, это обусловлено логикой ее работы. Теперь давайте посмотрим на эту страшную схему в сборе и будем рассматривать скетч. Выглядит действительно устрашающе, даже хуже чем на схеме, потому что на схеме, для большей читаемости, некоторые пути сигнала были удлинены, например, 6-ой вывод семисегменника идет через резистор, сначала вот сюда, а потом сюда, и потом только к сдвиговому регистру. Я же этот путь сократил, то есть провод после резистора сразу идет в микросхему. Теперь будем разбираться с программой. В начале, как всегда, определены пины Arduino. В данном случае это пины, управляющие сдвиговым регистром: DATA_PIN 13-й, к нему передаются данные, LATCH_PIN, это так называемый STROKE, который будет давать команду регистру отправить вовне, то есть далее, все 8 бит. И CLOCK_PIN, который служит для синхронизации отправки данных. Затем заведены целых 10 переменных типа byte. Переменные — типа byte, соответственно, можем хранить 1 байт информации, 8 бит, и как раз нам это будет удобно? потому что мы можем сохранить кодировки символов, то есть цифр, которые будем выводить в виде байт. Что я имею ввиду? Для того чтобы отобразить какую-либо цифру, нам нужно включить те или иные сегменты индикатора, а какие-то, соответственно, оставить выключенными. Поскольку сегментов всего 8, считая точку, это можно закодировать в виде 8-ми бит информации, в виде 8-ми нолей и единиц. Для этого эти 10 переменных и созданы. В каждую из них записана комбинация 0 и 1 такие, что при выводе их с выходов сдвигового регистра будут зажигаться ровно те сегменты индикатора, которые составляют данную цифру. То есть d0 отправляет вот такие вот сегменты, которые составят 0, например. d1 включит только 2 сегмента, которые представляют собой 1. И так далее. Для того чтобы записать данные в виде последовательности бит, используется вот такой вот, вот эти вот 2 символа 0b, и далее 8 бит, которые составляют тот самый байт. Давайте смотреть, что происходит далее. В setup я настраиваю все 3 выхода, работающие с микросхемой на выходах, на которые мы будем направлять данные. И устанавливаю соединение с компьютером. Раньше мы уже научились отправлять данные на компьютер, а в данном примере очень удачный случай научиться их получать с компьютера. Именно этим мы далее и занимаемся. Что происходит когда Arduino получает с компьютера какие-то данные? Они сохраняются в специальном буфере, длиной до 64 символов. И с помощью метода available, который определен тоже в стандартной библиотеке и относится к объекту Serial, мы можем посмотреть есть ли в буфере какие-то данные. Соответственно, мы делаем сравнение. Если количество информации в буфере, то есть количество байт > 0, то есть там что-то есть, мы начинаем разбирать что же туда пришло. Здесь мы создаем переменную digit еще одного нового для нас типа char, то есть «символ». Поскольку по последовательному порту Arduino и компьютер обмениваются символами, мы будем сохранять 1 символ. Чтобы его прочитать из буфера, мы используем опять же стандартный метод read, относящийся к объекту Serial. То есть, если у нас в буфере что-то есть, то есть данных > 0, мы сохраняем это в переменную char. А дальше занимаемся тем, что разбираем что же именно пришло. В данном случае нас интересует всего 10 возможных вариантов, 10 цифр. [ПАУЗА] Я пишу: если переменная digit, то есть то, что мы только что прочитали из буфера = 0, мы начинаем работать с микросхемой. Для начала записи данных в нее нужно вот этот вот LATCH_PIN поставить в положение LOW. После чего я использую стандартную функцию, предоставляемую Arduino, shiftOut. Она как раз предназначена для последовательного вывода с каких-то битов информации на определенный пин. То есть, я ей сообщаю на какой пин отправлять данные, сообщаю какой пин является пином для синхронизации. Затем, вот этот вот параметр LSBFIRST говорит о том, с какого бита, со старшего или с младшего, начинать отправку данных. В нашем случае используем такой вариант. А затем, собственно, сообщаю те данные, которые нужно отправить. Если мы прочитали в буфере 0, то мы оправляем переменную в d0, в которой хранится комбинация 0 и 1, которая включает сегменты, составляющие 0. После чего, работа с микросхемой кончается отправкой HIGH на вот этот вот LATCH_PIN. В этот момент микросхема на свои 8 выходов подаст соответствующие сигналы, которые к ней пришли. И дальше мы обнаруживаем еще одну новость, касающуюся использования оператора if. Помните, ранее мы могли использовать его в совсем короткой форме и сделать какие-то действия, только если условие выполнено. if «что-то истинно, сделать то-то». Затем добавилось альтернативное действие, которое нужно предпринять, если условие не выполнено. Мы использовали оператор, ключевое слово else. На самом деле, их можно скомбинировать, построить вот такую конструкцию else if, то есть «иначе если». Как это выглядит в целом? Если выполнено условие 1, то нужно выполнить вот этот набор действий. Иначе, мы хотим проверить другое какое-то условие. То есть, условие № 2, в данном случае, пришла ли к нам 1, символ 1. Если да, будем выполнять вот этот фрагмент. Иначе, если это было не 0 и не 1, мы проверим третий вариант и выполним третий набор действий. Обратите внимание на то, что они все отличаются в единственном месте, где мы передаем данные на микросхему, вот эти вот переменные: d0, d1, d2; просто передаем разные наборы данных. На самом деле это все можно сделать гораздо изящней, но пока что я не стану вас перегружать дополнительной информацией, и мы сделаем вот таким вот, прямолинейным способом. [ПАУЗА] Таким же образом у нас все происходит вплоть до получения 9, в случае которого мы будем передавать на микросхему содержимое переменной d9. Ну а теперь давайте загрузим в наш новый громоздкий скетч нашу новую громоздкую схему и посмотрим как это все вместе работает. Сейчас я запущу монитор порта. Обращаю ваше внимание на то, что у меня здесь выбрано «9600» бод, так же как я указал в скетче. А здесь указано «Новая строка», то есть, чтобы отправку закончить, нужно передать символ новой строки. Вот здесь вот находится строка для отправки данных в последовательный порт, и сейчас я буду отправлять различные цифры. Отправим 1. Семисегменник показал единичку. 5, 4, 0, 9 — все отлично работает. Отдельно хочу обратить ваше внимание на то, как мы сравниваем переменную digit, которая у нас типа char, то есть символ, с цифрами. Цифры у нас заключены в одинарные кавычки, а это значит, с точки зрения компилятора, что мы сравниваем digit не с цифрой 9, а с кодом цифры 9 и с таблицей символов. Если вы раньше никогда не сталкивались с кодировкой букв, символов и так далее, посмотрите в дополнительных материалах, это очень важный момент, и... Дело в том, что код символа 9 в таблице символов это не 9, а какое-то другое число. Мы даже сейчас можем его не знать, просто, мы с компьютера отправляем 9, оно кодируется определенным образом, а потом мы сравниваем с символом 9, то есть тот ли код, смотрим тот ли код пришел, который обозначает цифру 9. Уже к данному моменту недели вы получили гигантское количество новой информации: о том, как считывается аналогово-цифровой сигнал на входах к Arduino, о том, как обмениваться данными с компьютером, отправлять их и получать. Научились делать более сложные ветвления алгоритма с помощью else if, попробовали новые устройства индикации, в том числе и звукового, а также познакомились с микросхемами, который очень часто выступают полезными посредниками на пути электрического сигнала. Теперь вы можете находить их документацию, по ней понимать для чего, какая ножка нужна, и использовать для дела, применять их в схему. Впереди у нас основной проект, а также еще и несколько приятных мелочей.

Часть: Видео

Модуль: Контроллер изучает мир

Описание модуля: Пришло время получать данные извне с помощью датчиков. На этой неделе вы научитесь считывать цифровой и аналоговый сигналы, обмениваться даными с компьютером, строить более сложные алгоритмы и пользоваться новыми устройствами вывода.

Курс: Строим роботов и другие устройства на Arduino. От светофора до 3D-принтера

Описание курса: На протяжении тысячелетий люди усовершенствовали орудия труда, изучали силы природы и подчиняли их себе, использовали их энергию для работы машин, а в прошлом веке создали машины, которые могут управлять другими машинами. Теперь создание устройств, которые взаимодействуют с физическим миром, доступно даже школьнику.

Наш курс состоит из серии практических задач про создание вещей, которые работают сами: изучают мир, принимают решения и действуют – двигаются, обмениваются данными друг с другом и с человеком, управляют другими устройствами. Мы покажем, как собирать эти устройства и программировать их, используя в качестве основы платформу Arduino.

Пройдя этот курс, вы сможете создавать устройства, которые считывают данные о внешнем мире с разнообразных датчиков, обрабатывают информацию, получают и отправляют данные на ПК, в Интернет, на мобильные устройства, управляют индикацией и движением. Создание устройств будет включать проектирование, изучение компонентов, сборку схем, написание программ, диагностику. Попутно с созданием самих устройств вы сделаете визуализацию на ПК, создадите веб-страницу, которую будет демонстрировать одно из ваших устройств, а также разберетесь с устройством и работой FDM 3D-принтера.

Помимо тех, кто увлекается робототехникой или стремится расширить кругозор и свои навыки, курс будет полезен всем, кто сталкивается с задачами бытовой и производственной автоматизации, а также занимается промышленным дизайном, рекламой и искусством.

Курс не требует специальных знаний у слушателей, доступен даже ученикам старших классов средней школы. Плюсом будут навыки программирования и владение английским языком на уровне чтения технической документации, однако обязательным это не является.

Весь курс посвящен практике и самым лучшим решением для вас будет раздобыть электронику, повторять показанные примеры и экспериментировать самостоятельно.

Программа:
  • Неделя 1 Один старый и много новых знакомых
  • Неделя 2 Контроллер изучает мир
  • Неделя 3 Цель обнаружена
  • Неделя 4 Как полить цветок из другого города
  • Неделя 5 Мобильный робот
  • Неделя 6 Как создать новый предмет за час
Преподаватель: Алексей Перепелкин (1), Дмитрий Савицкий (2)

Описание преподавателя: (1) Алексей Перепёлкин занимается развитием робототехники на базе ЛИОТ МФТИ. В 2012 году открыл для себя новое захватывающее чувство – когда устройство, которое сам построил и запрограммировал, работает. Свернул с финансовой дорожки и создал кружок робототехники для подростков. Готовил их к соревнованиям. Стал посещать конференции, а затем проводил мастер-классы для тех, кто тоже хочет организовать занятия. Совместно с коллегами в 2013 году разработал новые соревнования – Робопрофи – для конкурса Робот для жизни и провел их. В 2014 году впервые провел Arduino-номинацию на фестивале Робофест, а для российского финала Russian Robot Olympiad 2014 сделал творческую категорию. С тех пор эти соревнования стали регулярными. Летом 2014 провел двухнедельную мастерскую в детском лагере Никола-Ленивца, а затем преподавал в выездной школе, посвященной программированию и робототехнике, которую провели ABBYY и Яндекс. В 2015 году стал руководителем направления робототехники в GoTo Camp, выездных школах, где участники создали десятки проектов, от прототипов умных домов и операторских тележек до робота-бубниста и принтера для незрячих. В 2014 году с коллегами начал проект Роболабы: мероприятия для школьников и студентов, где участники параллельно решают усложненные задачи, а затем проводят рефлексию сделанной работы и оценивают чужие в ходе серии мероприятий.

(2) Физик, научный сотрудник, выпускник МФТИ. Запустил кружок робототехники в 2011 году. Рассказал Алексею Перепелкину о том, как здорово вести кружок робототехники. Рассказал об этом еще целому ряду людей. Побеждал со своими командами на соревнованиях. Проводил проектную работу с участниками исследовательской выездной школы МКШ с 2013 года, где руководил реализацией физических и робототехнических проектов, например, «Вслед за солнцем», в котором изучалась эффективность динамической ориентации солнечных батарей на солнце. Вместе с коллегами разрабатывал и был судьей Робопрофи. Участвовал в подготовке проекта Роболабы. Вновь пришел в МФТИ для проведения факультативного курса «Основы создания киберфизических устройств»

Организатор: Лаборатория инновационных образовательных технологий МФТИ (1), Лаборатория инновационных образовательных технологий МФТИ (2)

Описание организатора: (2) Московский физико-технический институт (неофициально известный как МФТИ или Физтех) является одним из самых престижных в мире учебных и научно-исследовательских институтов. Он готовит высококвалифицированных специалистов в области теоретической и прикладной физики, прикладной математики, информатики, биотехнологии и смежных дисциплин. Физтех был основан в 1951 году Нобелевской премии лауреатами Петром Капицей, Николаем Семеновым, Левом Ландау и Сергеем Христиановичем. Основой образования в МФТИ является уникальная «система Физтеха»: кропотливое воспитание и отбор самых талантливых абитуриентов, фундаментальное образование высшего класса и раннее вовлечение студентов в реальную научно-исследовательскую работу. Среди выпускников МФТИ есть Нобелевские лауреаты, основатели всемирно известных компаний, известные космонавты, изобретатели, инженеры.

Категория: Компьютерные науки

Описание категории: Специализации и курсы по компьютерным наукам посвящены разработке и дизайну программного обеспечения, алгоритмическому мышлению, человеко-компьютерному взаимодействию, языкам программирования и истории вычислительной науки. Курсы в этой широкой области помогут вам мыслить абстрактно, методически подходить к проблемам и вырабатывать качественные решения.

Тематика: Разработка ПО

Материал: