FatFsのサンプル・プロジェクト(Jan 15, 2014)のlpc176xにマクロ定義の重複

※RTCのマクロに"RTC_"プレフィックスをつけることで修正されたようです。(20150422確認)

FatFsのサンプル・プロジェクト(Jan 15, 2014)のlpc176xにマクロ定義の重複があったのでまとめておく。

以下はLPC176x.h、LPC178x.hで共通。

/* RTC */
~
#define CCR (*(volatile uint32_t*)0x40024008)
~
/* Cortex-M3 SCB */
~
#define CCR (*(volatile uint32_t*)0xE000ED14)

実際のサンプルでは時間設定時にCCRでRTCの停止・タイムスタンプのリセット・再起動を実行しているようだが、幸か不幸かCCRの値に関わらず時間設定はできてしまっているようである。

(以下、rtc176x.cから)

int rtc_settime (const RTC *rtc)
{
	CCR = 0x12;		/* Stop RTC */

	/* Update RTC registers */
	SEC = rtc->sec;
	MIN = rtc->min;
	HOUR = rtc->hour;
	DOW = rtc->wday;
	DOM = rtc->mday;
	MONTH = rtc->month;
	YEAR = rtc->year;

	RTC_AUX = _BV(4);	/* Clear power fail flag */
	CCR = 0x11;			/* Restart RTC, Disable calibration feature */

	if (RTC_AUX & _BV(4)) {
		return 0;
	}

	return 1;
}

Cortex-M3 SCBのマクロ名は他のプロジェクトでも共通なようなので、RTC側を変更すべきだろうか。
ちなみにIDE(LPCXpresso)にプロジェクトをインポートしたときの警告で判明したため、改造時に何時間もはまるということは避けられた。

Posted in LPC17XX, メモ | Leave a comment

USBキーボード消費電力

SKB-LKG3BK

仕様では100mA以下だが実測では6mA程度である。(5.56mA)

電池駆動なら200時間程度。

Posted in メモ | Leave a comment

upstartのscript

途中0以外で終了したコマンドがあった場合、その後が実行されないもよう。

Posted in メモ | Leave a comment

TWE-lite メモ

ZigBeeワイヤレスモジュール TWE-Lite Dip (半完成品セミキット)

はじめから入っているファームはSDK内の以下のパスにある。

TWESDK\Wks_ToCoNet\App_TweLite\Master\binary\App_TweLite_Master_JN5164_1_3_3.bin

ちなみに以下のコマンドで確認できる。(モジュールはPRGモードでリセットしておく。)

D:\TWESDK>for /f "delims=" %I in ('dir /s /b *.bin') do Tools\jenprog\bin\jenprog.exe -z -t [TWE-Lite-Rのポート] "%~I"

ベリファイを通過したものが一致するファームウェアである。

Posted in メモ | Leave a comment

TWE-Lite R メモ

  • Product Description →"TWE-Lite-R"
  • CBUSのC2, C3→I/O MODE
  • C2をリセット、C3をPRGに接続。ダイオードはなくても可。
  • リセットのラインは10kΩでプルアップ。

参考:http://akizukidenshi.com/download/ds/tocos/USB_DIP_sch.pdf

Posted in メモ | Leave a comment

不遇?なFT232RL

秋月さんのHPにて

FT232RL USBシリアル変換モジュール

「通信速度:300bps~460kbps」とあるが実はCMOSレベルなら3Mbpsまで通信可能だ。
(レベル変換すると変換ICの上限で制約される)

去年から出たFT231X USBシリアル変換モジュールの説明では

「通信速度は300bps~3Mbpsで、従来の製品に比べ高速」と書かれてしまっており、もし「従来の製品」がFT232RLを指しているのならちょっとかわいそうである。

※ちなみにどちらのデータシートにも"Data transfer rates from 300 baud to 3 Mbaud (RS422, RS485, RS232 ) at TTL levels." と書かれている。(USBの規格は"USB 2.0 Full Speed capable.")

Posted in 端書 | Leave a comment

I2C接続RTC(リアルタイムクロック)DS1307 メモ

I2C接続RTC(リアルタイムクロック)DS1307+

  • I2Cのボーレート上限が100KHzなので注意。
  • 通常動作時もBAT端子には3Vを印加しておく必要がある。
  • バックアップモード時はI2C通信ができない。
  • SCL、SDAの電位はバックアップ電池の消費電流に影響を与えない。
  • 32.768kHzの外部クロックは必須。
  • 使用温度範囲:0℃~+70℃
  • AAA
  • バックアップモード時の消費電流が500nAなのでCR2032(230mAh)だと45年ほど持つ計算。(参考

I2C接続RTC(リアルタイムクロック)DS1307ZN+T&RTR

  • 使用温度範囲:-40℃~+85℃
  • AAA
  • DS1307+のDIPよりちょっと安い。(300円→250円)
Posted in メモ | Leave a comment

オープンドレイン出力について メモ

以下の挙動になる。

Hi にした時 Low にした時
普通のポート Hi Low
オープンドレイン出力(ポートはオープン) Z Low
オープンドレイン出力(ポートはプルアップ) Hi Low

内部の仕組みはともかく、簡単に考えるとオープンドレイン出力はHi時はハイインピーダンス。Low時はGNDに接続されると考えればよい。

Hi時はハイインピーダンスになるだけなので、もしポートに別のオープンドレイン出力が繋がれていてそれがLowだったとしても信号線は問題なくLowとなる。普通のGPIOでこれが起こると大電流が流れてしまう。I2Cはこの特性を利用している(らしい)。(CANのリセッシブも似たような挙動だ。)

よくやってしまう間違いが普通のGPIOだと思ってHiにしてもHiにならないので困るという事故である。

Posted in メモ | Leave a comment

Upstartのrespawnが動かないと思ったら・・・

サービスの追加にあたって

/etc/init/~.conf

に設定を書くと思うが、リスポーンさせたい場合

respawn

とだけ書くのはいいのだが limitの設定をしようと思って

respawn limit 10 5

とだけ書くと動かない。

respawn
respawn limit 10 5

などと両方書く必要がある。respawn limitで一つのオプションと考える。

ちなみにrespawn limit 10 5の意味は

5秒間に10回respawnされたらサービスをもうrespawnさせずに止めるという意味であって、5秒の間を空けて10回までrespawnするという意味ではない。

なので終了や起動時に1秒ほどディレイをもつプログラム、スクリプトを書けばサービス化は問題ないだろう。

ちなみにrespawn limit 10 5 はデフォルト値なのであえて設定する必要はない。

※参考
man 5 init

Posted in Linux | Leave a comment

netbeansのC++ファイル拡張子設定

socket関数の参照が解決できないので調査したところ、ヘッダの__THROWが邪魔しているもよう。(__THROWのないconnectは無問題だった)

原因としては拡張子のcが大文字Cと違いがつかないためc言語のファイルがcpp扱いになっているようだ。

下記画像のようにC++ファイル拡張子から大文字のCを削除するととりあえず解決した。

Posted in C言語, NetBeans | Leave a comment