PIC10F200でLEDをゆっくり明滅させてみる


【米粒から】PIC専用のスレPart17【32ビットまで】より



487774ワット発電中さん :2008/01/11(金) 21:22:10 ID:J/KPJpBQ
LEDの点滅(ゆっくり明るくなってゆっくり暗くなる)をプログラムしたのですが
あまりうまくありません。
PWMもどきを使って明るさを変更しているのですが徐々に明るくなると言うより
すっと明るくなって明るい時間が長いのです。
人間の目の特性なのかLEDの特性なのかわからないのですがもっと暗い時間を長くしたいのです。

  DECF  AKARUSA
  CALL  PWM
  GOTO  $-2

PMW
  TMP=FF-AKARUSA
  LED点灯
  DECFSZ TMP
  GOTO $-1
  
  TMP=AKARUSA
  LED消灯
  DECFSZ TMP
  GOTO $-1
  RETURN


だいたいこんな感じで組んでいるのですが暗い時間をどうやって増やせばいいか教えてください。
10F200なのでCが使えません。

496774ワット発電中さん [sage] :2008/01/12(土) 00:09:11 ID:uLXhxl50
>>487
発想を変えて、暗いときほどサブルーチンPWMを呼び出す回数を増やしたらどうだ?
そうすれば、明るい時間はサブルーチンPWMの呼び出し回数が減って少なくなり、
暗い時間は呼び出し回数が増えて多くなる。

それでも、PIC10F200はプログラムFLASHが256ワードしかないから、入りきらんかも
しれんが。ちょっと試してみるか。

514496 [sage] :2008/01/13(日) 00:00:12 ID:zbS94U8I
>>487
明るさの知覚は平均パワー(LED点滅間隔に対するLED点灯時間の比率)の平方根に
比例するものと仮定し、平均パワーの平方根が直線的に変化する(平均パワーが
二次関数的に変化する)ようにしてみた。

http://xcrosgs2wy.web.fc2.com/pwmtest/src/pwmtest10f200.asm
http://xcrosgs2wy.web.fc2.com/pwmtest/src/pwmtest10f200.hex

※PIC10F200が手元にないので、確認はシミュレーションのみ。スマソ

バカ正直に計算すると面倒なので、>>496に書いたのと似た方法で手抜きをした。
通常のPWMでは、LEDの点灯時間が変化してもLED点滅間隔は変化しない。これを、
LED点灯時間(xとする: 0.0 <= x <= 1.0)に対して、LED点滅間隔を3(1-x) + xに
した。

式にすると面倒くさそうだが、xはLED点灯時間、(1-x)は通常のPWMでのLED消灯時間
なので、プログラム的には「通常のPWMでのLED消灯時間」を3倍にするだけの簡単な
処理。

このとき、平均パワーとその平方根の値は、こうなる。

http://xcrosgs2wy.web.fc2.com/pwmtest/img/chart.jpg

  横軸:LED点灯時間x(0.0 <= x <= 1.0)
  縦軸
    ◆:通常のPWMでの平均パワー(LED点灯時間に比例)
    ■:通常のPWMでの平均パワーの平方根(見た目の明るさ)
    ▲:変形PWMでの平均パワー(x / (3(1-x) + x)に比例)
    ×:変形PWMでの平均パワーの平方根(見た目の明るさ)

通常のPWMの見た目の明るさ(■)がすぐに立ち上がって明るくなってしまうのに対して、

変形PWMの見た目の明るさ(×)は、割と直線に近い変化をする。



515774ワット発電中さん [sage] :2008/01/13(日) 00:04:04 ID:YWAAs8j5
書き忘れ・・・LED出力はGP0、Hで点灯。


戻る
inserted by FC2 system