• 検索結果がありません。

mpc17 02 B led buz shock 12F1822

N/A
N/A
Protected

Academic year: 2018

シェア "mpc17 02 B led buz shock 12F1822"

Copied!
12
0
0

読み込み中.... (全文を見る)

全文

(1)

MPC17-02-B

PIC12F1822

かんたんマイコンプログラミング

1

ハードウェアの製作

(1) 回路図

(2) 部品

(3) 実体配線図

[1]マイコン

PIC12F1822P

PIC 12F1822

A

A

150Ω

茶緑茶金

[2]LED

[3]抵抗器

[4]圧電ブザー

10kΩ

茶黒橙金

-PIC 12F1822

-PIC 12F1822

(2)

(4) PICkit3の接続

図のように、PICkit3を接続する。

2

プログラミングの前の準備

(1) プログラムの開発環境の準備とプロジェクトの作成

   別添資料「PICマイコンにプログラムを書き込む方法」を参照のこと。

   今回は、あらかじめ準備されている学習用プロジェクトファイルmpc17-02-bを使う。

(2)  学習用プロジェクトファイルの展開

圧縮ファイル“mpc17-02-b.X.zip”をデスクトップに展開する。

(3) 統合開発環境MPLAB XIDEでプロジェクトを開く。

(a) MPLAB XIDEを起動する。

(b) [File]-[Open Project ...]をクリック

(c)デスクトップの場所を指定し、”MPC17-02.X”をダブルクリックして開く。

(d) MPLAB XIDEでは、複数のプロジェクトを開くことができるので、”Main Project”に設定したプロジェ クトだけをビルドするようになっている。そこで、mpc17-02-bをMain Projectとするため、MPLAB XIDE のProjectウインドウで、”mpc17-02-b “ を右クリックして、[Set as Main Project]をクリック。

PICkit3

MCLR/VPP

+2.4〜 5V

-PIC 12F1822

VDD VSS Ground ICSPDAT

(3)

3

LED

点灯時間(タイマの設定時間)の調整

(1) mpc17-02-settings.h を開く

MPLAB XIDEの画面で、”MPC17-02-B”-”Header Files”-”mpc17-02-settings.h”を開く。

(2) mpc17-02-settings.h の編集

次のコードの数値を変更する。TIME_LIMITと数値の間に半角空白を入れること。

#define TIME_LIMIT 8 // LEDが点灯している時間(タイマの秒数)

(3) ビルドと書き込み、動作確認

[Make and Program Device Main Project]のアイコンをクリック

[CAUTION]警告のダイアログボックスが表示されたら、

電源が正しく接続されていることを確認して、[OK]をクリック。 (標準では、PICkit3から電源供給をしないので、問題はない)

※書き込みの段階で、赤い字でエラーメッセージが出る場合、電源が接続 されていなかったり、電線の接続に不具合があったりすることが多い。

(4)

4

LED

点滅時間の調整

(1) mpc17-02-settings.h を開く

MPLAB XIDEの画面で、”MPC17-02-B”-”Header Files”-”mpc17-02-settings.h”を開く。

(2) mpc17-02-settings.h の編集

次のコードの数値を変更する。_INTERVALと数値の間に半角空白を入れること。

#define LED_BLINK_INTERVAL 100 // LEDが点滅する間隔(40 ~ 500)

(3) ビルドと書き込み、動作確認

[Make and Program Device Main Project]のアイコンをクリック

[CAUTION]警告のダイアログボックスが表示されたら、

電源が正しく接続されていることを確認して、[OK]をクリック。 (標準では、PICkit3から電源供給をしないので、問題はない)

※書き込みの段階で、赤い字でエラーメッセージが出る場合、電源が接続 されていなかったり、電線の接続に不具合があったりすることが多い。

(5)

5

ブザー音の調整

(1) mpc17-02-settings.h を開く

MPLAB XIDEの画面で、”MPC17-02-B”-”Header Files”-”mpc17-02-settings.h”を開く。

(2) mpc17-02-settings.h の編集

 次のコードの数値を変更する。_LENGTHや_HEIGHTなどの英字と数値の間に半角空白を 入れること。

#define BEEP_START_LENGTH 2000 // 起動音の長さ #define BEEP_START_HEIGHT 5 // 起動音の高さ

#define BEEP_SHOCK_LENGTH 4000 // ブザーを叩いたときの音の長さ #define BEEP_SHOCK_HEIGHT 2 // ブザーを叩いたときの音の高さ #define BEEP_ALARM_LENGTH_1 4000 // 警報音(最初の音)の長さ #define BEEP_ALARM_HEIGHT_1 8 // 警報音(最初の音)の高さ #define BEEP_ALARM_LENGTH_2 2000 // 警報音(次の音)の長さ #define BEEP_ALARM_HEIGHT_2 16 // 警報音(次の音)の高さ

(3) ビルドと書き込み、動作確認

[Make and Program Device Main Project]のアイコンをクリック

[CAUTION]警告のダイアログボックスが表示されたら、

電源が正しく接続されていることを確認して、[OK]をクリック。 (標準では、PICkit3から電源供給をしないので、問題はない)

※書き込みの段階で、赤い字でエラーメッセージが出る場合、電源が接続 されていなかったり、電線の接続に不具合があったりすることが多い。

(6)

6

(付録)プロジェクトの作成

学習用プロジェクトファイルmpc17-02-bの作成方法を説明する。

(1) プログラムの開発環境の準備

 別添資料「PICマイコンにプログラムを書き込む方法」を参 照のこと。

(2) 統合開発環境MPLAB XIDEでプロジェクトを作成

(a) MPLAB XIDEを起動する。

(b)新しいプロジェクトを作成

[File]-[New Project ...]をクリック

(c) [Choose Project]

初期のプロジェクト[Microchip embedded]-[Standard project]のま ま、[Next]をクリック。

(d) [Select Device]

マイコンの種類を選択する。

[Family] は[Mid-Range-8-bit-MCUs]を選択、 [Device]は[PIC12F1822]を選択、

[Next]をクリック。

(e) [Select Header]

デバッグ用のヘッダを選択する。

今回は、簡単なプログラムなのでヘッダをつけない。[None]のま ま、[Next]をクリック。

(f) [Selet Tool]

プログラムの書き込み用のツールを選択する。 [PICkit3]をクリックして、[Next]をクリック。

(g) [Select Compiler]

ソースプログラムをマイコンの機械語に変換するためのコンパイ ラを選択。[XC8...]の最新のものをクリックして、[Next]をクリッ ク。

(h) [Select Project Name and Folder]

プロジェクト名とフォルダ名の設定。 [Project Name]を[mpc17-02-b]と入力

[Encoding]は、[UTF-8]とする。これは、ソースプログラム中に日 本語を使うために設定する。

[Finish]をクリック。

(i) Main Project確認

(7)

(3) ソースプログラムの作成

(a)プロジェクトの展開

画面左側のProjects ウィンドウにある[▶

mpc17-02-b]の︎をクリックし、展開する。

(b)ソースファイルの追加

[▶Source Files]を右クリック。 [New ▶]-[main.c…]

(c)ソースファイル名の入力

ファイル名として[main-mpc17-02-b]と入力。 [Finish]をクリック。

(d)作者名の変更

ソースファイルの先頭3行目にある、Author (作者)の欄に、作者名を記入。 /*

* File: main-mpc17-02.c * Author: *****

*

* Created on August 11, 2017, 3:12 PM */

7行目以降を削除して、後で示されるサンプルソースファイルをコピー&ペーストする。

(4) ヘッダファイルの作成

設定をヘッダファイルとしてまとめておき、そのファイルだけを修正することで、最終的な製品 の性能の調整を目指す。

(a)ヘッダファイルの追加

[▶Header Files]を右クリック。 [New ▶]-[C Header File…]

(b)ヘッダファイル名の入力

(8)

7

(付録)ソースファイルとヘッダファイルの準備

(1) ソースプログラムの編集

(a) MPLAB XIDEの画面で、”MPC17-02-B”-”Source Files”-”main-mpc17-02-b.c”を開く。

(b) 7行目以降を消去して、次のコードをコピー&ペーストする

/*

* LED1 : PIN 2 (RA4) : 1-OFF, 0-ON * Buzzer : PIN 6 (RA1)

* ANALOG PORT : PIN 6 (AN1) *

*/

#include <xc.h> // XC8コンパイラ用のヘッダ(レジスタ名などのキーワードの定義を含む) #include <stdint.h> // 整数型のビット数を明示して宣言するためのヘッダファイル

#include "mpc17-02-settings.h" // 設定用ヘッダファイル // PICマイコンの動作設定その1

// PIC micro controller Configuration 1

#pragma config FOSC = INTOSC // 内部クロック使用。

#pragma config WDTE = OFF // ウォッチドッグタイマなし。 #pragma config PWRTE = ON // 64ms後にプログラム開始。

#pragma config MCLRE = OFF // 外部リセットなし。RA3 は入力ピン。 #pragma config CP = OFF // コード保護なし。

#pragma config CPD = OFF // データ保護なし。

#pragma config BOREN = ON // 電源電圧低下時のリセットあり。 #pragma config CLKOUTEN = OFF // クロック出力不可。

#pragma config IESO = OFF // 内部外部クロックなし。 #pragma config FCMEN = OFF // FCMなし。

// 動作設定その2 // Configuration 2

#pragma config WRT = OFF // 書き込み保護なし。 #pragma config PLLEN = OFF // PLLなし。

#pragma config STVREN = ON // スタックオーバー/アンダーフローでリセット。 #pragma config BORV = LO // 電源電圧低下監視閾値は Low モード

#pragma config LVP = OFF // 低電圧プログラムなし。

// I/Oポートの初期化 void initIo(void) {

OSCCON = 0b01110010 ; // Internal clock 8MHz OPTION_REG = 0b00000000 ; // Weak Pull up ON ANSELA = 0b00000000 ; // ALL Digital PORT

TRISA = 0b00001000 ; // Input : RA3, Output: others WPUA = 0b00001000 ; // Weak pull-up : RA3

PORTA = 0b00000000 ; // Initialize PORTA }

// I/Oポートの定義 (LED を接続するポートが変わった時はここを変更する) #define PORT_LED RA4

#define TRISA_LED TRISA4 #define PORT_ADC ANSA1 #define PORT_BUZ RA1 #define TRISA_BUZ TRISA1 #define TRISA_ADC TRISA1 #define PORT_NO_ADC 1 // LED制御用関数

(9)

// ちょっと待つ処理を簡単に書くための関数 void wait(volatile uint32_t i)

{

while (i-- > 0); }

// A/D変換関数

// A/D conversion functions void initAdc(void)

{

PORT_ADC = 1; // PORT_ADC で定義されたポートをアナログポートにする。Analog port (see PORT_ADC def.) setting

TRISA_ADC = 1; // A/D 変換端子を入力モードにする。RA1 as input

ADCON0 = 0b00000001 | (PORT_NO_ADC << 2); //AD 変換を有効化。0:unimp, xxxxx:analog ch, 0:GOnDone, 1:ADC enable

ADCON1 = 0b01000000; //0:(ADFM=0)Left justified (10bit res.), 100:Fosc/4 ,0:Reserved, 00:AVDD=VREF

CM1CON0 = 0x00; //コンパレータを無効化。Comparator disable }

uint16_t getAdc(void) // A/D変換した値を得る。 // 戻り値:

// A/D 変換されたアナログ信号の大きさ(0〜1023) {

uint16_t adcvalue; //ADC

wait(10); GO_nDONE = 1; while (GO_nDONE);

adcvalue = ADRESH<<2 | ADRESL>>6 ; return adcvalue;

}

uint16_t getShock(void) {

uint16_t adcvalue;

TRISA_ADC = 1; // Buzzer Port INPUT mode PORT_ADC = 1; // ADC port as Analog port adcvalue = getAdc();

return adcvalue; }

#define T0UNIT 31 // Timer0Counter about 1sec ( 1 / (1 / ((Clock 8MHz / 4) / prescaler 256) * 256)

void initTimer0(void) {

TMR0 = 0x00; // Initialize TIMER0

TMR0CS = 0; //Internal instruction cycle clock (FOSC/4) PSA = 0; //Prescaler is assigned to the Timer0 module

(10)

} }

// ブザー制御用関数

inline static void buzToggle(void) { PORT_BUZ ^= 1; } void beepBuz(uint32_t length, uint32_t height)

// ブザを鳴らす // 引数:

// length : 音の長さ

// height : 音の高さ(小さいほど高い音) {

uint16_t i;

TRISA_BUZ = 0; // Buzzer Port OUTPUT mode PORT_ADC = 0; // ADC port as Digital port for (i = 0; i < length; i++) {

buzToggle(); wait(height); } } void beepAlarm(void)

// 決められた時間が経過したときの警報音を鳴らす {

uint8_t i;

for (i = 0; i < 3; i++) {

beepBuz(BEEP_ALARM_LENGTH_1, BEEP_ALARM_HEIGHT_1); beepBuz(BEEP_ALARM_LENGTH_2, BEEP_ALARM_HEIGHT_2); wait(2000); } } void main(void)

// メイン関数。この関数から動作開始 {

uint16_t adc; // A/D 変換の値。A/D converted value

int32_t pwm, dpwm; // LED の明るさを PWM 制御するためのカウンタとカウンタの増分

initIo(); // I/O ポートの初期化 initAdc(); // A/D 変換ポートの初期化 initTimer0(); // Timer0 の初期化

beepBuz(BEEP_START_LENGTH, BEEP_START_HEIGHT); // 起動音を鳴らす

while (1) {

adc = getShock();

if (adc > SHOCK_THRESHOLD) {

beepBuz(BEEP_SHOCK_LENGTH, BEEP_SHOCK_HEIGHT); // 衝撃を検出したときの音 ledOn(); // LED を点灯する。

T0Counter = 0;// タイマのリセット。計時開始。 pwm = 0; dpwm = +1;

while (T0Counter < T0UNIT * TIME_LIMIT) {

//タイマのカウンタが決まった時間になるまで繰り返し実行

if (pwm > LED_BLINK_INTERVAL) { // pwm カウンタが最大値を超えたら pwm = LED_BLINK_INTERVAL; // pwm カウンタを最大値にセット dpwm = -1; // pwm カウンタの増分をマイナス(減) } else if (pwm < 0) { // pwm カウンタがマイナスになったら

pwm = 0; // pwm カウンタを 0 にリセット dpwm = +1; // pwm の増分をプラスに設定 }

ledOn(); // LED 点灯

(11)

wait(LED_BLINK_INTERVAL - pwm); // ちょっとの間 LED を消灯し続ける pwm += dpwm; // pwm カウンタを増やす

}

beepAlarm(); //警報音を鳴らす。 ledOff(); // LED を消灯する。 } else {

ledOff(); }

} return; }

(2) 設定用ヘッダファイルの作成

(a) MPLAB XIDEの画面で、”MPC17-02-B”-”Header Files”-”mpc17-02-settings.h”を開く。

7行目以降を消去して、次のコードをコピー&ペーストする。

#ifndef MPC17_02_SETTINGS_H #define MPC17_02_SETTINGS_H #ifdef __cplusplus

extern "C" { #endif

#ifdef __cplusplus }

#endif

// 数値を変更すると機能が調整できる。

#define SHOCK_THRESHOLD 20 // 衝撃の閾値 (0 ~ 1023)

#define TIME_LIMIT 8 // LEDが点灯している時間(タイマの秒数) #define LED_BLINK_INTERVAL 100 // LEDが点滅する間隔(40 ~ 500)

#define BEEP_START_LENGTH 2000 // 起動音の長さ #define BEEP_START_HEIGHT 5 // 起動音の高さ

#define BEEP_SHOCK_LENGTH 4000 // ブザーを叩いたときの音の長さ #define BEEP_SHOCK_HEIGHT 2 // ブザーを叩いたときの音の高さ #define BEEP_ALARM_LENGTH_1 4000 // 警報音(最初の音)の長さ #define BEEP_ALARM_HEIGHT_1 8 // 警報音(最初の音)の高さ #define BEEP_ALARM_LENGTH_2 2000 // 警報音(次の音)の長さ #define BEEP_ALARM_HEIGHT_2 16 // 警報音(次の音)の高さ // 調整用設定終了

(12)

(3) ビルドと書き込み、動作確認

[Make and Program Device Main Project]のアイコンをクリック

[CAUTION]警告のダイアログボックスが表示されたら、

電源が正しく接続されていることを確認して、[OK]をクリック。 (標準では、PICkit3から電源供給をしないので、問題はない)

※書き込みの段階で、赤い字でエラーメッセージが出る場合、電源が接続 されていなかったり、電線の接続に不具合があったりすることが多い。

X IDEの下側の[Output]に[Programming/Verify complete]と表示されたら、書き込み完了。

参照

関連したドキュメント

うのも、それは現物を直接に示すことによってしか説明できないタイプの概念である上に、その現物というのが、

Bでは両者はだいたい似ているが、Aではだいぶ違っているのが分かるだろう。写真の度数分布と考え

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,

【オランダ税関】 EU による ACXIS プロジェクト( AI を活用して、 X 線検査において自動で貨物内を検知するためのプロジェク

ダウンロードした書類は、 「MSP ゴシック、11ポイント」で記入で きるようになっています。字数制限がある書類は枠を広げず入力してく

エッジワースの単純化は次のよう な仮定だった。すなわち「すべて の人間は快楽機械である」という

いてもらう権利﹂に関するものである︒また︑多数意見は本件の争点を歪曲した︒というのは︑第一に︑多数意見は

以上の基準を仮に想定し得るが︑おそらくこの基準によっても︑小売市場事件は合憲と考えることができよう︒