управление семисегментными индикаторами
Re: управление семисегментными индикаторами
Речь пока идёт об управлении одним разрядом
Re: управление семисегментными индикаторами
можно абстрагироваться и представить что имеется не четырёхразрядный, а одноразрядный семисегментный индикатор. Так вот, пробовал я мигать точкой, а потом одной из планок индикатора, результат один и тот же, когда мигающий элемент (точка или планка) горит, отображаемой число светится тускло, а когда не горит - ярко. Вот. Мне кажется что связано это с подключением нового резистора и уменьшением общего тока протекающего черег индикатор, но как это решить...
Re: управление семисегментными индикаторами
лучше не абстрагироваться, а локализовать проблему. проверить в статике работу. попробовать зажигать в другом или других разрядах. я бы например, закоментировал строчку, где вы гасите запятую и посмотрел как картинка изменится. и повторю, проблема может оказаться и аппаратной. Сегодня я тоже боролся со своим индикатором - оказалось в одном месте не дотравилось до конца и база транзистрора оказалась на массе.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Re: управление семисегментными индикаторами
Если точку не гасить (закомментировать строчку), то точка отображается во всех разрядах, всё отображается нормально. В статике нет ведь ничего не мигает, и поэтому разницу в яркости разобрать трудно.
Re: управление семисегментными индикаторами
а если в одном разряде переключать 1 и 8? и вообще, сделали бы включение точки вместе с остальными сегментами. Что вам мешает передавать в функцию set_segment еще один параметр и во всех разрядах передавайте 0, а в 3-ем значение SetDot. Ну и конечно, неплохо покурить даташиты на максимально допустимые токи через порты и через выводы питания.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Re: управление семисегментными индикаторами
Полистал даташит. цитата:"DC Current per I/O Pin .... 40.0 mA". Вот, а если посмотреть схему, то, без учёта сопротивления индикатора, ток получается равным 5/(530+530)= 4.7мА, если правильно посчитал.
- Вложения
-
- Схема.jpg
- Схема подключения одного разряда индикатора к МК
- (38.91 КБ) 1212 скачиваний
Re: управление семисегментными индикаторами
R1 засуньте... ой выбросите
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
- diim
- Нашел транзистор. Понюхал.
- Сообщения: 168
- Зарегистрирован: Сб фев 16, 2008 04:35:19
- Откуда: г.Тольятти
- Контактная информация:
Re: управление семисегментными индикаторами
Приветствую всех! прочитал здесь про вывод точки на семисегментник хочу поделиться как сделал я, сразу извенюсь т.к. не силён в программировании.
так вот:
перебор разрядов происходит по прерыванию от таймера
т.е. присвоение в программе переменным DP1,DP2,DP3,DP4 лог 1 или 0 мы сможем зажигать любую точку на какое захотим время или перебирая их сделать бегущую точку.
так вот:
перебор разрядов происходит по прерыванию от таймера
Код: Выделить всё
[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 мы сможем зажигать любую точку на какое захотим время или перебирая их сделать бегущую точку.
***********
Не трогайте мокрыми руками оголённые провода, они могут заржаветь.
***********
Не трогайте мокрыми руками оголённые провода, они могут заржаветь.
***********
Re: управление семисегментными индикаторами
Спасибо большое Uldemir'у! Выпаял резистор R1 и теперь индикатор, во-первых, светиться стал ярче, а во-вторых исчезли мерцания. Почему светиться стал ярче - это понятно: сопротивление уменьшилось и, как следствие, увеличился ток, а вот почему мерцания пропали - до сих пор остаётся загадкой:) Может быть из-за яркого свечения незначительные перепады просто не заметны...
Re: управление семисегментными индикаторами
Госпадя! быстро идти изучать закон ома! Вот потому я и говорю, что надо предоставлять максимально информацию к описанию проблемы. Да никому, в здравом уме, не пришло бы в голову на общий вывод поставить резистор. Именно из-за того, что в таком случае ток через сегмент сильно зависит от того включены другие или нет. Потому и ставят 8 резисторов на каждый сегмент, а не один общий на все.
А телепатический модуль все-же был прав: проблема та - аппаратная!
А телепатический модуль все-же был прав: проблема та - аппаратная!
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
-
Пряник_174
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Ср сен 01, 2010 14:17:20
Re: управление семисегментными индикаторами
Soir писал(а):dj-alik писал(а):хочу спросить у умных котиков,посоветуйте как можно и на чём,может кто схемку подкинет пожалуйста,у меня есть семисегментный индикатор,нужна схема которая при нажатии на нефиксирующий контакт даст на индикаторе надпись,ON при повторном нажатии даст надпись OFF,фотки индикатора прилагаю снизу
Индикаторы для динамической индикации, тут уж действительно надо целую схему городить, или МК. Вы что предпочитаете?Jack_A писал(а):Тут, пожапуй, сам старик Хотябыч отступился бы : на 7-сегментном индикаторе изобразить 'N' .
В таких случаях изображают On.
А почему бы не использовать 16 сегментные индикаторы, думаю намного проще будет?!))
Re: управление семисегментными индикаторами
Пряник_174 писал(а):А почему бы не использовать 16 сегментные индикаторы, думаю намного проще будет?!))
Если нужно выводить много текста - таки да. Но дороже.
-
Пряник_174
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Ср сен 01, 2010 14:17:20
Re: управление семисегментными индикаторами
Jack_A писал(а):Пряник_174 писал(а):А почему бы не использовать 16 сегментные индикаторы, думаю намного проще будет?!))
Если нужно выводить много текста - таки да. Но дороже.
на мой взгляд если "много текста" то тогда ЖКИ, а 16 сегментники стоят в районе 100 +/- 20 рублей за единицу
Re: управление семисегментными индикаторами
Пряник_174 писал(а): на мой взгляд если "много текста" то тогда ЖКИ, а 16 сегментники стоят в районе 100 +/- 20 рублей за единицу
Дык кто спорит? а 7-сегментники раз в 5 дешевше. Так что для 16-сег. вроде и своей ниши не остается
Да и не нашел я их в LED исполнениии. Может, они только как ВЛИ или газоразрядные бывают?
-
Пряник_174
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Ср сен 01, 2010 14:17:20
Re: управление семисегментными индикаторами
FYD-5622FS-21
сдвоенный семисегментник стоит 25 рублей, так то это дешево, норма индикатор, а одинарный 16 сегментник стоит в том же магазе 40 рублей, так что я не понимаю ващу логику?))))
сдвоенный семисегментник стоит 25 рублей, так то это дешево, норма индикатор, а одинарный 16 сегментник стоит в том же магазе 40 рублей, так что я не понимаю ващу логику?))))
Re: управление семисегментными индикаторами
gregor писал(а):Жестковат ток, светодиоды при таком токе эмиссию значительно быстрей потеряют...
Импульсы сольного тока - характерная особенность т.н. "динамической" индикации. Одно время серьезно исследовал вопрос долговечности светодиодов. Фирмы-производители нечасто раскрывают такую информацию, но вот как-то удалось найти данные от Hewlett Packard. Так вот оказалось, что ресурс светодиодов увеличивается на порядок, а то и на два при переходе от динамической индикации к статической! Вот пример построения статического светодиодного цифрового семисегментного индикатора практически любой разрядности:
Статический светодиодный цифровой индикатор, управляемый по SPI
Информация на отображение спокойно загружается по двум проводам и в нужный момент просто "защелкивается" специальным импульсом. Можно ШИМ-ом организовать регулировку яркости, причем без мерцаний от нулевых биений как при динамической индикации. Индикатор не создает радиопомех, можно каскадно включить несколько таких индикаторов без увеличения количества управляющих сигналов, можно расположить индикатор на удалении от схемы управления, и т.д. и т.п.
Инженер из СССР
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
}
//инициализируем таймер
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: управление семисегментными индикаторами
Частота обновления при динамической индикации должна быть не менее 50 Гц. Не реже. В вашем случае каждый разряд должен обновляться не позднее чем через 5 мсек (20мсек/4). Настройте прерывания для обработки индикации на это время. Вашу программу не тестировал, но! В конце стоит TCNT0= 254. Стало быть по выходу из ISR управление передастся сразу опять обработчику прерывания, а там во первых строках - стирание дисплея. Индикатор чаще не показывает, чем показывает. Еще бы не болеть глазам!!!
Docendo discimus
Re: управление семисегментными индикаторами
в первый раз не въехал... павтарите истчо рас - что за жки и как включен. простой жки не работает в динамике как светодиодные индикаторы. для динамики (вообще-то для жки используется термин мультиплексирование) в жки надо управлять уровнями напряжения.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."