スポンサーサイト

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

雨の日の電子工作

     2013-10-15 : 科学、技術
 今日は朝から強い雨が続いていて、秋の農作業もできない。そんな日は引きこもって電子工作だ。今日のおもちゃは先日購入した「PIC18F4553使用USB対応マイコンボード」とブレッドボード。

 尾をを引いて流れるように見えるLED照明を作ってみようと思っていて、まずは照度を制御してみる。LEDの明るさはパルス駆動にしてデューテイ比を変えれば良いはず。いわゆるPWMだ。

 まずはブレッドボードの組み立て。PIC18F4553のポートB4端子に480Ωの抵抗器を介しLEDが接続されている。

13pic31.jpg


 接続されたLEDは徐々に明るくなり、また徐々に暗くなっていくようにしたいのだ。PIC18F4553にはPWMに使えるモジュールが2セット搭載されているが、2チャンネル以上欲しいのでプログラムでPWMを実現してみた。




 プログラムはC言語で、XC8コンパイラを使った。

 こんなもの簡単と言いたいところだが、一日かかった。目は痛いし肩はこるし、早く台風に通りすぎてほしいものだ。



kuma80.jpg
トップページに移動





#include <xc.h>
#include <p18f4553.h>
#pragma config PLLDIV = 5 // (20MHz crystal)
#pragma config CPUDIV = OSC1_PLL2
#pragma config USBDIV = 2 // Clock source from 96MHz PLL/2
#pragma config FOSC = HSPLL_HS
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRT = OFF
#pragma config BOR = ON
#pragma config BORV = 3
#pragma config VREGEN = OFF //USB Voltage Regulator = OFF
#pragma config WDT = OFF
#pragma config WDTPS = 32768
#pragma config MCLRE = ON
#pragma config LPT1OSC = OFF
#pragma config PBADEN = OFF
#pragma config CCP2MX = OFF
#pragma config STVREN = ON
#pragma config LVP = OFF
#pragma config ICPRT = OFF // Dedicated In-Circuit Debug/Programming = OFF
#pragma config XINST = OFF // Extended Instruction Set = OFF
#pragma config CP0 = OFF
#pragma config CP1 = OFF
#pragma config CP2 = OFF
#pragma config CP3 = OFF
#pragma config CPB = OFF
#pragma config CPD = OFF
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF
#pragma config WRT2 = OFF
#pragma config WRT3 = OFF
#pragma config WRTB = OFF // Boot Block Write Protection = OFF
#pragma config WRTC = OFF
#pragma config WRTD = OFF
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
#pragma config EBTR2 = OFF
#pragma config EBTR3 = OFF
#pragma config EBTRB = OFF

#define _XTAL_FREQ 48000000 //for __delay_ms
#define SW1 PORTEbits.RE0
#define SW2 PORTEbits.RE1
#define LED PORTEbits.RE2
#define LED_Red PORTDbits.RD0
#define LED_White PORTCbits.RC2
#define LED_Red0 PORTBbits.RB0
#define LED_Red1 PORTBbits.RB1
#define LED_Red2 PORTBbits.RB2
#define LED_Red3 PORTBbits.RB3

unsigned int led1_period=0;
unsigned int led1_period_count=0;
unsigned int led1_duty=0;
bit led1_duty_up;

void init(void)
{
ADCON1 = 0b00001111;
TRISA = 0b00000000;
TRISB = 0b00000000;
TRISC = 0b00110000; //D-,D+
TRISD = 0b00000000;
TRISE = 0b00000011; //SW1,2=INPUT LED=OUTPUT
LATA = 0b00000000;
LATB = 0b00000000;
LATC = 0b00000000;
LATD = 0b00000000;
LATE = 0b00000000;

}

void main(void) {
init();

led1_period = 0x0fff;
led1_duty=0x00;
led1_duty_up=0b1;
LED=1;
LED_Red = 1;

while(1){

if(led1_period_count < led1_period){
led1_period_count++;
if(led1_period_count < led1_duty) {
LED_Red0=1;
LED_Red1=0;
LED_Red2=1;
LED_Red3=0;
}
else{
LED_Red0=0;
LED_Red1=1;
LED_Red2=0;
LED_Red3=1;
}
}
else{
LED_White = !LED_White;
if( led1_duty_up == 0) {led1_duty = led1_duty - 0x7f; }
else{led1_duty = led1_duty + 0x7f; }

if( led1_duty > led1_period){ led1_duty_up= 0; }
if( led1_duty < 1){
led1_duty_up= 1;
LED = !LED;
LED_Red= !LED_Red;
}
led1_period_count = 0;
}
}
}


コメントの投稿

非公開コメント

プロフィール

kumasan114

Author:kumasan114

カレンダー
04 | 2017/05 | 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
最近の記事
月別アーカイブ
全記事表示リンク

全ての記事を表示する

カテゴリー
最近のコメント
最近のトラックバック
ブログ内検索
RSSフィード
リンク
QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。