USBProg組み立て~動作確認
以前も紹介しましたUSBProgの続きです。
↓↓
Eclipse ARM 開発環境 YAGARTOインストール記 2009-06-09 12:05
USBProg-OpenOCD到着 2009-06-16 18:23
USBProg-OCD変換アダプタ 2009-06-29 24:03
今回は組み立てかか基板の動作確認までを行います。
途中でちょっとハードルがありましたのでその越え方もご紹介しますのでご参考ください。
さーって書込みのテスト
USBProgの公式(?)情報ではflashtoolのバージョンは0.1.0
のものですが下記に0.1.8がありましたのでこちら
を使ってみることにしました(後で変更あり
→はまり2
USBProgをPCに接続する前に、このセットアップファイルを事前にインストールしておきます。
ただしこの状態でUSBProgを接続してもlibusb0.sysというデバイスドライバを要求されるので事前に下記のファイルをダウンロードして解凍しておく↓↓ ←はまり1
ファームの更新時はJP3の2-3品をショートさせる(Windows使用時は必要のようです)と赤LEDが点灯状態となってuploadモードとなる。
リストからボードとLEDBLINKを選択してuploadすればよい。
ところがSuccess!となった後JP外してUSBProg再起動かけてもLEDBLINKが始まらない。
それどころかUSBに接続したときにボードを認識しない。完全に動作がおかしいようだ。 ← はまり2
答えは意外と簡単でした。表示上は成功の用でもuploadは結構時間が必要でホントは完了していないのに完了しているという表示の(?)不具合があるようでFlashtoolをさらに最新のv0.3にすることでちゃんとupload慣用までのステータスを確認できます。
ダウンロード先は↓です
参考情報↓
http://forum.embedded-projects.net/viewtopic.php?id=81
↑V0.3の完了時の画面
ということで、結局V0.3のインストーラーとlibusb0.sysのバイナリーを落とすだけでよかったのかなーという気がします。
↓LEDBLINKの様子(フレーレートが低いのでLEDの点滅が一定間隔ではないように見えますがちゃんと一定間隔で点滅してます)
↓upload中のステータス表示(upload押下直後から録画)
といった感じで無事ボードの動作確認ができました![]()
それからUSBProgの”usbprog_base.hex”を書き換えられないという方のための情報です(未確認)
http://forum.embedded-projects.net/viewtopic.php?id=694
↑bootloaderが入っていないボードは外付けで入れる必要があるとのこと
http://www.openocd.de/index.php?page_id=166
↑外部ISPでの書き込み方の紹介
次はいよいよ変換アダプタを作成せねば!!
組込みエンジニア集まれ!
アメブロに組込みエンジニアのコミュニティがなかったので作りました。
やっと携帯対応になったので改めて告知します(^^)
興味がある程度のレベルから達人レベルの方までいろんなスキルやいろんな立場の方々が気軽に楽しく質問や意見・情報交換ができる場になればと思います。
お気軽にご参加下さい(^-^)
QTouchソフトウェア概要
今回はQTouchライブラリーのソフトウェアの概要的なまとめです。
User Guideは45ページありますが、まとめると下記のことがほぼ全てです。残りの知識はexampleから知識を得ればよいと思います。
下記ユーザーガイドのサンプルそのままです。
4.9 Example Host Application
The following code sample shows how a host application could configure and use the Atmel
Touch Library.
/* flag set by timer ISR when it’s time to measure touch */
static uint8_t time_to_measure_touch = 0u;
/* current time, set by timer ISR */
uint16_t current_time_ms = 0;
void main( void )
{
/* initialise host app, pins, watchdog, etc */
init_system();
/* enable slider */
qt_enable_slider( CHANNEL_0, CHANNEL_2, NO_AKS_GROUP, 16,
HYST_6_25, RES_8_BIT, 0 );
/* enable rotor */
qt_enable_rotor( CHANNEL_3, CHANNEL_5, NO_AKS_GROUP, 16,
HYST_6_25, RES_8_BIT, 0 );
/* enable keys */
qt_enable_key( CHANNEL_6, AKS_GROUP_2, 10, HYST_6_25 );
qt_enable_key( CHANNEL_7, AKS_GROUP_2, 10, HYST_6_25 );
/* initialise touch sensing */
qt_init_sensing();
/* configure timer ISR to fire regularly */
init_timer_isr();
/* enable interrupts */
__enable_interrupt();
/* loop forever */
for( ; ; )
{
/* test flag: is it time to measure touch? */
if( time_to_measure_touch )
{
/* clear flag: it’s time to measure touch */
time_to_measure_touch = 0; /* <- ここ */
/* measure touch sensors */
qt_measure_sensors( current_time_ms );
}
/* host application code goes here */
}
}
/* timer ISR: fires every MEASUREMENT_PERIOD_MS */
void timer_isr( void )
{
/* set flag: it’s time to measure touch */
time_to_measure_touch = 1u;
/* update the current time */
current_time_ms += MEASUREMENT_PERIOD_MS;
}
といった感じでソフトウェア的には割りと簡単に実装できる仕様になっているようです。
コールバック関数も用意されてオリジナルアルゴリズムも搭載できるようになっているところがいいですねー
このサンプルでちょっと気になる部分が/* <- ここ */の行が割り込み処理で書換えが行われる関数にmain側で書込みを行っています。このあたりの動作はクリティカルセクションと呼ばれてmain側で一度割込みを一度禁止させた後処理を行う方が、タイミング系の不具合が発生しなくなるので品質が上がります。
ただ今回はint型変数なので、1命令で処理できるので問題ない可能性が高いです。ただint型以外では問題となる可能性が高いので分かっていてクリティカル処理の省略をしている場合は良いですが、そうでない場合はご注意ください。
ということでここまで
ハードについてもまとめたいですが、今のところ見つかってないです(キーの直径とか、クリアランス幅とか)。このあたりはPSoCのドキュメントがしっかりしていたのでそちらを参照してもよいですが、ここはATMELへの期待としてATMEL内で探してみたいですね。
引き続き探してみます。
同時にここにあるよという意見も募集してます^^;
蛇足ですがアメーバBlogでソースを書く際のインデントの作り方が(ちょっと前に)わかったので今回つかってます。単純に<pre>タグを使います。またタブは8タブが一般なので4スペで書きます。







