こんにちは。
本日は電流制御を擬似的にPWMを使って行いました。
PWMとは日本語にするとパルス幅変調といいます。
パルス幅(デューティー比)を変化させて変調することをいいます。
抵抗を変えずに、LEDの明るさや、モーターの回転速度を変えることができます。
このPWMを使って目の錯覚を起こさせLEDの明るさを変化させました。
以前このようになっていた部分↓を
/* LED0 = LED1 = LED2 = LED3 = 1; //LED点灯 for(i = 0 ; i < 0xfffff ; i++); //時間待ち(空ループ) LED0 = LED1 = LED2 = LED3 = 0; //LED消灯 for(i = 0 ; i < 0xfffff ; i++); //時間待ち(空ループ) */
以下のように変えます。
LED0 = LED1 = LED2 = LED3 = 1; //LED点灯 for(i = 0 ; i < 0xfff ; i++); //時間待ち(空ループ) LED0 = LED1 = LED2 = LED3 = 0; //LED消灯 for(i = 0 ; i < 0xfff ; i++); //時間待ち(空ループ)
するとチカチカしていたLEDがチカチカしなくなり(正確には見えなくなり)
明るさが暗くなりました。
さらに暗くしてみます。(点いてるとき10%、消えているとき90%)
LED0 = LED1 = LED2 = LED3 = 1; //LED点灯 for(i = 0 ; i < 1000; i++); //時間待ち(空ループ) LED0 = LED1 = LED2 = LED3 = 0; //LED消灯 for(i = 0 ; i < 9000; i++); //時間待ち(空ループ)
ここまでできたのではじめ暗めにして、徐々に明るくなるように変えてみました。
以下のようにプログラミングしました。
for(j=0 ; j < 0xff ; j++){ LED0 = LED1 = LED2 = LED3 = 1; //LED点灯 for(i = 0 ; i < 1000 ; i++); //時間待ち(空ループ) LED0 = LED1 = LED2 = LED3 = 0; //LED消灯 for(i = 0 ; i < 9000 ; i++); //時間待ち(空ループ) } for(j=0 ; j < 0xff ; j++){ LED0 = LED1 = LED2 = LED3 = 1; //LED点灯 for(i = 0 ; i < 2500 ; i++); //時間待ち(空ループ) LED0 = LED1 = LED2 = LED3 = 0; //LED消灯 for(i = 0 ; i < 7500 ; i++); //時間待ち(空ループ) } for(j=0 ; j < 0xff ; j++){ LED0 = LED1 = LED2 = LED3 = 1; //LED点灯 for(i = 0 ; i < 5000 ; i++); //時間待ち(空ループ) LED0 = LED1 = LED2 = LED3 = 0; //LED消灯 for(i = 0 ; i < 5000 ; i++); //時間待ち(空ループ) } for(j=0 ; j < 0xff ; j++){ LED0 = LED1 = LED2 = LED3 = 1; //LED点灯 for(i = 0 ; i < 7500 ; i++); //時間待ち(空ループ) LED0 = LED1 = LED2 = LED3 = 0; //LED消灯 for(i = 0 ; i < 2500 ; i++); //時間待ち(空ループ) } for(j=0 ; < 0xff ; j++){ LED0 = LED1 = LED2 = LED3 = 1; //LED点灯 for(i = 0 ; i < 9000 ; i++); //時間待ち(空ループ) LED0 = LED1 = LED2 = LED3 = 0; //LED消灯 for(i = 0 ; i < 1000; i++); //時間待ち(空ループ) }
ふわんふわんと徐々に明るさが増すようにLEDを光らせることができました。
また今日はプログラムを書いているときに出てしまったエラーを全て自分で解決できました!
ちょっとは成長できているのかな?w
本日のキーワード
・PWM
・デューティー比