Сообщение от PUUUK
|
это глюк или моя ошибка.
|
Скорее всего не глюк и не ошибка - недоработка.
Покажу на примере своей схемы с динамической светодиодной индикацией на 7-сегментных индикаторах с общим анодом и контроллере
PIC16F873A. Схема, кстати, сделана "в железе" и прекрасно работает на 9 разрядов светодиодной индикации.
Разряд светит в течении
1,2mS. После этого разряд нужно погасить (аноды в
0, катоды в
1), а только потом включить следующий. Между выключением предыдущего и включением следующего разряда присутствует пауза (у меня получилась
18,5µS). Если сразу переключать разряды без пауз - в протеусе и в реальности будет "засветка" от предыдущего разряда.
Так что сначала выключи предыдущий, потом включай следующий. Возможно в твоей программе достаточно добавить одну строку/команду выключения горизонтали предыдущей индикации в
1 для всех строк индикации переводом всего порта
RB в
1, попробуй так (строка 0251 для примера):
0251 PORTB=(255);
Можешь попробовать добавить и сброс вертикалей в
0:
0252 PORTD=(0);
На первом скрине сигналы разрядов индикаторов, на втором - растянутая осциллограмма чтобы было видно паузу между разрядами, третий скрин - часть кода обнуления и выключения анодов и катодов в моей разработке (
PORTB - катоды,
PORTC - аноды):