2014年6月21日土曜日

KURUMIボードのリセット回路

マイコンの基本回路の最後はリセット回路です。KURUMIボードのリセット回路は下記のようになっています。KURUMIマイコンはボード上の3つの端子からリセットをかけることができます。
KURUMIボードのリセット回路とボード上の位置

  1. リセットボタン(くるみアイコンのすぐ下の白いスイッチ)
  2. FTDIモジュールから来るDTR信号
  3. KURUMIボード右上部のRST端子
通常はRESET端子(KURUMIマイコンの40番ピン)はハイ・レベル(Vcc端子と同電圧)に保持しておきます。この端子をロウ・レベル(GNDと同電位)に下げるとRESETが有効になります。KURUMIマイコンにRESETがかかると、電源起動時とどうように書込まれたプログラムを最初から実行します。
KURUMIボードのリセット回路はスイッチと抵抗とうきわめて簡単な回路ですが、KURUMIマイコンの内部では、供給される電源電圧を監視して、KURUMIマイコンに供給されている電圧に応じて、いろいろな対応をとれるようになっています。

供給電圧が降下し動作が不安定になることをブラウン・アウトと呼ぶことがあります。KURUMIの血圧が下がって貧血を起こすような状態ですが、これを検知する回路を内蔵しています。
RL78/G13ハードウェアマニュアル(832ページ)
電池で動作するシステムは、ちょっとモータを回したりすると、すぐに電池が電源供給不足になってで電圧が下がってしまうので意外とシステムを正常動作させるためには苦労します。マイコンに電圧検出回路が内蔵されているのは大変重宝します。

もう1つの電源

KURUMIボードには、もう1つ電源を供給する方法があります。それは、KURUMIマイコンにプログラムを書込む時に使うFTDIモジュールです。これは、パソコンのUSBインターフェースとKURUMIマイコンのシリアルI/O(UART)のブリッジ(橋渡し)します。一般的にはUSBシリアル変換モジュール (USB-To-Serial Converter Module) とも呼びます。パソコンのUSB 2.0規格では5V・500mAを接続先へ給電することができます。下記のFTDI Basicモジュールは、これを3.3Vに降電(デフォルト仕様)してKURUMIボードに供給しています。もし、KURUMIボードを5V動作で使いたい場合は、裏の3つのパッド短絡設定を変更する必要があるようです。回路図をここにリンクします。
KURUMIボードのFTDIコネクタ回路

KURUMIの電源回路をいじめてみた

マンガン電池以外の電池やその本数を変えて、KURUMIボードの電源回路(昇圧回路)がどのように振る舞うか確認してみました。KURUMIにはちょっとストレスかもしれませんが、ガマンしてもらましょう。

① ニッケル水素電池を1本接続した場合
eneloop (充電式ニッケル水素電池)は定格1.2Vと記載してあるが、満充電直後の場合1.35Vの電圧を供給している。これをKURUMIのRAW端子に接続し、KURMUMIマイコンのVcc電圧を測定したところ、しっかり3.3Vが供給されている。KURUMIの昇圧回路はなかなかのすぐれモンですね。

② ニッケル水素電池を3本接続した場合
それでは、eneloopを3本接続するとどうなるでしょう。 eneloopを3本直列につないだ場合、RAW=4.04Vを供給します。KURUMIマイコンのVccは4.03Vになっています。KURUMIボードの電源回路(昇圧回路)は昇圧するための回路ですから、4.04V→4.03Vと努力の様子はうかがえますか、出力したい電圧(3.3V)よりも高い電圧が入力されるとうまく対応できないことがわかります。あまり長くこのような状態を維持すると電源回路が壊れる可能性があるので、この辺でやめることにします。

KURUMIの電源回路

どんな電子回路でも、必要な電力が供給されないとそのシステムは動作できませんよね。さて、KURUMIボードの電源回路はどうなっているのでしょう。KURUMIボードに搭載しているマイコンRL78G13の動作電圧はVDD = 1.6 - 5.5V とかなり低電圧から動作します。 この推奨動作電圧より低い電圧の場合、マイコンやシステムは正しく動作することができません。多くの場合、発振回路が動作しないとか、RAMの内容変ってしまうとか、リセットが機能せずプログラムの暴走(プログラムの意図した順序で実行されない)といった不具合が発生します。

さて下記の図は、KURUMIボードの電源回路です。
KURUMIボード上の電源回路・電池端子・切替スイッチ
電池を使用する場合は、ディップスイッチJP8をON側にセットします。そして電池のプラス端子をRAWピンに接続します。電池のマイナス端子はGNDピンに接続します。黄色い破線部分がKURUMIボードの電源回路です。下記がその回路図です。
KURUMIボードの電源回路(昇圧回路)
この電源回路は、RAW端子に電池を接続すると昇圧されVccには電池が供給する電圧(VRAW)
よりも高い電圧(VCC)が供給されます。実際に電池を接続して、どんな電圧が供給されているのか測定してみましょう。

① まずマンガン電池の電圧を測定しました。
マンガン電池の電圧を測定した様子
② マンガン電池(1本)をKURUMIボードに接続して、KURUMIマイコンに供給される電圧を測定しました。
電池電圧は昇圧されVccには3.3Vが供給されている
KURUMIボードは何も修正していませんので、工場出荷状態での電源回路はVccに3.3Vが供給されるように設定されているようです。

Vcc =5Vを供給するには、電源回路のP2端子(未接続のジャンパー)をハンダで短絡する必要があるようです。






2014年6月16日月曜日

KURUMIマイコンの発振回路

KURUMIマイコンボードに搭載されてるマイコンチップ(ルネサス社製のRL78/G13)の発振回路はP121/X1(45番ピン)とC47コンデンサーです。いたって簡単な回路ですが、リセットに必要な多くの回路がチップ内部に内蔵されているからです。

システム動作に不可欠ではありませんが、外部周辺回路として時計クロック(SUB CLOCK)も付加されています。XT1(45番ピン)とXT2(44番ピン)に接続しています。水晶発振子XTAL1 (32.768KHz)は、発振精度が高いので実時間時計のペースメーカーとして使用します。



マイコン動作に不可欠な回路

マイコンが動作するには、最低でもどんな外部回路が必要なのでしょう?
マイコンシステムのブロック図
  • 電源回路(Vcc, Vss/GND):電気が来ないとマイコンは動作できませんよね。
  • 発振回路: マイコン内部のロジック回路をこの発振器をベースに動かします。いわば、マイコンの心臓の鼓動のようなものです。
  • リセット回路: 電源が入った直後や、もう一度最初からプログラムを実行させる場合にこの回路が必要です。人生は時間を巻き戻してやり直すことはできませんが、マイコンはリセットがかかると何回でもプログラムを再実行します。
  • Flash ROM::Flash Read Only Memoryと言ってあなたの作ったプログラムを書込む場所です。Flash ROMは、不揮発性メモリ(Non Volatile Memory)で電気が来なくても無くても書き込まれた内容は消えません。
  • RAM :Random Access Memoryで揮発性メモリです。 CPUの作業データを一時的に保存しておきます。
  • 周辺回路(内・外部): 内部にはタイマーなどの回路や、外部にはLEDやスイッチなどを取付けます。外部に色々な回路を取付け、それをプログラムで制御することがマイコンの役割です。
  • あなたのプログラム: パソコン同様に目的にあったプログラムを書込まないとマイコンは動作しません。
KURUMIマイコンボードは、下記のように対応しています。

2014年6月14日土曜日

KURUMIボードをリアルタイムに動作させる

前回の記事では、delay(1000) を使って順番にLEDを点滅させました。しかしdelay( )関数を使うと、delay(1000) を実行している約1秒間(1000m秒)は、KURUMIボードは他の処理ができません。

ここで、millis( )関数を使ってリアルタイムに色んなタスクを実行する方法を説明します。

millis( ) 関数とは1ミリ秒を刻むストップウォッチ関数です。Kurumiボードに電源が供給され動作を開始するとmillis( )関数はリセットされそのタイマーをスタートします。 KURUMIマイコンが動作している限り止まることなく時を刻みます。 この関数は現在までの時間をミリ秒単位で値 (unsigned long) を返します。この関数は約50日間でオーバーフローしゼロに戻ります。

リアルタイム制御の方法
現在時間 「 millis() 関数 」と「過去に取得した時間」を比較し、決められた時間を過ぎたら特定の処理を実行する方法で実現できます。

下記にGR-KURUMIの赤いLEDを1秒ごとに点滅させる方法を添付します。

/* GR-KURUMI Hair-pin LED Blink with millis( ) function */

#include <RLduino78.h>
#define LED_R 22
#define LED_G 23
#define LED_B 24
#define LED_OFF 1
#define LED_ON 0

unsigned long myLastTimeStamp;
int toggle = 0;

void setup()
{
    pinMode(LED_R, OUTPUT);
    pinMode(LED_G, OUTPUT);
    pinMode(LED_B, OUTPUT);
    digitalWrite(LED_R, LED_OFF);
    digitalWrite(LED_G, LED_OFF);
    digitalWrite(LED_B, LED_OFF);    
}

void loop()
{
    if(millis() - myLastTimeStamp > 1000) {
       myLastTimeStamp = millis();
       if (toggle == 0) {
         toggle = 1;
         digitalWrite(LED_R, LED_ON);      
       } else {
         toggle = 0;
         digitalWrite(LED_R, LED_OFF);      
       }
    }
    
    // You make other operation here.
}

GR-KURUMIボードを動かしてみる。

下記のプログラムは、GR-KURUMIボードのクルミアイコンのヘアピンを赤→緑→青と光らせるプログラムです。

まず、KURUMIボードにプログラムを書込むソフトウェアを自分のパソコンにインストールする必要があります。 このようなソフトウェアを統合開発環境(英語: IDE (Integrated Development Environment) と言います。KURUMIボードの場合は、「IDE for GR」というソフトウェア(Windows版)が用意されています。

  1. コーディング: C++ (Arduino言語)とうプログラミング言語を使ってKURUMIボードを制御するソフトウェアをこの上で書きます。
  2. コンパイル: 上記で書いたプログラムソースをKURUMIマイコンが理解できる機械語に翻訳します。 メニューの アイコンを押すとコンパイルが実行されます。
  3. ダウンロード: IDEでコンパイルした機械語コードをKURUMIボードに書き込みます。
    このとき、[ツール]→[シリアルポート]→[COM??] で、KURUMIがつながっている正しいCOMポート番号を選択しておく必要があります。

下記のプログラムソースは、「IDE for GR」からFTDIケーブルを使ってGR-KURUMIボードを正しく書込めるかチェックするために作りました。書込めない場合は、次の事をチェックしてください。

① FTDIのドライバーは正しくインストールされているか? 私は、FTDI BasicとうUSBシリアルコンバータモジュールを使っています。GR-KURUMIのWebページには、検証済みのUSBシルアルコンバータモジュールが記述されています。

② FTDIケーブルは正しい向きでGR-KURUMIボードに挿入されているか?
FTDIケーブルのGR-KURUMIへの装着方向
③ シリアルポートは、正しいCOM番号が選択されているか?
  これは、IDEforGRプログラムの[ツール] → [シリアルポート]で選択できます。

IDEforGRプログラムの操作画面


テストプログラム
/* GR-KURUMI Test Program */

#include <RLduino78.h>
#define LED_R 22
#define LED_G 23
#define LED_B 24
#define LED_OFF 1
#define LED_ON 0


void setup()
{
    pinMode(LED_R, OUTPUT);
    pinMode(LED_G, OUTPUT);
    pinMode(LED_B, OUTPUT);
}

void loop()
{
    digitalWrite(LED_R, LED_ON);
    delay(100);
    digitalWrite(LED_R, LED_OFF);
    delay(1000);    
    digitalWrite(LED_G, LED_ON);
    delay(100);
    digitalWrite(LED_G, LED_OFF);
    delay(1000);    
    digitalWrite(LED_B, LED_ON);
    delay(100);
    digitalWrite(LED_B, LED_OFF);
    delay(1000);    
}

かわいいマイコンボード KURUMI

KURUMIというかわいいマイコンボードがあるので紹介します。
KURUMIボード(表)
KURUMIボード(裏)















KURUMIボード(裏)には、黒い板に銀の羽が付いたものが載っていますが、これがKURUMIのCPU (CPUは、Central Processing Unit の略称)です。これは、このボードの脳に相当します。QFP (QFPとはQuad Flat Packageの略称) 型マイコン・パッケージと呼ばれています。

実際には、脳の他に手足にあたるI/O(Input/Output)ポートとう機能があり、スイッチをオン・オフしたりをプログラムで制御できます。


KURUMIアイコンの髪飾りはLED(ランプ)がありますが、ここを光らせることができます。また、入力機能にも変更できますから、逆にスイッチがオンなのかオフなのかもわかるようになっています。

その他に、タイマーや通信を行う機能もあり、ある時間が来たらブザーを鳴らしたりすることができます。

KURUMIボードの各ピンの機能