====== フルカラーLED(色設定ユニット) ====== ===== 概要 ===== 最近は、各種のフルカラーLEDが市販されています。 フルカラーLEDは、赤(R)緑(G)青(B)の3原色のLEDがパッケージされたもので、各LEDに流す電流を調整することにより、フルカラーの色を表現するものです。 しかし、好みの色になるように電流を調整するのは、結構難しい作業になります。 そこでRGB各々のLEDに流す電流(正確には、PWMのデューティ比率)を、0%~100%まで数値で表示し、調整作業をスムーズに出来るユニットを製作してみました。 今回採用したフルカラーLEDは、OSTA5131A(OptoSupply社)です。 他にも各種市販されているので試してみてください。 {{:imgpaste:202004:htmikan-20200430-112257.png}} {{:imgpaste:202004:htmikan-20200430-112301.png}} ===== 動作確認 ===== PIC16F88には、CCPモジュールが1個内蔵されていますが、今回は、RGBの3つのLEDを制御するために、 ソフトウエアによる擬似PWM方式を採用しました。 * PWMのデューティサイクル\\ TIMER0の割り込みを使用し、デューティサイクルの最小単位を、128usecとしました。 * PWMの周期\\ 最小デューティサイクルの100倍の、12.8msecとしました。 * PWMの波形\\ アノードコモンとカソードコモンの双LEDに、対応するために波形反転モードを実装しました。 つまり、各LEDは、0~100迄のデューティサイクル(比率)が設定できるので、最大1000000色(百万色)の 組み合わせが可能になります。 1000000色=100(R)×100(G)×100(B) {{:imgpaste:202004:htmikan-20200430-112337.png?500}} ===== 回路図 ===== 電流制限抵抗(R1,R2,R3)は、使用するLEDに合わせて変更してください。 {{:imgpaste:202004:htmikan-20200430-112406.png}} ===== ソースコード ===== //********************************************************************** /*    『LEDフルカラー』 */ //********************************************************************** #define LED_R PORTA.F0 #define LED_G PORTA.F7 #define LED_B PORTA.F1 #define SW1 PORTA.F5 #define SW2 PORTB.F0 #define ON 0 #define OFF 1 //********************************************************************** static unsigned short pwm_cnt, led_R, led_G, led_B; void interrupt() // 約0.128msec周期 { static short onFlg, offFlg; // INTCON.T0IF = 0; // onFlg = (SW1 == 1) ? 0 : 1; offFlg = (SW1 == 1) ? 1 : 0; // LED_R = (pwm_cnt <= led_R) ? onFlg : offFlg; LED_G = (pwm_cnt <= led_G) ? onFlg : offFlg; LED_B = (pwm_cnt <= led_B) ? onFlg : offFlg; //約12.8msec(78Hz) if (pwm_cnt < 100) pwm_cnt++; else pwm_cnt = 1; } //********************************************************************** void main() { static char buf[10]; // OSCCON = 0b01110000; // クロックは8Mhz CMCON = 0b00000111; // コンパレータは使用しない。 ANSEL = 0b00011100; // A/D変換を使用する。 TRISA = 0b01111100; TRISB = 0b00000001; //LCDの初期化 Lcd_Config(&PORTB, 3, 1, 2, 7, 6, 5, 4); Lcd_Cmd(LCD_CURSOR_OFF); Lcd_Cmd(LCD_CLEAR); Lcd_Chr(1, 2, 'R'); Lcd_Chr(1, 6, 'G'); Lcd_Chr(1, 10, 'B'); // TIMER0の設定 INTCON.T0IE = 1; INTCON.T0IF = 0; OPTION_REG.T0CS = 0; OPTION_REG.PSA = 1; OPTION_REG.PS0 = 0; OPTION_REG.PS1 = 0; OPTION_REG.PS2 = 0; TMR0 = 0; // pwm_cnt = 1; led_R = 50; led_G = 50; led_B = 50; // 割り込みを許可する。 INTCON.PEIE = 1; INTCON.GIE = 1; // while (1) { led_R = (double)Adc_Read(2) / 10.13; led_G = (double)Adc_Read(3) / 10.13; led_B = (double)Adc_Read(4) / 10.13; // ByteToStr(led_R, buf); Lcd_Out(2, 1, buf); ByteToStr(led_G, buf); Lcd_Out(2, 5, buf); ByteToStr(led_B, buf); Lcd_Out(2, 9, buf); // Delay_ms(10); } }//~! //********************************************************************* ===== 動作確認 ===== 左側から、フルカラーLED、色設定用ボリューム、PIC16F88、LCDです。 {{:imgpaste:202004:htmikan-20200430-112520.png?500}} LEDの光を拡散させるために、ピンポン玉に穴を開けてLEDに被せます。 {{:imgpaste:202004:htmikan-20200430-112530.png}}{{:imgpaste:202004:htmikan-20200430-112535.png}} R=33%、G=50%、B=100%にしてみました。綺麗な色です。 {{:imgpaste:202004:htmikan-20200430-112543.png}}{{:imgpaste:202004:htmikan-20200430-112546.png}} RGBの値を、次の表に示す値で設定してみました。 |<150px>| ^ R ^ G ^ B ^ | 0% | 0% | 50% | | 0% | 0% | 100% | | 0% | 50% | 0% | | 0% | 50% | 50% | | 0% | 50% | 100% | | 0% | 100% | 0% | | 0% | 100% | 50% | | 0% | 100% | 100% | | 50% | 0% | 0% | | 50% | 0% | 50% | | 50% | 0% | 100% | | 50% | 50% | 0% | | 50% | 50% | 50% | | 50% | 50% | 100% | | 50% | 100% | 0% | | 50% | 100% | 50% | | 50% | 100% | 100% | | 100% | 0% | 0% | | 100% | 0% | 50% | | 100% | 0% | 100% | | 100% | 50% | 0% | | 100% | 50% | 50% | | 100% | 50% | 100% | | 100% | 100% | 0% | | 100% | 100% | 50% | | 100% | 100% | 100% | {{:imgpaste:202004:htmikan-20200430-112928.png}}{{:imgpaste:202004:htmikan-20200430-112932.png}}{{:imgpaste:202004:htmikan-20200430-112935.png}}{{:imgpaste:202004:htmikan-20200430-112947.png}}{{:imgpaste:202004:htmikan-20200430-112950.png}}{{:imgpaste:202004:htmikan-20200430-112953.png}} {{:imgpaste:202004:htmikan-20200430-113018.png}}{{:imgpaste:202004:htmikan-20200430-113021.png}}{{:imgpaste:202004:htmikan-20200430-113025.png}}{{:imgpaste:202004:htmikan-20200430-113033.png}}{{:imgpaste:202004:htmikan-20200430-113036.png}}{{:imgpaste:202004:htmikan-20200430-113039.png}} {{:imgpaste:202004:htmikan-20200430-113046.png}}{{:imgpaste:202004:htmikan-20200430-113050.png}}{{:imgpaste:202004:htmikan-20200430-113054.png}}{{:imgpaste:202004:htmikan-20200430-113103.png}}{{:imgpaste:202004:htmikan-20200430-113107.png}}{{:imgpaste:202004:htmikan-20200430-113111.png}} {{:imgpaste:202004:htmikan-20200430-113221.png}}{{:imgpaste:202004:htmikan-20200430-113224.png}}{{:imgpaste:202004:htmikan-20200430-113228.png}}{{:imgpaste:202004:htmikan-20200430-113235.png}}{{:imgpaste:202004:htmikan-20200430-113239.png}}{{:imgpaste:202004:htmikan-20200430-113243.png}} {{:imgpaste:202004:htmikan-20200430-113250.png}}{{:imgpaste:202004:htmikan-20200430-113254.png}} このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。[[elechobby:picdic:picdic|詳細]] This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.[[elechobby:picdic:picdic|Details]]