Translate

2009年11月3日火曜日

関数(5) PWMのDuty比

[実験 MikroC Pro PIC16F84A_LED_0023]

PORTBのLEDをDuty比別で点灯するプログラムを関数を使って考えなさい。






( 例 1)




MikroC PROでは、PORTB.F0 = 1 のような書式もあります。


PORT(A,B,C,D).F(0,1,2,3,4,5,6,7) = 1(または0)
PORT(ポート番号).F(ピン番号) = 1(または0)

で表記します。



PWMで多数のピンを制御させるのは、負担が多き過ぎるようです。
いろりろ試したのですが、高速でON,OFFを繰り返すので
誤動作が起きやすいようです。

回路が吐き出し(ソース電流)より吸い込み(シンク電流)の方が、良いかも知れません。



void Duty80(){ // PWM Duty比 80%
PORTB.F1 = 1; // ○●○○○○○○
Delay_us(8);
PORTB.F1 = 0; // ○○○○○○○○
Delay_us(2);
}



void Duty80(){ // PWM Duty比 80%
PORTB.F1 = 1; // ○●○○○○○○
Delay_us(80);
PORTB.F1 = 0; // ○○○○○○○○
Delay_us(20);
}



なども試しましたが、1PINだけなら問題なく正常に動きましたが、
PINを増やすと誤動作が目立ちました。



誤動作の原因
1)プログラムミス。
2)MikroC PROのバク。
3)PIC16F84Aに負担が掛かり過ぎている為。
4)LEDが、吐き出しの為、電流不足。


今回のプログラムは、PWM制御だけでも膨大な計算量なので
変数や引数を使わずPIC16F84Aの負担軽減に努めました。





左から2番目のRB1のLEDが少し暗いですが、
僕の半田付けが悪くLEDの方向が上を向いている為です。










( 例 2)








mikroC PRO for PIC

0 件のコメント:

コメントを投稿