[戻る]
過去ログ [ 0001 ]
過去ログ:     ワード検索: 条件: 表示:

タイトル
記事No
投稿日
投稿者
参照先
点滅しない
559
: 16/05/27-05:28
E.T <en0605taku@docomo.ne.jp>

はじめまして。PICを初めて数週間の者です。
PIC16F627A

以下のようにプログラムを書いてブレッドボードで実行したのですが、
LEDが点滅したり点灯したままになってしまいます。どうしたら点滅できるようになりますでしょうか。


↓プログラム↓
/*****************************
* 試作回路
*****************************/

//インクルードファイルの読み込み
#include <pic.h>

//コンフィギュレーションワードの設定
#pragma config CPD=OFF , LVP=OFF , BOREN=OFF , MCLRE=ON , PWRTE=ON , WDTE=ON , FOSC=INTOSCIO

// プロトタイプ宣言
void WaitTime (int cnt);

//メイン関数
void main (void)
{
// 1,2,17,18端子を入出力端子に設定
CMCON = 0x07;

// 電圧レベルの初期設定
PORTA = 0xFF;
PORTB = 0xFF;

// 入出力設定
TRISA = 0b00000000;
TRISB = 0b00000000;

// 永久ループ
while(1)
{
// LED1点灯
RB0 = 0;

// 待ち時間関数の呼び出し
WaitTime(10000);

// LED1消灯
RB0 = 1;

// 待ち時間関数の呼び出し
WaitTime(1500);

}
}

// 待ち時間関数
void WaitTime(int cnt)
{
while(cnt > 0)
cnt--;
}
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re: 点滅しない
561
: 16/05/28-09:38
エルチカの泉

こんにちは。
プラグラマ関数の「WDTE=ON」は、ウオッチドッグタイマーなのでここはOFFにしないとウオッチドッグタイマーによって、マイコンのリセットがかかります。

余談が、ブレットボードのLEDに制限抵抗入れてますか?
入れないとLEDがすぐに壊れます(電圧にもよりますが、数百オーム程度の抵抗)。



> はじめまして。PICを初めて数週間の者です。
> PIC16F627A
>
> 以下のようにプログラムを書いてブレッドボードで実行したのですが、
> LEDが点滅したり点灯したままになってしまいます。どうしたら点滅できるようになりますでしょうか。
>
>
> ↓プログラム↓
> /*****************************
> * 試作回路
> *****************************/
>
> //インクルードファイルの読み込み
> #include <pic.h>
>
> //コンフィギュレーションワードの設定
> #pragma config CPD=OFF , LVP=OFF , BOREN=OFF , MCLRE=ON , PWRTE=ON , WDTE=ON , FOSC=INTOSCIO
>
> // プロトタイプ宣言
> void WaitTime (int cnt);
>
> //メイン関数
> void main (void)
> {
> // 1,2,17,18端子を入出力端子に設定
> CMCON = 0x07;
>
> // 電圧レベルの初期設定
> PORTA = 0xFF;
> PORTB = 0xFF;
>
> // 入出力設定
> TRISA = 0b00000000;
> TRISB = 0b00000000;
>
> // 永久ループ
> while(1)
> {
> // LED1点灯
> RB0 = 0;
>
> // 待ち時間関数の呼び出し
> WaitTime(10000);
>
> // LED1消灯
> RB0 = 1;
>
> // 待ち時間関数の呼び出し
> WaitTime(1500);
>
> }
> }
>
> // 待ち時間関数
> void WaitTime(int cnt)
> {
> while(cnt > 0)
> cnt--;
> }
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^2: 点滅しない
562
: 16/05/28-15:09
E.T <en0605taku@docomo.ne.jp>

回答ありがとうございます。WDTEをOFFにしてみましたが状態がかわらず点灯したままです。(たまに点滅する)

LEDは抵抗内蔵のものを使っているので大丈夫です。



> こんにちは。
> プラグラマ関数の「WDTE=ON」は、ウオッチドッグタイマーなのでここはOFFにしないとウオッチドッグタイマーによって、マイコンのリセットがかかります。
>
> 余談が、ブレットボードのLEDに制限抵抗入れてますか?
> 入れないとLEDがすぐに壊れます(電圧にもよりますが、数百オーム程度の抵抗)。
>
>
>
> > はじめまして。PICを初めて数週間の者です。
> > PIC16F627A
> >
> > 以下のようにプログラムを書いてブレッドボードで実行したのですが、
> > LEDが点滅したり点灯したままになってしまいます。どうしたら点滅できるようになりますでしょうか。
> >
> >
> > ↓プログラム↓
> > /*****************************
> > * 試作回路
> > *****************************/
> >
> > //インクルードファイルの読み込み
> > #include <pic.h>
> >
> > //コンフィギュレーションワードの設定
> > #pragma config CPD=OFF , LVP=OFF , BOREN=OFF , MCLRE=ON , PWRTE=ON , WDTE=ON , FOSC=INTOSCIO
> >
> > // プロトタイプ宣言
> > void WaitTime (int cnt);
> >
> > //メイン関数
> > void main (void)
> > {
> > // 1,2,17,18端子を入出力端子に設定
> > CMCON = 0x07;
> >
> > // 電圧レベルの初期設定
> > PORTA = 0xFF;
> > PORTB = 0xFF;
> >
> > // 入出力設定
> > TRISA = 0b00000000;
> > TRISB = 0b00000000;
> >
> > // 永久ループ
> > while(1)
> > {
> > // LED1点灯
> > RB0 = 0;
> >
> > // 待ち時間関数の呼び出し
> > WaitTime(10000);
> >
> > // LED1消灯
> > RB0 = 1;
> >
> > // 待ち時間関数の呼び出し
> > WaitTime(1500);
> >
> > }
> > }
> >
> > // 待ち時間関数
> > void WaitTime(int cnt)
> > {
> > while(cnt > 0)
> > cnt--;
> > }
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^3: 点滅しない
563
: 16/05/28-16:18
エルチカ

だとすると単純に、待ち時間が短すぎる可能性があります。
待ち時間を増やせばいいと思います(WDTE=OFFのままで)。

> 回答ありがとうございます。WDTEをOFFにしてみましたが状態がかわらず点灯したままです。(たまに点滅する)
>
> LEDは抵抗内蔵のものを使っているので大丈夫です。
>
>
>
> > こんにちは。
> > プラグラマ関数の「WDTE=ON」は、ウオッチドッグタイマーなのでここはOFFにしないとウオッチドッグタイマーによって、マイコンのリセットがかかります。
> >
> > 余談が、ブレットボードのLEDに制限抵抗入れてますか?
> > 入れないとLEDがすぐに壊れます(電圧にもよりますが、数百オーム程度の抵抗)。
> >
> >
> >
> > > はじめまして。PICを初めて数週間の者です。
> > > PIC16F627A
> > >
> > > 以下のようにプログラムを書いてブレッドボードで実行したのですが、
> > > LEDが点滅したり点灯したままになってしまいます。どうしたら点滅できるようになりますでしょうか。
> > >
> > >
> > > ↓プログラム↓
> > > /*****************************
> > > * 試作回路
> > > *****************************/
> > >
> > > //インクルードファイルの読み込み
> > > #include <pic.h>
> > >
> > > //コンフィギュレーションワードの設定
> > > #pragma config CPD=OFF , LVP=OFF , BOREN=OFF , MCLRE=ON , PWRTE=ON , WDTE=ON , FOSC=INTOSCIO
> > >
> > > // プロトタイプ宣言
> > > void WaitTime (int cnt);
> > >
> > > //メイン関数
> > > void main (void)
> > > {
> > > // 1,2,17,18端子を入出力端子に設定
> > > CMCON = 0x07;
> > >
> > > // 電圧レベルの初期設定
> > > PORTA = 0xFF;
> > > PORTB = 0xFF;
> > >
> > > // 入出力設定
> > > TRISA = 0b00000000;
> > > TRISB = 0b00000000;
> > >
> > > // 永久ループ
> > > while(1)
> > > {
> > > // LED1点灯
> > > RB0 = 0;
> > >
> > > // 待ち時間関数の呼び出し
> > > WaitTime(10000);
> > >
> > > // LED1消灯
> > > RB0 = 1;
> > >
> > > // 待ち時間関数の呼び出し
> > > WaitTime(1500);
> > >
> > > }
> > > }
> > >
> > > // 待ち時間関数
> > > void WaitTime(int cnt)
> > > {
> > > while(cnt > 0)
> > > cnt--;
> > > }
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^4: 点滅しない
564
: 16/05/28-19:32
E.T <en0605taku@docomo.ne.jp>

永久ループ前に
//ブザー
RB1 = 0;
WaitTime(2000);
RB1 = 1;
というプログラムを追加してブザーを鳴らしたところ連続してなってしまいます。つまり、PICがリセットされているということでしょうか。


> だとすると単純に、待ち時間が短すぎる可能性があります。
> 待ち時間を増やせばいいと思います(WDTE=OFFのままで)。
>
> > 回答ありがとうございます。WDTEをOFFにしてみましたが状態がかわらず点灯したままです。(たまに点滅する)
> >
> > LEDは抵抗内蔵のものを使っているので大丈夫です。
> >
> >
> >
> > > こんにちは。
> > > プラグラマ関数の「WDTE=ON」は、ウオッチドッグタイマーなのでここはOFFにしないとウオッチドッグタイマーによって、マイコンのリセットがかかります。
> > >
> > > 余談が、ブレットボードのLEDに制限抵抗入れてますか?
> > > 入れないとLEDがすぐに壊れます(電圧にもよりますが、数百オーム程度の抵抗)。
> > >
> > >
> > >
> > > > はじめまして。PICを初めて数週間の者です。
> > > > PIC16F627A
> > > >
> > > > 以下のようにプログラムを書いてブレッドボードで実行したのですが、
> > > > LEDが点滅したり点灯したままになってしまいます。どうしたら点滅できるようになりますでしょうか。
> > > >
> > > >
> > > > ↓プログラム↓
> > > > /*****************************
> > > > * 試作回路
> > > > *****************************/
> > > >
> > > > //インクルードファイルの読み込み
> > > > #include <pic.h>
> > > >
> > > > //コンフィギュレーションワードの設定
> > > > #pragma config CPD=OFF , LVP=OFF , BOREN=OFF , MCLRE=ON , PWRTE=ON , WDTE=ON , FOSC=INTOSCIO
> > > >
> > > > // プロトタイプ宣言
> > > > void WaitTime (int cnt);
> > > >
> > > > //メイン関数
> > > > void main (void)
> > > > {
> > > > // 1,2,17,18端子を入出力端子に設定
> > > > CMCON = 0x07;
> > > >
> > > > // 電圧レベルの初期設定
> > > > PORTA = 0xFF;
> > > > PORTB = 0xFF;
> > > >
> > > > // 入出力設定
> > > > TRISA = 0b00000000;
> > > > TRISB = 0b00000000;
> > > >
> > > > // 永久ループ
> > > > while(1)
> > > > {
> > > > // LED1点灯
> > > > RB0 = 0;
> > > >
> > > > // 待ち時間関数の呼び出し
> > > > WaitTime(10000);
> > > >
> > > > // LED1消灯
> > > > RB0 = 1;
> > > >
> > > > // 待ち時間関数の呼び出し
> > > > WaitTime(1500);
> > > >
> > > > }
> > > > }
> > > >
> > > > // 待ち時間関数
> > > > void WaitTime(int cnt)
> > > > {
> > > > while(cnt > 0)
> > > > cnt--;
> > > > }
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^5: 点滅しない
565
: 16/05/29-13:55
エルチカ

@WDTE=OFFは、ここのホームページでも書かれている通り、マイコンのリセットをかけない為のものです。

Aこのプログラムはマイコンの内部クロックを基準として、待ち時間を作っているため、仮に内部クロックを8MHzとするとcntの数値は、数千ぐらいの数値では小さい過ぎると考えます。
unsigned longで最大カウント数を増やして、数字を大きくするなどの方法があります。

異常個所の確認方法として

A.オシロスコープがあれば、この出力ポートを波形を確認することをお勧めします。

B.なければ、デバッカやシュミレーションで、ループのサイクルタイムを測定することをお勧めします。
ただしこちらの方は、使い方を勉強しないと難しいかもしれません。
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^6: 点滅しない
566
: 16/05/30-08:45
駅地下

Aのオシロスコープ(エルチカする人は持っていないと思うけど、100MHzオシロスコープなら可能)では矩形波は見れません。
ロジックアナライザーで確認して下さい。

> @WDTE=OFFは、ここのホームページでも書かれている通り、マイコンのリセットをかけない為のものです。
>
> Aこのプログラムはマイコンの内部クロックを基準として、待ち時間を作っているため、仮に内部クロックを8MHzとするとcntの数値は、数千ぐらいの数値では小さい過ぎると考えます。
> unsigned longで最大カウント数を増やして、数字を大きくするなどの方法があります。
>
> 異常個所の確認方法として
>
> A.オシロスコープがあれば、この出力ポートを波形を確認することをお勧めします。
>
> B.なければ、デバッカやシュミレーションで、ループのサイクルタイムを測定することをお勧めします。
> ただしこちらの方は、使い方を勉強しないと難しいかもしれません。
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^7: 点滅しない
570
: 16/06/01-15:29
E.T <en0605taku@docomo.ne.jp>

エルチカ様、駅地下様ありがとうございました。
無事に解決することができました!

> Aのオシロスコープ(エルチカする人は持っていないと思うけど、100MHzオシロスコープなら可能)では矩形波は見れません。
> ロジックアナライザーで確認して下さい。
>
> > @WDTE=OFFは、ここのホームページでも書かれている通り、マイコンのリセットをかけない為のものです。
> >
> > Aこのプログラムはマイコンの内部クロックを基準として、待ち時間を作っているため、仮に内部クロックを8MHzとするとcntの数値は、数千ぐらいの数値では小さい過ぎると考えます。
> > unsigned longで最大カウント数を増やして、数字を大きくするなどの方法があります。
> >
> > 異常個所の確認方法として
> >
> > A.オシロスコープがあれば、この出力ポートを波形を確認することをお勧めします。
> >
> > B.なければ、デバッカやシュミレーションで、ループのサイクルタイムを測定することをお勧めします。
> > ただしこちらの方は、使い方を勉強しないと難しいかもしれません。
▲pagetop

- WebForum -