Ср авг 15, 2012 22:35:14
Enman писал(а):в общем, пока, кроме как ставить резистор в +5 и мерять, других путей не видно...
Ср авг 15, 2012 22:40:06
Ср авг 15, 2012 23:21:53
Чт авг 16, 2012 17:36:04
Чт авг 16, 2012 20:33:08
Чт авг 16, 2012 23:50:53
Сб авг 18, 2012 08:37:16
Сб авг 18, 2012 10:37:59
;**********************************************************************
; This file is a basic code template for assembly code generation *
; on the PIC12F675. This file contains the basic code *
; building blocks to build upon. *
; *
; Refer to the MPASM User's Guide for additional information on *
; features of the assembler (Document DS33014). *
; *
; Refer to the respective PIC data sheet for additional *
; information on the instruction set. *
; *
;**********************************************************************
; *
; Filename: xxx.asm *
; Date: *
; File Version: *
; *
; Author: *
; Company: *
; *
; *
;**********************************************************************
; *
; Files Required: P12F675.INC *
; *
;**********************************************************************
; *
; Notes: *
; *
;**********************************************************************
list p=12f675 ; list directive to define processor
#include <p12f675.inc> ; processor specific variable definitions
errorlevel -302 ; suppress message 302 from list file
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
; '__CONFIG' directive is used to embed configuration word within .asm file.
; The lables following the directive are located in the respective .inc file.
; See data sheet for additional information on configuration word settings.
;***** VARIABLE DEFINITIONS
cblock 0x20 ; Адрес начала блока переменных.
w_temp
status_temp
tmr_1sek
tmr_1min
tmr_1hour
tmr_1day
event
event_2
my_reg
save_minH
save_minL
Reg_1
Reg_2
Reg_3
ADRESL_temp
endc
;флаги регистра счета 1сек 1мин 1 час
cblock 0x00
event_0.1sek
event_1sek
event_1min
event_1hour
event_1day
event_save_min
event_power
event_polyrnost
endc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;флаги регистра счета 1сек 1мин 1 час
cblock 0x00
event_correkciya
event_peremotka
endc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ust_TMR1H EQU .60
ust_TMR1L EQU .176
ust_tmr_1sek equ .10
ust_tmr_1min equ .60
ust_tmr_1hour equ .60
ust_tmr_1day equ .24
ust_reg equ .3
ust_save_minH equ .2 ;установка 24 часов для
ust_save_minL equ .208 ;проверки обнуления счетчика сохраненных минут
ust_knop_1 equ .160; проверка 1 кнопки 1В - 205
ust_knop_2 equ .220; проверка 2 кнопки 0,75В- 154
;**********************************************************************
ORG 0x000 ; processor reset vector
goto main ; go to beginning of program
ORG 0x004 ; interrupt vector location
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
btfss PIR1,TMR1IF
goto in_prir
bcf PIR1,TMR1IF
movlw ust_TMR1H ;приращение таймера тмр1
addwf TMR1H,f ;;;;;
movlw ust_TMR1L ;;;;
addwf TMR1L,f ;;;;
bsf event,event_0.1sek
decfsz tmr_1sek, F
goto in_prir
movlw ust_tmr_1sek
movwf tmr_1sek
bsf event,event_1sek
decfsz tmr_1min,f
goto in_prir
movlw ust_tmr_1min
movwf tmr_1min
bsf event,event_1min
decfsz tmr_1hour,f
goto in_prir
movlw ust_tmr_1hour
movwf tmr_1hour
bsf event,event_1hour
decfsz tmr_1day,f
goto in_prir
movlw ust_tmr_1day
movwf tmr_1day
bsf event,event_1day
; isr code can go here or be located as a call subroutine elsewhere
in_prir movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt
; these first 4 instructions are not required if the internal oscillator is not used
;настройка контроллера
main BCF INTCON,GIE
movlw b'00000111'
movwf CMCON
movlw b'01000000' ;резрешение глобальных и переферийных прерываний
movwf INTCON
movlw b'00010001'
movwf T1CON
bsf STATUS,RP0 ; set file register bank to 1
movlw b'00000001' ;настройка tmr1
movwf PIE1 ;
movlw b'11111100' ;настройка конфигурации портов
movwf TRISIO
clrf ADRESL
movlw b'00010100' ;порт 2 на ввод аналогового сигнала
movwf ANSEL ;делитель 8 для 4 мгц
bcf STATUS,RP0 ; set file register bank to 0
movlw b'10001001' ;
movwf ADCON0 ;
clrf GPIO ; установка 0 на портах выхода
;Установк счетчиков
movlw ust_TMR1H ;приращение таймера тмр1
movwf TMR1H ;;;;;
movlw ust_TMR1L ;;;;
movwf TMR1L ;;;;
movlw ust_tmr_1sek
movwf tmr_1sek
movlw ust_tmr_1min
movwf tmr_1min
movlw ust_tmr_1hour
movwf tmr_1hour
movlw ust_tmr_1day
movwf tmr_1day
clrf event
clrf event_2
clrf save_minL
clrf save_minH
clrf ADRESL_temp
BSF INTCON,GIE
;начало программы;;;;;;;;;;;;;;;;;;;;;;;;;;;;
min call indic_power
call Cloc_Tik
call Cloc_save
call load_save_min
call start_ACP
call peremotka_cloc
call correkciya
goto min
;подрограмма индикатора питания
indic_power btfss GPIO,GP3 ;проверка порта контроля основного источника питания
goto off_power
on_power bsf event,event_power
bsf ADCON0,ADON
return
off_power bcf event,event_power
bcf ADCON0,ADON
return
;подпрограмма счета минут
Cloc_Tik btfss event,event_power
return
btfss event,event_1min ;опрос флага 1 минута
return
bcf event,event_1min
Cloc_ust btfss event,event_polyrnost ;проверка последней полярности шагового двигателя
goto gen_gp1
gen_gp0 bcf event,event_polyrnost
bsf GPIO,GP0
goto pause_2sec
gen_gp1 bsf event,event_polyrnost
bsf GPIO,GP1
pause_2sec movlw .186
movwf Reg_1
movlw .4
movwf Reg_2
movlw .8
movwf Reg_3
wr2 decfsz Reg_1, F
goto wr2
decfsz Reg_2, F
goto wr2
decfsz Reg_3, F
goto wr2
bcf GPIO,GP0
bcf GPIO,GP1
return
;подпрограмма сохранения минут при отсутствии основного источника питания
Cloc_save btfsc event,event_power ;опрос флага наличия сети
return
btfss event,event_1min ;опрос флага 1 минута
return
next_min_save bcf event,event_1min
incfsz save_minL,F
goto prov_clrf_min
incf save_minH,f
prov_clrf_min bsf event,event_save_min
movf ust_save_minH,W ;проверка счетчиков
bcf STATUS,Z ;сохраненных минут
xorwf save_minH,W ;на равенство 12 часам
btfss STATUS,Z
return
movf ust_save_minL,W
bcf STATUS,Z
xorwf save_minL,W
btfss STATUS,Z
return
clrf save_minL ;очистка минут при
clrf save_minH ;равенстве12 часам
bcf event,event_save_min
return
;подпрограмма подводки часов после подачи питания
load_save_min btfss event,event_power ;опрос флага наличия сети
return
btfss event,event_save_min
return
bcf STATUS,Z
movf save_minL,F
btfss STATUS,Z
goto dec_save_min
bcf STATUS,Z
movf save_minH,F
btfss STATUS,Z
goto dec_save_min
bcf event,event_save_min
return
dec_save_min call fist_tic
decfsz save_minL,F
return
bcf STATUS,Z
movf save_minH,F
btfsc STATUS,Z
return
decfsz save_minH,F
return
call fist_tic
decf save_minL,f
return
;подпрограмма запуска ацп
start_ACP btfss event,event_power
return
bsf ADCON0,GO_DONE; запуск ацп
btfsc ADCON0,GO_DONE;проверка окончена ли работа ацп
goto $-1
GOTO $+1 ;задержка после выбора канала ацп
GOTO $+1
GOTO $+1
movlw 9E;косвенная адресация перенос данных из
movwf FSR;младшего заначения ацп
movf INDF,w
movwf ADRESL_temp;;;;;;
prov_no_knopka bcf STATUS,Z
movf ADRESL_temp,f
btfsc STATUS,Z
return
prov_knop_1 movlw ust_knop_1
bsf STATUS,C
SUBWF ADRESL_temp,w
btfsc STATUS,C
goto prov_knop_2
bsf event_2,event_correkciya
return
prov_knop_2 movlw ust_knop_2
bsf STATUS,C
SUBWF ADRESL_temp,w
btfsc STATUS,C
return
bsf event_2,event_peremotka
return
;подпрограмма перемотки минут
peremotka_cloc btfss event,event_power
return
btfsc event,event_save_min
return
btfsc event_2,event_peremotka ;опрос кнопки перемотки минут
call fist_tic
bcf event_2,event_peremotka
return
;подпрограмма быстрого счета
fist_tic btfss event,event_polyrnost ;проверка последней полярности шагового двигателя
goto gen_gp11
bcf event,event_polyrnost
bsf GPIO,GP0
goto pause_0.2sec
gen_gp11 bsf event,event_polyrnost
bsf GPIO,GP1
pause_0.2sec movlw .186
movwf Reg_1
movlw .4
movwf Reg_2
movlw .2
movwf Reg_3
wr decfsz Reg_1, F
goto wr
decfsz Reg_2, F
goto wr
decfsz Reg_3, F
goto wr
bcf GPIO,GP0
bcf GPIO,GP1
return
correkciya btfss event,event_power
return
btfss event_2,event_correkciya
goto end_correkc
bcf INTCON,GIE
clrf tmr_1sek
clrf tmr_1min
clrf tmr_1hour
clrf tmr_1day
bcf event,event_0.1sek
bcf event,event_1sek
bcf event,event_1min
bcf event,event_1hour
bcf event,event_1day
bcf event,event_save_min
bcf event,event_power
clrf event_2
clrf save_minL
clrf save_minH
return
end_correkc btfsc INTCON,GIE
return
movlw ust_TMR1H ;приращение таймера тмр1
movwf TMR1H ;;;;;
movlw ust_TMR1L ;;;;
movwf TMR1L ;;;;
movlw ust_tmr_1sek
movwf tmr_1sek
movlw ust_tmr_1min
movwf tmr_1min
movlw ust_tmr_1hour
movwf tmr_1hour
movlw ust_tmr_1day
movwf tmr_1day
clrf event_2
clrf save_minL
clrf save_minH
clrf ADRESL_temp
BSF INTCON,GIE
return
END ; directive 'end of program'
Сб авг 18, 2012 10:45:57
Сб авг 18, 2012 12:10:35
Сб авг 18, 2012 14:04:03
BOB51 писал(а):Исходная схема, как я вижу, резервного питания не имеет
Да откуда взятся корректной программе, если для pic16f676, в исходнике указано:
" list p=12f675 ; list directive to define processor
#include <p12f675.inc> ; processor specific variable definitions
errorlevel -302 ; suppress message 302 from list file
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC "
естесственно и конфигурация МК соответственно...!
Сб авг 18, 2012 14:08:48
Сб авг 18, 2012 14:34:13
Сб авг 18, 2012 16:06:39
Сб авг 18, 2012 16:44:28
BOB51 писал(а):если уж стоит _MCLRE_OFF то внешний резистор лиш проблем создаст
ну и проче "прелести"...
на... там ацп затесался - детектор пропадания питания значительно проще выполняется ( и совсем не в том месте), при том, что особенности применения Т1 в качестве секунд-генеатора не использованы вообще...
не мешало бы также иметь датчик начального положения стрелок (вида 12-00 или 00-00) т.к. контрольного дисплея соответствия содержимого начальнго состояния регистров внутренних часов, в отличииот прототипа, нету (или потребуется еше одна кнопушка подтверждения стартового соответствия позиции 00-00 стрелок обнулению регистров главных часов)
:
Сб авг 18, 2012 18:36:53
Сб авг 18, 2012 18:51:40
BOB51 писал(а):ладушки... дерзайте...
однако хоша б кусочек совести был - правильно на первоисточник прототипа указать (тем более логотип на схемке имеется) - все ж на этом же сайте такой же котейко опубликовал:
http://radiokot.ru/circuit/digital/home/55/
/
Сб авг 18, 2012 19:16:55
Сб авг 18, 2012 19:31:54
Aaantonnn15 писал(а):Dariele, а вы можете перезалить файл прошивки с PIC12F675 на PIC16F676.
Сб авг 18, 2012 22:01:22
Dariele писал(а):МК будто заглючивает. Вместо 0,9-2 мА начинает потреблять около 50мА и больше, грется, садит напряжение 5 в до 2,5В. И в итоге если не уследить выходит из строя.