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 X X X X X Časování vnitřním RC oscilátorem X X X X X Časování vnějším kmitočtem 50Hz 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
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 DS 1 stara hodnota rele vstupu TEMP DS 1 pomocny registr pro vypocty FLAGS DS 1 Registr priznaku CLK_STOP = RA.3 vystup pro zablokovani vnejsich hodin RE_ZKRAT = RB.7 vystup na rele umlceni hlasitosti (zkrat vstupu) RE_START = RB.0 vystup na rele mekkeho startu zdroje Z_RB = FLAGS.0 Log. 1 povoluje zapis na port RB a vsechny rutiny s tím spojene TEST_POT = FLAGS.1 Log. 1 povoluje skok na dokonceni vystupu na RB po 2. testu FIRST_PASS = FLAGS.2 Log. 1 povoluje zapis na RB po RST pri pot. v krajni poloze AUX_1 = RE_POM.1 bit v pomocnem registru pro vstupni rele AUX1 org 00h jmp inicial skok na zacatek programu org 0100h inicial clrb RP0 nastaveni stranky 0 mov RA,#00011111b nastaveni vystupnich bran clr RB nastaveni vystupnich bran, vypnuti vsech rele clr intcon zakaz vsech preruseni mov adcon0,#0 nastaveni vstupu A/D prevodniku a ridicich hodin setb RP0 nastaveni stranky 1 mov!ra,#00011111b ra=vstupy mov!rb,#00h RB=vystupy rele mov adcon1,#00000011b nastaveni vstupu A/D prevodniku a Vref (11=DIG. vstupy) clrb RP0 nastaveni stranky 0 setb RE_ZKRAT zapni rele zkrat clr ADC_OLD nulovani predchozi hodnoty AD prevodu clr RE_OLD nulovani registru mov FLAGS,#00000101b zapis do registru priznaku prvni pruchod sb RA.1 test casovani (1=ANO/0=NE) jmp TMR_OFF preskoc casovani sb RA.2 test zpusobu casovani call wait_line casuj ze site 50Hz snb RA.2 test zpusobu casovani call wait_wdt casuj pomoci WDT TMR_OFF setb RE_START zapni rele primeho napajeni zdroje Priprava A/D prevodniku ke spusteni setb RP0 nastaveni stranky 1 mov adcon1,#00000010b nastaveni vstupu A/D prevodniku a Vref clrb RP0 nastaveni stranky 0 clr adcon0 nastaveni vstupu A/D prevodniku a ridicich hodin Obsluha AD prevodniku a_d_c jb FIRST_PASS,a_d_c_s je-li obvod po RST,skoc rovnou na AD prevod jb TEST_POT,a_d_c_s skok na dokonceni vystupu na RB mov W,#10001101b naplneni ACC hodnotou pro WDT call wait skok na smycku zpozdeni a_d_c_s setb ADON zapni AD převodnik setb GO_DONE zacatek prevodu :not_done snb GO_DONE je-li prevod, jdi dal jmp :not_done neni-li prevod pokracuj v testu
mov ADC_HI,ADRES presun vysledek clrb ADON vypni AD prevodnik Vypocet rele vstupu mov TEMP,ADC_HI presun prevodu do pom registru clr RE_POM nulovani pom. registru rele setb AUX_1 nastaveni rele vstupu AUX1 v pom. registru mov W,#43 nacteni nasobku do ACC vypocetsub TEMP,W odecti 43 sc preskoc, pokud neni prenos jmp porovnani skok na porovnani stavu rele clc shod prenos rl RE_POM posun registru vlevo jmp vypocet 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
rutina zpozdovaci smycky casovanim pomoci WDT wait setb RP0 nastaveni stranky 1 mov!option,w nastaveni registru OPTION na WDT clrb RP0 nastaveni stranky 0 clr TMR0 nuluj citac clr wdt nulovani WDT sleep setb RP0 nastaveni stranky 1 mov!option,#10001111b nastaveni registru OPTION na WDT clrb RP0 nastaveni stranky 0 clr TMR0 nuluj citac clr wdt nulovani WDT ret 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 jmp test_tmr cekej dal clrb CLK_STOP zastav vnejsi hodiny ret je-li citac naplnen, preskoc 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