Поводом послужила заметка:
http://www.kaligraf.narod.ru/nedodellki.html
А именно:
Цитата:
|
Причина в том, что при переключении разрядов в программе динамической индикации(переключение идёт слева направо) транзистор разряда, выводимого на индикацию не успевал закрываться.
|
Когда то сам попал на это, но спасибо ПРОТЕУСУ, путем детального разбора графов удалось решить проблему.
Рассмотрим фрагмент кода:
Код:
|
.................... //--------------------------------------------------------------
.................... // display
.................... //--------------------------------------------------------------
.................... PORT_B=0XFF;
0048: MOVLW FF
0049: MOVWF 06 //Гасим сегменты
.................... PORT_A=prevscan;
004A: MOVF 2F,W
004B: MOVWF 05 //Смена разрядов, точка 1
....................
....................
.................... switch (prevscan&0x0f)
.................... {
004C: MOVF 2F,W
004D: ANDLW 0F
004E: XORLW 0E
004F: BTFSC 03.2
0050: GOTO 05B
0051: XORLW 03
0052: BTFSC 03.2
0053: GOTO 05E
0054: XORLW 06
0055: BTFSC 03.2
0056: GOTO 061
0057: XORLW 0C
0058: BTFSC 03.2
0059: GOTO 064
005A: GOTO 067
.................... case 0x0e:PORT_B=disp_dig[0];break;
005B: MOVF 30,W
005C: MOVWF 06 //Точка 2 смена данных
005D: GOTO 067
.................... case 0x0d:PORT_B=disp_dig[1];break;
005E: MOVF 31,W
005F: MOVWF 06 //Точка 2 смена данных
0060: GOTO 067
.................... case 0x0b:PORT_B=disp_dig[2];break;
0061: MOVF 32,W
0062: MOVWF 06 //Точка 2 смена данных
0063: GOTO 067
.................... case 0x07:PORT_B=disp_dig[3];break;
0064: MOVF 33,W
0065: MOVWF 06 //Точка 2 смена данных
0066: GOTO 067
.................... }
.................... rotate_left(&prevscan,1);
0067: RLF 2F,W
0068: RLF 2F,F
.................... |
Как видно из кода и скриншота после переключения разряда некоторое время
присутствуют данные сегментов предыдущего разряда , что вызывает подсветку
неиспользуемых сегментов.Это присутствие обусловленно отнюдь не инерцией
транзисторов ,а куском кода испольняемым между точками 1 и 2.
Именно поэтому нужно либо гасить сегменты перед сменой разрядов либо
запирать разряды на время смены данных на сегментах( что автор заметки и сделал).
-- Прилагается рисунок: --
-- Прилагается рисунок: --