2008/04/29(火)MegaAVR ADCの使い方

基本

データシート嫁。サンプルコードから盗み取るでもOK。


変換タイミング

ADCEN直後はアナログ回路の初期化で+12クロックを必要とします。サンプル&ホールド処理期間が+12クロックと見てよいでしょう。

通常時のS/Hは、1.5クロックを要します。電圧を保持するコンデンサは、14pFで、入力抵抗が1~100kΩある模様。キャパシタは(Vcc/2)と繋がっている模様なので、対GND電位ではない。

sample&hold time

14pF, ドライブ側の出力インピーダンスを10kΩとして, 110kΩで充電すると,

\tau = CR = 14\times10^{-12}  \times 110\times10^3 = 1540 \times 10^{-9} = 1.54 uSec

となります. 72%程度のチャージができる時間だったはず..なので、コレよりも数倍の時間を用意すべきです。200kHzが上限となっていたのですが, 時間にすると5uSecですね.上記の仮定から, おおよそ妥当な値と思います.

今回は, 7.3728MHzのCKを6分周して, 115.2Hzとするので, チャージ時間は十分でしょう.出力インピーダンスは... 場所によっては50kΩ程度になるのですが,まぁ大丈夫でしょう. (τ=2.1uSec)

2008/04/29(火)mimetexの導入

導入方法

公式blogのマニュアルページに記載があります.設定方法は、こちらに, 記法についてはこちらに記載があります.

特に書くことも無いので、導入記録だけ...

$ unzip mimetex

$ cd mimetex

$ gcc -O2 -DGIF mimetex.c gifsave.c -lm -o mimetex.cgi

$ mv mimetex.cgi ~/public_html/adiary/mimetex/

TeX記法

[[tex:f=\frac{1}{\sqrt(x)}]]

という感じで, '[[~]]'で囲みましょう.

f=\frac{1}{\sqrt(x)}

こんなのが得られます. フォントが汚い気がするのだけれどネェ...

2008/04/23(水)オリゲーフェスタ

イベント

オリゲー・フェスタ☆68・第11回に一般参加を予定。

この、 「オリゲーフェスタ☆68」出展キャンペーン開催中!(丸文株式会社様)という企業参加を見て、申し込んでみたところチケットをいただけるということで、見に行ってきます。Makeのほうも楽しそうだったようですが、展示側と一般参加とでは、視点も違うでしょう。それでも、刺激をもらえるという甘い期待をもって行ってこようかと。

スレを見ると、二次会が17時から。ということは終わりは15~16時くらいかな?始まりは何時だろう。時間情報が書いてないwww

適当に行って、昼前後から最後までぶらついているのがいいのかなぁ。つか、一泊いらないな。要らないわ。4日の夜に実家に帰って6日にもどるか。そうしよう。前半一週間は掃除と自分のメンテだな。

技術情報無くてスマン・・・。

2008/04/20(日)下まわり実装完了

前書き

ようやく、動作確認ができました。日々の生活リズムとか健康状態が重要ですネ。

もう少しだけ綺麗にしてからコードを公開します。ベースはあきぼうさんところから拾いましたが、誰が書いても同じようなコードになるのでアレですね。あと、インプリされていたコードのうち、Read系が壊滅的でした。自前のアセンブリコードを参照しつつ修正してなんとか動作にこぎつけました。データシートも見ずにやっていたのが最悪でした(^^;

あと、少しでも疑ったときには、そのコード全部書き直すつもりで取り組む必要があると認識しました。もう少しメジャーな公開されたライブラリを持ってくるほうが良かったですね。個人で情報を公開されていることについては、非常にありがたいので、これもまた個人ならでは、ということで。

基本機能

動作確認済み

基本、データビットは4ビットです。任意のビットから連続した4bitで動作可能です。アセンブリリストを見ると、少し冗長なのがきになりますが、アセンブラで書かないときついでしょう。

8ビットコードもありますが、動作確認できていません。リード系も実装しておきますかねぇ。

  • 初期化処理*1
  • コマンドライト
  • データライト
  • コマンドリード*2

予定とか、仕様妄想

putchでもカーソル設定を毎回読んでいる実装なので、コレを修正する予定。コンソール出力イメージで使うケースと、ユーザで表示位置・文字数を全部調整したい場合とで切り替えたいでしょうし、マクロ化してしまうか、関数を分けるかしたほうがいいでしょうねぇ。個人的には、コンソール利用は殆ど無いと思うので、マクロで切って、標準はユーザでカーソル位置管理を任せたほうがよいでしょうね。


*1 : ポートの設定はユーザコードにて実施要。

*2 : 現状ステータスビットだけ確認。コマンド・データの切り替えも現状ユーザコードにて実装要。

ケミコンの性能回復

nabeさんところのヘッドフォンアンプ記事に記載がありましたが、耐圧近傍で100h程度のエージングしないといけないのだとか。

今までそういうのは全くやってこなかったので、実は結構な損をしていたのかもしれませんねぇ。電源用途ばかりなので、A&V関係の製作は殆どありませんが。

そういえば、セレクタつきアンプってどうしたっけ....。どこかの箱に入ったままお蔵入りかも。メインアンプを取っ払ったから復帰させてもいいかな。

2008/04/17(木)[雑]LCDライブラリ自作(失敗

拙作ルーチンの移植~失敗(ぉ

あきぼう氏のavrgccでアセンブラを使うを参照し、アセンブラでライブラリを作成します。

;----------------------------------------
;LCD_WriteCMD: LCDへコマンド1Byte送信
;引数: register::LCD_DATA
;返値: なし
;----------
LCD_WriteCMD:
	rcall	LCD_WaitBusy	; Wait for LCD BUSY
	SWAP	LCD_DATA
	RCALL	LCD_WriteCMDn	; $+1?
LCD_WriteCMDn:
	mov	tmp, LCD_DATA
	andi	tmp, 0x0F
	ori	tmp, (ID_DATA)	; P.U.
	out	PORTD, tmp	; RS,R/W set
	sbi	PORTD, LCD_E	; 2cycle, E Hi
	rjmp	PC+1
	SWAP	LCD_DATA
	cbi	PORTD, LCD_E	; 2cycle, E Lo
	ret

これ*1をエイヤこらどっこいしょとgcc向けにポーティングしようとして挫折。寝る前にさくっと終わるならいいかな?と思っていたけれども甘かった。いきなり汎用化記述を始めたのが敗因だなw。使用しているポートも変わるので、いっそのこと汎用化しようなんて考えたのが悪かった。

まぁ、寝不足に疲れのたまった脳では効率悪すぎたか(言い訳


氏のライブラリを伸ばして、コマンド待ちルーチン・データ入力ルーチンを追加することにしますかね。ウェイト部分をコマンドリードしてBUSY消えるのを待てばいいだけだしね。gccが吐き出したコードを見て、すげぇむだがあるようならアセンブラ化してしまいましょう。ただし、ユーザ定義のポート・ビットに耐えないといけないので、Cのままのほうが互換性は高そうですけれど・・・。無理にアセンブラ化しなくていいかなぁ・・。どうせLCDモジュールの処理待ちで待ち時間がかなりかかるはずだし。

ということはこの2時間ばかり捨てたということか('AP

*1 : もちろんサブルーチン一個ではないです... 入れ子で読んでいたので結局まとめて移植しないと動かないという(笑