Red-Resistor.ru/library/programm_less/programm_lesson_13.html
Если Вы хотите обучаться программированию микроконтроллеров, но попали, сюда не прочитав предыдущих уроков, то советую начать изучение материала с .
мы с вами подключили к микроконтроллеру одну секцию семисегментного индикатора. Сегодня мы усложним себе задачу и подключим трехсекционный индикатор, а также напишем программу-обработчик для отображения цифр и небольших сообщений. |
---|
До того, как мы начнем что-то к чему-то подключать давайте немного разберем устройство трехсекционного семисегментного индикатора.
Как видно из схемы, для уменьшения количества выводов, внутри индикатора сделаны перемычки, которые объединяют все сигнальные линии.
Чтобы организовать вывод данных на индикатор нам необходимо выполнить следующую процедуру: 1. Записать в порт данные выводимого (первого) знака; 2.
И так по кругу без остановки. Вроде все понятно. Но вот незадача. Максимальное отображаемое значение, которое может вывести трехсекционный индикатор 999. В программе оно записывается в переменную типа (int). В тоже время в порт, каждый раз нам надо записывать не все число, которое туда может и не вместиться, а только его отображаемые составные части (сотни, десятки и единицы). И да… Нам также надо рассмотреть вариант, при котором в функцию для отображения поступает число большее чем максимально отображаемое значение. То есть перед тем как выводить переданное число на индикатор нам необходимо проверить может ли оно быть корректно отображено.
Т.к. работа индикации в основном является постоянной и должна быть комфортной для восприятия. То для выполнения этих требований я организовал небольшую подпрограмму, которая будет вызываться из основного цикла и за один проход делать только один шажок общего цикла индикации. Чем чаще и с одинаковой периодичностью она будет вызываться, тем стабильней будет отображение символов.
Путей реализации вывода на индикатор великое множество, но я предлагаю вам разобрать мою версию. Она безусловно не идеальна. Более того, для большей наглядности я специально разбил ее на отдельные блоки в ущерб быстродействию. Итак, …
После того как мы вошли в подпрограмму, объявили необходимые внутренние переменные и передали данные для отображения. Сравниваем полученное число с максимально допустимым значением. Если оно больше, то выполняется ветка обработчика ошибок. В данном случае на индикатор будет выводиться сообщение об ошибке «Err». Но, как я писал выше, можно написать дополнительный обработчик для вывода коротких сообщений. Если полученное число проходит валидацию, то происходит сравнение его с поступившим ранее.
Затем программа переходит к блоку ротации секций индикатора в начале которого проверяется счетчик времени включения сегмента. И если он обнулен, то происходит ротация отображаемого сегмента и установка нового значения счетчика для его включения.
После чего программа переходит в блок отображения где и происходит всё то, о чем я писал ранее. Отключается предыдущая секция записывается в порт число для отображения, добавляется точка если нужно и включается необходимая секция индикатора. После чего происходит выход из подпрограммы.
Безусловно предлагаемую блок схему можно сильно упростить убрав, например, из нее обработку ошибок, или блок сравнения с предыдущим отображаемым числом. Также можно делать ротацию секций без задержки. Но мы же сейчас разбираем более-менее универсальную подпрограмму. Обработчик ошибок позволяет выводить сообщения, сравнение с предыдущим числом позволяет разгрузить МК т.к. процесс деления отнимает много машинного времени. Задержка при ротации позволяет добиться устойчивого, четкого отображения и доработать программу так, чтобы появилась возможность регулировки яркости отображаемых символов. Так, что это все не спроста.
Вот так выглядет описанная выше подпрограмма.
//******************************************************** //Подпрограмма 3х сегментного индикатора. // Дата 26.10.18 // Версия 0.01 //******************************************************** // data - отображаемое число (0...999) или код сообщения (большее 999) // point - место точки (3, 2, 1, 0 - точки нет) void three_led_seven (unsigned int data, unsigned char point){ //Внутренние константы #define SIMBOL PORTD //определение порта передачи данных #define SECTION_3 PORTB.0 //вывод порта управленя секцией 3 #define SECTION_2 PORTB.7 //вывод порта управленя секцией 2 #define SECTION_1 PORTB.6 //вывод порта управленя секцией 1 #define VISION_MAX 20 //максимальная длительность отображения сегмента #define POINT_ON (SIMBOL &= ~(1<<3)) //отображение точки #define DARK 10 //ячейка массива выключения индикации #define E 11 //ячейка массива со знаком Е #define R 12 //ячейка массива со знаком r #define IND_ON 0 //секция индикатора влючена #define IND_OFF 1 //секция индикатора выключена #define SEC_1 0 //секция 1 #define SEC_2 1 //секция 2 #define SEC_3 2 //секция 3 #define POINT_1 1 //позиция точки первой секции #define POINT_2 2 //позиция точки первой секции #define POINT_3 3 //позиция точки первой секции #define MAX_DATA 999 //максимально отображаемая дата //Внутренние переменные static unsigned char vision_symbol = VISION_MAX;//счетчик длительности отображения static unsigned char step = SEC_1; //счетчик ротации секций static unsigned int old_data = ZERO; //данные предыдущего отображаемого числа static unsigned char data_1 = ZERO; //данные единиц static unsigned char data_2 = ZERO; //данные десяток static unsigned char data_3 = ZERO; //данные соток const unsigned char symbol_numer [13] = { //массив переменных отображения идикатора (0b10001000), //0 (0b11101011), //1 (0b01001100), //2 (0b01001001), //3 (0b00101011), //4 (0b00011001), //5 (0b00011000), //6 (0b11001011), //7 (0b00001000), //8 (0b00001001), //9 (0b11111111), //OFF 10 (0b00011100), //E 11 (0b01111110), //r 12 }; //Тело программы //подготовка числа к отображению if (data > MAX_DATA) { //сюда пишем обработчик для отображения сообщений data_3 = E; //Err - сообщение об ошибке при превышении data_2 = R; data_1 = R; } else{ //Определение отображаемого числа if (old_data != data) { //пропускаем процедуру вычисления чисел если данные не менялись data_3 = data/100; //сотки data_2 = (data%100)/10; //десятки data_1 = data%10; //единицы }; }; old_data = data; //сохранение новых данных //Ротация отображения сегментов if (!(vision_symbol)) { //проверка счетчика отображения vision_symbol = VISION_MAX; //установка максимального времени отображения секции step ++; //ротация отображаемой секции if (step > SEC_3) step = SEC_1; //Проверка границ ротации } else vision_symbol--; //декремент счетчика отображения сегмента //Отображение сегментов switch (step){ //отображение данных сегмента case SEC_1 : { SECTION_3 = IND_OFF; //выключаем позицию 3 SIMBOL = symbol_numer [data_1]; //Отображение символа без точки if (point == POINT_1)POINT_ON; //отображаем символ с точкой SECTION_1 = IND_ON; //включаем позищию 1 } break; case SEC_2 : { SECTION_1 = IND_OFF; SIMBOL = symbol_numer [data_2]; if (point == POINT_2)POINT_ON; SECTION_2 = IND_ON; } break; case SEC_3 : { SECTION_2 = IND_OFF; SIMBOL = symbol_numer [data_3]; if (point == POINT_3)POINT_ON; SECTION_3 = IND_ON; } }; return; }
Данная подпрограмма, постоянно вызываемая из основного цикла, вполне себе, хорошо работает. Полностью проект ее можно посмотреть в прилагаемых файлах.
Что касается домашнего задания прошлого урока, то с моей версией программы игральной кости также можно ознакомиться в приложенных файлах.
На этот раз. В качестве домашнего задания я попрошу вас сделать таймер, отсчитывающий секунды после первого нажатия на кнопку и завершающий свой счет после второго нажатия или по достижению максимально-отображаемого числа (999). Т.к. вы еще не умеете подключать часовой кварц (32768 Гц) к МК то, чтобы проводить отсчет секунд, придется организовать задержку и уточнить ее величину на больших промежутках времени. Ну, скажем, чтобы на глаз за 900 секунд наш таймер не спешил или не отставал больше чем на секунду. Вот так.
И да… Надо уже понемногу вникать в архитектуру микроконтроллеров и поэтому необходимо будет вдумчиво и неспешно почитать: Ю. А. Шпак «Программирование на языке С для AVR и PIC микроконтроллеров» 2006. Страницы 22…28. Евстифеев А.В. «Микроконтроллеры AVR семейства Tiny и Mega фирмы Atmel» 2008г. Страницы 148…158; 174…199.
На следующем уроке мы подключим наш светодиодный куб и наконец-то завершим первую часть знакомства с программированием микроконтроллеров. Для подключения куба дополнительно к имеющемуся понадобится сам куб и один резистор на 300 Ом.
А на сегодня всё. Удачи.
12.11.18
Если вдруг найдете в статье неточности или заблуждения. Я подправлю.
Приложение:
Подключение к микроконтроллеру семисегментного индикатора
В разных конструкциях бывает оправдано использовать семисегментные светодиодные индикаторы, дешево и сердито по сравнению с символьными ЖКИ. Светодиодный индикатор представляет собой восемь светодиодов 7 для представления цифры и 1 для точки расположенные в виде слегка наклоненной цифры: В разных конструкциях бывает оправдано использовать семисегментные светодиодные индикаторы, дешево и сердито по сравнению с символьными ЖКИ. Светодиодный индикатор представляет собой восемь светодиодов 7 для представления цифры и 1 для точки расположенные в виде слегка наклоненной цифры: Светодиоды внутри имеют общий анод ОА или общий катод ОК. То есть, для управления одной цифрой нужно 8 выводов микроконтроллера. А что же делать, когда нужно управлять, например, четырьмя цифрами?
Поиск данных по Вашему запросу:
Схемы, справочники, даташиты:
Прайс-листы, цены:
Обсуждения, статьи, мануалы:
Дождитесь окончания поиска во всех базах.
По завершению появится ссылка для доступа к найденным материалам.
Содержание:
- Подключение семисегментного индикатора к разным портам
- статическая индикация
- Семисегментный индикатор и динамическая индикация на AVR микроконтроллере ATmega8
- Одноразрядные семисегментные индикаторы на микроконтроллере
- Динамическая индикация. Подключение светодиодной матрицы к микроконтроллеру
- Подключение индикатора CA56-12/CC56-12 к микроконтроллеру AVR
- Семисегментный индикатор
- Семисегментный индикатор.Заметка.AVR для начинающих.
- Динамическая индикация. Подключение светодиодной матрицы к микроконтроллеру
- Главное меню
ПОСМОТРИТЕ ВИДЕО ПО ТЕМЕ: Семисегментный индикатор — Микроконтроллеры с нуля #8
youtube.com/embed/HTbHrXIXpBc» frameborder=»0″ allowfullscreen=»»/>Подключение семисегментного индикатора к разным портам
Глаз человека по природе является биологическим приёмником световой информации. Однако, в отличие от животных, человекспособен не только фиксировать наличие или отсутствие свечения, но и осмысливать наблюдаемые данные, к примеру, символы на экране семисегментного индикатора. Первые светодиодные семисегментные индикаторы были сделаны на фирмах Monsanto и Hewlett-Packard в г. Маркируются сегменты большими или малыми буквами латинского алфавита A…J в строго определённом порядке. Электрическое соединение сегментов внутри индикатора производится по двум схемам: с общим анодом и с общим катодом.
Каждый сегмент — это отдельный единичный светодиод со стандартными электрическими параметрами, зависящими от его цвета и материала изготовления. Учитывая большое разнообразие вариантов цоколевки выводов, условные обозначения семисегментных индикаторов будут обезличенными Рис.
Однако в каждой конкретной схеме Рис. Условное обозначение семисегментных индикаторов: а с общим анодом; б с общим катодом. Сопротивление резисторов R Чтобы выровнять яркости, применяют циклы импульсов с одинаковой длительностью, но с разной частотой. Вместо двух линий MK можно использовать только одну, а другую заменить транзисторным ключом или логическим инвертором; О.
В дневное время яркость автоматически увеличивается за счёт изменения сопротивления фоторезистора R Возможна оперативняа ручная регулировка переменным резистором R9. Замена микросхемы DD1 — 74LS Источник: Рюмик, С. В рубрике Микроконтроллеры.
Метки: анодом индикатора индикаторов индикаторы свечения сегментов семисегментных. Вы можете подписаться на новые комментарии к этой записи по RSS 2. Вы можете оставить комментарий к записе. Возможность оставить trackback со своего сайта отсутствует. Имя required. Почта не публикуется required. Полевой транзистор — источник постоянного тока 9. Микросхемы маломощного высоковольтного импульсного преобразователя серии TNY2xx Чувствительный радиомикрофон на транзисторах МГц Ультразвуковые излучатели в схемах на микроконтроллере Оптические датчики.
Фоторезисторы в схемах на МК Пьезокерамические излучатели 5. Акустические датчики. Электретные микрофоны в схемах на МК 8. Схема реле с управлением одной кнопкой Основные схемы импульсных сетевых адаптеров для зарядки телефонов Применение микросхемы КРВИ1 В рубрике Микроконтроллеры Метки: анодом индикатора индикаторов индикаторы свечения сегментов семисегментных Вы можете подписаться на новые комментарии к этой записи по RSS 2.
Оставить комментарий Нажмите сюда для отмены комментария. Имя required Почта не публикуется required Сайт. Подписаться на NauchebeNet.
статическая индикация
Пока я ждал посылку с Али ЦАП работал через внешний фильтр питания и не разу не ушел в нирвану. Чтобы по максимуму уменьшить возможность зависания, я сделал для него отдельный фильтр и проверил его работу. На прошлом занятии мы с вами подключили к микроконтроллеру одну секцию семисегментного индикатора. Сегодня мы усложним себе задачу и подключим трехсекционный индикатор, а также напишем программу-обработчик для отображения цифр и небольших сообщений.
Способы подключения семисегментного индикатора (статическая Если используется микроконтроллер с малым выходным током.
Семисегментный индикатор и динамическая индикация на AVR микроконтроллере ATmega8
Устройство Статическая индикация Динамическая индикация Пример программы. В настоящее время для отображения информации всё чаще используются графические дисплеи, однако, семисегментные индикаторы также не утратили своего значения. Если требуется лишь отображение чисел, то они могут стать более предпочтительным вариантом, так как просты в управлении и могут использоваться совместно с любым микроконтроллером с достаточным количеством выводов. Жидкокристаллические семисегментные индикаторы обладают сверхнизким энергопотреблением например, в электронных часах, вместе со схемой управления работают от одной батарейки в течении нескольких лет. На этой странице будем вести речь о светодиодных семисегментных индикаторах. Они имеют предельно простую конструкцию, дёшевы, надёжны. Обеспечивают высокую яркость и контрастность отображаемой информации. Существует большое разнообразие индикаторов: с разным цветом свечения сегментов, разного размера, отличающиеся схемой подключения светодиодов с общим катодом или общим анодом. При необходимости отображения нескольких разрядов можно установить несколько одноразрядных индикаторов рядом на печатной плате либо выбрать нужный вариант многоразрядного индикатора. Своё название семисегментные индикаторы получили в связи с тем, что изображение символа формируется с помощью семи отдельно управляемых подсвечиваемых светодиодом элементов — сегментов.
Одноразрядные семисегментные индикаторы на микроконтроллере
Учебный курс. Семисегментный индикатор. Они просты в управлении, имеет высокую яркость, широкий диапазон рабочих температур и низкую стоимость. Зажигая одновременно несколько светодиодов можно формировать на индикаторе символы цифр.
Иногда требуется подключить к микроконтроллеру несколько семисегментных индикаторов или светодиодную матрицу, при этом для отображения информации используется динамическая индикация.
Динамическая индикация. Подключение светодиодной матрицы к микроконтроллеру
В этой статье мы рассмотрим подключение семисегментных индикаторов к МК и работу с ними. Что это такое, будет понятно из картинки:. Семисегментный индикатор представляет собой микросхему, на верхней поверхности которой располагаются светодиоды. Эти индикаторы являются очень удобным и простым в использовании устройством отображения числовой информации. Внутри них, как правило, все светодиоды соединены вместе либо катодом общий катод , либо анодом общий анод.
Подключение индикатора CA56-12/CC56-12 к микроконтроллеру AVR
Написать программу для семисегментного индикатора, чтобы при отжатой кнопке горел символ L, а при нажатой П Atmega 16, AtmelStudio. Индикатор с общим анодом, кнопка на PC5, на PC6 неизвестное Декодеры для семисегментного индикатора подключил семисегментный индикатор к микроконтроллеру через декодер , но опущены Преобразовать две тетрады в коды семисегментного индикатора помогите пожалуйста?? Преобразовать две тетрады каждого элемента массива Х, длиной М,
Светодиодный семисегментный индикатор представляет собой группу регистры, подключить многоразрядный семисегментный индикатор к микроконтроллеру будет проблематично — может не хватить выводов.
Семисегментный индикатор
Глаз человека по природе является биологическим приёмником световой информации. Однако, в отличие от животных, человекспособен не только фиксировать наличие или отсутствие свечения, но и осмысливать наблюдаемые данные, к примеру, символы на экране семисегментного индикатора. Первые светодиодные семисегментные индикаторы были сделаны на фирмах Monsanto и Hewlett-Packard в г. Маркируются сегменты большими или малыми буквами латинского алфавита A…J в строго определённом порядке.
Семисегментный индикатор.Заметка.AVR для начинающих.
Мы же рассмотрим решение, которое можно применить при разработке отдельного дисплейного модуля на светодиодных индикаторах, например, для битного частотомера. Благодаря такому решению можно получить дешевый дисплейный модуль, с низким потреблением энергии и с применением малого количества компонентов. Применение единственного и доступного микроконтроллера позволяет значительно упростить и удешевить конечную конструкцию отдельного дисплейного модуля. Микроконтроллер работает от внутреннего осциллятора 4 МГц. Алгоритм работы микроконтроллера реализует технику двойного мультиплексирования: управление сегментами одного разряда в отдельный момент времени, то есть посегментная индикация. Эта техника позволяет сократить потребление энергии, что дает возможность применять данный модуль в проектах с батарейным питанием.
Мы уже подключали ЖК-дисплей к микроконтроллеру здесь , однако установка LCD не всегда целесообразна, так как он дорог, и к тому же его показания не всегда бывают удобочитаемы.
Динамическая индикация. Подключение светодиодной матрицы к микроконтроллеру
В продолжение темы о 7-ми сегментных индикаторах — время разобраться с динамической индикацией. Статическую индикацию смысла особого нет разбирать, так как более используемая все же динамическая. Итак, что же из себя представляет динамическая индикация. Представим ситуацию что нам необходимо в нашем устройстве сделать вывод данных на 7-ми сегментный индикатор. Хорошо если у микроконтроллера много ног свободных, то можно себе позволить подключить и статический индикатор, а вот если ног мало да и используется не один такой индикатор, то тут нас спасает динамическая индикация. Конечно для уменьшения количества занимаемых выводов можно использовать и сдвиговые регистры, но это уже отдельная тема разговора.
Главное меню
Барграф это такая линейная шкала, размер которой соответствует значению какого-либо настраиваемого параметра. Использование барграфов в меню упрощает визуальную настройку — мы сразу можем определить значение настраиваемого параметра. Да и выглядит приятней и по взрослому. Сверху приведен пример того как это может выглядеть.
Интеллектуальный 7-сегментный дисплей – Блог Тима
Время для другого проекта со сверхдешевым микроконтроллером. Но что проектировать? С тех пор, как я увидел проект, в котором микроконтроллер стоимостью 0,03 доллара управляет интеллектуальными RGB-светодиодами стоимостью 40 долларов, мне стало интересно, правильно ли это место для использования этих устройств. В этой ценовой категории не кажется ли более разумным выделить один MCU для одного светодиода и использовать его для реализации причудливого контроллера узла? Мне всегда нравилось разрабатывать собственный протокол. Однако простое копирование RGB-светодиода WS2812 или подобного казалось немного бессмысленным…
Увидев этот (а также этот и этот) цепной и адресный 7-сегментный дисплей, стало ясно, что делать: зачем использовать три микросхемы WS2811 для управления одним 7-сегментным дисплеем, когда один микроконтроллер мог бы справиться с этим лучше? более низкая стоимость?
На рисунке выше показана общая концепция: Каждый сегмент имеет последовательный ввод данных и последовательный вывод данных, что позволяет управлять содержимым дисплея. Данные со входа каждого сегмента пересылаются на следующий, так что можно подключить следующий разряд непосредственно к выходу предыдущего. Электропитание будет проходить через все устройства.
Важный вопрос, какой протокол использовать: Для упрощения управления я поставил себе цель разрешить управление стандартным UART в конфигурации 8N1. Это в отличие от, например. WS2812, который управляется по нестандартному протоколу со сложной синхронизацией.
Оборудование
Я решил использовать PADAUK PFS154-S16 в качестве микроконтроллера для каждого сегмента. Это устройство имеет флэш-память и достаточное количество входов/выходов для управления 7-сегментным дисплеем без мультиплексирования. Стоимость составляет всего 0,07 доллара США, поэтому это дешевле, чем, например, использование нескольких WS2811. Контакт ввода данных подключен к PA0, что позволяет использовать прерывание смены контакта для обнаружения входящих передач. Выход данных — PA6, а PB0-PB7 используются для управления дисплеем. Схема показана ниже.
Чтобы не добавлять резистор для каждого сегмента, я решил использовать только одно устройство ограничения тока и запустить дисплей в мультиплексном режиме, чтобы одновременно включался только один сегмент. Первоначально я планировал использовать NSI50010, который представляет собой двухконтактный источник тока. К сожалению, оказалось, что падение напряжения на 7-сегментном дисплее слишком велико, чтобы обеспечить достаточное напряжение для источника тока. Поэтому я заменил его на резистор и потерял мультиплексирование.
Конструкция печатной платы показана выше. 7-сегментный дисплей прикреплен к задней стороне. Угловые разъемы используются для соединения отдельных сегментов дисплея. Изначально я планировал использовать правильный разъем для программирования, однако оказалось гораздо проще использовать зажим SOIC8 для прямого подключения к микроконтроллеру.
Задняя сторонаПередняя сторонаДва собранных дисплея показаны выше. Как видите, они аккуратно совмещены.
Прошивка
Прошивка была разработана с помощью SDCC. Для программирования микроконтроллера я использовал программатор Easy PDK.
Протокол
Действительно, наиболее интересной частью этого проекта является разработка протокола связи. Для простоты я определил следующие требования:
- Цепь должна управляться с помощью стандартного интерфейса UART. Например, адаптер USB-RS232.
- Интерфейс состоит из одного входного и выходного контактов. Допускаются только цифровые уровни.
- Разрешена только односторонняя связь. Обратного канала от цепи к контроллеру нет.
- Все элементы цепочки получают обновленную информацию в одной и той же транзакции. Адресация отдельных блоков не является обязательной.
- Содержимое дисплея должно обновляться одновременно на всех сегментах цепочки.
- Сегменты должны быть адресованы по их порядковому номеру в цепочке.
- Обнаружение или исправление ошибок не требуется.
Пункты 2-7 сильно упрощают и очень похожи на хорошо известный протокол WS2812. Сначала займемся 1.
Кадр данных
Последовательный протокол «1N1», используемый WS2812В однопроводном асинхронном протоколе каждая передача обычно состоит из начального условия и полезной нагрузки из 1…n бит. Один из способов взглянуть на протокол WS2812 показан на изображении выше: передача начинается с перехода от низкого уровня к высокому в качестве начального бита, за которым следуют один бит данных и один стоповый бит. Это будет соответствовать протоколу «1N1» в положительной логике при использовании стандартной нотации UART. Ts обозначает длительность одного бита, которая является обратной скоростью передачи данных. Для WS2812 Ts составляет примерно 450 нс, что соответствует 2,2 Мбод. Основная причина, по которой вы не можете напрямую подключить WS2812 к стандартному выходу UART, заключается в том, что сигнал инвертируется.
Понятно, что протокол 1N1 тратит много пропускной способности на накладные расходы. Только треть передачи используется для фактических данных.
Стандартный асинхронный последовательный протокол 8N1Последовательные передачи обычно основаны на протоколе 8N1, как показано выше. Здесь за начальным битом следуют 8 бит данных, так что 80% передачи фактически используется для данных.
Проблема заключается в том, что требования к точности синхронизации становятся более строгими, чем больше битов следует за начальным битом. Предполагая, что мы сэмплируем в центре бита, максимальное отклонение часов должно быть менее 50% от времени одного бита. Можно показать, что это достигается, когда максимальное относительное отклонение часов меньше, чем delta<1/(2*(n+0,5)), где n — количество битов. (Чуть более сложный вывод здесь).
Соотношение между количеством битов в кадре и максимально допустимым отклонением часов показано выше. Следует учитывать, что допуск распределяется между передатчиком и приемником. Например, для протокола 1N1 передатчик может иметь перекос на -17%, а приемник на +17%.
Понятно, почему WS2812 основан на протоколе 1N1: +-17% необходимо для учета изменений производственного процесса и рабочей температуры, когда часы не подстроены.
Общая ошибка менее 5% допустима для 8-битного кадра данных. Это соответствует допуску +-2,5% часов на каждом устройстве.
Поскольку на микроконтроллере PFS154 можно подстроить тактовую частоту, можно добиться гораздо большей устойчивости, чем на WS2812. В техническом описании указано +-1%, если устройство работает при 5 В и 25°C, но +-5% во всех диапазонах напряжения и температуры. Если напряжение VDD поддерживается в пределах 4-6 В, допуск должен быть значительно ниже +-5% (см. рис. 4.5 в таблице данных).
В конце я заметил, что для каждого 7-сегментного дисплея требуется только 5 бит полезной нагрузки. Поэтому я решил использовать протокол 8N1, но использовать только 5 бит. Это допускает отклонение часов до 4%.
State Machine
Теперь, когда мы решили, как выглядит фрейм данных, давайте рассмотрим, как работает вся передача. Требования заключаются в том, что все устройства могут быть адресованы по порядку. Для упрощения не реализовано никаких конкретных механизмов адресации, вместо этого порядок данных при передаче соответствует порядку в цепочке.
Это может быть легко реализовано с помощью конечного автомата, показанного выше, который, вероятно, выглядит гораздо более сложным, чем он есть на самом деле.
После сброса каждое устройство находится в первом состоянии, называемом «Прием». Когда устройство находится в режиме приема, оно принимает передачи, но ничего не отправляет на выходе. Первый полученный кадр данных будет интерпретирован как информация об обновлении дисплея и сохранен внутри. После завершения приема действительного фрейма данных устройство переключится в состояние «Вперед».
В состоянии пересылки все полученные кадры данных пересылаются напрямую на выход с задержкой 0,5 Тс. После получения действительного кадра данных устройство проверит, был ли получен код EOT. Если да, устройство вернется в состояние «Прием» и будет ожидать начала новой передачи. Символ EOT был определен как 0x00.
На рисунке выше показана трассировка входа в цепочку (канал 2, желтый, уровни 3,3 В) и сигнал после первого устройства (канал 3, уровни 5 В).
Последнее, что нужно уточнить: когда следует обновлять дисплей? Чтобы обеспечить одновременное обновление всей цепочки, содержимое дисплея обновляется после получения символа EOT.
На изображении выше показана цепочка из 5 дисплеев в действии. Вход управлялся через интерфейс USB-RS232 непосредственно с помощью сценария оболочки.
Выводы
В общем, это был забавный маленький проект, чтобы немного больше потренировать микроконтроллеры PADAUK. Я могу использовать это в качестве испытательного стенда для более сложных протоколов в более позднее время.
Здесь вы можете найти текущее состояние прошивки. Файлы оборудования можно найти здесь.
Нравится:
Нравится Загрузка…
Интерфейс семисегментного дисплея с микроконтроллером 8051(89c51,89c52)
By EG Projects
Это простое руководство по интерфейсу семисегментного дисплея с микроконтроллером 8051(89c51,89c52). В посте/руководстве объясняются соединения и взаимодействие 7-сегментного дисплея с микроконтроллером 89c51. 7-сегментный дисплей сопрягается с Портом-1 из 89микроконтроллер c51. Цифры от 1 до 9 и буквы от A до F будут отображаться на одном семисегментном дисплее с использованием микроконтроллера 89c51.
Типы 7-сегментных дисплеев
Существует два основных типа семисегментных дисплеев: анод и катод. Сначала я хотел бы, чтобы вы ознакомились с простым руководством о том, в чем разница между двумя
- Разница между семисегментным дисплеем с общим анодом и катодом.
Вышеупомянутое руководство поможет вам определить, какие семь сегментов вы используете в качестве анода или катода. Вы познакомитесь с выводами и внутренней структурой семисегментного дисплея. Верхний учебник также объяснит вам, каковы плюсы и минусы использования семисегментных дисплеев с анодом и катодом.
7-сегментный дисплей с микроконтроллером 8051 – принципиальная схема
Схема проекта проста. Нет грязных соединений цепи. Я использую в проекте семисегментный дисплей с общим анодом. Светодиоды 7-сегментного дисплея с общим анодом включаются, когда мы заземляем любой контакт светодиода. Кристалл 11,0592 МГц используется для обеспечения тактовой частоты микроконтроллера 89c51. Принципиальная схема 7-сегментного интерфейсного микроконтроллера 8051 приведена ниже.
7-сегментный дисплей с микроконтроллером 8051
Приведенный выше 7-сегментный дисплей, подключенный к микроконтроллеру 89c51, преобразуется в нечто, указанное ниже. Я просто удалил провода на приведенной выше схеме. Провода запутывают схему. Обе схемы одинаковые. Никакой разницы в подключениях или работе.
интерфейс семисегментного дисплея 8051(89c51) принципиальная схема микроконтроллера
8051 порт-1 микроконтроллера, интерфейс с 7-сегментным соединением – отдельные контакты
7-сегментное соединение контактов с 89Отдельные контакты порта-1 микроконтроллера c51 показаны на рисунке ниже. 7-сегментный дисплей имеет только 7 контактов семерки, а порт 1 микроконтроллера 8051 имеет ширину 8 бит. Таким образом, один контакт 89c51 port-1 остается пустым.
8051(89c51,89c52) Назначение контактов порта 1 семисегментному дисплею
Как числа и символы отображаются на семисегментном дисплее? Выводы порта микроконтроллера
89c51 назначаются семи сегментам в указанном выше порядке (рисунок). Инструкции типа P1=0xCF — это шестнадцатеричные инструкции, и они делают контакты порта 1 высокими или низкими.
Аналогично P1=0xCF эквивалентно 11001111(C=1100 и F=1111) в двоичном виде. Эта инструкция заземляет f & e (P1.5 и P1.4) контактов из семи сегментов, и соответствующий светодиод на этих контактах становится высоким. который печатает 1 на семисегментном дисплее.
Ниже приведены полные инструкции по отображению цифр и букв на 7-сегментном дисплее. Эти инструкции жестко закодированы в коде.
- Замыкание 1- f e заземлено P1=0xCF; 11001111
- Замыкание 2- a b g e d заземлено P1=0xA4; 10100100
- Замыкание 3- a b c d g заземлено P1=0xB0; 10110000
- Замыкание 4- b c f g заземлено P1=0x99; 10011001
- Включение 5- a c d f g заземлено P1=0x92; 10010010
- Замыкание 6- a c d e f g заземлено P1=0x82; 10000010
- Замыкание 7- a b c заземлено P1=0xF8; 11111000
- Замыкание 8- a b c d e f g заземлено P1=0x00; 00000000
- Замыкание 9- a b c f g заземлено P1=0x98; 10011000
- Включение A- a b c e f g заземлено P1=0x88; 10001000
- Включение B- a b c d e f g заземлено P1=0x00; 00000000
- Включение C- a d e f заземлено P1=0xC6; 11000110
- Включение D- a b c d e f заземлено P1=0xC0; 11000000
- Включение E- a e f g заземлено P1=0x86; 10000110
- Включение F- a e f g заземлено P1=0x8E; 10001110
7 сегмент с микроконтроллером 89c51 — Код
Приступая к коду, я сначала включил необходимый заголовочный файл reg51. h. Если вы используете keil для написания и компиляции кода, вы должны включить эту библиотеку, иначе это будет ошибкой во время компиляции кода. Если вы используете 89c52 или 89s52, включите библиотеку reg52.h вместо reg51.h. Затем используется функция задержки, чтобы дать некоторую задержку для определенного символа/алфавита или числа, чтобы они оставались напечатанными на семисегментном дисплее. Задержка предназначена для просмотра символа/алфавита или числа в течение некоторого времени, а затем перехода к следующему. Если задержки нет, цифры будут отображаться так быстро, что мы их не увидим. В основной функции моя первая инструкция P1=0x00. Эта инструкция инициализирует Порт-1 в качестве выходного порта. Остальные инструкции представлены в шестнадцатеричном формате, и их функции описаны выше.
Примечание: Если вы используете семисегментный дисплей с общим катодом, верхние команды будут такими же, просто сделайте небольшое изменение: поверните 0 (нули) на 1 (единицы) и 1 (единицы) на 0 (нули), потому что общий катод освещает его.