2015年02月12日
ブザー回路5
こんにちは、ハロです
また、ブザー回路になります
ちょっと回路を整理してみようかと整理しました
実は、間違えだらけでした
PICの電源部に10μFと0.1μFを並列で入れてたんですが
いらなくて、0.1μFだけにしました
そして、トランジスタnpn型のEとBに10kΩを入れていましたが
これは意味がないとのこと、入れるならば出力ピンからの信号線に入れなさいってことで
計算方法なんですが、まずトランジスタの増幅率を調べないといけないようです
今回使っているのは1815GRってもので
200~400倍だそうです
なので200倍と考えてみます
今回の使用電圧は3V
ブザーの抵抗は約200Ω
トランジスタのVEBは0.6V
んで計算
そもそも、なんで抵抗入れなくちゃならんのかって
トランジスタは電流操作なので、抵抗を入れて電流で操作しやすくするのが目的なようです
詳しくは、こちらで読んでました
でも、EとBに抵抗を入れるのも、あながち間違ってなかったのかな?なんて
とにかく、これではだめなので、また新しく作ってみました
今度は、ゼロプレッシャーを入れて、書き込んでは試して、書き込んでは試してとやっていきます
PIC自体は数個買ってきてあるので、だめになってもいいや!ってとにかくやってみます
トライ&エラーだ!
そして、プログラムがこんな風になりました
/*
* File: newmain.c
* Author: kushihashi
*
* Created on 2013/08/08, 1:47
*/
#include <stdio.h>
#include <stdlib.h>
/*******************************************************
*3秒タイマーを作ります2015_01_11
*******************************************************/
#include <pic.h>
//#include <delays.h> //pic.hの中に入ってるそうです
#define _XTAL_FREQ 4000000
// PIC16F676 Configuration Bit Settings
#include <xc.h>
// CONFIG
#pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF // RA3/MCLR pin function select (RA3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled)
#pragma config CP = OFF // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled)
int main() {
//前処理
OSCCAL =0b10000000;//4MHzの中央値?使う
CMCON= 0b00000111;//コンパレータOFF 111で全オフ 下3ケタで動作モード切替
TRISA =0b00100000;
//TRISA =0b00001001;//RA0,RA3入力
TRISC =0b00010000;//PORTC全て出力
PORTA=0b00000000;
PORTC =0b00000000;
OPTION_REG =0b11010110;
ANSEL=0b00000000;
GIE = 1;//割り込み許可
T0IE =0;//タイマ割込み許可
while(1){
if(RC4==1){
RC5=1;
_delay(1000000);
RC5=0;
_delay(2000000);
RC5=1;
_delay(1200000);
RC5=0;
}
/*else if(RA5==1 && RA4==1){
RC5=0;
_delay(3000);
RC5=1;
_delay(1000);
RC5=0;
_delay(2000);
RC5=1;
_delay(1000);
RC5=0;
}*/
}
}
前文のほうの設定については、調べながら、使わないやつをOFFにしていって
いらない文も消していきました
#include <xc.h>
で、xc.hがなくなっていたのは、HTMLで< > が予約文字になっていたためでした
ただ、わからないことがあるんですよ
_delay(1000000);
で、1秒のつもりなんですが、なんだか早く感じる
スマホのアプリで時間を測ると0.8秒とでた
このままでは、正確な時間が設定できない
これは、使用電圧とかが関係があるんだろうか
発振素子を積んでないとだめなのかな
4MHzってのは1μ秒ってことなんじゃ?
また、ブザー回路になります
ちょっと回路を整理してみようかと整理しました
実は、間違えだらけでした
PICの電源部に10μFと0.1μFを並列で入れてたんですが
いらなくて、0.1μFだけにしました
そして、トランジスタnpn型のEとBに10kΩを入れていましたが
これは意味がないとのこと、入れるならば出力ピンからの信号線に入れなさいってことで
計算方法なんですが、まずトランジスタの増幅率を調べないといけないようです
今回使っているのは1815GRってもので
200~400倍だそうです
なので200倍と考えてみます
今回の使用電圧は3V
ブザーの抵抗は約200Ω
トランジスタのVEBは0.6V
んで計算
そもそも、なんで抵抗入れなくちゃならんのかって
トランジスタは電流操作なので、抵抗を入れて電流で操作しやすくするのが目的なようです
詳しくは、こちらで読んでました
でも、EとBに抵抗を入れるのも、あながち間違ってなかったのかな?なんて
とにかく、これではだめなので、また新しく作ってみました
今度は、ゼロプレッシャーを入れて、書き込んでは試して、書き込んでは試してとやっていきます
PIC自体は数個買ってきてあるので、だめになってもいいや!ってとにかくやってみます
トライ&エラーだ!
そして、プログラムがこんな風になりました
/*
* File: newmain.c
* Author: kushihashi
*
* Created on 2013/08/08, 1:47
*/
#include <stdio.h>
#include <stdlib.h>
/*******************************************************
*3秒タイマーを作ります2015_01_11
*******************************************************/
#include <pic.h>
//#include <delays.h> //pic.hの中に入ってるそうです
#define _XTAL_FREQ 4000000
// PIC16F676 Configuration Bit Settings
#include <xc.h>
// CONFIG
#pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF // RA3/MCLR pin function select (RA3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled)
#pragma config CP = OFF // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled)
int main() {
//前処理
OSCCAL =0b10000000;//4MHzの中央値?使う
CMCON= 0b00000111;//コンパレータOFF 111で全オフ 下3ケタで動作モード切替
TRISA =0b00100000;
//TRISA =0b00001001;//RA0,RA3入力
TRISC =0b00010000;//PORTC全て出力
PORTA=0b00000000;
PORTC =0b00000000;
OPTION_REG =0b11010110;
ANSEL=0b00000000;
GIE = 1;//割り込み許可
T0IE =0;//タイマ割込み許可
while(1){
if(RC4==1){
RC5=1;
_delay(1000000);
RC5=0;
_delay(2000000);
RC5=1;
_delay(1200000);
RC5=0;
}
/*else if(RA5==1 && RA4==1){
RC5=0;
_delay(3000);
RC5=1;
_delay(1000);
RC5=0;
_delay(2000);
RC5=1;
_delay(1000);
RC5=0;
}*/
}
}
前文のほうの設定については、調べながら、使わないやつをOFFにしていって
いらない文も消していきました
#include <xc.h>
で、xc.hがなくなっていたのは、HTMLで< > が予約文字になっていたためでした
ただ、わからないことがあるんですよ
_delay(1000000);
で、1秒のつもりなんですが、なんだか早く感じる
スマホのアプリで時間を測ると0.8秒とでた
このままでは、正確な時間が設定できない
これは、使用電圧とかが関係があるんだろうか
発振素子を積んでないとだめなのかな
4MHzってのは1μ秒ってことなんじゃ?