PICマイコンのI/Oについて教えてください。
PIC16F1936を使っています。
各ポートをデジタル出力にしLEDを順に点灯させていますが
RB0に接続したLEDのみうっすらとしか光りません。
(プログラムで意図したとおり点滅はします。)
テスターで電流を計測したところRB0のみほとんど流れていませんでした。
また電源投入時にRB0に接続したLEDだけ一瞬光ります。
PICは初期状態でI/Oは入力になっているので光らないと思うんですが・・・
MPLABX+XC8で開発しています。
以下の切り分けを行いました。
・LED単体での点灯:正常点灯
・他のLEDをRB0に接続:現象再現
・他のブレットボードで作動:現象再現
データシートとかなり睨めっこしたんですがそれっぽい部分がみつかりません
ご教示いただけると助かります。
ソースは以下のとおりです。
#include <xc.h>
#pragma config CLKOUTEN = OFF,\
WDTE = OFF,\
PWRTE = ON,\
CP = OFF,\
BOREN = OFF,\
FCMEN = OFF,\
MCLRE = ON,\
CPD = OFF,\
IESO = OFF,\
FOSC = INTOSC,\
STVREN = OFF,\
BORV = LO,\
LVP = OFF,\
VCAPEN = OFF,\
WRT = OFF,\
PLLEN = ON
#define uchar unsigned char
#define uint unsigned int
void init(void){
//ポート初期化
PORTA = 0b00000000;
PORTB = 0b00000000;
PORTC = 0b00000000;
PORTE = 0b00000000;
TRISA = 0b00000000;
TRISB = 0b00000000;
TRISC = 0b00000000;
TRISE = 0b00000000;
//全てデジタル
ANSELA = 0b00000000;
ANSELB = 0b00000000;
//8mhz
OSCCON = 0b11110000;
OPTION_REG = 0b00000000;
APFCON = 0;
WPUE = 0;
}
void Wait(unsigned int num){
for (int i=0 ; i<num ; ++i) {
for( int j = 0; j < 100; ++j){
NOP();
}
}
}
void main(void){
init();
while(1){
PORTC = 0b00000100;
Wait(1000);
PORTC = 0b00000000;
PORTB = 0b00001000;
Wait(1000);
PORTB = 0b00100000;
Wait(1000);
PORTB = 0b00000001;
Wait(1000);
PORTB = 0b00000000;
}
}
お礼
回答頂きありがとうございます。 現在Win avrCコンパイラでコーディングしています。 いつもパワーダウンモードに移行する場合に使用している関数なのですが、 void sleep_set(void) { WDTCSR &= ~(1 << WDIE); wdt_disable(); spi_signalpin_opendrain_active(); EIMSK |= (1<<INT0); sleep_mode(); wdt_enable(WDTO_4S); WDTCSR |= (1 << WDIE); } もし、スタートアップ時間を長くしたい場合は、sleep_mode();関数で パワーダウンモードに移行し、INT1割り込みが入ったら、その行から 下のプログラムを実行していくので、その下にディレー関数などを入れた方が良いのでしょうか? また、パワーダウンモードから復帰時に電圧を安定化させるために必要な時間はどのくらいでしょうか? 大変もうしわけありませんが、ご教授頂きますようよろしくお願いします。