CH_SW_71 - V1.0 Program vytváří z obvodu PIC16C71 / PIC16C711 přepínač vstupů pro NF zesilovač. Jako přepínací prvek slouží potenciometr zapojený běžcem přímo do vstupu A/D převodníku uvnitř mikroprocesoru. Polohu běžce potenciometru vyhodnocuje mikroprocesor přibližně 2x za vteřinu. Výstupní brána „RB“ mikroprocesoru přímo ovládá spínací NPN tranzistory přepínacích relé. Alternativa spínání zátěže optočlenem není vyloučena. Obvod kromě přepínání relé (optočlenů) v závislosti na poloze běžce potenciometru zapojeného do vstupu RA.0, nabízí možnost časového zpoždění cca 5 vteřin po připojení napájecího napětí a uvolnění signálu RESET. Toto zpoždění je možno využít k měkkému náběhu napájecího zdroje výkonového stupně, popřípadě ke zpožděnému připojení reprosoustav. Režim se volí konfigurací propojek na vstupu mikroprocesoru RA.1. RA.1=log 1 - obvod čeká cca 5 vteřin a pak zapne relé připojené na výstup RB.0. RA.1=log 0 - obvod přeskočí časování a zapne relé připojené na výstupu RB.0. Způsob časování je možno zvolit dvojí. Režim se volí konfigurací propojek na vstupu mikroprocesoru RA.2. RA.2=log 1 - obvod využívá vnitřní RC oscilátor. V tomto případě není nutno osazovat R2, D2 a Q1. D1 je třeba nahradit drátovou propojkou a na místo D3 osadit typ 1N 4148. Časování je méně přesné. RA.2=log 0 - obvod načítá kmitočet sítě 50Hz. Toto časování je přesnější z hlediska současné funkce více přístrojů.
Konfigurace obvodu pomocí propojek: X – propojka spojena Číslo propojky
J1
J2
J3
J4
J5
J6
J7
J8
J9
J10
Režim obvodu Časování vypnuto Časování vnitřním RC oscilátorem Časování vnějším kmitočtem 50Hz
X
X X X
X
X
X
X X
X X
Po zapnutí napájecího napětí a uvolnění RESET jde program v následujících krocích: -
zapne relé umlčení hlasitosti připojené na výstup RB.7 test vstupu RA.1 (zpoždění ANO / NE) test vstupu RA.2 (časování VNITŘNÍ / VNĚJŠÍ) v závislosti na stavu RA.1 probíhá / neprobíhá zpoždění zapne relé připojené na výstup RB.0. test polohy běžce potenciometru výpočet výstupu RB.x v závislosti na poloze běžce potenciometru čeká 0,5 vteřiny zapne příslušný výstup RB.x čeká 0,5 vteřiny vypne relé umlčení hlasitosti připojené na výstup RB.7 čeká 0,5 vteřiny skok zpět na test polohy běžce potenciometru
X X X
X
Při změně polohy běžce potenciometru probíhá přepnutí v tomto pořadí: - zapne relé umlčení hlasitosti - 0,5 vteřiny čeká - vypne relé odpovídající staré poloze běžce potenciometru - 0,5 vteřiny čeká - zapne relé odpovídající nové poloze běžce potenciometru - 0,5 vteřiny čeká - vypne relé umlčení hlasitosti.
Funkce jednotlivých vývodů mikroprocesoru: RB.0 - ovládá relé měkkého startu zdroje (relé zpožděného zapnutí reprosoustav) RB.1 - ovládá relé vstupu AUX 1 RB.2 - ovládá relé vstupu AUX 2 RB.3 - ovládá relé vstupu AUX 3 RB.4 - ovládá relé vstupu AUX 4 RB.5 - ovládá relé vstupu AUX 5 RB.6 - ovládá relé vstupu AUX 6 RB.7 - ovládá relé umlčení hlasitosti (zkrat NF vstupu) RA.0 – vstup běžce potenciometru RA.1 – vstup konfigurace zpoždění 5 vteřin (ANO / NE) RA.2 – vstup konfigurace časování (VNITŘNÍ / VNĚJŠÍ) RA.3 – výstup pro zablokování hodin v režimu vnějšího časování RA.4 – vstup vnějších hodin 50Hz Oscilátor mikroprocesoru pracuje v módu „RC“, na kmitočtu cca 100 kHz.
Objektový kód pro PIC 16C711/PIC 16C71
:020000000029D5 :1002000083121F30850086018B0100308800831621 :100210001F306500003066000330880083128617A7 :100220008D018F0105309100851C1A29051D732150 :100230000519832106148316023088008312880171 :1002400011192629911826298D30662108140815C0 :100250000819282909088C0008100C0890008E0144 :100260008E142B309002031C382903108E0D322976 :10027000111943290E08031111140F02031D5A29E5 :1002800091185729111011110C088D00111C2029EB :1002900086178D3066210E088F00813086058D30DF :1002A00066210E0886048D30662191142029911054 :1002B000861320290D08900003100C089002031CDF :1002C00090090A301002031C20294329831662007A :1002D000831281016400630083168F3062008312F1 :1002E0008101640008008316AF306200173065009A :1002F0008312851503118030810081086400031D7D :100300007D29851108008F30662166218D30662198 :020310000800E3 :00000001FF
;********************************************************************************************* ; Zdrojovy text pro Parallax PIC16Cxx Assembler v4.7 / ; ClearView PIC16Cxx Assembler v5.8 ;********************************************************************************************* ; CH_SW_71 ; ; Program vytvari z obvodu PIC16C71/PIC16C711 prepinac vstupu pro NF zesilovac. ; ;Funkce je nasledujici: ; ;Na port RB jsou pres oddelovaci rezistory pripojeny NPN tranzistory ve spinanem rezimu. ; Tyto tranzistory ovladaji jednotliva rele. ;RB.0 - ovlada rele mekkeho startu zdroje (zkratuje rozbehovy odpor), nebo ;ovlada rele zpozdeneho zapnuti repro soustav (cas zpozdeni cca 5 vterin) ;RB.1 - ovlada vstup AUX 1 ;RB.2 - ovlada vstup AUX 2 ;RB.3 - ovlada vstup AUX 3 ;RB.4 - ovlada vstup AUX 4 ;RB.5 - ovlada vstup AUX 5 ;RB.6 - ovlada vstup AUX 6 ;RB.7 - ovlada rele umlceni hlasitosti (zkrat vstupu) ; ;Po zapnuti napajeciho napeti a uvolneni RESET obvod zapne rele umlceni hlasitosti (log. 1 ;na pinu RB.7) a testuje je-li pozadovano casovani a jeho zpusob. ; ;V navaznosti na to: ; ; - testuje citac TMR0. ; TMR0 cita vnejsi „obdelnikovy“ signal na pinu RA.4 o kmitoctu 50 Hz. ; Po preteceni citace cca 5 vt, pin RA.0 prejde do log „0“, zablokuje tak vnejsi hodinovy ; signal. ; ; - prejde do rezimu sleep na cca 5 vt. ; ;Pak se zapne rele mekkeho startu, provede A/D prevod (vypocet polohy bezce potenciometru), ;zapne prislusne rele vstupu a po 0,5 vt vypne zkratovaci rele. Dale obvod v cca 0,5 vt. ;intervalech cte polohu bezce potenciometru a v pripade zmeny prepne na jiny vstup. ; ;Prepnuti probiha nasledovne: ; ; zapne rele ZKRAT - 0,5 vt. ceka - vypne rele vstupu - 0,5 vt ceka - zapne ;rele vstupu odpovidajici nove poloze bezce - 0,5 vt ceka - vypne rele ZKRAT. ; ; ;Oscilator obvodu pracuje v modu „RC“, na kmitoctu cca 100 kHz. Hodnoty soucastek pro ;oscilator jsou: R= 33kohm, C= 220pF ; ;***************************************************************************** ; !!!! programator je nutne nastavit na WDT a RC oscilator !!!! ;***************************************************************************** ; DEVICE PIC16C711,RC_OSC,WDT_ON,PROTECT_OFF,PWRT_OFF ; org 0Ch ; ADC_HI DS 1 ;vysledek A/D prevodu ; ADC_OLD DS 1 ;Predchozi hodnota AD prevodniku RE_POM DS 1 ;pomocny registr rele vstupu pri vypoctu polohy bezce
RE_OLD TEMP FLAGS ; ; CLK_STOP RE_ZKRAT RE_START ; Z_RB TEST_POT FIRST_PASS AUX_1 ;
DS DS DS
1 1 1
;stara hodnota rele vstupu ;pomocny registr pro vypocty ;Registr priznaku
= = =
RA.3 RB.7 RB.0
;vystup pro zablokovani vnejsich hodin ;vystup na rele umlceni hlasitosti (zkrat vstupu) ;vystup na rele mekkeho startu zdroje
= = = =
FLAGS.0 FLAGS.1 FLAGS.2 RE_POM.1
;Log. 1 povoluje zapis na port RB a vsechny rutiny s tím spojene ;Log. 1 povoluje skok na dokonceni vystupu na RB po 2. testu ;Log. 1 povoluje zapis na RB po RST pri pot. v krajni poloze ;bit v pomocnem registru pro vstupni rele AUX1
org jmp
00h inicial
org
0100h
RP0 mov clr clr mov setb mov mov mov clrb setb clr clr mov sb jmp sb call snb call
RA,#00011111b RB intcon adcon0,#0 RP0 !RA,#00011111b !RB,#00h adcon1,#00000011b RP0 RE_ZKRAT ADC_OLD RE_OLD FLAGS,#00000101b RA.1 TMR_OFF RA.2 wait_line RA.2 wait_wdt
;skok na zacatek programu
; ; inicial
clrb
; TMR_OFF setb RE_START ; ; Priprava A/D prevodniku ke spusteni ; setb RP0 mov adcon1,#00000010b clrb RP0 clr adcon0 ; ; Obsluha AD prevodniku ; a_d_c jb FIRST_PASS,a_d_c_s jb TEST_POT,a_d_c_s mov W,#10001101b call wait ; a_d_c_s setb ADON setb GO_DONE :not_done snb GO_DONE jmp :not_done
;nastaveni stranky 0 ;nastaveni vystupnich bran ;nastaveni vystupnich bran, vypnuti vsech rele ;zakaz vsech preruseni ;nastaveni vstupu A/D prevodniku a ridicich hodin ;nastaveni stranky 1 ;ra=vstupy ;RB=vystupy rele ;nastaveni vstupu A/D prevodniku a Vref (11=DIG. vstupy) ;nastaveni stranky 0 ;zapni rele zkrat ;nulovani predchozi hodnoty AD prevodu ;nulovani registru ;zapis do registru priznaku prvni pruchod ;test casovani (1=ANO/0=NE) ;preskoc casovani ;test zpusobu casovani ;casuj ze site 50Hz ;test zpusobu casovani ;casuj pomoci WDT ;zapni rele primeho napajeni zdroje
;nastaveni stranky 1 ;nastaveni vstupu A/D prevodniku a Vref ;nastaveni stranky 0 ;nastaveni vstupu A/D prevodniku a ridicich hodin
;je-li obvod po RST,skoc rovnou na AD prevod ;skok na dokonceni vystupu na RB ;naplneni ACC hodnotou pro WDT ;skok na smycku zpozdeni ;zapni AD převodnik ;zacatek prevodu ;je-li prevod, jdi dal ;neni-li prevod pokracuj v testu
mov clrb ; ; ;
ADC_HI,ADRES ADON
;presun vysledek ;vypni AD prevodnik
Vypocet rele vstupu
vypocetsub
mov TEMP,ADC_HI clr RE_POM setb AUX_1 mov W,#43 TEMP,W sc jmp porovnani clc rl RE_POM jmp vypocet
;presun prevodu do pom registru ;nulovani pom. registru rele ;nastaveni rele vstupu AUX1 v pom. registru ;nacteni nasobku do ACC ;odecti 43 ;preskoc, pokud neni prenos ;skok na porovnani stavu rele ;shod prenos ;posun registru vlevo ;skoc na zacatek vypoctu
; ; Porovnani se starou hodnotou rele vstupu ; porovnani jb FIRST_PASS,vystup ;je-li obvod po RST zapis stav na RB mov W,RE_POM ;presun do stradace clz setb Z_RB ;nastav priznak zapisu na RB mov W,RE_OLD-W ;zjisteni rozdilu sz ;jsou-li hodnoty rovny, preskoc jmp v_pohybu ;zjisti velikost odchylky na potenciometru ; ; Vystup na port RB ; jb TEST_POT,dok_vyst ;skok na dokonceni vystupu stavu na RB clrb Z_RB ;zakaz vystupu na RB vystup clrb FIRST_PASS ;nuluj bit prvniho pruchodu mov ADC_OLD,ADC_HI ;presun stareho prevodu do pom. registru jnb Z_RB,a_d_c ;je-li vystup zakazan, skok na zacatek programu setb RE_ZKRAT ;zapni rele umlceni hlasitosti (zkrat na vstupu) mov W,#10001101b ;naplneni ACC hodnotou pro WDT call wait ;skok na smycku zpozdeni mov RE_OLD,RE_POM ;zapis starou hodnotu and RB,#10000001b ;vypnuti rele vstupu mov W,#10001101b ;naplneni ACC hodnotou pro WDT call wait ;skok na smycku zpozdeni or RB,RE_POM ;log. pricteni registru na port mov W,#10001101b ;naplneni ACC hodnotou pro WDT call wait ;skok na smycku zpozdeni setb TEST_POT ;nastav priznak 2.testovani potenciometru jmp a_d_c ;skok na zacatek programu dok_vyst clrb TEST_POT ;nuluj priznak 2.testovani potenciometru clrb RE_ZKRAT ;vypnuti rele zkratu jmp a_d_c ;skok na zacatek programu ; ; Vypocet pohybu (odchylky) na potenciometru ; v_pohybu mov TEMP,ADC_OLD ;presun stareho prevodu do pom. registru clc sub TEMP,ADC_HI ;vypocet rozdilu stare a nove hodnoty sc not TEMP ;negace rozdilu cjb TEMP,#10,a_d_c ;je-li rozdil mensi, skoc zpet na prevod jmp vystup ;skok na prepnuti rele ; ; SUBRUTINY
; ; ; wait
rutina zpozdovaci smycky casovanim pomoci WDT setb mov clrb clr clr sleep setb mov clrb clr clr ret
RP0 !OPTION,W RP0 TMR0 wdt
;nastaveni stranky 1 ;nastaveni registru OPTION na WDT ;nastaveni stranky 0 ;nuluj citac ;nulovani WDT
RP0 !OPTION,#10001111b RP0 TMR0 wdt
;nastaveni stranky 1 ;nastaveni registru OPTION na WDT ;nastaveni stranky 0 ;nuluj citac ;nulovani WDT
; ; cekaci smycka pro rele mekkeho nabehu zdroje casovanim ze site 50Hz ; wait_line setb RP0 ;nastaveni stranky 1 mov !OPTION,#10101111b ;nastaveni registru OPTION na WDT (TMR0=1:1) mov !RA,#00010111b ;ra.0-ra.2, ra.4=vstupy, ra.3=vystup blokace hodin clrb RP0 ;nastaveni stranky 0 setb CLK_STOP ;odblokovani vnejsich hodin clz ;nuluj priznak ZERO mov TMR0,#128 ;napln citac casem zpozdeni cca 5vt. test_tmr test TMR0 ;test citace na nulu clr WDT ;nuluj WDT sz ;je-li citac naplnen, preskoc jmp test_tmr ;cekej dal clrb CLK_STOP ;zastav vnejsi hodiny ret ; ; cekaci smycka pro rele mekkeho nabehu zdroje casovanim pomoci WDT ; wait_wdt mov W,#10001111b ;priprava dat pro registr OPTION na WDT (TMR0=1:1) call wait ;skok na smycku zpozdeni call wait ;skok na smycku zpozdeni mov W,#10001101b ;priprava dat pro registr OPTION na WDT (TMR0=1:1) call wait ;skok na smycku zpozdeni ret end