PICとメカな日々

Webにも萌えにも限界を感じたオタクがPICマイコンをいじる日々。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

いろいろあった

 冬になったんでコタツ用ノートPCをヤフオクで買ったりインストールしたり録画用鯖が死んだり再インストールしたりコミケに行ったりといろいろあったりして、最近PICをいじってない。

 とはいえ何もしないのも進歩がないので、電気電子板@2ちゃんのPICスレで見たLEDのPWM点灯をマネしてみる。つまりなんだ、デジタル信号だと電圧を半分にしたりするのは難しいし、D/A変換とか言ったら別に部品がいる。それで代替策として、「onの時間とoffの時間を高速に切り替えたら、長い目で見ると中間値を出力してるように見える」って技ですな。

 つまりこんな感じ。

PWMのイメージ


 プログラム的にはタイマ割り込みを使用して実装してみる。つまり、タイマ割り込みしてきたときに0からカウントアップして30まで上がる変数を用意(30になったら0に戻す)して、その数字でONにするかOFFにするかを判断。

 ソースコードはこんな感じ。

/*

  割り込みでLEDをPWM点灯させてみるテスト
  
*/
#include<pic.h>
//#include<delay.h>
__CONFIG(0x3FF2);            //CONFIG:CP=OFF,PWRT=ON,WDT=OFF,OSC=HS
unsigned char led_outdata=0b00000000;  //出力データを初期化
unsigned char timer_count=0;      //タイマ定数設定
unsigned char vector=1;          //フラッシュ方向は左=1,右=0
void main(void)
{
  PSA=1;                //プリスケーラはWDTに割り当て
  PS2=0;
  PS1=0;
  PS0=0;                //プリスケーラ分周比は1:1
  
  T0CS=0;                //クロックソースは内部命令サイクル
  TMR0=0;                //TMR0をリセット
  T0IF=0;                //T0IFをリセット
  
  T0IE=1;                //TMR0割り込み発生を許可
  GIE=1;                //割り込みを許可
  
  PORTA=0b00000000;          //PORTAをリセット
  PORTB=0b00000000;          //PORTBをリセット
  TRISA=0b00000011;          //RA0,RA1を入力に設定
  TRISB=0b00000000;          //PORTBを出力に設定

  PORTB=led_outdata;

  while(1)              //無限ループ
  {
  }
}

interrupt led_pwm()            //割り込みルーチン
{
  if(T0IF){
    T0IF = 0;            //割り込みフラグクリア
    timer_count++;          //カウンタを進める
    if(timer_count == 30){
      timer_count = 0;      //カウンタは30でリセット
    }
    
    RB0 = 1;            //RB0=常時点灯
    
    if(timer_count < 20){
      RB1 = 1;
    } else {
      RB1 = 0;          //RB1=20/30点灯
    }
    if(timer_count < 15){
      RB2 = 1;
    } else {
      RB2 = 0;          //RB2=15/30点灯
    }
    if(timer_count < 7){
      RB3 = 1;
    } else {
      RB3 = 0;          //RB3=7/30点灯
    }
    if(timer_count < 3){
      RB4 = 1;
    } else {
      RB4 = 0;          //RB4=3/30点灯
    }
    
  }
}



 実行してみたらこんな感じ。
pwm点灯


 LED自体のばらつきもあるかもしれんが、半分くらいの点灯時間にしてもあまり暗く見えませんな。1/3くらいでようやく暗くなったとわかるような感じか。
スポンサーサイト

コメント

地域を感じよう 民芸ナビ

民芸の検索サイト。うどん、民芸館、家具、劇団、民芸品など民芸に関する各種情報をお届けしています。 http://goallink.shipsparesandrepairs.com/

  • 2008/09/10(水) 22:21:10 |
  • URL |
  • #-
  • [ 編集]

ルイボスダイエットについて

ルイボスは南アフリカ共和国の高地でしか栽培されない植物です http://matereal.consultsmartz.com/

  • 2008/10/12(日) 11:32:30 |
  • URL |
  • #-
  • [ 編集]

スニーカーNIKEナビ

NIKEの検索サイト。スニーカー、NIKEID、DUNK、NIKESB、NIKECMなどNIKEに関する各種情報をお届けしています。 http://kanojyowomireba.santamonicatravelodge.com/

  • 2008/11/28(金) 23:57:46 |
  • URL |
  • #-
  • [ 編集]

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://dmidorikawa.blog39.fc2.com/tb.php/15-54206cf3
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。