В общем что то у нас все же заработало. Но не совсем. Сделали такую прогу:
Нажатия кнопки инкрементируют переменную, которая потом дешифруется в 7-и сегментный код и отсылается на индикатор. Используется только 1 индикатор из 9 в модуле. Модуль от китайского телефона с АОН
Все работает. Он все считает и все как надо! Но как только делаем что бы был не 1 индикатор 0-9 а 2 или более 0-99 или еще больше, то все начинает работать очень загадочным образом!
А именно. Индикаторы показывают правильные числа, нои светятся так слабо, что их еле видно в темноте. Но не всегда! Если индикатор показывает число 1, то именно эта цифра ВСЕГДА яркая! Как пологается. На всех, ктоме первого индикатора так же яркие еще 4 и 7. А все остальные цифры еле видны! Не понятно. Пробовали заменить индикатор, все равно то же самое.
Вот как мы делаем. На землю, нужного нам индикатора мы подаем лог. 0 (он должен быль замкнут на землю всей схемы) а на все неактивные в данный момент индикаторы мы подаем лог. 1 и они не светятся. Посмотрели осцилом. Оказывается на тусклых индикаторах земля выше, чем на ярких. То есть она где то на уровне 2-3 вольта! А на цифрах 1,4,7 они нормальные.
Попробывали сделать наоборот, активным сигналом земли сделать лог 1 и подавать ее на базу транзистора, который уже коннектит индикатор на землю. Типа мы думали может там тока не хватает или еще что нить. Так с транзисторами так- первый индикатор работает полностью, а остальные нет! Проверели поступающие сигналы ниче интересного. Короче - неизвестно.
Привожу исходник нашей проги, может кто нить поймет в чем дело.
Код |
;2.01.05 ;ЧАСТОТОМЕР ;PIC16F74-20I/P ;5МГц\\\800нс ; ;a portb, 0 ;b portb, 1 ;c portb, 2 ;d portb, 3 ;e portb, 4 ;f portb, 5 ;g portb, 6 ;h portb, 7 ; ; ;GND_9 portc, 4 ;GND_8 portd, 3 ;GND_7 portd, 4 ;GND_6 portd, 5 ;GND_5 portd, 6 ;GND_4 portd, 7 ;GND_3 portc, 5 ;GND_2 portc, 6 ;GND_1 portc, 7 ; ;КОНТАКТЫ: ; ;Пост.инд. porta, 0 ;Частота porta, 1 ;Период porta, 2 ;Инвертирование porta, 3 ;Счет имп. porta, 4 ;Длина имп. porta, 5 ; ;СВЕТОДИОДЫ: ; ;Пост.инд. portc, 0 ;Частота portc, 1 ;Период portc, 2 ;Инвертирование portc, 3 ;Счет имп. portd, 0 ;Длина имп. portd, 1 ; ;ВХОД СИГНАЛА porte, 0 ; ; ; ; ;
w EQU H'0000'
;----- Register Files------------------------------------------------------
indf EQU H'0000' tmr0 EQU H'0001' status EQU H'0003' porta EQU H'0005' portb EQU H'0006' portc EQU H'0007' portd EQU H'0008' porte EQU H'0009' intcon EQU H'000B' tmr1l EQU H'000E' tmr1h EQU H'000F' t1con EQU H'0010' tmr2 EQU H'0011' t2con EQU H'0012'
PCL equ H'0002' option_reg EQU H'0081' trisa EQU H'0085' trisb EQU H'0086' trisc EQU H'0087' trisd EQU H'0088' trise EQU H'0089' pcon EQU H'008E' adcon1 EQU H'009F'
;----- STATUS Bits --------------------------------------------------------
IRP EQU H'0007' RP1 EQU H'0006' RP0 EQU H'0005' NOT_TO EQU H'0004' NOT_PD EQU H'0003' Z EQU H'0002' DC EQU H'0001' C EQU H'0000'
;----- INTCON Bits --------------------------------------------------------
GIE EQU H'0007' PEIE EQU H'0006' T0IE EQU H'0005' INTE EQU H'0004' RBIE EQU H'0003' T0IF EQU H'0002' INTF EQU H'0001' RBIF EQU H'0000'
;----- T1CON Bits ---------------------------------------------------------
T1CKPS1 EQU H'0005' T1CKPS0 EQU H'0004' T1OSCEN EQU H'0003' NOT_T1SYNC EQU H'0002' T1INSYNC EQU H'0002' ; Backward compatibility only TMR1CS EQU H'0001' TMR1ON EQU H'0000'
;----- T2CON Bits ---------------------------------------------------------
TOUTPS3 EQU H'0006' TOUTPS2 EQU H'0005' TOUTPS1 EQU H'0004' TOUTPS0 EQU H'0003' TMR2ON EQU H'0002' T2CKPS1 EQU H'0001' T2CKPS0 EQU H'0000'
;----- OPTION Bits --------------------------------------------------------
NOT_RBPU EQU H'0007' INTEDG EQU H'0006' T0CS EQU H'0005' T0SE EQU H'0004' PSA EQU H'0003' PS2 EQU H'0002' PS1 EQU H'0001' PS0 EQU H'0000'
;----- TRISE Bits ---------------------------------------------------------
IBF EQU H'0007' OBF EQU H'0006' IBOV EQU H'0005' PSPMODE EQU H'0004' TRISE2 EQU H'0002' TRISE1 EQU H'0001' TRISE0 EQU H'0000'
;----- TRISE Bits ---------------------------------------------------------
;описание переменных
cblock 0x20 com_gnd ;коммутирование земель ind_1 ;код семисегментного индикатора в двоичном виде ind_2 ind_3 ind_4 ind_5 ind_6 ind_7 ind_8 ind_9 system_ ;всякая служебная инфа count d ;переменная счета импульсов endc
ORG 0x00 goto Init
;-------------------------------Инициализация------------------------------------------------
Init
bcf status, RP0 clrf intcon clrf tmr0 BANKSEL porta clrf porta clrf portb clrf portc clrf portd clrf porte bsf status, RP0 ;установка RP0 - выбор 1 страницы
bsf option_reg, PSA bsf option_reg, T0CS;внешняя синхронизация bsf option_reg, T0SE;срабатывание по заднему фронту BANKSEL trisc bcf trisc, 0 bcf trisc, 1 bcf trisc, 2 bcf trisc, 3 bcf trisc, 4 bcf trisc, 5 bcf trisc, 6 bcf trisc, 7
bsf trisa, 0 bsf trisa, 1 bsf trisa, 2 bsf trisa, 3 bsf trisa, 4 bsf trisa, 5
bcf trisb, 0 bcf trisb, 1 bcf trisb, 2 bcf trisb, 3 bcf trisb, 4 bcf trisb, 5 bcf trisb, 6 bcf trisb, 7
bcf trisd, 0 bcf trisd, 1 bcf trisd, 2 bcf trisd, 3 bcf trisd, 4 bcf trisd, 5 bcf trisd, 6 bcf trisd, 7
bsf trise, 0 bsf adcon1, 2 ;ставим все ноги как цифровые bsf adcon1, 1
bcf status, 5h ;сброс RP0 - выбор 0 страницы
bcf portc, 4 bcf portd, 3 bcf portd, 4 bcf portd, 5 bcf portd, 6 bcf portd, 7 bcf portc, 5 bcf portc, 6 bcf portc, 7
movlw .255 movwf d
incfsz count, 1 call Init goto Begin
return
;-----------------------------//Инициализация//----------------------------------------------
Tbl; Таблица преобразования двоичного в код индикатора addwf PCL, 1 dt 03F, 006, 05B, 04F, 066, 06D, 07D, 007, 07F, 06F
;--------------------------------------------------------------------------------------------
;--------------------Задержка---------------- delay decfsz d, 1 goto delay return ;--------------------Задержка----------------
draw
movf tmr0, 0 call Tbl movwf portb
bcf portc, 7 bsf portd, 2 bsf portd, 3 bsf portd, 4 bsf portd, 5 bsf portd, 6 bsf portd, 7 bsf portc, 5 bsf portc, 6 call delay call delay call delay bsf portc, 7
movf ind_2, 0 call Tbl movwf portb
bcf portc, 6 bsf portd, 2 bsf portd, 3 bsf portd, 4 bsf portd, 5 bsf portd, 6 bsf portd, 7 bsf portc, 5 bsf portc, 7 call delay call delay call delay bsf portc, 6
movf ind_3, 0 call Tbl movwf portb
bcf portc, 5 bsf portd, 2 bsf portd, 3 bsf portd, 4 bsf portd, 5 bsf portd, 6 bsf portd, 7 bsf portc, 6 bsf portc, 7 call delay call delay call delay bsf portc, 5
movf ind_4, 0 call Tbl movwf portb
bcf portd, 7 bsf portd, 2 bsf portd, 3 bsf portd, 4 bsf portd, 5 bsf portd, 6 bsf portc, 5 bsf portc, 6 bsf portc, 7 call delay call delay call delay bsf portd, 7
movf ind_5, 0 call Tbl movwf portb
bcf portd, 6 bsf portd, 2 bsf portd, 3 bsf portd, 4 bsf portd, 5 bsf portd, 7 bsf portc, 5 bsf portc, 6 bsf portc, 7 call delay call delay call delay bsf portd, 6
movf ind_6, 0 call Tbl movwf portb
bcf portd, 5 bsf portd, 2 bsf portd, 3 bsf portd, 4 bsf portd, 6 bsf portd, 7 bsf portc, 5 bsf portc, 6 bsf portc, 7 call delay call delay call delay bsf portd, 5
movf ind_7, 0 call Tbl movwf portb
bcf portd, 4 bsf portd, 2 bsf portd, 3 bsf portd, 5 bsf portd, 6 bsf portd, 7 bsf portc, 5 bsf portc, 6 bsf portc, 7 call delay call delay call delay bsf portd, 4
movf ind_8, 0 call Tbl movwf portb
bcf portd, 3 bsf portd, 2 bsf portd, 4 bsf portd, 5 bsf portd, 6 bsf portd, 7 bsf portc, 5 bsf portc, 6 bsf portc, 7 call delay call delay call delay bsf portd, 3
movf ind_9, 0 call Tbl movwf portb
bcf portd, 2 bsf portd, 3 bsf portd, 4 bsf portd, 5 bsf portd, 6 bsf portd, 7 bsf portc, 5 bsf portc, 6 bsf portc, 7 call delay call delay call delay bsf portd, 2
return
;--------------------------------------------------------------------------------------------
Begin
movf tmr0, 0 sublw .9 btfss status, C ;если счет дошел до 10, то обнуляем 1 и инкрементируем 2. clrf tmr0 btfss status, C incf ind_2
movf ind_2, 0 sublw .9 btfss status, C ;если счет дошел до 10, то обнуляем 2 и инкрементируем 3. clrf ind_2 btfss status, C incf ind_3
movf ind_3, 0 sublw .9 btfss status, C ;если счет дошел до 10, то обнуляем 3 и инкрементируем 4. clrf ind_3 btfss status, C incf ind_4
movf ind_4, 0 sublw .9 btfss status, C ;если счет дошел до 10, то обнуляем 4 и инкрементируем 5. clrf ind_4 btfss status, C incf ind_5
movf ind_5, 0 sublw .9 btfss status, C ;если счет дошел до 10, то обнуляем 5 и инкрементируем 6. clrf ind_5 btfss status, C incf ind_6
movf ind_6, 0 sublw .9 btfss status, C ;если счет дошел до 10, то обнуляем 6 и инкрементируем 7. clrf ind_6 btfss status, C incf ind_7
movf ind_7, 0 sublw .9 btfss status, C ;если счет дошел до 10, то обнуляем 7 и инкрементируем 8. clrf ind_7 btfss status, C incf ind_8
movf ind_8, 0 sublw .9 btfss status, C ;если счет дошел до 10, то обнуляем 8 и инкрементируем 9. clrf ind_8 btfss status, C incf ind_9
movf ind_9, 0 sublw .9 btfss status, C ;если счет дошел до 10, то обнуляем 9. clrf ind_9
call draw
goto Begin
END
| |