|
||||
В прошивке
часов-будильника на PIC16F628A , опубликованных по
приведённым ниже ссылкам: http://www.radiokot.ru/circuit/digital/home/11/ http://www.telesys.ru/electronics/projects.php?do=p139 было устранено подсвечивание выключенных сегментов индикаторов. Выглядит это подсвечивание вот таким образом: Исправленная прошивка здесь Товарищ dosikus провёл более детальное исследование по поводу подсвечивания тех сегментов, которые должны бы быть совсем наоборот - выключены. Размещаю здесь его заметку. Заметка от Dosikus
Когда то сам попал на это, но спасибо ПРОТЕУСУ, путем детального разбора графов удалось решить проблему. Рассмотрим фрагмент кода: .................... //-------------------------------------------------------------- .................... // 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. Именно поэтому нужно либо гасить сегменты перед сменой разрядов либо запирать разряды на время смены данных на сегментах (что автор и сделал). |
||||