diim писал(а):Падение напряжения на базовом переходе транзистора ...
В свое время за "базовый переход" меня препод чуть с зачета не попер. Открою страшную тайну: у биполярного транзистора нет базового перехода! Есть эмиттерный ( эмиттер-база) и соответственно коллекторный ( коллектор-база). Но это так, семечки.
Здравствуйте, подскажите, пожалуйста, по семисегментным индикаторам. Имеется четырёхразрядный индикатор при круговом переключении разрядов возникает засветка текущего разряда значением предыдущего (засветка фоновая, тусклая, правильное значение при этом горит ярко). Из-за чего может возникать подобное явление? Подобное не наблюдается только при очень медленном переключении, таком что визуально видно как тухнет один разряд и зажигается следующий.
На фотке видно проблему: отображается число 14, но на фоне 1 - 4, а на фоне 4 - 0. В качестве ключа использую транзистор 2N5551, на базе 1 кОм, номинал резистора, ограничивающего ток через сегмент индикатора - 530 Ом.
Надо программу смотреть в купе с выводом на сегменты, что вы не показали. ваша подпрограмма set_segment при вызове должна погасить ВСЕ разряды, потом выдать инфо на сегменты и только тогда активизировать нужный разряд.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
ПОдскажите, пожалуйста, добавил мигание точки к одному из разрядов, и в результате цифра начала мерцать вместе с точкой (именно мерцать - не мигать), соседние разряды, которые без точки не мерцают. Алгоритм следующий: работает два таймера: один обновляет диспелей, а второй считает время, после определённого количества прерываний таймера времени устанавливается флаг, зажигающий точку.
Что по вашему делает эта строчка? Ну и как обычно телепатический модуль по выходным не работает и не может определить, что у вас написано в подпрограммах.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
DISP_OUT3 - это пин PC0, который включает/выключает точку на дисплее. Для функций я привел краткое описание в комментариях. Сейчас выложу их код (не стал выкладывать весь текст программы полностью потому, что это большая простыня. которую вряд ли кто-то стал бы читать).
Более точная формулировка проблемы: когда включена точка - число, выводмое на разряд сегмента горит тускло, а когда точка выключается - разряд опять горит ярко. Справедливо это для задержки точки на экране на любое время. То есть, если точка горит 2 секунды, а две секунды не горит, то и число в этом разряде соответственно 2 секунды горит тускло, а 2 секунды горит ярко.
//выключение всех разрядов дисплея (очистка дисплея) void clearDisplay(void){ PORTD&=~((1<<DISP_OUT6)|(1<<DISP_OUT8)|(1<<DISP_OUT9)|(1<<DISP_OUT12)); }
//формирование числа, выводимого на экран void set_segment(int number){
if (number == 0) { PORTC&=~(1<<DISP_OUT5); PORTC|=(1<<DISP_OUT11)|(1<<DISP_OUT10)|(1<<DISP_OUT7)|(1<<DISP_OUT4); PORTB|=(1<<DISP_OUT1)|(1<<DISP_OUT2); } ... //и так ещё для 9 чисел }
по приведенным листингам криминала не видно. возможно, у вас аппаратная проблема. Осциллографом проверить сигналы не пробовали? кстати, напомните, что за микроконтроллер...
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
микроконтроллер ATmega8. Осциллографом смотреть сигнал не пробовал, да и вряд ли получится в виду отсутствия оного. Попробую помигать не точкой, а одним из сегментов.
Кажется нашёл где собака зарыта. Каждый сегмент индикатора подключен к выводу микроконтроллера через ограничивающий резистор номиналом 530 Ом, и, следовательно, зажигая точку (подключая дополнительный резистор), мы тем самым увеличиваем общее сопротивление сегмента, а значит ток через него протекает меньший (поэтому и светится число не так ярко). Естественно напрашивается вопрос - как с этим бороться?
чевой-та вы не того пишете. вы ж писали, что вместо точки пытались включать сегмент D и тоже притухало... короч, пока нет полного и подробного описания, что вы пытаетесь наворотить - просто гадание на кофейной гуще получается. Попробуйте хотя бы для себя составить внятное описанин - иногда тоже помогает найти ошибку.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."