- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания Занимательная электроника - Юрий Ревич
Шрифт:
Интервал:
Закладка:
Простейшая пробная программа для работы с функциями serial выглядит так:
Функция Serial.write() отличается от Serial.print() тем, что первая посылает данные, как числа, а вторая позволяет организовать вывод в различных строковых форматах (см. описание функции в [23]). Мы здесь употребляем вариант второй функции под названием serial.println, который дополнительно присоединяет к выводу символы перевода строки. Многочисленные примеры употребления этих операторов в разных вариантах вы встретите далее.
* * *
Подробности
Коммуникационные функции Arduino в случае приема нескольких байтов всегда требуют тщательной отладки на макете. На них (функциях) сказываются недостатки Arduino, заключающиеся в общей замедленности работы платформы. Отслеживание данных, приходящих через последовательный порт через непредсказуемые промежутки времени, представляет собой непростую задачу даже при использовании профессионального инструментария. Тем не менее и в простейшем виде, предлагаемом стандартными возможностями Aduino IDE, с этой задачей можно справиться.
Для лучшего понимания, как это делается, стоит учесть, что с последовательным портом в Arduino связан буфер размером 64 байта (не путать с аппаратным буфером самого UART). Чтобы действительно ничего не упустить, следует вызывать функцию Serial.available о с задержкой — тогда, когда в этом буфере уже что-то имеется, иначе считается только первый пришедший байт, а остальные могут пропасть. Потому мы без зазрения совести ставим в программе временные задержки (функция delay ()) при приеме нескольких байтов из компьютера или другого устройства — операция, которая в случае отсутствия такого буфера, наоборот, только привела бы к гарантированной потере данных. При формировании задержек следует ориентироваться на то, что передача одного байта на скорости 9600 занимает примерно 1 миллисекунду. Так что при приеме в пределах десятка байтов будут разумными величины задержек порядка 10 миллисекунд или несколько более на весь цикл приема. Именно такой прием мы применим при установке часов из компьютера в главе 22, где и познакомимся с приемом последовательности нескольких байтов.
* * *
Да, а как принять посланные байты в компьютере? Для этого годится абсолютно любая программа-монитор, позволяющая устанавливать номер порта и скорость приема. В том числе такая программа входит и в Arduino IDE (Сервис | Монитор порта). Она заслуженно вызывает многочисленные нарекания своей примитивностью, но для каких-нибудь простых тестовых целей вполне годится — главное, что в ней не надо ничего устанавливать, связь с устройством доступна немедленно после загрузки программы. Для более «продвинутых» читателей я рекомендую свою программу-монитор под названием Соm2000 (ее можно скачать с сайта автора по адресу http://revich.lib.ru/comcom.zip) — она отличается тем, что позволяет организовать обмен в любом удобном формате (численном в десятичной или шестнадцатеричной форме, а также в текстовом). Входит подобная программа, как составная часть, и в утилиту X–CTU для настройки радиомодулей по протоколу ХЬее, которыми мы будем заниматься в следующей главе.
Столь простое обращение с последовательным портом позволяет дополнить программы Arduino простейшим средством отладки. Такие средства напрочь отсутствуют в среде Arduino, а без них очень трудно отлаживать более-менее сложные программы, — ту же настройку часов из компьютера (глава 22) без контроля за тем, что принимается в программе и в каком виде, создать было бы просто нереально. Для этого в нужных местах программы вы расставляете операторы Serial.print() или Seriai.write(), посылающие в компьютер переменные, значения которых необходимо контролировать, и отслеживаете их состояние через монитор порта.
Другие подробности работы с последовательным портом мы узнаем по ходу дела, а сейчас займемся задачей вывода значений на индикаторы. Это отдельная задача, и не слишком простая — имеющиеся в продаже дисплеи весьма разнообразны по типу и довольно капризны в обращении.
Работа с текстом на графическом дисплее MT-12864JДисплеи для вывода цифр, текста и графики, как мы уже знаем из главы 7, встречаются нескольких разновидностей. Здесь мы остановимся на небольших матричных дисплеях, в которых изображение составляется из точек, что позволяет формировать произвольные символы и элементарные изображения. Матричные дисплеи бывают графические и строчные, отличающиеся способом управления: у них разные контроллеры, ориентированные в одном случае на адресацию каждой точки в отдельности, во втором — на вывод символов по их коду, подобно тому, как это делается в программах для компьютеров. Разумеется, эта преимущественная ориентация не исключает вывод текста на графические дисплеи или вывод примитивных изображений на строчные. Именно задачей вывода текста на графический дисплей мы сейчас и займемся, а в следующей главе познакомимся со строчными разновидностями.
Для каждого из этих типов дисплеев имеется стандартный контроллер, по образцу которого строится управление любой аналогичной матрицей. Для символьных строчных экранов стандартный контроллер называется HD44780, а для графических ту же роль играет ks0108 — с ним совместимы все графические экраны небольшого размера. Мы воспользуемся популярным отечественным графическим ЖК-модулем MT-12864J фирмы МЭЛТ. На сайте «Амперки» в разделе Вики легко разыскать статью «Работа с ЖК-матрицей 128x64», рассказывающую о подключении этого модуля в стандартном графическом режиме с помощью библиотеки GLCD.
Здесь мы подробнее остановимся на некоторых нюансах практического применения ЖК-матриц на основе контроллера ks0108, а также рассмотрим вывод текста с помощью готовых шрифтов из библиотеки GLCD и вопросы их модернизации для вывода кириллических символов.
Подключение MT-12864JК сожалению, контроллер ks0108 имеет параллельный восьмибитовый интерфейс, и с учетом управляющих выводов нам придется занять аж 13 функциональных контактов платы Arduino Uno. Число соединений можно сократить, если подключить ЖК-модуль через сдвиговый регистр или, что еще проще, дешифратор двоичного кода. В первом случае число линий данных сократится с восьми до одной плюс линия импульсов сдвига, во втором — до трех. Но в обоих случаях о стандартной библиотеке придется забыть, создавать свои схемы подключения и писать свои процедуры вывода.
Поэтому мы прибегнем к стандартному способу, но внесем в него некоторые изменения. Использовать именно те выводы Arduino, что предусмотрены библиотекой GLCD по умолчанию[43], при таком их количестве не только неудобно, но часто просто невозможно. Не забудем, что ведь мы еще подключаем к контроллеру всякие другие устройства по стандартным коммуникационным портам, и стоит постараться не занимать их выводы по максимуму.
Модернизированная с учетом этого обстоятельства схема подключения MT-12864J к Arduino Uno приведена на рис. 21.4.
Рис. 21.4. Схема подключения MT-12864J к Arduino Uno
Как видите, у нас оставлены, свободными контакты D1 и D2 (RX и ТХ последовательного порта) и контакты А4-А5, которые, как мы еще узнаем, участвуют в обмене через порт 12С. Одновременная работа со стандартным подключением SD-карты, требующим выводов интерфейса SPI (11, 12, 13 и, с некоторыми оговорками, 10) здесь уже оказывается невозможной. Этот дефицит выводов станет одной из причин, по которым в проекте метеостанции, рассматриваемом в следующей главе, мы выберем другой тип дисплея. Но и ЖК-дисплей может оказаться полезным во многих случаях, особенно при проектировании малопотребляющих приборов, работающих на батарейках.
Обратим также внимание на резисторы R1 и R2, о которых почему-то авторы статей о графических матрицах часто забывают упомянуть. Переменный или подстроечный резистор R1 служит для регулировки контрастности индикатора. На схеме он подключен так, как рекомендуется в документации фирмы МЭЛТ, однако может подключаться и по схеме потенциометра: одним концом к «земле», другим к питанию 5 В, а средним выводом к контакту Vo индикатора. Номинал его выбирается в пределах 10–20 кОм, и в конечном продукте R1 можно заменить на постоянный резистор подобранного номинала.
Резистор R2 — токоограничивающий для LED-подсветки. Его можно не устанавливать вовсе (и в документации он не упоминается), поэтому на схеме он обозначен пунктиром. Согласно документации МЭЛТ, ток подсветки тогда составит около 64 мА. Установить токоограничивающий резистор R2 следует в двух случаях: если вы хотите уменьшить ток (и, соответственно, пожертвовать яркостью подсветки), или если подсветка питается от отдельного источника с повышенным напряжением. Последний вариант обычно реализуется при смешанном питании, когда подсветка подключается к нестабилизированному напряжению на выходе сетевого адаптера, а при переключении на батарейку отключается вовсе. Потребление контроллера модуля при выключенной подсветке тогда составит всего 4 мА (на подробностях реализации этого способа мы здесь останавливаться не будем). При обычном напряжении на выходе адаптера (7–9 В) резистор R2 должен погасить лишние 2–4 В, соответственно, его номинал должен составлять от 39 до 62 Ом.