06/28のツイートまとめ

Revetronique

ミクダヨーさんのお戯れ。 #ファミ通フェス2016 https://t.co/mtC9XW8FCd
06-28 00:15

AVRマイコンでウォッチドッグタイマーを一番楽に動かす方法(6/29修正)

どーもー、Reveです。
今日は久しぶりに電子工作ネタです。

Arduinoを扱っている関係で、AVRマイコンを直接いじることもあるのですが、
今まで触ったことが無かったウォッチドッグタイマーを動かすことができたので、備忘録を兼ねてその手法を記していこうかと。

【AVRマイコン】
Atmel社が出しているマイコンのシリーズで、Arduinoでも(ATMega328P)使用されています。
特に、ATTiny13A-PUというマイコンは秋月電子でなんと50円という超低価格の割に機能も豊富で便利なので、簡単な電子工作ではとても重宝します。

当方もこのATTiny13Aをよく利用するのですが、今回はそのウォッチドッグタイマー機能を簡単に利用する方法を書いていきます。

【ウォッチドッグタイマー】
このウォッチドッグタイマー(以下、WDT)とはシステムの監視を行うためのタイマーで、通常では異常事態が発生した際にリセットをかけてシステムを再スタートさせるのですが、通常のタイマーとしての利用も可能です。

実はマイコンのスリープ機能(休止モード)で、メインクロックが停止したときもWDTは動作するので、スリープからの復帰に使えたりします。あとは他のタイマーをすでに使っているときとか

もちろん、ATTiny13Aにも搭載されているのですが、今日はこの機能をレジスタをいじることなく使用して行きます。

なお、WDTをタイマーとして使う場合、最大で8秒までしか計測できないため、それ以上長い時間は変数を設けるなど工夫する必要があります。

【使い方】
では、どうすればWDTを使えるかというと、開発環境が提供するライブラリを駆使します。
Atmel社が提供している公式の開発環境(Atmel Studio 7)がVisual Studioベースでなかなか使いやすく、ライブラリも豊富(今回使うライブラリも含む)なので、こちらを導入しましょう。
下のリンクからインストーラをダウンロードして実行すればOKです。
http://www.atmel.com/Microsite/atmel-studio/

開発環境を入れたら、コードの書き方に入っていきましょう。
順を追って解説していきます。

1. ライブラリの導入(インクルード)
avr/wdt.hというライブラリをインクルードします。
これにはWDTを使うための関数が3つ用意されています。
・wdt_reset() : WDTの設定をリセットするための関数
・wdt_enable(value) : WDTを有効にする関数。valueに定数を入れて時間を設定する
・wdt_disable() : WDTを無効にする関数


ライブラリと関数については、このリンク先に詳細が載っています。
http://cega.jp/avr-libc-jp/group__avr__watchdog.html

(6/29追記)
関数wdt_enableでWDTを起動した場合、タイマーの設定時間が経過するとリセットがかかるようです。
通常のタイマーのように使う手法は、手順3.に記載しています。

2. WDT発動後に再起動を繰り返す問題の対策
どうやら最近のAVRマイコンは、WDTの発動後もタイマーが継続するので、次回以降は最速のタイミング(15ms)でリセットを繰り返すという動作が起きてしまうそうで、意図しない誤作動を防ぐために入れています。

(参照) 電子牛乳様 AVR がウォッチドッグタイマ発動後に再起動を繰り返す問題
http://milkandlait.blogspot.jp/2014/06/avr_3.html

3. WDTの割り込み処理
WDTの設定時間が経過した際の割り込み処理を記述します。

AVRマイコンでは割り込み処理をISRという名前の関数に実装します。
ISRの引数は、割り込みのイベントを指定するもので、例えばタイマーの時間経過やスイッチ入力などがありますが、今回はWDTなのでWDT_vectを入れます。

あとは関数内に好きな処理を実装するのですが、wdt_disableを入れておくとWDTを一時停止できるので、WDT発動後の意図しないリセットを防ぐことができます。

(6/29追記)
前述のとおり、wdt_enableでは割り込み処理後にリセットがかかります。
通常のタイマー割り込みとして使うためには関係するレジスタ(WDTCR)を設定する必要があります。

WDTCRにタイマー割り込みの設定をするには、レジスタ内の
・WDCEを1にする
・WDTIEを1にして、時間を設定するための定数を入れる
と、通常のタイマーのようにWDTを使うことができます。

なお、設定の直前に割り込みを無効にし、直後に再び割り込みを無効にするのが推奨されているようです。

以上の設定が簡単にできるよう、自作の関数を定義すると良いでしょう。

void WDT_start(int wt)
{
//disable interrupt
cli();
//watchdog timer reset
wdt_reset();
//watchdog timer change enable, use for interruption
WDTCR |= (1 << WDCE) | (1 << WDTIE);
//interruption interval
WDTCR |= wt;
//enable interrupt
sei();
}


4. WDTの実行
以上の準備が終わったら、任意のタイミングでWDTが起動するように関数を記述します。
wdt_enableを必要な場所に記述することでその場所からWDTが起動します。
時間の設定は、引数に指定の定数を入れることで可能になります。

下に書き方をソースで載せました(WDTの実装のみなので、入出力ピンなどの処理は追加してください)。

//1. ライブラリの導入
//他に必要なライブラリは適宜インクルードする
#include <avr/wdt.h>

//2. WDT発動後に再起動を繰り返す問題の対策
//詳しくはこのリンクを参照
//http://milkandlait.blogspot.jp/2014/06/avr_3.html
uint8_t mcusr_mirror __attribute__ ((section (".noinit")));
void get_mcusr(void) __attribute__((naked)) __attribute__((section(".init3")));
void get_mcusr(void)
{
mcusr_mirror = MCUSR;
MCUSR = 0;
wdt_disable();
}

//3. WDTの設定
//WDTの設定と起動
void WDT_start(int wt)
{
//disable interrupt
cli();
//watchdog timer reset
wdt_reset();
//watchdog timer change enable, use for interruption
WDTCR |= (1 << WDCE) | (1 << WDTIE);
//interruption interval
WDTCR |= wt;
//enable interrupt
sei();
}

//WDTのタイマー時間経過時の割り込み処理
ISR(WDT_vect)
{
//処理内容を記述

//WDTの無効
wdt_disable();
}

//4. WDTの起動(メイン処理内)
int main(void)
{
while (1)
{
//WDTの許可
//WDTの時間はライブラリ内の定数で指定(WDTO_1Sで1秒)
WDT_start(WDTO_1S);

//設定した時間が経過した際にリセットをかけたい場合は、この関数を使う
//wdt_enable(WDTO_1S);
}
}


と、こんな感じでライブラリを駆使すればすぐにWDTが使えます。
ぜひやってみようw

続きを読む

06/26のツイートまとめ

Revetronique

ミクダヨーさんにも会えました #ファミ通フェス2016 https://t.co/fBVEyMbkde
06-26 21:11

秋葉原のベルサールで見かけたトロ #ファミ通フェス2016 https://t.co/mtZ3fgKC46
06-26 20:57

06/25のツイートまとめ

Revetronique

今日、マイコンインフィニットなるイベントに行きました。マイコンやレトロPCへの愛とディープなネタに溢れたイベントでとても楽しかったです。いつか展示で参加できるようになりたい…。 https://t.co/AubYHrXXfo
06-25 21:33

浦の星女学院の入学案内を頂きました。 https://t.co/8uMmMBXhQl
06-25 13:22

06/19のツイートまとめ

Revetronique

本体の裏にカバーがあるじゃろ?(^ω^)⊃ これを取って、トルクスネジを外して、半田とコテと吸い取り線でusb端子を基板から少しずつ浮かせて取って、新しい端子を同じ場所に半田付けすると、修理完了じゃ
06-19 21:31

充電できなくて動かなかったwindows phoneが半年ぶりに復活した。マイクロusb端子の接触が悪かったので交換しました。 https://t.co/dasYMC5O1r
06-19 21:05

06/16のツイートまとめ

Revetronique

@ssssssssatomi ご連絡ありがとうございます。先程、メールの方にご返信させていただきましたのでご確認いただけましたら幸いです。
06-16 15:11

布が多めの衣装を着せて、Live2dでさやべぇを可愛く動かしたい衝動。 #アイキャラ
06-16 11:00

Intel RealSenseを搭載してLive2Dの初音ミクを動かしてみる

作品というか習作ですが、久々に作ってみたので動画公開しました。
Live2Dの初音ミクが、ユーザーの手のひら(の位置)を目で追っていくというものです
良かったら見てやってください。



そのうち解説記事でも書こうかと(多分...)

品テクマルシェなるイベントに行ってきました

こんばんは、Reveです。
6月最初の記事投稿ですが、今日は1週間前に開かれたイベントのレポでも書こうかと。

今回紹介するイベントは「品テクマルシェ on the GREEN」という、広大な緑地で最新のテクノロジーを体感するというワークショップイベントで、5月30, 31日に品川シーズンテラスのイベント広場で行われていました。
(WEBサイト) http://sst-sr.jp/info/s20150519_004/

入口はこんな様子でした。
写真 2016-05-28 14 10 10

では、どんなテクノロジーを駆使した機器が展示されていたのか、その一部を写真を交えて紹介していきます。

【スフィロ(sphero)】
一見するとただのボールですが、実は自ら転がって移動するロボットで、スマートフォンを使って遠隔操作できます。
(下の写真の白いボールが「スフィロ」です)
写真 2016-05-28 14 19 04

この車輪もないのに転がっていく不思議さ。
実際に操作してみるとさらに不思議さと面白さが入り混じった感じで楽しかったです。イベントでは下のコースで走らせました。
写真 2016-05-28 14 20 31

ちなみに、スターウォーズEP7(最新作)で出てきたロボット「BB-8」のバージョンも販売されています。

【ReconJET】
主にスポーツなどアクティビティ向けのスマートアイウェアで、ディスプレイにカメラやセンサー、そして小型のコンピュータを搭載しており、スポーツに関わる情報から景色の撮影などといった様々な機能をスポーツ愛好家に提供してくれるデバイスです。

で、装着した写真はこちら。
写真 2016-05-28 14 23 24

【パラレルアイ(Parallel Eye)】
ソニーコンピュータサイエンス研究所の企画するワークショップの一つで、ここでは「視点交換鬼ごっこ」をしていました。
要するにVR用のヘッドマウントディスプレイ(HMD)を装着した鬼ごっこなのですが、ゲーム参加者が自分を含めた全員の視点を見ながら逃げ回る、あるいは相手を追いかけるところが最大の特徴です。

こんな感じで、HMDをつけながらゲームを行います。
写真 2016-05-28 15 15 09_r1

要は視界を全員で共有するのですが、意外にも自分の視界が小さかったことと、逆に相手の情報もあって情報量が多くなり、慣れるまで時間がかかりました。ただ、今までの鬼ごっこではできなかったような新しい駆け引きも生まれそうでなかなか楽しめました。

観戦者は参加者の様子と視界を同時に見られるため、相手がどうしてこう動いているのかという理由も推察できてまた違った楽しみもあります。
写真 2016-05-28 15 15 15

【LEGO MINDSTORMS EV3】
一言でいうと、レゴで組み立てるロボットなのですが、
侮るなかれ、このキットはロボットのような玩具ではなく、本当にセンサー、モーター、小型コンピュータを搭載したロボットが組み立てられる教育キットになっています。
写真 2016-05-28 15 50 17

中にはロボットの中枢を担うコンピュータとセンサー類、駆動用モーター、そしてそれらをつなげるジョイントやフレームといったパーツ一式が入っており、ロボットアームやライントレーサ、倒立振子といったいろいろなロボットをこのキットだけで組み立てられるようになっています。
また、プログラミングもコードではなくパズルの様にそれぞれの機能が書かれたピースを順につなげるといったグラフィカルな方式で簡単にプログラムが作れます(C言語などコードでの作成も可能)。

前のバージョンのものを触ったことはあるのですが、それからまた進化しているようで、個人的にはとても興味深いものの一つでした。価格は5万くらいですが、ここまでロボット制作とプログラミングができるとなると教育キットとしては十分すぎるくらい手ごろな値段ではないかと。
最近ではロボットプログラミングが子供の習い事として人気ですが、導入キットとして購入するのも良いかもしれません(なんか宣伝みたいですね...汗)。

【UNI-CUB】
最後はこちら。
椅子の形をしたセグウェイ(のような椅子)。座ると動いてくれる乗り物のような椅子です。
写真 2016-05-28 17 23 02

まあ、セグウェイみたいなものですが、乗ってみるとなかなか面白く、一緒にイベントに行った相方曰く「一輪車みたいな感じ」だそうで。これも体験した方が早いですねw
ちなみに、すぐ隣のブースで電動車いす「WHILL」にも乗れました。こちらも従来の車いすのイメージをいい意味で壊すような新しい車いすで、シンプルな操作インターフェースとデザインが洗練されていて、だから人気なのかと実感しました。

【その他】
ほかにもこんなものが。

セグウェイもありました。
写真 2016-05-28 17 06 53

巨大なロボットスーツ。
写真 2016-05-28 15 45 57

歩いているような感じで漕ぐ自転車にも乗りました。
写真 2016-05-28 15 43 59

また、周りには聞こえないようにヘッドフォンで聞くDJ(サイレントディスコ)というのもありました。

イベントは2日間で行われていましたが、1日限定のイベントもいくつかあったそうで。
土曜日にしか行けなかったため、日曜日のイベントは見られなかったのですが、機会があれば見てみたかったですね。

というわけで、品テクマルシェのイベントレポでした。
では(・Д・)ノ

テーマ : 日記
ジャンル : 日記

06/01のツイートまとめ

Revetronique

IT飲み会なるものが、ベトナムハノイでよく行っていた和食の美味しい紀伊であるらしいwハノイ在住の時にやってほしかった。
06-01 08:57

05/31のツイートまとめ

Revetronique

セグウェイ、ぶーん。 https://t.co/agWqZDPfoQ
05-31 16:21

迎賓館なう!ヴェルサイユ宮殿を思い出す。また行きたいな。 https://t.co/FmS9u3XLHB
05-31 15:10

プロフィール

Reveちゃん

Author:Reveちゃん
コンビでやってます。
夢担当と技術担当がいます。

大学院卒業 → ロボットベンチャー(漆黒)就職 → 1年で退職 → ベトナムで仕事中(今ここ) → メディアアーティスト(未来☆)

リンクフリーです。

最新記事
最新コメント
月別アーカイブ
カテゴリ
アクセス数
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR