Zdravím všechny,
nejprve musím upozornit, že jsem strojař, elektroniku dělám pouze okrajově, ale poslední dobou dost často Nějaké věci už jsem s PICem dělal, jde to sice pomalu, někdy to je metoda pokus omyl, ale většinou se povede…
No ale k věci. Dělám takový jednoduchý časovač, zapne se trafo, z něho leze 12V, udělám si 5V pro PIC. Ten začne odpočítavat čas nastavený 8bitovým kódovým spínačem (tedy nastavitelné 0-255sekund) pak zapne první relé, pak odpočítává čas nastavený 4 bitovým kódovým spínačem (0-6s po 0,4sec) a zapne druhé relé. V simulátoru vše funguje OK, v praxi skoro taky. Když ale nastavím ten první časovač na 64+16 tak to prostě není 80sec ale něco kolem 125s… Nevím proč, když dám 64 samostatně, nebo 16 samostatně tak to funguje… když dám 255 taky funguje. jiné kombinace jsem moc nezkoumal, protože jsem z toho dost rozhozený… Navíc budu potřebovat zrovna něco mezi 80-90s a to je prostor kde to nefunguje
Spínání druhého relé funguje v pořádku. Četl jsem už o Power-on-reset Brown-on reset, zkoušek jsem různé nastavení, ale výsledek pořád stejný.
Zatím to zkouším na zdroji 12V s proudovým omezením 90mA, 12V trafo, které bude potom ještě nemám hotové.
Schéma zapojení je v příloze. Odhaduju, že bude problém někde v nastavení těch vstupních pinů a uvedu PIC do nějakého stavu, kdy dělá něco jinak… Ale pak mi nejde do hlavy, proč to neudělá při nastavení 255 nebo samostných 64 nebo 16.
Díky moc za rady. Honza
[code] LIST P=16F627
INCLUDE<P16F627.INC>
__CONFIG _PWRTE_ON & _WDT_OFF & _MCLRE_OFF & _BODEN_ON & _LVP_OFF & _HS_OSC
errorlevel -302, -207
START equ 20h ; prirazeni nazvu registrum
PAUZA equ 21h
TMP0 equ 25h
TMP1 equ 26h
TMP2 equ 27h
#DEFINE RELE1 PORTA,1
#DEFINE RELE2 PORTA,0
org 00h
GOTO INIT ; skok na zacatek programu (Init CPU)
INIT:
MOVLW B’00000111’ ; typ komparatoru (off)
MOVWF CMCON
BSF STATUS,RP0
MOVLW B’11111111’
MOVWF TRISB
MOVLW B’00111100’
MOVWF TRISA
BCF STATUS,RP0
BCF RELE1
BCF RELE2
CLRF START
CLRF PAUZA
MOVF PORTB,W ; nacteni nastavenych hodnot START
SUBLW D’255’
MOVWF START
BTFSC PORTA,2 ; nacitani nastavenych hodnot PAUZY
BSF PAUZA,0
BTFSC PORTA,3
BSF PAUZA,1
BTFSC PORTA,4
BSF PAUZA,2
BTFSC PORTA,5
BSF PAUZA,3
MOVF PAUZA,W
SUBLW D’15’
MOVWF PAUZA
MOVF PORTB,W ; nacteni nastavenych hodnot START
SUBLW D'255'
BTFSC STATUS,Z ; test jestli neni prvni sepnuti ihned, pokud ano skok na druhe rele
GOTO ODSTUP
ZACATEK:
;Delay 999997 cycles
MOVLW 0x0A7 ;167 DEC
MOVWF TMP2
MOVLW 0x08 ;8 DEC
MOVWF TMP1
MOVLW 0x0F8 ;248 DEC
MOVWF TMP0
DECFSZ TMP0,F
GOTO $-1
DECFSZ TMP1,F
GOTO $-5
DECFSZ TMP2,F
GOTO $-9
DECFSZ START
GOTO $-0x0D ; 13 DEC
ODSTUP BSF RELE1
MOVF PAUZA,W ; nacteni nastavenych hodnot PAUZA
ADDLW D’16’
SUBLW D’16’
BTFSC STATUS,Z
GOTO KONEC
;Delay 399991 cycles
MOVLW 0x0A ;10 DEC
MOVWF TMP2
MOVLW 0x5F ;95 DEC
MOVWF TMP1
MOVLW 0x8B ;139 DEC
MOVWF TMP0
DECFSZ TMP0,F
GOTO $-1
DECFSZ TMP1,F
GOTO $-5
DECFSZ TMP2,F
GOTO $-9
DECFSZ PAUZA
GOTO $-0x0D ; 13 DEC
KONEC:
BSF RELE2
SLEEP
END
[/code]
administrator: přejmenováno z “16F627A jako časovač”