Статистика | |
Онлайн лист | |
Онлайн всего: 1 Гостей: 1 Пользователей: 0 | |
Главная » Статьи » Микроконтроллеры |
Attiny2313 + Семисигментный индикатор
Одним из удобных средств отображения информации является Семисегментный индикатор. Немного почитать о нем можно здесь. В общих словах один такой индикатор состоит из 8-ми светодиодов соединенных либо катодами либо анодами, отсюда и названия индикатор с общим катодом или с общим анодом. Эти индикаторы очень удобны для отображения циферной информаци, например в вольтметре, термометре, часах и т.д. В подключении и управлении таким индикатором нет ничего сложного, и сейчас мы в этом убедимся. На схеме ниже я привел пример подключения семисигментного индикатора c общим катодом к микроконтроллеру Attiny2313: Работу с индикатором можно представить как работу с светодиодами, набором светодиодов, с небольшим отличием, чтобы вывести необходимый символ на индикатор нам будет зажечь определенную комбинацию этих светодиодов. Кстати, часто, для защиты портов микроконтроллера, как и в случае с обычными светодиодами ставят токоограничивающие резисторы, последовательно с каждым светодиодом. Иногда резисторы можно не ставить, когда мощность индикатора не слишком велика ( ток протекающий через один светодиод не превышает допустимого значения тока на входе микроконтроллера). Эту информацию можно найти в даташите на микроконтроллер и в даташите на конкретную модель индикатора. Для симуляции в PROTEUS'е резисторы нам не понадобятся, но если поставить резисторы 200-470 Ом, то на коректроность симуляции это не повлияет. Как видно из схемы каждый сегмент у нас подключен к отдельному пину микроконтроллера, обычно их на один больше - сегмент точки, но в данной модели точки нет. Общий катод у нас подключен к "земле". Значит чтобы вывести на индикатор символ нам нужно на несколько выходов микроконтроллера подать логическую "1" ( 5В). На этом изображении указаны названия сегментов. В PROTEUS'е на этом индикаторе почему то назначение выводов не подписаны, но сверху вниз идут в алфавитном порядке: A B C D E F G, точки нет. Выводить сигналы на каждую ногу порта одновременно можно несколькими способами: Двоичный: С учетом нашей схемы получаем код следующего вида PORTB = 0bDPGHEDCBA; 0b - что порту мы присваиваем двоичное значение, а в место букв нужно подставить 0 и 1 , т.е. те сегменты которые должны светится будут единицами, а остальные -0. К примеру цифра 5 будет выглядеть PORTB=0b01101101. Шестнадцатеричный: Здесь все тоже крайне просто, только двоичные значения символов нужно перевести в шестнадцатиричный, что можно сделать даже с помощью встроенного в Windows калькулятора в режиме программист. ВЫвод той же самой 5-ки на индикатор будет уже выглядеть так: PORTB=0x6D; Ниже приведу таблицу в обоих видах для цифр 0-9:
В каком виде использовать это уже скорее дело вкуса и удобства. Пример Ниже пример программы, которая выводит на индикатор ( подключенный по схеме выше) цифры от 1 до 0 по кругу:
Программа получилась очень простой: выводим символ "1" ждем 300 миллисекунд выводи символ "2" и т.д. Важный момент в настройках контроллера не забудьте установить PORTB на выход командой
Результат выполнения программы: Массив Создаем массив из наших символов: char chisla[10]={0x3F,0x6,0x5B,0x4F,0x66,0x6D,0x7D,0x7,0x7F,0x6F}; chisla[10] - это название нашего массива, а в [] указано количество символов, далее через запятую в {} записываем значения наших символов, в моем случае это цифры 0-9. Для того чтобы вывести например все тот же символ "5" нужно просто написать: PORTB = chisla[6]; // Присвоить порту значение под номером 6 из массива chisla[], причем не забываем что в массиве нумерация начинается не с 1, а с 0. Подключение нескольких индикаторов. В большинстве случаев одного индикатора будет мало, поэтому сейчас разберемся как подключить несколько штук. Из схемы видим что все индикаторы включены параллельно, за исключением выводов общих катодов. Общие катоды теперь подключены не напрямую к земле, а через транзисторы. В голову сразу приходит вопрос: "а зачем?". И ответ прост, для управления. Если оставить катоды просто на земле то на все индикаторы будет выводится один и тот же символ, так как параллельное подключение. А с помощью открытия транзистора мы выбираем индикатор, который будет работать. Принцип работы сводится к следующему: открываем транзистор индикатора и выводим на него информацию закрываем транзистор, открываем транзистор следующего индикатор и выводим информацию на него, закрываем транзистор, и так для каждого индикатора. Получается что в каждый момент времени у нас работает только один индикатор, но если переключение сделать быстрым (как минимум быстрее 24 раз в секунду) то глаз начинает воспринимать как статичную картинку и мы не видим переключения. Транзисторы управляются свободными ногами микроконтроллера, в нашем случае этоPORTD. Привожу код программы которая написана для схемы выше и выводит на индикаторы цифры: 1 2 3 4, причем на каждом индикаторе будет светится только своя цифра:
И сразу же несколько слов по коду:
Таким образом я присвоил ногам микроконтроллера управляющим транзисторами имена, в соответствии с тем какой транзистор управляет каким индикатором, по схеме выше seg1 это самый правый индикатор.
Время задержки в 50 миллисекунд я выставил только для того, чтобы убедится что на индикаторы символы выводятся правильно, при меньшей задержке и, соответственно, большей частоте( желательно чтобы время задержки было не более 5мс) мой PROTEUS записывал в лог ошибку что говорит о том что мощностей моего процессора не хватает для симулляции в реальном времени, а потому неподвижной картинки о протеуса я не добился, но на практике все обстоит куда лучше. Если после сборки в железе заметно мерцание символов или то как они переключаются, то просто подберите время задержки. Несколько слов напоследок. Я мельком упоминал, что есть два вида индикаторов: с общим катодом и с общим анодом. Все что написано выше относится к индикаторам с общим катодом, но если Вы в этом разобрались, то без труда сможете разобраться и с индикаторами с общим анодом. Отличия будут заключаться в следующем: - анод нужно подключить к "+" питания, а не к земле как в случае с общим катодом, - ноги микроконтроллера нужно установить как входы( для порта B DDRB=0x00), - для зажигания сегментов на порт выставлять уровень "0" (изначально все ноги выставить в "1" PORTB=0xFF;), - символы будут иметь другие коды, как это сделать думаю догадаетесь уже сами. | ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||
Категория: Микроконтроллеры | Добавил: Naprisar (06.04.2012) | ||||||||||||||||||||||||||||||||||
Просмотров: 15978 | Комментарии: 1
| Теги: |
Всего комментариев: 0 | |