アンサーバック回路及びプログラム
あんまりニーズは無いと思いますが、先日のアンサーバックホーンコントローラーの回路を掲載しときます。ドアのLOCK/UNLOCK信号をフォトカプラで受けて、MOSFETのスイッチをON-OFFしてホーンを鳴らしています。DOが余っていたので、なんちゃってセキュリティLEDも1個付けられます。このLEDはUNLOCKで消灯、LOCKで点滅します。また6時間ぐらい経過すると消灯します。プログラムはこんな感じ。----------------------------------// CONFIG#pragma config FOSC = INTOSC // Oscillator Selection bits (INTOSC oscillator: CLKIN function disabled)#pragma config BOREN = OFF // Brown-out Reset Enable (Brown-out Reset disabled)#pragma config WDTE = NSLEEP // Watchdog Timer Enable (WDT enabled while running and disabled in Sleep)#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)#pragma config MCLRE = OFF // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)#pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled)#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)#pragma config LPBOR = OFF // Brown-out Reset Selection bits (BOR disabled)#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)// #pragma config statements should precede project file includes.// Use project enums instead of #define for ON and OFF.#include <xc.h>#define _XTAL_FREQ 8000000 // 8MHz#define ON 1#define OFF 0#define JTIM 80U // 80msec#define WTIM 110U // 110msec#define STIM (13000U*3U) // 1 hour * 3 = 3 hour//#define STIM (100U) // 1 hourvolatile unsigned char d_sta;void jingle(void){ LATA0 = ON; LATA1 = ON; __delay_ms(JTIM); LATA1 = OFF; LATA0 = OFF;}void wait(unsigned int n){ while(n--) { __delay_ms(1); }}void main(void){ unsigned int tout; WPUA = 0b00000000; ANSELA = 0b00000000; TRISA = 0b00001100; // BIT0:OUT:LED BIT1:OUT:HORN BIT2:IN:UNLOCK BIT3:IN:LOCK PORTA = 0b00000000; LATA = 0b00000000; IOCAN = 0b00001100; // RA3,RA2 interrupt ON __delay_ms(100); INTCON = 0b11001000; // IOCIE,PEIE,GIE ON tout = 100U; while( tout-- ) { IOCAF2 = OFF; IOCAF3 = OFF; __delay_ms( 10 ); } d_sta = 0; while(1) { switch( d_sta ){ case 0:// After UNLOCK SLEEP(); NOP(); NOP(); break; case 1:// UNLOCK Signal Start Seq First Jingle jingle(); d_sta++; break; case 2:// wait wait(WTIM); d_sta++; break; case 3:// Second Jingle jingle(); d_sta = 0; break; case 4:// LOCK Signal Start Seq Once Jingle jingle(); tout = STIM; d_sta++; break; case 5: LATA0 = ON; wait( 2U ); LATA0 = OFF; wait( 800U ); if( --tout == 0 ) { LATA0 = OFF; d_sta = 0; } break; default: d_sta = 0; break; } CLRWDT(); }}void __interrupt() isr(void){ if(IOCAF3) {// LOCK Sgnal d_sta = 4; IOCAF3 = OFF; } if(IOCAF2) {// UNLOCK Sgnal d_sta = 1; IOCAF2 = OFF; }}---------------------------------UNLOCK後、LOCK中のセキュリティLED消灯後はSLEEPしています。LOCK/UNLOCK信号で、Interrupt-On-Change(IOC)割り込みが発生して、それぞれの動作をします。割り込み処理の中身はシーケンス番号をセットするだけ、処理はmain関数内で行っていますよ。Define のJTIMを変更するとホーンが鳴っている時間を調整できます。WTIMを変更するとUNLOCK時の2回鳴動の間隔を変更できます。日本製/保証/サポート付き★ サウンドアンサーバックキット【BACKMAN-S】(標準サイレン) Ver7.3 ★ロック アンロック キーレス 連動 12V ワイルドスピード ワイスピ 風 ハリウッド サイレン ホーン スピーカー キュン 汎用アンサーバック サイレンスピーカー + コントローラーセット キュンキュン音 キーレス サウンド 12V汎用