Hatena::ブログ(Diary)

滴了庵日録 このページをアンテナに追加 RSSフィード

2018/04/12(Thu)

Arduino UNO のタイマ資源

毎度気になるArduino系やmbedマイコンボードでのタイマ資源の問題。

Arduino UNOでは、下記のようになっているらしい。競合に要注意。

Timer08bitdelay(), millis(), micros()などの時間管理
5,6番ピンのPWM
Timer116bitServoライブラリ
Timer1ライブラリ
9,10番ピンのPWM
Timer28bittone()
MsTimer2ライブラリ
3,11番ピンのPWM


関連項目

参考URL

2018/03/28(Wed)

STM32のバックアップレジスタ

バックアップレジスタとは?

  • STM32マイコンには主電源(Vdd)を落としてもバックアップ電源(Vbat)で値が保持されるバックアップレジスタがある。
  • 一種の不揮発性メモリとして利用できる。
  • ただし容量は、マイコンの型番によるが20〜128バイト程度しかない。(STM32F401REで20×4=80バイト)
  • フラッシュメモリより書き換えが容易・高速で、当然ながら書き換え回数の限度が無い。
  • バックアップレジスタはRTC(リアルタイムクロック)に属している。
  • しかし、とくにRTCの機能とは関係なく自由に使える。
  • ちょっとした設定の保持とかに便利。


HALドライバでの使い方

  • HALドライバにはバックアップレジスタにアクセスするための関数が用意されている。
  • RTCに属するレジスタのため、RTCの初期化を最初におこなう。
  • じつはレジスタを直接叩いたほうが楽かも…
  • RTC_BKP_DR0, RTC_BKP_DR1, RTC_BKP_DR2...という番号でレジスタを指定する。
  • CubeMXでコードを生成すると、RTCの初期化処理で RTC_BKP_DR0 が使用される。
  • したがってCubeMXを使用する場合、ユーザーが自由に利用できるのは、RTC_BKP_DR1以降となる。


【初期化】

// CubeMXでは初期化コードは自動生成される

// RTCのハンドル
RTC_HandleTypeDef hrtc;

// RTCの初期化
hrtc.Instance = RTC;
(中略)
HAL_RTC_Init(&hrtc); // バックアップレジスタを使うだけなら不要?

【読み出し】

// RTC_BKP_DR1の値を読み出す
uint32_t data = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR1);

【書き換え】

// RTC_BKP_DR1の値を0x5A5Aに書き換える
uint32_t data = 0x5A5A;
HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR1, data);

2018/03/24(Sat)

ワイヤレス給電で光るハーバリウム (後編)

前回の続き。後編は回路をハーバリウムに組み込みます。

材料


電装系のコーティングと固定

  • 防水のため、基板と電子部品をUVレジンでコーティングします。
  • LEDの配線はツルのように針金に絡ませます。
  • ボトルをアルコールで消毒しておきます。
  • 今回はプラ製のボトルを使ったので、底をくり抜いてそこから回路を入れます。
  • ワイヤレス給電の受電コイルをボトルの底に固定し、UVレジンで固めます。
  • 基板を隠すために上からビーズをまぶして、UVレジンで固めます。

【図解】

図


【ビンの裏面】

写真


花材の配置とオイルの充填

  • 花材をボトルの中にバランスを考えながら配置していきます。
  • ハーバリウム用オイルを注ぎます。
  • 熱膨張を考慮して、満タンにせずボトルの上部に少し空気を残します。
  • しっかりと栓をします。

図


ディスプレイ

  • ワイヤレス給電の給電コイルを木製の台にテープで固定します。
  • 上に布製コースターをかぶせてコイルを隠します。
  • コースターの上にボトルを置けば、ハーバリウムが光ります。


図

完成

こんな感じに光ります。(動画では色の変化が分かりにくいですが…)

D

2018/03/21(Wed)

ワイヤレス給電で光るハーバリウム (前編)

ワイヤレス給電でゆらゆら光るハーバリウムを作ってみました。ハーバリウムというのは、水分を抜いた花を専用のオイルとともにビン詰めして鑑賞するものです。今回は花といっしょに電子回路もビン詰めしました。ワイヤレスでビンの外から給電でき、給電用の台の上に乗せると電球型のボトルの中のLEDマイコン制御でゆらゆら光ります。


写真


電装系の部材


回路

図

図


  • 無接点電源モジュールでビンの外から電源を供給します。(入力:9〜12V、出力:5V 120mA)
  • 小型のArduino互換基板のAdafruit Trinketで制御します。
  • 電源がぶつかるので、ワイヤレス給電中はけっしてAdafruit TrinketをUSB接続しないこと。
  • Adafruit Trinket基板上の緑色の電源LEDは邪魔な光なので、はんだごてを使って取り外しました。
  • フルカラーシリアルLEDのNeoPixelを3個つなぎます。
  • ワイヤレス給電での電源立ち上がり時にNeoPixelの挙動が安定せず、変な色に発光することがあったので、NeoPixelの電源はAdafruit TrinketからFETでON/OFFするようにしました。
  • NeoPixelの電源には1000uFのコンデンサを並列に入れることが推奨されていますが、かさばってボトルに入れにくいし、今回はたった3個のNeoPixelなので省略しました。


ソフトウェア

  • LEDの発光の色を、周期的に変化させます。
  • 今回はハーバリウムに青系の花を使うので、青色〜水色で発光させました。
  • 色と明るさの変化に1/fゆらぎを加えてゆらゆらした感じにします。
  • 1/fゆらぎは間欠カオス法で生成します。
  • あまりゆらぎを強くすると不安な感じがするので、ほのかにゆらゆらする感じにとどめます。
  • 実際に発光させてみて、パラメータを調整します。
  • ソースコード一式


Adafruit Trinketに関する注意

  • Arduino IDE 1.6.4以降であれば、下記の設定で使えます。(手抜き)
    • ボードとして「Arduino GEMMA」、書き込み装置として「USBtinyISP」を選択
  • ホントは、メーカーのチュートリアル通りに設定したほうが良いと思います。
  • プログラム書き込みのタイミングがすこし難しいです。
    • USBケーブル接続直後か、リセットボタンを押した直後の橙色LEDがゆらゆら光っている間に、書き込みを開始しないといけません。
    • Arduino IDEで書き込みボタンを押してから基板上のリセットボタンを押すくらいのタイミングです。
  • Adafruit Trinketは、ROMが5kバイトちょっとしか使えないのでけっこうギリギリでした。
  • Arduino用のNeoPixelライブラリを使用します。


次回の後編では、この回路を組み込んだハーバリウムを作ります。

2018/03/14(Wed)

IAR EWARMのMAPファイルの見方

項目内容
先頭実行したコマンドライン等の情報
RUNTIME MODEL ATTRIBUTESよくわからん
HEAP SELECTIONよくわからん
PLACEMENT SUMMARY各セクションの先頭アドレス
・各オブジェクトの配置(よくわからん)
INIT TABLE変数初期化テーブル
MODULE SUMMARY各オブジェクトのコード/定数/変数のサイズ
コード/定数/変数のサイズの小計と合計
ENTRY LIST関数/定数/変数のアドレスとサイズ
末尾コード/定数/変数のサイズの小計と合計
・エラー/警告


  • 全体のROM/RAM使用量を見る → 末尾
  • オブジェクトごとのROM/RAM使用量を見る → MODULE SUMMARY
  • 関数/定数/変数ごとのROM/RAM使用量を見る → ENTRY LIST
  • セクションの配置を確認する → PLACEMENT SUMMARY
Connection: close