Carrozzeria DEH-580をDTMのアンプとして使って久しい。
当初、電源ON/OFF SWにロジックICで回路を作っていたが、その後PICに置き換えて現在に至る。
今回、押し釦を押す代わりに非接触センサでON/OFFする仕組みを作ってみた。
(リモコンで電源入/切出来るようにせぇよという話はさておく)
このご時世、非接触といってもいろいろな方法があるが、感度が高すぎると誤動作の元になるので、感度調整に幅をもたせやすい赤外線反射方式のスイッチを作るところから始めよう。
赤外線反射式フォトセンサには秋月電子で販売されているLBR-127HLDを使用した。
赤外線LEDにボリュームで電流制限を設け、ある程度の感度調整が出来るようにした。
フォトトランジスタ単体だとアナログ出力になるので、デジタルトランジスタを入れてオープンコレクタのスイッチとして利用している。(なので、タイミングチャートの3.OUTはインピーダンスの変化を表している。)
アナログ出力のまんまPICのコンパレータを使ってもいいのだけれど、結果次第で他設備への転用がありえるので、単独の光電スイッチとして使用するつもりで作成した。
赤外線LEDが思いの外電流を食う(最大60mA!)ので、バッテリ駆動には向いてない。
熱の問題もあるし、パルス化するなどして、消費電力を抑える工夫が必要だと思う。
こちらが制御回路。
後にアナログ化することも考えてGP4をセンサ入力。
ICSPに干渉しないようGP2を出力に充てている。
(どのみちPICKITをつなぐ際はセンサを外さなければいけないのだけれど。)
プログラムはこちら。
入力のモメンタリ信号をオルタネータ化して出力するというもの。
特にどうというものでもないけれど、オルタネータ化する際のチャタリング対策がシーケンサ風だろうか。
E348AudioPSW2.c
続きを読む
当初、電源ON/OFF SWにロジックICで回路を作っていたが、その後PICに置き換えて現在に至る。
今回、押し釦を押す代わりに非接触センサでON/OFFする仕組みを作ってみた。
(リモコンで電源入/切出来るようにせぇよという話はさておく)
このご時世、非接触といってもいろいろな方法があるが、感度が高すぎると誤動作の元になるので、感度調整に幅をもたせやすい赤外線反射方式のスイッチを作るところから始めよう。
赤外線反射式フォトセンサには秋月電子で販売されているLBR-127HLDを使用した。
赤外線LEDにボリュームで電流制限を設け、ある程度の感度調整が出来るようにした。
フォトトランジスタ単体だとアナログ出力になるので、デジタルトランジスタを入れてオープンコレクタのスイッチとして利用している。(なので、タイミングチャートの3.OUTはインピーダンスの変化を表している。)
アナログ出力のまんまPICのコンパレータを使ってもいいのだけれど、結果次第で他設備への転用がありえるので、単独の光電スイッチとして使用するつもりで作成した。
赤外線LEDが思いの外電流を食う(最大60mA!)ので、バッテリ駆動には向いてない。
熱の問題もあるし、パルス化するなどして、消費電力を抑える工夫が必要だと思う。
こちらが制御回路。
後にアナログ化することも考えてGP4をセンサ入力。
ICSPに干渉しないようGP2を出力に充てている。
(どのみちPICKITをつなぐ際はセンサを外さなければいけないのだけれど。)
プログラムはこちら。
入力のモメンタリ信号をオルタネータ化して出力するというもの。
特にどうというものでもないけれど、オルタネータ化する際のチャタリング対策がシーケンサ風だろうか。
E348AudioPSW2.c |
1 /* 2 * File: E348AudioPSW2.c 3 * Author: http://kazuikazui.dreamlog.jp/ 4 * Device: PIC12F683 5 * Compiler: XC8 Ver2.36 6 * IDE : MPLAB X IDE v6.00 7 * Created on 2022/08/09, 12:09 8 */ 9 10 // PIC12F683 Configuration Bit Settings 11 12 // 'C' source line config statements 13 14 // CONFIG 15 #pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN) 16 #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) 17 #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) 18 #pragma config MCLRE = OFF // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD) 19 #pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled) 20 #pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled) 21 #pragma config BOREN = ON // Brown Out Detect (BOR enabled) 22 #pragma config IESO = OFF // Internal External Switchover bit (Internal External Switchover mode is disabled) 23 #pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled) 24 25 // #pragma config statements should precede project file includes. 26 // Use project enums instead of #define for ON and OFF. 27 28 #include <xc.h> 29 30 //****************** Global Variables ******************* 31 #define _XTAL_FREQ 125000 //125kMHz Internal OSC 32 33 __bit M0; //内部補助リレー 34 int D0; //内部カウンタ 35 36 #include <xc.h> 37 38 void main(void) { 39 //Special Function Resister(SFR) (See PIC12F683 DataSheet) 40 OSCCON = 0b0010000; // OSCillator CONtrol register:Internal Fosc=125kHz=8usec 41 ANSEL = 0b0100000; // ANalog SELect register:Fosc/32=25.6msec@125kHz,AN* All disable 42 CMCON0 = 0b00000111; // CoMparator CONfiguration register:All disable 43 TRISIO = 0b111011; // GPIO TRI-STATE REGISTER:GP0,1,(3),4,5 as INPUT,GP2 as OUTPUT 44 WPU = 0b011000; // WakePullUpbit GP(3),4 ON 45 OPTION_REG = 0b00000000; // OPTON REGister:GPPU=GPIO pull-ups are enabled,INTEDG=Interrupt on falling edge 46 47 /* Global Variables initialize */ 48 GPIO = 0b000000; // GP2 default LOW 49 M0 = 0; 50 D0 = 0; 51 52 __delay_ms(500); 53 54 while(1) { 55 if (GP4 == 1){ 56 __delay_ms(10); 57 D0++; 58 if (D0 == 25){ 59 M0 = ~M0; 60 D0 = 999; 61 } 62 } 63 else { 64 D0 = 0; 65 } 66 GP2 = M0; 67 } 68 } 69
続きを読む