The current selected device is unable to set breakpoints during runtime.

Atmel Studio 6のシミュレータでデバッグしてみようとしたところ、掲題のエラーが発生。

字句どおり、デバイスが対応していないなんてことはありえないので原因を探ったところ、コンパイラの設定が問題だった。

最適化がオンになっているとブレイクポイントが有効にならないのだ。

Optimization Level を None(-O 0)にすることで解決。

(最近、IDEが信用ならない・・・)

Posted in Atmel Studio, AVR | Leave a comment

SPI通信におけるモードの理解

SPI通信について理解が浅かったのでわかりやすくまとめてみた。

CPOL

クロックが正論理なのか負論理なのかをクロックの極性という。(Clock Polarity=CPOL)

SPI通信においては以下のように定義する。

  • CPOL=0の場合、クロックは正論理とする。
  • CPOL=1の場合、クロックは負論理とする。
  • 何も通信しないときは当然0にしておく。(CPOL=0のときはLow, CPOL=1のときはHi)

CPHA

クロックは1クロックで0から1、1から0に切り替わるがその切り替わりのタイミングのことをクロックの位相という。(Clock Phase=CPHA)

SPI通信においては以下のように定義する。

  • CPHA=0の場合、0から1に切り替わるタイミングでデータを取り込むこととする。
  • CPHA=1の場合、1から0に切り替わるタイミングでデータを取り込むこととする。

モードについて

SPI通信ではCPOLとCPHAの値によって4つのモードを定義する。

CPOL CPHA モード
0 0 0
0 1 1
1 0 2
1 1 3

以上

以下の図がわかりやすいだろう。

cf.https://www.diolan.com/dln_doc/spi-transfer-modes.html

(追記:20160113)
モードを暗記する場合 、以下のように考えると覚えやすい。
デフォルトをモード0とする。
クロックが1→ 0になるときに取り込みを行う場合、モードに1を足す。
クロックが負論理ならモードに2を足す。 
まとめると単にこれだけのことである。

==

余談

ネット上の解説では、CPHAのタイミングについて立ち上がり立下りなどという表現が使われたりしているがHi Lowの切り替わりと勘違いしそうなのでやめた方がいい気がする。

またサンプルされない位相でデータがシフトされるという説明がよくあるが一般的に言い切ってしまうとmode=0のときの1ビット目はどうするんだという話になったり、mode=0の最後では何をシフトしてるんですか?という話になったりするのでやめた方がいい気がする。

そもそもシフトタイミングについてはサンプルのタイミングさえ厳密に決まれば自由のはずなので仕様的には未定義なのではないだろうか?

Posted in デジタル回路 | Leave a comment

LPCXpressoへの不満点というかバグ

なかなかよさげと思っていたらバグを見つけた。※

Project Explorer でcファイルを右クリックするとResource Configurations というメニューが出てきて、Exclude from Build...というサブメニューからビルド時にincludeするかどうかが選べるのだが、ヘッダーのhファイルの場合、Resource Configurations自体が出てこないのだ。

こうなるとインポートしたプロジェクトなどであらかじめヘッダーファイルがexludeされている場合、eclipse上で元にもどせないのだ。

仕方がないので.cprojectを直接修正(※※)してincludeすることができたがこういうことが続くようだと後先不安である。

やはりコマンドラインビルドが正義なのだろうか。

※バージョンは
LPCXpresso:
Version: LPCXpresso v4.3.0 [Build 1023] [2012-09-19]

※※具体的には
cproject > storageModule[moduleId="org.eclipse.cdt.core.settings"]>
cconfiguration[id="com.crt.advproject.config.exe.debug.1584568070"] >
storageModule[moduleId="cdtBuildSystem"] > configuration > sourceEntries >
entry[name="driver"]
のexcludeingからincludeしたいヘッダファイル名を除いた。

Posted in NXP | Leave a comment

LPC11C24でUART

cf.http://www.nxp.com/documents/data_sheet/LPC11CX2_CX4.pdf

データシートよりP1_6がRXD、P1_7がTXDである。

シリアルポートとクロス接続。もちろんGNDも繋ぐ。

サンプルプロジェクトのuartをビルドして書き込み。

ボーレートなどの設定は以下の通り。

単なるエコーバックのプログラムなので入力した文字がそのまま表示されればOK.

==

※RS485について

はじめ、データシートにはRS485サポートなどと書かれていたので通常のTTLレベルの出力はないのかと勘違いしてしまったのだが標準の動作がTTLレベルの出力のようだ。

データシートを読んだところ差動出力に相当するピンがないのでCANのようにレベル変換までの仕組みはなく485のプロトコルのサポートまでがあるということのようだ。
(RTSピンで送受信方向の決定を行うらしい cf.http://www.nxp.com/documents/user_manual/UM10398.pdf P.191)

デモプロジェクト(rs485)でも485のポートを使えとは書いておらず2枚ボードを使用して送受信を行えと書いてあるので多分そういうことなのだろう。

暇があれば検証したい。

Posted in LPC11C24, NXP | Leave a comment

LPC11C24評価ボードのCAN機能

秋月で売っていたLPC11C24評価ボードLPCXpressoBoard OM13012を試してみた。
cf.http://akizukidenshi.com/catalog/g/gM-05090/

C:\nxp\LPCXpresso_4.3.0_1023\lpcxpresso\Examples\NXP\LPC1000\LPC11xxの

NXP_LPCXpresso11C24_2011-01-27.zip

をLPCXpressoでImport。

can_onchipプロジェクトをビルドしてcan_onchip\Debug\can_onchip.axfをProgram FlashするとCANのサンプルプログラムが動作する

can_onchip_readme.txtによるとボーレート125Kbpsで"TEST"というデータを送ってくれるようだ。しかしメッセージIDの指定がない・・・

CAN Configuration:
CAN bus baudrate: 125kbps

Sample Project Details:

1.	Upon reset, the LPC11C00 will send a simple CAN frame
	using the on-chip CAN drivers. It will send a CAN frame
	with its data contents of "TEST".

ロジアナでみてみたところ、ちゃんと出力されているのが分かった。(ちなみにロジアナの接続はCAN_LをGNDとして、CAN_Hを測定。それをReverseしたものをプロトコルアナライザへという流れ)

ちなみにメッセージIDは0x345だった。

終端抵抗は内部でもっているようで測定したところキッチリ120Ωあった。

とりあえずは以上。

ARMの環境をいくつか試しているがNXPがExampleの説明が親切だったり公式の開発環境がeclipseベースでコード制限も128kbまでと余裕があったりするので割と取っ掛かりやすそうである。

Posted in CAN, LPC11C24, NXP | Leave a comment

LPC1114FN28/102のLチカまで(FlashMagic)

USBシリアル変換モジュール(FT232RL)をPCに接続。ドライバのインストールやポートの確認は済んでいるものとする。

マイコン(LPC1114FN28/102)とUSBシリアル変換モジュール(FT232RL)を接続する
cf. http://akizukidenshi.com/catalog/g/gK-01977

  • Vss(22)とGND
  • PIC0_1(24)とGND
  • TXD(16)とRXD
  • RXD(15)とTXD
  • Vdd(21)と3V3
  1. 接続例

FlashMagicのインストール
cf. http://www.flashmagictool.com/

FlashMagicの起動

  • 下図のように設定(COM Portは個別の環境に合わせる)

  • これでStartボタンを押したときに処理が開始されることを確認する
  • ※エラーになる場合は他のソフトがポートを掴んでいないか確認。
  • ※PIC0_1(24)をGNDに繋げた後、Vdd(21)と3V3をつなげる必要があるので注意
    (もしくはPIC0_1(24)をGNDに繋げた状態で、リセット(P0_0(23)を一瞬LOWにする)してもよい。するとISPモードで起動する。)

正常に完了した場合はステータスバーにFinishedとでる

次にStep3のHex Fileを選択する。(添付のled.hexを使用)

led

再度、Startで書き込み

完了したら

  • PIC0_1(24)とGNDを外す
  • PIN1_5(14)、GND間にLEDをつける(抵抗も適宜)
  • Vss(22)ピンの接続を一度切ってから再度接続すると書き込んだプログラムが起動し、LEDが点滅するのを確認できる。

hexファイルの作り方は別途解説予定。

更新:20130810:hexファイルが怪しいのでelm-chanさんのソースからビルドしたものに変更。
cf.http://elm-chan.org/junk/32bit/report.html

Posted in LPC1114FN28, NXP | 3 Comments

CentOS5のsamba3xでnetbiosの名前解決

インストール時にServerパッケージを選択。
ホスト名は DHCPに任せず手動設定する。

既存のsambaを削除
yum -y remove samba*

samba3xを追加
yum -y install samba3x*

nmbの起動
/etc/init.d/nmb start

・常時起動は
chkconfig nmb on

iptablesを切る。(外向けでないなら)
/etc/init.d/iptables stop

※常時オフは
chkconfig iptables off

Windowsから解決したいだけなら以上で完了。

/etc/nsswitch.confを編集
host:s files dns

hosts:  files wins dns
とする

以上でLinuxからも解決できるようになる。 (ファイル保存後から有効)

しかしlinuxからホスト名でpingを叩いてみるとわかるが開始するまでが非常に遅い(10秒ほど)。得られたIPから逆引きで正式なホスト名を取得しようとするため。
※ ping www.google.comなどとしてみるとよい

なのでpingしたいときは-nオプションをつけるとよい
ping -n hostname

で3xだとnmblookupがないんだがどうすればいいのか・・・

Posted in CentOS | Leave a comment

AutoHotKeyで連続入力が反映されない

たとえばメモ帳でCtrl+Hを押しっぱなしにして連続で削除しようとすると何文字目かで置換ウィンドウが開いてしまっていた。

原因はMicrosoftのマウス・キーボード共有ソフトのMicrosoft Garage Mouse without Bordersだった。

キーフックする系のアプリはなにかとややこしい。

Posted in AutoHotKey, トラブルシューティング | Leave a comment

centos5でwindowsから名前解決(簡易)

逆は考えない

  1. centos5をインストール host名は指定する。Serverを選ぶ。
  2. sambaをインストール yum -y install samba
  3. sambaを起動 /etc/init.d/smb start
  4. このままだと自動起動しないので設定 chkconfig smb on
  5. iptablesを切る。 /etc/init.d/iptables stop
  6. iptablesの自動起動を切る。 chkconfig iptables off

以上

Posted in CentOS, Linux, メモ | Leave a comment

Chromeで肝心のGoogleのサービスが遅い場合の対策案

Chromeの起動オプションに以下を追加で解決。

--ssl-version-max=tls1

簡単な経緯:

  1. ChromeでGmailなどのhttpsを使うサービスが見れない。IEでは見れる。
  2. IEでtls1.1をオンにしたらIEでも見れない。
  3. Chromeでsslの最大バージョン指定(上記)をしたら見れるようになった。解決。
  4. 起動オプション指定するのがめんどくさい
  5. vpsにsquidを立てて経由するとOKということが判明(SSL時のみ使用するようにした)
  6. 最終的にPC->Lan内Squid(認証不要)->VPSのSquid(要認証)->googleのサーバ
    という形式にした。そこまでしてchromeが使いたいのだろうか・・・
    ちなみにLan内Squid設定の際、SELinuxにPermission Deniedとされ苦しめられた。
  7. 最終的には
    C:\Users\ユーザ名\AppData\Local\Google\Chrome\Application\
    にてchrome.exeのショートカットを作成。プロパティのリンク先末尾に冒頭の起動オプションを追加する。ショートカットを右クリックしてタスクバーに表示。以上でもっとも扱いやすい状態になった。


プロパイダーがJCOMなのだがWiMAXでみると普通に使えるのでおそらくプロパイダー側のtls周りが対応してないということだろうか。

cf.http://code.google.com/p/chromium/issues/detail?id=142748

追加:

それでもGoogle検索の重さが変わらなかったので(反応したり反応しなかったり)、アプローチを変えてみた。
Chromeの検索エンジンの編集でGoogleのデフォルトが以下の通りのURLなのだが、
{google:baseURL}search?q=%s&{google:RLZ}{google:acceptedSuggestion}{google:originalQueryForSuggestion}{google:searchFieldtrialParameter}sourceid=chrome&ie={inputEncoding}

シンプルな↓に変更。これでしばらく様子を見てみる。

http://www.google.co.jp/search?q=%s

Posted in Google Chrome, トラブルシューティング | Leave a comment