PIC マイコン 備忘録 ANSEL、TRIS、LATレジスタを設定してLチカ

PIC を使ってLEDを光らせる!!

PIC 概要

PIC(Peripheral Interface Controller)とは、Microchip Technology Inc社が開発、販売している組み込みコンピュータ。同じような組み込みコンピュータに、RaspberryPiや、Arduinoなどの高性能な組み込みコンピュータが登場している。PICはそれらより性能は低いが、同じようにプログラムを書き込んで周辺機器を制御することが可能なものである。

PIC のスペック(PIC16F1827)

デバイス名プログラムメモリビットSRAM(bytes)Data EEPROM(bytes)動作周波数値段
PIC16F18274K8384256最大32MHz(内部)150円
RaspberryPi3641G1.2GHz約5,000円
Arduino Uno32K82K1K16MHz約3,000円

PIC プログラムに必要なソフト、ハード一覧

ソフト

  • MPLAB X IDE(PICのプログラムを記述)
  • MPLAB XC Compiler(PICのコンパイラ)

ハード

  • PICKit3(PICにプログラムを書き込むのに必要)
  • PICマイコン (今回はPIC16F1827)
  • ブレッドボード(電子回路をはんだなしで動かせる)
  • ジャンプワイヤー(ブレッドボードで部品と部品をつなぐケーブル)
  • USB電源(PICの電源5V)
  • はんだごて(はんだする際に必要 ブレッドボードだけでいいなら使わない)

ハード一覧入手方法

初めて電子工作する際はいろいろと必要になるので、以下の表を参考に。ほとんどがAmazonで買える。

ハード販売サイトリンク値段
PICKit3AmazonPIC プログラミングキット PICKIT3互換品 PIC マイコン¥2,400
PICマイコン秋月電子PICマイコン PIC16F1827-I/P¥150
ブレッドボードAmazon5個セット 400穴 ミニブレッドボード¥870
ジャンプワイヤーAmazonブレッドボードジャンパーワイヤー¥990
USB電源AmazonマイクロUSBメスソケットへのDIPアダプタボード¥529
はんだごてAmazonはんだごてセット¥2,099
合計:¥7,039円

PIC で出力、入力

PICの入出力はレジスタに値を設定することで変更します。

PICのデータシートを見ると以下のようになっており、Vssの上がRAレジスタ。下がRBレジスタとなっています。

このPICではRAとRBがそれぞれ0~7の8Pin存在しています。

PIC データシート
PIC16F1827のデータシート

例えばPin18番のRA1を出力したい場合はC言語で記述すると以下のようなコードになります。

順を追って上から説明します。

ANSELA = 0x0;
TRISA = 0x7D;
LATA = 0x02;

ANSELレジスタ

初めにPICはアナログモードと、デジタルモードがピンごとに設定することができます。今回はデジタル出力を行うため、ANSELというレジスタを設定して、全ピンをデジタルに設定します。設定方法は以下のコードのみです。

0xは16進数で表現するための記号であり、0x00は10進数にすると0になります。2進数にすると0000000となります。

ANSELA = 0x0;

RA7RA6RA5RA4RA3RA2RA1RA0
00000000
ANSELレジスタ(アナログ:1 デジタル:0)

(*今回はRA1ピンを出力するのでANSELAと記述しましたが、RBピンを設定するときはANSELBと書くことでRBの設定を行うことができます。)

TRISレジスタ

ANSELレジスタで、アナログ、デジタルモードの設定を行うことができました。次は入出力モードの設定です。

PICではピンごとに入力、出力を行うことができますが、あらかじめどちらのモードで使用するか設定する必要があります。その設定を行うことができるのがTRISレジスタです。今回はRA1のみ出力するような設定をしましょう。

コードで記述すると以下のようになります。0x7Dを2進数にすると1111101になります。以下の表を参考にしてください。

TRISA = 0x7D;

RA7RA6RA5RA4RA3RA2RA1RA0
11111101
TRISレジスタ (入力:1 出力:0)

LATレジスタ

さていよいよRA1ピンに電気信号を出力させましょう。ピンの出ロ、入力設定はLATレジスタで行います。TRISレジスタとの違いは先ほどはモードの設定でしたが、こちらは実際にPICから電気を出力したり、出力を止めたりすることができます。ではRA1ピンを出力させましょう。(よく出力をHigh、出力停止をLowと呼びます。)

LATA = 0x02;

RA0~RA7を表で表してみましょう。ここでRA1のみ出力にする場合は以下のようにビットを立てればよいのです。

RA7RA6RA5RA4RA3RA2RA1RA0
00000010
LATAレジスタ (High:1 Low:0)

実際に回路を組んでLEDを光らせる

これまでの知識を生かして、3つのLEDを順番に光らすプログラムを組んでみました。

出力するピンはRB7、RB6、RB5の3つです。回路はブレッドボードで組みました。電源の電圧はUSBからとってきているので5Vです。

PIC 配線図

以下がPICに書き込んだCのコードです。

  • 初めにRBのピンをANSELBレジスタですべてデジタルモードに設定。
  • 次に、TRISBレジスタでRB7、RB6、RB5を出力モードに設定。RBピンの出力を一度すべてオフにし初期化させています。
  • レープ内では、初めに、ledを光らせるピンを指定する変数をチェックしています。
  • 次に、LATBレジスタに変数を代入し、RBピンに対して出力させます。
  • 最後に、変数を1ビット右シフトさせて次のLEDを光らせる準備をしています。あとはこの流れを繰り返すだけです。
#include "mcc_generated_files/mcc.h"
#include <xc.h>

#define _XTAL_FREQ 500000
void main(void)
{
    // initialize the device
    SYSTEM_Initialize();
    ANSELB = 0x0;
    TRISB = 0x1F;
    LATB = 0x0;
    
    uint8_t mask = 0x10;
    uint8_t led = 0x80;
    while (1)
    {
        __delay_ms(500);
        if(led == mask){ led = 0x80;}
        LATB = led;
        led = led >> 0x01;
        __delay_ms(500);
    }
}

上記のコードをPICKit3でPICに書き込み、回路を組めば動きます。(*PICを稼働させる設定方法は省いているので、このコードのみでは実際には動作しません。)

PIC にプログラムを書き込み中

PICのほかの記事も書いています。参考にしてください。

「PIC マイコン 備忘録 ANSEL、TRIS、LATレジスタを設定してLチカ」への1件のフィードバック

コメントする