More Related Content Similar to ETWEST2014 ヒートアップセッション3 組込み技術教育から見た電子工作 (20) More from Yukio Kubo (14) ETWEST2014 ヒートアップセッション3 組込み技術教育から見た電子工作3. 久保幸夫 @tentenV3って誰やねん?
• 自称 IT&組み込み講師・コンテンツライター
– 電子工作マガジン、エレキジャック、日経ネット
ワーク、などの雑誌記事や書籍を書いている人
– JASAでは ETEC試験関連のお仕事担当
• 最近は 地元・大阪日本橋(にっぽんばし)に生息
– 日本橋ロボット連絡会幹事
– 日本橋ものづくり拠点 robobaのメンバー
昨年から3Dプリンタ作りに嵌り…
http://roboba.jp/
14. 例 Arduino のLED点灯プログラム
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
}
LEDは13番ピン
13番ピンを出力に
13番ピンをHに
実質 4~5行で、スケッチを書けてしまう
17. LEDの点灯までの長い旅…
//ペリフェラルのライブラリのインクルード
#include "stm32f10x.h"
//ペリフェラルの初期化用構造体を用意
GPIO_InitTypeDef GPIO_InitStructure;
int main(void)
{
volatile int i;
//ペリフェラルのクロックをオンにして起動
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
//ペリフェラルの初期化用構造体を初期化
GPIO_StructInit(&GPIO_InitStructure);
//ペリフェラルの初期化用構造体にパラメータを設定
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //pin8に設定
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //出力モードpush-pullに設定
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //スイッチング速度 50MHz(MAX)
//ペリフェラルの初期化関数の呼出し
GPIO_Init(GPIOC, &GPIO_InitStructure);
//ペリフェラルの操作
GPIO_WriteBit(GPIOC, GPIO_Pin_8, Bit_SET);
while (1);
}
いろいろと準備
IOポートにクロック供給
8番ピンを指定
プッシュプル
モードで出力
IOポートのクロック
を50MHzにIOポートの
初期化
21. 今どきマイコンを生で使うには
int main(void)
{
<省略>
以下はEMI/EMC対策のため、いったん全GPIOのポートをアナログ入力に設定
/* Configure all unused GPIO port pins in Analog Input mode (floating input
trigger OFF), this will reduce the power consumption and increase the device
immunity against EMI/EMC *************************************************/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
RCC_APB2Periph_GPIOE, ENABLE); RCC_APB2PeriphClockCmd() 関数で、ペリ
フェラルバスB(APB2)に属するGPIOにクロックを与え、一時的に有効にしている
GPIO初期化用構造体のメンバ変数への代入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIOの全ピンを指定
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIOのモードをアナログINに
GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO Aの初期化
GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO Bの初期化
GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO Cの初期化
GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO Dの初期化
GPIO_Init(GPIOE, &GPIO_InitStructure); GPI0 Eの初期化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
ハードウェアの設定
メインクロック・サブクロック
プロセッサの設定
省電力の設定
割込みの設定
・・・・・
お膳立てしてから、やりたいことを記述
35. Arduinoの落とし穴
全ての処理をループで考えてしまう
// the loop routine runs over and over again forever:
void loop() {
hoge;
delay(500);
hoge;
delay(200);
hoge;
}
組込みのプログラムは
コンテキストスイッチにより、
細切れのプログラム実行にな
ることがよくある
割込みハンドラ RTOSの
タスクスイッチング
44. でんしこうさく のやくそく(ちゅうい)
プラス(+)とマイナス(-)をまちがえない
でんせんはあかがプラス(+)、くろがマイナス(ー)
ぶひん の とりつけをたしかめる
ぶひんの しゅるい、いち、ほうこう、むきは あっている?
ショートさせない
でんきょくを、まちがってつなげないこと
あそんだら、でんち をぬいていく
プラス(+)とマイナス
(-)を逆にすると部品が
壊われます
部品の種類、方向、位
置を確認してください
異なる電極を誤ってつ
なぐと、ショート(短絡)
して、発熱等の危険が
あります。
事故防止のため、使用
後は、電池を抜いてく
ださい
指導者・保護者のみなさまへ
1~2個の単3乾電池を使った電子工作は、電圧が低いので、危険性は高くはありませんが、念のため、子供たち
が上記の注意点を守っているか、常に確認をお願い致します。万が一、異常な発熱、焼けたような匂い等を感じ
られた場合、すぐに電池を抜いてください。