Страница 1 из 1
Подключение для динамическое отображения 7-сегм. индикатора
Добавлено: Сб янв 24, 2009 04:31:31
Virto
В обучалке (
http://radiokot.ru/start/mcu_fpga/avr/15/) в самом начале показана схема индикатора с общим катодом и анодом, т.е. плюс и минус (я самый начинающий катод/анод уже много лет немогу запомнить что из них что). На следующей анимации тоже всё ясно, сегменты управляются допустим плюсом, а разряды минусом. Но на 3-м рисунке к индикатору подведены все контакты от МК, т.е. все плюсы.
В этом и вопрос как светодиоды светятся только от плюсов?
(я уже купил индикатор 3-хсегментный GNT-5631AG с общим катодом, вот задача как подсоединить его к atmega16, думаю надо три транзистора n-p-n ставить для управления разрядами)
Добавлено: Сб янв 24, 2009 06:35:46
Sounds
Может я что-то не понимаю, но мне этот пример показался бестолковым, извините если кого обидел! Попробую обосновать по чему я так считаю. Допусти мне надо вывести число 12, но у меня это не получилось. Почему?! Посмотрите на картинке.
Если я не прав то поправьте меня. Ещё раз искренни прошу прощения, если кого-то обидел!
Re: Подключение для динамическое отображения 7-сегм. индикат
Добавлено: Сб янв 24, 2009 07:22:07
Света
Virto писал(а):... на 3-м рисунке к индикатору подведены все контакты от МК, т.е. все плюсы.
Это ошибочное утверждение. Выходы МК, да и выходы других цифровых микросхем не являются "плюсами". Это цифровые выходы.
На таком выходе в разное время может присутствовать или единица (плюс питания) или ноль (корпус, минус питания). То есть на выходе стоит ключ, который коммутирует вывод выхода или к + или к - питания в зависимости от предыдущей схемы управления.
А в МК этой схемой управляет программа в которой можно учесть когда и в какой момент времени нужные выходы подключить к нужному напряжению.
Добавлено: Сб янв 24, 2009 10:30:30
Virto
Прилагаю схему.
Допустим с прошивкой всё в порядке. Питание 5 вольт.
На рис.2 распиновка 3х сегментного индикатора с общим катодом (минусом)
На рис.1: катод первого разряда идет на землю (минус); второго и третьего разряда на порт "D" (PD0, PD1).
МК выдает на ножки либо ноль либо единицу т.е. ноль вольт или 5 вольт. В итоге работает только 1й разряд (на землю), остальные независимо 1 или 0 на PD не горят, т.е. это равносильно подключению на рис.3.
Вопрос: как подключить именно этот индикатор.
Добавлено: Сб янв 24, 2009 10:37:23
Virto
Sounds писал(а):... Допусти мне надо вывести число 12, но у меня это не получилось. Почему?! ...
У Вас просто неправильно определена двойка: 0x5А (0b01011111), а должно быть 5B (0b01011011). Т.е. на сегмент "C" подается ноль.
Добавлено: Сб янв 24, 2009 11:00:59
smac
Virto писал(а):Прилагаю схему.
Допустим с прошивкой всё в порядке.
...
Видимо это неверное допущение, схема более-менее рабочая только общий вывод первого разряда индикатора не надо на землю сажать, иначе в реальности (вы ведь динамическую индикацию делаете) будет ерунду отображать, луще подключите его к еще одному выводу порта Д. А вообще для обеспечения нормальной яркости я бы транзисторные ключи использовал для управления общими электродами индикаторов.
Добавлено: Сб янв 24, 2009 12:36:47
Virto
Вот пример кода:
Код: Выделить всё
#define F_CPU 1000000
#include <avr>
#include <util>
int main()
{ unsigned char numlook[16] = { // Биты для индикатора 0..F
0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101, 0b00000111,
0b01111111, 0b01101111, 0b01110111, 0b01111100, 0b00111001, 0b01011110, 0b01111001, 0b01110001};
DDRC = 0xFF; // C - Вывод сегментов
DDRD = 0b00000111; // D - первые 3 бита для 3-х разрядов
unsigned char n;
n = 7; // Семерку выведем на все сегменты
for (;;){
PORTC = numlook[n];
PORTD = 1; // 3й сегмент
_delay_ms(300);
PORTD = 2; // 2й сегмент
_delay_ms(300);
PORTD = 4; // 1й сегмент (не будет т.к. он на земле в этом примере)
_delay_ms(300);
}
}
И вот что выходит в итоге. (см. прикреплённый GIF). 1й сегмент специально на землю кинул чтобы было видно что работает только так.
Этот индикатор и есть обычный светодиод. Так в примере "Hello World" анод на МК идет, а катод на землю, тогда объясните почему на индикаторе и катод и анод предлагаете подсоеденить к МК?
Добавлено: Сб янв 24, 2009 13:22:09
shtorm
ИМХО тебе нужно POTRD не 1 а в 0 выставлять.(если у тебя общий катод)
Код: Выделить всё
PORTD = 0b00000110; // 3й сегмент
_delay_ms(300);
PORTD = 0b00000101; // 2й сегмент
_delay_ms(300);
Добавлено: Сб янв 24, 2009 14:32:54
Virto
Всем спасибо - разобрался детально благодаря Свете и Шторму.
Управляя нулём мы подаём землю на анод.