あいかわらず、PICを理解するのは一苦労だ。
おかげで、英語アレルギーが少しは治ってきたような気がする。
ただ、学生の頃にこんなに英語に接していたら今のオレはなかっただろうな・・・
A/D変換を理解するだけで、貴重な休日を丸々一日費やしてしまった。
なんとかならんものかのぉー
今回の落とし穴は数々あったが、一番の落とし穴は抵抗無しのLEDを5つ以上PICに繋ぐと誤動作をすると言うことに気がつかなかったことです。
「お約束は守りましょう」と言うことです。
とりあえず、サーミスタを接続して、温度測定みたいなことをしています。
// Analog to Digital Converter
// PORTB = LED * 8
// RA2 = Variable Register
// Internal OSC
#include "pic16f88.h"
#include "htc.h"
#define _XTAL_FREQ 8000000
__CONFIG(FOSC_INTOSCIO & WDTE_OFF & MCLRE_OFF & BOREN_OFF & LVP_OFF & WRT_OFF & DEBUG_OFF);
//intrc & watch dog off & BOR disabled & Low-Voletage disabled & Write protection off & Degugger enabled
void init(void){
OSCCONbits.IRCF = 7; //Inernal RC Oscillater Frequency = 8MHz
OSCCONbits.SCS = 0; //
CCP1CONbits.CCP1M = 0;
TRISA = 0b00000100; //RA2=Input Other=Output
TRISB = 0b00000000; //All=Output
ANSEL = 0b0000100; //RA2 = Analog,Other = Digital
ADCON1bits.VCFG = 0b00;//A/D Voltage Reference
ADCON0bits.CHS = 0b010;
ADCON1bits.ADCS2 = 0b0;
ADCON0bits.ADCS = 0b10;
ADCON0bits.ADON = 1;
ADCON1bits.ADFM = 1;
GIE = 0;
PEIE = 0;
}
void main(void){
init();
while(1){
ADCON0bits.GO_DONE = 1;
while (ADCON0bits.GO_DONE);
PORTB = ADRESL;
RA0 = ADRESH & 0b1;
RA1 = (ADRESH >> 1) & 0b1;
__delay_ms(1000);
}
}
おかげで、英語アレルギーが少しは治ってきたような気がする。
ただ、学生の頃にこんなに英語に接していたら今のオレはなかっただろうな・・・
A/D変換を理解するだけで、貴重な休日を丸々一日費やしてしまった。
なんとかならんものかのぉー
今回の落とし穴は数々あったが、一番の落とし穴は抵抗無しのLEDを5つ以上PICに繋ぐと誤動作をすると言うことに気がつかなかったことです。
「お約束は守りましょう」と言うことです。
とりあえず、サーミスタを接続して、温度測定みたいなことをしています。
// Analog to Digital Converter
// PORTB = LED * 8
// RA2 = Variable Register
// Internal OSC
#include "pic16f88.h"
#include "htc.h"
#define _XTAL_FREQ 8000000
__CONFIG(FOSC_INTOSCIO & WDTE_OFF & MCLRE_OFF & BOREN_OFF & LVP_OFF & WRT_OFF & DEBUG_OFF);
//intrc & watch dog off & BOR disabled & Low-Voletage disabled & Write protection off & Degugger enabled
void init(void){
OSCCONbits.IRCF = 7; //Inernal RC Oscillater Frequency = 8MHz
OSCCONbits.SCS = 0; //
CCP1CONbits.CCP1M = 0;
TRISA = 0b00000100; //RA2=Input Other=Output
TRISB = 0b00000000; //All=Output
ANSEL = 0b0000100; //RA2 = Analog,Other = Digital
ADCON1bits.VCFG = 0b00;//A/D Voltage Reference
ADCON0bits.CHS = 0b010;
ADCON1bits.ADCS2 = 0b0;
ADCON0bits.ADCS = 0b10;
ADCON0bits.ADON = 1;
ADCON1bits.ADFM = 1;
GIE = 0;
PEIE = 0;
}
void main(void){
init();
while(1){
ADCON0bits.GO_DONE = 1;
while (ADCON0bits.GO_DONE);
PORTB = ADRESL;
RA0 = ADRESH & 0b1;
RA1 = (ADRESH >> 1) & 0b1;
__delay_ms(1000);
}
}
※コメント投稿者のブログIDはブログ作成者のみに通知されます