[
板情報
|
カテゴリランキング
]
したらばTOP
■掲示板に戻る■
全部
1-100
最新50
|
メール
| |
PICのプログラムについて
1
:
よさく
:2013/02/28(木) 10:08:20
igotenさん、ご返事ありがとうございます。
内容はメールにて連絡の通り、PIC12F683で2入力VRと1出力で
PWM調光と点滅周期を行いたいと思っています。
統合した時にうまく動作しないので、ご相談させて頂きたいと思いました。
お手数をお掛けしますが、宜しくお願いします。以下内容貼り付けます。
// LED 点滅 調光プログラム
// PIC 12F683 LED 点滅,調光プログラム
// タイマー割り込みを使用せず、ディレータイムを使用する。
//
// A/D 入力ポート : GP0,1
// LED 出力ポート : GP2
//
// HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode) V9.83
//
#define _LEGACY_HEADERS
#include <htc.h>
#define _XTAL_FREQ 4000000
//delay タイムを使うので、動作周波数 4Mhzにセットする。
__CONFIG ( INTIO & WDTDIS & PWRTEN & MCLRDIS );
void tenmetu_timer ( unsigned char tm ) { // 点滅時間 Time = 200ms * (A/D 変換データ)
while ( tm-- ) {
__delay_ms (200);
}
}
unsigned int value; //A/D 読値 10ビット
unsigned int adc_read(unsigned char ch){
//右詰め、電源基準、A/D有効化
ADCON0 = 0b10000101 ; //GP1
GODONE = 1;
while(GODONE);
return ((ADRESH << 8) + ADRESL) ;
}
main () {
ANSEL = 0b00010011; // ADCS:8 Tosc, ANS3=0, ANS2=0, ANS1=1, ANS0=1
TRISIO = 0b00000011; // I/O ポート GP0,1:input, GP2,3,4,5:output
GPIO = 0;
unsigned int value; //A/D 読値 10ビット
unsigned char count;
while(1){
if(count == 255)
value = (adc_read(3)) >> 2; // A/Dの読み込み
if(count < value)
GPIO2 = 1;
else
GPIO2 = 0;
count++;
}//ここまで調光
ADCON0 = 0b00000001; // GP0
GPIO = 0;
int i;
for(i=0; i<=1; ++i){
__delay_us (25); // A/D 充電待ち
GODONE = 1; // A/D 変換開始
while(1){
if ( !GODONE ) {
GPIO2 = 1; // LED 点灯
tenmetu_timer ( ADRESH );
GPIO2 = 0; // LED 消灯
tenmetu_timer ( ADRESH );
break;
}
}
}
while(1){
GPIO2 = 1; // LED 点灯
}
}//ここまで点滅周期(仮にON/OFF2回その後ONで終了)
2
:
igoten
:2013/02/28(木) 11:16:29
このコードだとmain()の中の最初のwhile(1)だけ
実行しますがそれでいいのですか?
しかもかなり早いループ処理になりますが。
3
:
よさく
:2013/02/28(木) 11:55:48
igotenさん、ご指摘ありがとうございます。
void main(void)
で始め、__delay_ms(50)で待機させます。
次のADへの切り替えが正直分らないのが現状です。
4
:
よさく
:2013/02/28(木) 12:02:26
while(1)も抜く必要がありますね・・ループ抜けてないです。すみません。
5
:
igoten
:2013/02/28(木) 13:27:16
初めのWhile(1)だけで調光すると思います。
調光しませんか?
6
:
よさく
:2013/02/28(木) 13:44:43
調光は問題なく動きます。
単独でのプログラムは調光、点滅周期どちらも動きます。
2入力になった時うまくADCON0を設定できてないと思います。
7
:
igoten
:2013/02/28(木) 13:56:58
点滅もさせたいと言うことですか。
点滅の周期はどの位変化させたいのでしょうか?
8
:
よさく
:2013/02/28(木) 14:06:55
10kΩのVRで0.2ms~3mins 位です。
現状点滅周期は大体max.100sくらいにはなっています。
9
:
igoten
:2013/02/28(木) 15:22:07
色々方法はあると思いますが、割り込みで処理するのが
一番簡単でしょう。
割り込みのルーチンの中で、点滅用のADを読んで、
フラグを立て、そのフラグに従って、調光のルーチンで
出力をON/OFFさせます。
PICのプログラムには割り込みは必須ですから、
挑戦してみるのも良いと思います。
10
:
よさく
:2013/02/28(木) 22:27:13
igotenさん、度々ありがとうございます。
読んでから大分色々自分で考えてみました。
割込みの場合はこの場合内部割込みでいいんですよね?
新着レスの表示
名前:
E-mail
(省略可)
:
※書き込む際の注意事項は
こちら
※画像アップローダーは
こちら
(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板