ããã«ã¡ã¯ãENGããŽã§ãã
ãã€ã³ã³ã§PWMãçæããããšãã§ããããã«ãªããšãã¶ãŒã鳎ããããšãã§ããŸãããŸãPWMã®ãã£ãªã¢åšæ³¢æ°ã倿Žããããšã§ãã¶ãŒã®é³çšãå€ããããšãã§ããŸãããã£ãªã¢åšæ³¢æ°ã¯ã¿ã€ãã®ãªãŒããŒãããŒãããŸã§æéãæäœããããšã§å®çŸã§ããŸãã
PIC12F675ã§ãã¶ãŒã鳎ãããŠé³çšãå€ããŠããŸããããã€ã³ã³ãåããåãèãæ¹ã§ãã¶ãŒã鳎ããããšãã§ããããåèã«ãªããšæããŸãã
PIC12F675ã䜿ã£ãŠãã€ã³ã³ã®åããå匷ããããã«PIC12F675ã®æ©èœã§ã§ããããšã«ã€ããŠãŸãšããŠããŸãã
PICãã€ã³ã³ïŒPIC12F675ïŒã§å®çŸã§ããæ©èœãšè§£èª¬ãªã³ã¯ãŸãšã
PIC12F675ã§æ¯å波圢ãçæããæ¹æ³
PWMã¯ãã£ãªã¢åšæ³¢æ°ãäžå®ã«ããªããæ³¢åœ¢ã®ãã¥ãŒãã£ãŒæ¯ãå€ããããšã§é»å§ãã³ã³ãããŒã«ããæ¹æ³ã§ããäžæ¹ã§ãã¶ãŒãé³çšãå€ããªãã鳎ããããã«ã¯æ¯å波圢ãäžããå¿ èŠããããŸãã
ãã£ãªã¢åšæ³¢æ°ã®å¶åŸ¡ã«ã€ããŠ

ãã£ãªã¢åšæ³¢æ°ãå¶åŸ¡ããæ¹æ³ã¯ã¿ã€ããŒã®åæå€ã倿Žããããšã§å®çŸã§ããŸãããã£ãªã¢åšæ³¢æ°ãé«ãããå Žåã¯åæå€ãé«ãã«èšå®ãããã£ãªã¢åšæ³¢æ°ãäœãããå Žåã¯åæå€ãäœãã«èšå®ããŸãã
æ¯å波圢ãçæããã®ãç®çãªã®ã§ãã¥ãŒãã£ãŒæ¯ã¯1ïŒ1ã§åé¡ãããŸããããã¥ãŒãã£ãŒæ¯ãäœããããšé»å§ãäœäžããããé³ãå°ãããªãããšããããŸãã
æ¯å波圢ãçæããã®ã¿ã§ããã®ã§ã¿ã€ããŒãªãŒããŒãããŒãããšãã«ããŒãã®HãšLãåãæ¿ããããšã§é³ã鳎ããããšãã§ããŸãã
é»åãã¶ãŒã®äœ¿ãæ¹

ãã¶ãŒã«ã¯é»åãã¶ãŒïŒã¢ã¯ãã£ãïŒãå§é»ãã¶ãŒïŒããã·ãïŒããããŸãã
å§é»ãã¶ãŒã¯ã¢ããã°å ¥åã§å¶åŸ¡ã§ããããè€éã«é³ãã³ã³ãããŒã«ããéã«äœ¿çšããŸãã
é»å§ãå ããã ãã§é³ãåºãããå Žåã¯é»åãã¶ãŒã䜿çšããŸãã
ãã¶ãŒã®æ§é ã§ã³ã€ã«ã䜿ãããŠããå Žåã黿µãæµãç¶ãããšçºç±ããããšãéèµ·é»åãçºçããããšããããã黿µãåžžã«æµããªãããã«ããããšãå¿ èŠã§ãã
ãã«ã¹æ³¢åœ¢ãäžããŠé»æµãæµãç¶ããªãããã«ããªããé»å§ãå ããããšãæšå¥šãããããã©ã¡ãã®ãã¶ãŒã䜿ãã«ããŠããã«ã¹æ³¢åœ¢ãäžããããšãå¿ èŠã§ãã
å§é»ãã¶ãŒïŒããã·ããã¶ãŒïŒ
å§é»ãã¶ãŒã¯é»å§ããããã ãã§ã¯é³ã¯ãªããŸãããé³å£°æ³¢åœ¢ã®ããã«æ°kHzã®æ¯å波圢ãå ¥åããããšã§é³ã鳎ããŸããæ¥µæ§ããããã®ãããã®ã§æ³šæãå¿ èŠã§ãã
ãã€ã³ã³ã®ããŒããHãšLãé »ç¹ã«åãæ¿ããããšã§é³å£°æ³¢åœ¢ãæš¡æ¬ããããšã§é³ã鳎ããããšãã§ããŸãã
é»åãã¶ãŒïŒã¢ã¯ãã£ããã¶ãŒïŒ
é»åãã¶ãŒã¯ã±ãŒã¹å ã«çºæ¯åè·¯ãå èµããŠããäžå®ã®é»å§ãããããšé³ã鳎ããŸãããã€ã³ã³ã®ããŒããHã«ããã ãã§äžå®ã®é³çšã®é³ã鳎ããŸããæ¥µæ§ãããã®ã§æ³šæãå¿ èŠã§ãã
é³çšãäžå®ã§ããã¶ãŒã§éç¥ããããšãã§ããããèŠå ±ãå®è£ ãããããéã«äœ¿çšããããšããããŸãã
å§é»ãã¶ãŒãšé»åãã¶ãŒã®ã©ã¡ããæ¯åæ³¢åœ¢ã調æŽããããšã§é³çšãã³ã³ãããŒã«ããããšãã§ããŸããå§é»ãã¶ãŒã§ããã°ãã£ãªã¢åšæ³¢æ°ã倿ŽããŠé³çšãå€ããããšãã§ããé»åãã¶ãŒã§ããã°ãã¥ãŒãã£æ¯ã倿Žãããšé³çšãå€ããããšãã§ããŸãã
åäœç¢ºèªããŠã¿ãŠãæ£çŽãããŸã§å·®ããªããšæããŠããŸããåã«éç¥çšã®ãã¶ãŒãšããŠäœ¿çšãããªãã©ã¡ãã§ãè¯ããšæããŸãã
PICãã€ã³ã³ïŒPIC12F675)ã®åæå
PICãã€ã³ã³ã䜿çšããããã«ã¯ããã€ã³ã³ãã©ã®ãããªæ©èœã§äœ¿çšããã®ããéžæããåæåãè¡ãå¿ èŠããããŸãã
åæåéšåãå®è£ ãã
ãã£ãªã¢åšæ³¢æ°ã倿Žããããã«AD倿åšã䜿çšããŸããåæåéšåã¯äžèšããã°ã©ã ãšåæ§ã§ãã®ã§èãæ¹ã«ã€ããŠã¯äžèšèšäºãåèã«ããŠãã ããã
PICãã€ã³ã³ïŒPIC12F675ïŒã䜿ã£ãPWMã®èãæ¹
倿Žç¹ã¯ãã¥ãŒãã£æ¯ãåºå®ãããŸãŸãã£ãªã¢åšæ³¢æ°ã倿Žã§ããããã«å²ã蟌ã¿é¢æ°å ã§æ¯å波圢ãçæããããã«ããŒãã®HãšLãåãæ¿ããåŠçãå®è£ ããŠããŸãã
TMR0ã§ãã£ãªã¢åšæ³¢æ°ãå¶åŸ¡ãã
ãã¶ãŒã鳎ããããã«ã¯ãã£ãªã¢åšæ³¢æ°ãç®å®ãšããŠ1kHz以äžïŒåšæã1msïŒã®æ¯å波圢ãå¿ èŠã§ãããã£ãªã¢åšæ³¢æ°ãäœããããšé³ã鳎ããªããªããŸãã
TMRïŒã䜿çšããŠãããã®ã§ãããTMR0ã¯ããªã¹ã±ãŒã©ãªãã§256usã§ã¿ã€ã ãªãŒããŒãããŒãããã现ããªæ¯å波圢ãäœããããã®ã§TMR0ã䜿çšããŸãã
ããªã¹ã±ãŒã©ã¯1ïŒ4ãšããŠããã®ã§æå€§ã§256Ã4= 1024usã®ã¿ã€ããŒã«ãªã£ãŠããŸãã2ååã®ã¿ã€ã ãªãŒãã§1åšæã«ãªãã®ã§1åšæã®æéã¯2048usã«ãªãã®ã§æå°ã®ãã£ãªã¢åšæ³¢æ°ã¯488Hzã«ãªããŸãã
æ¯å波圢ã確å®ã«çæããããã«ã¿ã€ããŒ0ã®åæå€ã®æå€§ã0xF0(250)ã«å¶éããŠããŸããæå€§æã®ãã£ãªã¢åšæ³¢æ°ã¯25kHzã«ãªããŸãããã£ãªã¢åšæ³¢æ°ã®å¯å€ç¯å²ã¯484Hzãã25kHzã«ãªããŸãã
æ¯å波圢ãå®è£ ãã

SW1ãæŒããšLED1ãç¹ç¯ãGP4ããæ¯åæ³¢åœ¢ãåºåéå§ããŸããå¯å€æµæVR1ã倿ŽãããšAD倿ã®å€ã倿Žãããããæ¯åæ³¢åœ¢ã®ãã£ãªã¢åšæ³¢æ°ãå€åããã¶ãŒã®é³çšãå€ããããšãã§ããŸãã
//-----------------å²ã蟌ã¿é¢æ°-------------------------
void __interrupt() intr( void){
if( TMR1IE == 1 && TMR1IF == 1){ //ã¿ã€ã1ã®å²ã蟌ã¿ã§ããã
TMR1IF = 0;//å²ã蟌ã¿ãã©ã°ãã¯ãªã¢
++cnt10ms;
difiltflg = BIT_SET;
TMR1ON = 0;
TMR1H = TIME_START_H;//ïŸïœ²ïŸåæå
TMR1L = TIME_START_L;//ïŸïœ²ïŸåæå
TMR1ON = 1;//ïŸïœ²ïŸ1ON
}
if( T0IE == 1 && T0IF == 1){
T0IF = 0;
if( gpio3_buf){
GPIO4 =~GPIO4; //åºåãå転
}else{
GPIO4 = BIT_CLR;
}
CntData = (CntMax >> 2); //ïŒåã·ããããŠ10ãããã®ADããŒã¿ã8ãããã®ããŒã¿ãšãã
if( CntData >= PULSE_LIMIT){
CntData = PULSE_LIMIT;
}
TMR0 = CntData;
}
if( ADIE == 1 && ADIF == 1){
ADIF = 0;
adfiltflg = BIT_SET;
}
}
AD倿ã¯10ãããã®åè§£èœã§ããããã¿ã€ããŒ0ã®åæå€ãšããŠæ¡çšããéã«ã¯8ãããã®ããŒã¿ã«å€æããå¿ èŠããããŸãã
ãã¶ãŒã¯å§é»ãã¶ãŒãšé»åãã¶ãŒã®ã©ã¡ããé³çšã倿Žã§ãåãããã«é³ŽããŸããé»åãã¶ãŒã®æ¹ã¯æµæãå ¥ããŠããããšã§é»å§éäžãèµ·ããé»åãã¶ãŒãããé³ãå°ããèãããŸãã
ãœãŒã¹ã³ãŒãå šäœ
ãœãŒã¹ã³ãŒãã¯èšäºäœææç¹ã«ãããŠåäœç¢ºèªã§ããŠããŸããã䜿çšããŠããã©ã€ãã©ãªã®æŽæ°ã«ããåäœãä¿èšŒã§ããªããªãå¯èœæ§ããããŸãããŸãããœãŒã¹ã³ãŒãã䜿çšããããšã«ãã£ãŠçããäžå©çãªã©ã®äžåã®è²¬ä»»ãè² ããããŸããåèè³æãšããŠã䜿ããã ããã
// CONFIG
#pragma config FOSC = INTRCIO
#pragma config WDTE = ON
#pragma config PWRTE = OFF
#pragma config MCLRE = OFF
#pragma config BOREN = OFF
#pragma config CP = OFF
#pragma config CPD = OFF
#include <xc.h>
//--------------宿°å®çŸ©----------------------------
#define _XTAL_FREQ 4000000 //çºæ¯åšæ³¢æ° 4MHz
#define TIME_START_H 0xD8 //ã¿ã€ãã¹ã¿ãŒãäœçœ® 65536- 55536 = 10000
#define TIME_START_L 0xF0 //ã¿ã€ãã¹ã¿ãŒãäœçœ® 65536- 55536 = 10000
#define BIT_SET 1
#define BIT_CLR 0
#define CNT_OFF -1
#define AD_NUM 4 //ç§»åå¹³åãã£ã«ã¿ã®ãµã³ããªã³ã°æ°
#define DI_NUM 4
#define TIME_OFF -1 //ã¿ã€ããŒã䜿çšããªãå Žå
#define TIME_UP 0 //ã¿ã€ã ã¢ãã
#define TIME_ADCNT_MAX 1 //100msçµé
#define TIME_BASE_MAX 1 //ããŒã¹ã¿ã€ãã«ãŠã³ãå€
#define TIME_WAIT_MAX 10
#define PULSE_LIMIT 0xF0
typedef struct{
char wp;
unsigned short buf[ AD_NUM ];
}FILT_DATA;
//-----------------倿°å®çŸ©--------------------------
unsigned short CntMax; //Dutyæå€§å€äžæä¿ç®¡çš
unsigned short CntData;
FILT_DATA AdData;
FILT_DATA DiData;
char adfiltflg = BIT_CLR; //ADãã£ã«ã¿èµ·å
char difiltflg = BIT_CLR; //DIãã£ã«ã¿èµ·å
unsigned char cnt10ms;
char TimerAdStart = TIME_OFF;
char timWait = TIME_OFF;
char gpio3_buf;
//-----------------颿°å®çŸ©---------------------------
void ADFilter(void);
void mainTimer(void);
void DiFilter(void);
void main(void) {
//åçš®åæå
ADCON0 = 0x81; //ADã³ã³ããŒã¿ã®é»æºãONãçµæã¯å³è©°ã
ANSEL = 0x11; //GP0ãã¢ããã°å
¥åã«äœ¿çšã倿ã¯ããã¯ã¯8TOSC
CMCON = 0x07; //ã³ã³ãã¬ãŒã¿äœ¿çšããªã
TRISIO = 0x09; //GP0,GP3å
¥åããã®ä»åºå
GPIO = 0x00; //ããŒãã®èšå® 1ïŒHigh 0:Low
OPTION_REG = 0x01; //ããªã¹ã±ãŒã©4 TMR0ã§äœ¿çš
//å²ã蟌ã¿èšå®
INTCON = 0xC0; //PIE1èš±å¯
PIE1 = 0x41; //AD倿çµäºã»TMR1å²ã蟌ã¿èš±å¯
//åæå
//ã¿ã€ãèµ·å
T1CON = BIT_CLR;
TMR1H = TIME_START_H;//ïŸïœ²ïŸåæå
TMR1L = TIME_START_L;//ïŸïœ²ïŸåæå
cnt10ms = 0;
TMR1ON = BIT_SET;//ïŸïœ²ïŸ1ON
TMR1IF = BIT_CLR;//å²ã蟌ã¿ïœžïŸïœ±
TMR0 = 0;
T0IF = BIT_CLR;//å²ã蟌ã¿ïœžïŸïœ±
//DIãã£ã«ã¿åæèµ·å
timWait = TIME_WAIT_MAX;
while( timWait > TIME_UP){
CLRWDT();
mainTimer();
DiFilter();
}
timWait = TIME_OFF;
//TMR0ãèµ·å
TMR0 = 0;
T0IE =BIT_SET; //TMR0å²ã蟌ã¿èš±å¯
T0IF = BIT_CLR; //å²ã蟌ã¿ïœžïŸïœ±
//ADå€æèµ·å
GO_DONE = BIT_SET;
while(1){
CLRWDT();
mainTimer();
DiFilter();
ADFilter();
}
}
//-----------------å²ã蟌ã¿é¢æ°-------------------------
void __interrupt() intr( void){
if( TMR1IE == 1 && TMR1IF == 1){ //ã¿ã€ã1ã®å²ã蟌ã¿ã§ããã
TMR1IF = 0; //å²ã蟌ã¿ãã©ã°ãã¯ãªã¢
++cnt10ms;
difiltflg = BIT_SET;
TMR1ON = 0;
TMR1H = TIME_START_H; //ïŸïœ²ïŸåæå
TMR1L = TIME_START_L; //ïŸïœ²ïŸåæå
TMR1ON = 1;//ïŸïœ²ïŸ1ON
}
if( T0IE == 1 && T0IF == 1){
T0IF = 0;
if( gpio3_buf){
GPIO4 =~GPIO4;
}else{
GPIO4 = BIT_CLR;
}
CntData = (CntMax >> 2);
if( CntData >= PULSE_LIMIT){
CntData = PULSE_LIMIT;
}
TMR0 = CntData;
}
if( ADIE == 1 && ADIF == 1){
ADIF = 0;
adfiltflg = BIT_SET;
}
}
//----------ã¿ã€ããŒç®¡ç----------------------------------
void mainTimer(void){
if( cnt10ms >= TIME_BASE_MAX){
cnt10ms -=TIME_BASE_MAX;
if( TimerAdStart > TIME_UP ){
--TimerAdStart;
}
if( timWait > TIME_UP ){
--timWait;
}
}
if( TimerAdStart == TIME_UP){
if( GO_DONE == BIT_CLR){
GO_DONE = 1;
TimerAdStart = TIME_ADCNT_MAX;
}
}
}
//--------ã¢ãŒãåæ¿éšã®DIãã£ã«ã¿----------------------------
void DiFilter(void){
if( difiltflg ){
difiltflg = BIT_CLR;
DiData.buf[ DiData.wp ] = GPIO3;
if( DiData.buf[ 0 ] == DiData.buf[ 1 ] &&
DiData.buf[ 1 ] == DiData.buf[ 2 ] &&
DiData.buf[ 2 ] == DiData.buf[ 3 ] ){
//æ¯èŒããŠäžèŽãããå€ãæ¡çš
gpio3_buf = DiData.buf[ 0 ];
}
if( ++DiData.wp >= DI_NUM) DiData.wp = 0;
}
}
//--------ADãã£ã«ã¿----------------------------
void ADFilter(void){
unsigned short set;
char i;
if( adfiltflg ){
adfiltflg = BIT_CLR;
AdData.buf[ AdData.wp ] = ADRESH;
AdData.buf[ AdData.wp ] = ( AdData.buf[ AdData.wp ] << 8) + ADRESL;
set = 0;
for( i = 0; i < AD_NUM; i++ ){
set += AdData.buf[ i ];
}
set = set >> 2;
if(++AdData.wp >= AD_NUM){
AdData.wp=0;
}
CntMax = set;
}
}
//---------------------end file----------------------------
é¢é£ãªã³ã¯
PICãã€ã³ã³ã䜿ã£ãŠãã€ã³ã³ã®ã¬ãžã¹ã¿ã®èšå®ãMPLAB X IDEã®ãã©ã°ã€ã³ã§ããMCCã䜿çšããŠåäœç¢ºèªããããšã«ã€ããŠãŸãšããŠããŸãã
PICãã€ã³ã³ïŒPIC12F675ïŒã§å®çŸã§ããæ©èœãšè§£èª¬ãªã³ã¯ãŸãšã
PICãã€ã³ã³ïŒPIC16F1827ïŒã§å®çŸã§ããæ©èœãšè§£èª¬ãªã³ã¯ãŸãšã
PRïŒæè¡ç³»ã®éä¿¡æè²è¬åº§ãªãJTEX
æåŸãŸã§ãèªãã§ããã ãããããšãããããŸããã

