управление семисегментными индикаторами

Обсуждаем цифровые устройства...
Серёга_
Открыл глаза
Сообщения: 40
Зарегистрирован: Пт фев 15, 2008 23:08:25

Re: управление семисегментными индикаторами

Сообщение Серёга_ »

Речь пока идёт об управлении одним разрядом
Серёга_
Открыл глаза
Сообщения: 40
Зарегистрирован: Пт фев 15, 2008 23:08:25

Re: управление семисегментными индикаторами

Сообщение Серёга_ »

можно абстрагироваться и представить что имеется не четырёхразрядный, а одноразрядный семисегментный индикатор. Так вот, пробовал я мигать точкой, а потом одной из планок индикатора, результат один и тот же, когда мигающий элемент (точка или планка) горит, отображаемой число светится тускло, а когда не горит - ярко. Вот. Мне кажется что связано это с подключением нового резистора и уменьшением общего тока протекающего черег индикатор, но как это решить...
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: управление семисегментными индикаторами

Сообщение uldemir »

лучше не абстрагироваться, а локализовать проблему. проверить в статике работу. попробовать зажигать в другом или других разрядах. я бы например, закоментировал строчку, где вы гасите запятую и посмотрел как картинка изменится. и повторю, проблема может оказаться и аппаратной. Сегодня я тоже боролся со своим индикатором - оказалось в одном месте не дотравилось до конца и база транзистрора оказалась на массе.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Серёга_
Открыл глаза
Сообщения: 40
Зарегистрирован: Пт фев 15, 2008 23:08:25

Re: управление семисегментными индикаторами

Сообщение Серёга_ »

Если точку не гасить (закомментировать строчку), то точка отображается во всех разрядах, всё отображается нормально. В статике нет ведь ничего не мигает, и поэтому разницу в яркости разобрать трудно.
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: управление семисегментными индикаторами

Сообщение uldemir »

а если в одном разряде переключать 1 и 8? и вообще, сделали бы включение точки вместе с остальными сегментами. Что вам мешает передавать в функцию set_segment еще один параметр и во всех разрядах передавайте 0, а в 3-ем значение SetDot. Ну и конечно, неплохо покурить даташиты на максимально допустимые токи через порты и через выводы питания.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Серёга_
Открыл глаза
Сообщения: 40
Зарегистрирован: Пт фев 15, 2008 23:08:25

Re: управление семисегментными индикаторами

Сообщение Серёга_ »

Полистал даташит. цитата:"DC Current per I/O Pin .... 40.0 mA". Вот, а если посмотреть схему, то, без учёта сопротивления индикатора, ток получается равным 5/(530+530)= 4.7мА, если правильно посчитал.
Вложения
Схема.jpg
Схема подключения одного разряда индикатора к МК
(38.91 КБ) 1212 скачиваний
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: управление семисегментными индикаторами

Сообщение uldemir »

R1 засуньте... ой выбросите
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Серёга_
Открыл глаза
Сообщения: 40
Зарегистрирован: Пт фев 15, 2008 23:08:25

Re: управление семисегментными индикаторами

Сообщение Серёга_ »

Попробую
Аватара пользователя
diim
Нашел транзистор. Понюхал.
Сообщения: 168
Зарегистрирован: Сб фев 16, 2008 04:35:19
Откуда: г.Тольятти
Контактная информация:

Re: управление семисегментными индикаторами

Сообщение diim »

Приветствую всех! прочитал здесь про вывод точки на семисегментник хочу поделиться как сделал я, сразу извенюсь т.к. не силён в программировании.

так вот:
перебор разрядов происходит по прерыванию от таймера

Код: Выделить всё

[b]
#define secON 1
#define secOFF 0

 int DP1,DP2,DP3,DP4;

int digits [21] ={0x3F, 0x6, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x7, 0x7F, 0x6F, 0xBF, 0x86, 0xDB, 0xCF, 0xE6, 0xED, 0xFD, 0x87, 0xFF, 0xEF, 0x00  };//0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.


interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{ //прерывание происходит 31250 раз(8000000/256==31250 раз в сек)
if(sec==secON){se++;if(se==15625){se=0;DP2=!DP2;};};//секундная точка

//  ad++;
//if(ad==x){PORTB^=(1<<BEEP); ad=0;};

a++;
if(a==111) { // при а==111 каждый разряд будет моргать с частотой ~ 70.38 Гц
    a=0;//сброс счётчика
    b++;//перебираем разряды
    if(b==5){b=1;};
    switch(b){case 1: if(DP4==1){PORTD=digits [four+10]; }else PORTD=digits [four];
                                  PORTC.2=0;  PORTC.3=1;   PORTC.4=1;   PORTC.5=1;  break;
                    case 2: if(DP3==1){PORTD=digits [tree+10]; }else PORTD=digits [tree];
                                PORTC.2=1;  PORTC.3=0;   PORTC.4=1;   PORTC.5=1;  break;
                    case 3: if(DP2==1){PORTD=digits [two+10]; }else PORTD=digits [two];
                                 PORTC.2=1;  PORTC.3=1;   PORTC.4=0;   PORTC.5=1;  break;
                    case 4: if(DP1==1){PORTD=digits [one+10]; }else PORTD=digits [one];
                                 PORTC.2=1;  PORTC.3=1;   PORTC.4=1;   PORTC.5=0;  break;
 };
 
 }}
[/b]


т.е. присвоение в программе переменным DP1,DP2,DP3,DP4 лог 1 или 0 мы сможем зажигать любую точку на какое захотим время или перебирая их сделать бегущую точку.
***********
Не трогайте мокрыми руками оголённые провода, они могут заржаветь.
***********
Серёга_
Открыл глаза
Сообщения: 40
Зарегистрирован: Пт фев 15, 2008 23:08:25

Re: управление семисегментными индикаторами

Сообщение Серёга_ »

Спасибо большое Uldemir'у! Выпаял резистор R1 и теперь индикатор, во-первых, светиться стал ярче, а во-вторых исчезли мерцания. Почему светиться стал ярче - это понятно: сопротивление уменьшилось и, как следствие, увеличился ток, а вот почему мерцания пропали - до сих пор остаётся загадкой:) Может быть из-за яркого свечения незначительные перепады просто не заметны...
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: управление семисегментными индикаторами

Сообщение uldemir »

Госпадя! быстро идти изучать закон ома! Вот потому я и говорю, что надо предоставлять максимально информацию к описанию проблемы. Да никому, в здравом уме, не пришло бы в голову на общий вывод поставить резистор. Именно из-за того, что в таком случае ток через сегмент сильно зависит от того включены другие или нет. Потому и ставят 8 резисторов на каждый сегмент, а не один общий на все.
А телепатический модуль все-же был прав: проблема та - аппаратная! :)
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Пряник_174
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Ср сен 01, 2010 14:17:20

Re: управление семисегментными индикаторами

Сообщение Пряник_174 »

Soir писал(а):
dj-alik писал(а):хочу спросить у умных котиков,посоветуйте как можно и на чём,может кто схемку подкинет пожалуйста,у меня есть семисегментный индикатор,нужна схема которая при нажатии на нефиксирующий контакт даст на индикаторе надпись,ON при повторном нажатии даст надпись OFF,фотки индикатора прилагаю снизу

Индикаторы для динамической индикации, тут уж действительно надо целую схему городить, или МК. Вы что предпочитаете?
Jack_A писал(а):Тут, пожапуй, сам старик Хотябыч отступился бы : на 7-сегментном индикаторе изобразить 'N' .

В таких случаях изображают On.

А почему бы не использовать 16 сегментные индикаторы, думаю намного проще будет?!))
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: управление семисегментными индикаторами

Сообщение Jack_A »

Пряник_174 писал(а):А почему бы не использовать 16 сегментные индикаторы, думаю намного проще будет?!))


Если нужно выводить много текста - таки да. Но дороже.
Пряник_174
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Ср сен 01, 2010 14:17:20

Re: управление семисегментными индикаторами

Сообщение Пряник_174 »

Jack_A писал(а):
Пряник_174 писал(а):А почему бы не использовать 16 сегментные индикаторы, думаю намного проще будет?!))


Если нужно выводить много текста - таки да. Но дороже.

на мой взгляд если "много текста" то тогда ЖКИ, а 16 сегментники стоят в районе 100 +/- 20 рублей за единицу
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: управление семисегментными индикаторами

Сообщение Jack_A »

Пряник_174 писал(а): на мой взгляд если "много текста" то тогда ЖКИ, а 16 сегментники стоят в районе 100 +/- 20 рублей за единицу


Дык кто спорит? а 7-сегментники раз в 5 дешевше. Так что для 16-сег. вроде и своей ниши не остается :-)
Да и не нашел я их в LED исполнениии. Может, они только как ВЛИ или газоразрядные бывают?
Пряник_174
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Ср сен 01, 2010 14:17:20

Re: управление семисегментными индикаторами

Сообщение Пряник_174 »

FYD-5622FS-21
сдвоенный семисегментник стоит 25 рублей, так то это дешево, норма индикатор, а одинарный 16 сегментник стоит в том же магазе 40 рублей, так что я не понимаю ващу логику?))))
sezador
Открыл глаза
Сообщения: 68
Зарегистрирован: Сб июн 05, 2010 10:04:08
Контактная информация:

Re: управление семисегментными индикаторами

Сообщение sezador »

gregor писал(а):Жестковат ток, светодиоды при таком токе эмиссию значительно быстрей потеряют...


Импульсы сольного тока - характерная особенность т.н. "динамической" индикации. Одно время серьезно исследовал вопрос долговечности светодиодов. Фирмы-производители нечасто раскрывают такую информацию, но вот как-то удалось найти данные от Hewlett Packard. Так вот оказалось, что ресурс светодиодов увеличивается на порядок, а то и на два при переходе от динамической индикации к статической! Вот пример построения статического светодиодного цифрового семисегментного индикатора практически любой разрядности:

Статический светодиодный цифровой индикатор, управляемый по SPI

Информация на отображение спокойно загружается по двум проводам и в нужный момент просто "защелкивается" специальным импульсом. Можно ШИМ-ом организовать регулировку яркости, причем без мерцаний от нулевых биений как при динамической индикации. Индикатор не создает радиопомех, можно каскадно включить несколько таких индикаторов без увеличения количества управляющих сигналов, можно расположить индикатор на удалении от схемы управления, и т.д. и т.п.
Инженер из СССР
Серёга_
Открыл глаза
Сообщения: 40
Зарегистрирован: Пт фев 15, 2008 23:08:25

Re: управление семисегментными индикаторами

Сообщение Серёга_ »

Скажите, можно ли выводить информацию на 4-х разрядный семисегментный ЖКИ, тактируя контроллер от кварца на 32768Гц? Нашёл в интернете информацию, что минимальная частота обновления разряда - 100Гц, по моим подсчётам, частоты часового кварца должны быть достаточно, но практике получается что дисплей мерцает (причём так мерцает, что аж глаза болят, даже от краткосрочного наблюдения). Код обновления дисплея:

//инициализируем таймер
TIMSK = (1<<TOIE0); //разрешение прерывания по переполнению
TCCR0 = (0<<CS02)|(0<<CS01)|(1<<CS00); // предделитель счетчика 1
TCNT0 = 254; // = 10M*2/1024

SREG |=0x80; // общее разрешение прерываний


ISR(TIMER0_OVF_vect)//Обработка прерывания по переполнения таймера Т0 (обновляем дисплей)
{
clearDisplay(); //стираем всю информацию
PORTC&=~(1<<DISP_OUT3); //сбрасываем точку (точка включается только в третьем разряде, как в часах)

i++;
if(i>4)
i=1;

if(i==1){
set_segment(firstnum); //устанавливаем первый разряд ЖКИ
}

if(i==2){
set_segment(secondnum); //устанавливаем второй разряд ЖКИ
}

if(i==3){
set_segment(thirdnum); //устанавливаем третий разряд ЖКИ
if(setDot) { // данная переменная используется для мигания точкой
PORTC|=(1<<DISP_OUT3); // включаем точку
}
}

if(i==4){
set_segment(fourthnum); //устанавливаем четвёртый разряд ЖКИ
}

setDisplay(i); //выводим информацию на экран
TCNT0 = 254; // = 10M*2/1024
}
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: управление семисегментными индикаторами

Сообщение pyzhman »

Частота обновления при динамической индикации должна быть не менее 50 Гц. Не реже. В вашем случае каждый разряд должен обновляться не позднее чем через 5 мсек (20мсек/4). Настройте прерывания для обработки индикации на это время. Вашу программу не тестировал, но! В конце стоит TCNT0= 254. Стало быть по выходу из ISR управление передастся сразу опять обработчику прерывания, а там во первых строках - стирание дисплея. Индикатор чаще не показывает, чем показывает. Еще бы не болеть глазам!!!
Docendo discimus
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: управление семисегментными индикаторами

Сообщение uldemir »

в первый раз не въехал... павтарите истчо рас - что за жки и как включен. простой жки не работает в динамике как светодиодные индикаторы. для динамики (вообще-то для жки используется термин мультиплексирование) в жки надо управлять уровнями напряжения.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Ответить

Вернуться в «Цифровая техника»