meideru blog

家電メーカーで働いているmeideruのブログです。主に技術系・ガジェット系の話を書いています。

PICマイコン(12F683)でLチカをやってみた

 

最近はPICマイコンの勉強に専念しています。勉強のために本を3冊も買いましたよ!大学生の私にとっては痛い出費です(⌒-⌒; )  でも全然後悔はしていません。将来に役に立つことだと確信していますからね( ´ ▽ ` )ノ

私はまだPICマイコンの初心者です。なので、まずはLチカからやってみようと思います!

目次

使用するもの

箇条書きで使うものを書いておきます。

  • PICマイコン(12F683)
  • pickit3
  • ライターのアダプタ
  • ブレッドボード
  • コンデンサ
  • LED
  • 単三電池
  • バッテリーボックス
  • ジャンパ線

(数量は省略しています)

LEDを3秒ごとに点滅させてみた

とりあえず、LEDを3秒ごとに点滅させてみました。

ソースプログラム

書き込むソースプログラムは下記のものです。

#include <xc.h>

#pragma config FOSC = INTOSCIO
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = OFF
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = OFF
#pragma config IESO = OFF
#pragma config FCMEN = OFF

#define _XTAL_FREQ 4000000

int main(void)
{
    OSCCON=0b01101000;
    ANSEL=0b00000000;
    TRISIO=0b00000000;

    while(1)
    {
        GPIO=0b00000000;
        __delay_ms(3000);
        
        GPIO=0b00000001;
        __delay_ms(3000);
    }
    
    return(0);
}

簡単なため、ソースの説明は省略します。

回路

回路図をアップするのは面倒なので、そのまま画像をアップしちゃいます(^O^)/

@回路
回路

バイパスコンデンサ(パスコン)はあったほうが良いらしいので挟みました。

いたってシンプルな回路です。

結果

@点滅
点滅

成功です(^O^)/

3秒ごとに点滅しました( ´ ▽ ` )ノ

LEDを5個使って流れるように点滅させてみた

次はLEDを5個使って流れるように点滅させてみました。

言葉だけだと分からないと思います。なので、画像を使って説明します。

@説明
説明

LEDが横1列に並んでいます。これを右から左に順次点滅させて1番左に到達したら今度は左から右に順次点滅させていきます。

文字で説明すると下記みたいな感じです。◯が消えていて●が光っている状態です。

◯◯◯◯●
◯◯◯●◯
◯◯●◯◯
◯●◯◯◯
●◯◯◯◯
◯●◯◯◯
◯◯●◯◯
◯◯◯●◯
◯◯◯◯●
(以下ループ)

ソースプログラム

#include <xc.h>

#pragma config FOSC = INTOSCIO
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = OFF
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = OFF
#pragma config IESO = OFF
#pragma config FCMEN = OFF

#define _XTAL_FREQ 4000000

int main(void)
{
    OSCCON=0b01101000;
    ANSEL=0b00000000;
    TRISIO=0b00000000;
    
    while(1)
    {
        //LED0
        GPIO = 0b11111110;
        __delay_ms(120);
        //LED1
        GPIO = 0b11111101;
        __delay_ms(80);
        //LED2
        GPIO = 0b11111011;
        __delay_ms(80);
        //LED4
        GPIO = 0b11101111;
        __delay_ms(80);
        //LED5
        GPIO = 0b11011111;
        __delay_ms(80);
        //LED4
        GPIO = 0b11101111;
        __delay_ms(80);
        //LED2
        GPIO = 0b11111011;
        __delay_ms(80);
        //LED1
        GPIO = 0b11111101;
        __delay_ms(120);
    }
    
    return(0);
}

両端のLEDだけ120ミリ秒光らせて、その他のLEDは80ミリ秒光らせます。色々と実験してみた結果、これが1番見た目が良いです。

回路

これも回路図をアップするのが面倒なので、同様に画像をアップします。

@回路
回路

ジャンパ線が多くて複雑ですね。それも全部写ってないですし(^_^;)

回路はLEDがそれぞれのピンに接続されている感じです。

結果

@結果
結果

成功です(^O^)/

右から左、左から右にLEDが点滅します( ´ ▽ ` )ノ

 

今日はこんなところです。

ノシ

 

PS
C言語ではなくアセンブリ言語で書いたソースプログラムも近いうちに貼りたいと思います。

 - 技術系