Pi:Co Classic2 製作記(移行中)

2015年新人研修 マイクロマウス編(11)

こんにちは。

本日は電流制御を擬似的に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
・デューティー比

タイトルとURLをコピーしました