かもめ日記

最近の記事

炭素皮膜抵抗でR=2Rラダーを適当にやったらどうなるのかやってみた

A/Dの中心電圧をずらすための分圧を手でボリューム回すのがめんどいので、 どうせ計測精度もたかが知れてるし、適当にR=2Rでやったらどうなるかと思ってやってみた。

抵抗は1Kと2Kの炭素皮膜。選別なし。

output.pdf

まぁ、いくらなんでも話にならないという事が解った。ってか、なんで減るかなwwwなにか間違ってる?www

続きを読む... ( Posted at 2008年9月28日 01:07 | C0 | T0 )

tiny2313で負電源を作る

まぁ、なんの事はないチャージポンプなのだが。ためしに8bitタイマと高速PWMで4KHzくらいのパルス作ってやってみた。

チャージ電流を稼ぐ為にAVRから直接チャージしないで適当な素性不明のトランジスタを使ってスイッチしてみたのだが、 コンデンサ容量に10uF,47uF,100uFどれ使っても-3.6V程度しか出ない。 0.1uFでも試して見たいが、あいにくリード付の0.1uFは在庫が掃けてしまって無い。

むー。と悩んでふと気づいたが、整流に使ったショットキーダイオードの順方向の降下が1.4vもありやがったwww。 って事はいい感じで動いているって事なわけで、って事は元の電源にレギュレータ通す前の9V をくれてやるとか、いっそ12VのACアダプタから入れてあげれば、買ったまま放置してある液晶を駆動するのに十分というわけだな。 (うそうそ、それなら9Vをもう一個用意してGND,-9V間に繋いだ方が早い)

続きを読む... ( Posted at 2008年9月16日 21:55 | C0 | T0 )

i2c-tiny-usb

注文しておいたtiny45が届いたので、I2C-tiny-USBを組み立ててみた。 tiny45は少ピンな割にflashのサイズが大きいので結構おもしろそうだね。

20080915154301.jpg

高電圧ライタを持っていないので、NRSTを潰してしまうとファームをしくじった時に困るとの判断から、サイズが大きくなるのを覚悟でオシレータを使ってみた。 が、組み上げた後になって、20MHzのSMDのオシレータを持っていた事に気づきションボリ。

なにはともあれ、これでPCから手軽にI2C叩けるようになったのでいちいち全部の基板にUSBの口付ける必要がなくなったし、I2Cデバイスのデバッグも楽になる事だろう。

TODO 1. パイロットランプ付け忘れたので追加する。

続きを読む... ( Posted at 2008年9月15日 20:24 | C0 | T0 )

Mega88の実験基板

USI使ったI2CでSlave->Master方向がどうにもおかしいので気分転換に半端になったMega88 で実験基板を作った。

20080914133343.jpg

発泡酒飲みながら思いつくままに適当にやってたら、E2PROMは乗っかるはFT232モジュールは乗っかるは、ややフリーダムな感じになってしまった、 しかも操作面とコネクタ面が途中で向き変わってしまってるし。

ジャンパピンは写真の位置でISP用、90度回転でSPIスレーブ用。要はpin5をRSTとSSの間で切り替えるもの。

ディップスイッチは

  1. I2C-SCLプルアップ有効/無効
  2. I2C-SDAプルアップ有効/無効
  3. I2C-VCC接続,切断
  4. FT232からの電源供給 ON/OFF

ピンコネクタはMCU側から

  1. PORTC
  2. PORTB
  3. PORTD

横向いてるピンヘッダはUARTのGND,Rxd,Txd。 4x2ピンヘッダはI2C VCC,GND,SCL,SDA。

続きを読む... ( Posted at 2008年9月14日 14:15 | C0 | T0 )

tiny-logicscanner

ただピンを観測してUARTで送り返すだけなので、ロジアナなどとは呼べず、 「スキャナ」と呼ぶ事にしました。

20080909012038.jpg

端子は左から 1.USART Rx 2.USART Tx 3.GND 4.VCC 5.NC 6..13.プローブ bit7..bit0 14.TGND

トリガ条件検出でLEDが光り、タクトスイッチで中断。

制御はすべてUARTから端末で行う。 ? Print this message. mXXXXXXXX Set trigger mask. tXXXXXXXX Set trigger value. eXXXXXXXX Set enable channel. p Print GPIO status. r Run scanner

Run後、信号のエッジを記録しつづけ、キャンセルまたはバッファフルで結果をUSARTに戻す。 以下はI2CのSDA(bit0),SCL(bit1)を観測した結果。

    -------X  (0x01)  - 0xFF
    ------XX  (0x03)  - 0xFF  SCLHi中にSDAHi→Loなので開始条件
    ------X-  (0x02)  - 0x06
    --------  (0x00)  - 0xFF
    ------X-  (0x02)  - 0x06    0
    --------  (0x00)  - 0x06
    ------X-  (0x02)  - 0x05    0
    --------  (0x00)  - 0x01
    -------X  (0x01)  - 0x04
    ------XX  (0x03)  - 0x06    1
    -------X  (0x01)  - 0x01
    --------  (0x00)  - 0x04
    ------X-  (0x02)  - 0x06    0
    -------X  (0x01)  - 0x05
    ------XX  (0x03)  - 0x06    1
    -------X  (0x01)  - 0x06
    ------XX  (0x03)  - 0x05    1
    -------X  (0x01)  - 0x06
    ------XX  (0x03)  - 0x05    1
    -------X  (0x01)  - 0x01
    --------  (0x00)  - 0x05
    ------X-  (0x02)  - 0x05    0  0x2e | WRITE でスレーブアドレスは送信されてる
    --------  (0x00)  - 0x01
    -------X  (0x01)  - 0x05
    ------XX  (0x03)  - 0x05  スレーブがSDAをLoに引いてるはずなのになぜかNACK
    -------X  (0x01)  - 0x01
    --------  (0x00)  - 0xFF
    ------X-  (0x02)  - 0x06
    ------XX  (0x03)  - 0xFF SCLHi中にSDALo->Hiなので停止条件
    ------X-  (0x02)  - 0x06  ここでまた開始
    --------  (0x00)  - 0xFF
    ------X-  (0x02)  - 0x06
    --------  (0x00)  - 0x05
    ------X-  (0x02)  - 0x06
    -------X  (0x01)  - 0x05
    ------XX  (0x03)  - 0x06
    --------  (0x00)  - 0x05
    ------X-  (0x02)  - 0x06
    -------X  (0x01)  - 0x06
    ------XX  (0x03)  - 0x05
    -------X  (0x01)  - 0x06
    ------XX  (0x03)  - 0x05
    -------X  (0x01)  - 0x06
    ------XX  (0x03)  - 0x06
    -------X  (0x01)  - 0x05                                                                                                                        
    ------XX  (0x03)  - 0x06                                                                                                                        
    -------X  (0x01)  - 0x05                                                                                                                        
    ------XX  (0x03)  - 0x06                                                                                                                        
    -------X  (0x01)  - 0xFF

スレーブもトレースしてACK返す処理に飛び込んで、 SDAのPORTを0に、DDRを1にしているのは確認済み。 つーか、USIDRも0にしてるからSDAがHiになる要因はソフト的には無いはず。

ACK返し終わったらオーバーフローに入ってきているのも確認しているのだが… Loに引ききれて無いか、DDRの設定方法でなにか勘違いしているのか。 SCLがLoでホールドされていなくてSDAの設定が間に合ってないのか。

続きを読む... ( Posted at 2008年9月10日 16:47 | C0 | T0 )

ロジックスキャナ

LCD制御してるほうのtiny2313はもうピンがいっぱいのなで、I2Cの線以外にデバッグ手段が無いのだが、しかしI2Cのマスタ->スレーブへの送信はうまく行っているようなのだが、スレーブ->マスタがかなりおかしい。

つまり、デバッグ手段が無い。

そこでまずはI2C側のデバッグをしなくてはいけないわけだが、ロジアナなんて持ってないし、 液晶が動いていないという事は信号を表示する方法が無いわけで…

というわけで、tiny231つかって、PORTBの状態を監視するのを作ってみた。 tiny2313はRAMが小さいが、エッジと同一レベルの継続時間だけを記録するようにすれば、 8チャンネル64エッジ分記録できた 。たぶん「無いより少しはまし」程度の役には立ってくれると思う。

こいつの制御はuart経由で行い、トリガのマスクと瞬間値を指定してRUNをかけると、 トリガーを検出して64エッジ検出するか、停止ボタンが押されるまで計測を行い、 結果をuartにダンプする。

ソースは後で。

続きを読む... ( Posted at 2008年9月 6日 15:16 | C0 | T0 )

I2C-LCDデバッグ中

秋月の128x64液晶を買ってきたのだが、どうしてもマイコン側のピンが足りないので、 ビットレートを犠牲にしてI2C経由でコントロールする事にした。 うまく行ったら、他の低速ペリフェラルも全部I2Cにぶら下げてしまう予定。

で、そのデバッグ風景。 左にあるのがI2C-LCDコントローラ。右側のはこないだつくったMega644pにFORTH積んだ基板。

20080831132607.jpg

右の基板にシリアルで入って、

   00 ( prescaler ) 92 ( bitrate ) +twi
   twi.start
   hex
   2e 1 lshift twi.tx
   twi.stop
   twi.scan

とかやればMega644側にファーム焼き直さなくてもデバッグできるのは便利っちゃー便利なんだが。

手元にI2Cが増えていく事が予想されるので、i2c-tiny-usb作っておいてPCからi2c-toolsでやった方がきっともっと楽なんだろうな。 問題はTiny45が秋月で売ってないから、代わりにもったいないけどMega88使うか、 さもなきゃマルツで高いTiny45買うかなんだが… あるいは、i2c-tiny-usbのファームをシェイプアップして、ダブついてるTiny2313で動かすか…

あんまり、治具に時間かけたくないんだが、専用治具ってわけでもないからいっちょ作っておくか…


amforthが自己破壊しすぎ。別のインタプリタ探してこないとだめだな。 この際、手軽さ重視でBasicでもいいんだが。

続きを読む... ( Posted at 2008年8月31日 13:30 | C0 | T0 )

LCD2USBを組み立ててみた

LCD2USBを組み立ててみた。

20080829230424.jpg

Mega88を使って、ファームがうまく動いてくれなかったのでパッチが必要だったが、 割とすぐに動いてくれた。よかった。

写真は、LCD4Linuxを使ってロードメータとFreeRAM,PPPロード,時計の 4つの情報を表示しているところ。

LCD4Linuxでボタンを使うのが良く解らなかったので今は機能が無いが、 設定を書けば使えるようになるはず。

TODO

  1. スタンド付パネルを作る
  2. 配線面の保護と絶縁
  3. ボタンを使えるようにする
  4. UARTを引き出して、同時に使えるようにする

続きを読む... ( Posted at 2008年8月29日 23:29 | C0 | T0 )

amforth続き

IOポートの定義を作ったので、添付ライブラリからワードを登録していっている途中。

    > words
   .base calc-baudrate .res .( [undefined] nip tuck within? -misc ftgl fclr? fset? fclr fset bv flag: -flags fsm: >ram tuck i2@ perform wide _fsm_ cos sin sin0-360 sin0-90 sintab fm/mod sm/rem dabs ?negate ?dnegate dnegate u*/mod sqrt -math pin_low? pin_high? pin_input pin_output toggle low high portpin: __bitnames__ idump edump dump u0.r __dumper__ PINA DDRA PORTA PINB DDRB PORTB PINC DDRC PORTC PIND DDRD PORTD TIFR0 TIFR1 TIFR2 PCIFR EIFR EIMSK GPIOR0 EECR EEDR EEARL EEARH GTCCR TCCR0A TCCR0B TCNT0 OCR0A OCR0B GPIOR1 GPIOR2 SPCR SPSR SPDR ACSR OCDR SMCR MCUSR MCRCU SPMCSR SPL SPH SREG WDRCSR CLKPR PRR OSCCAL PCICR EICRA PCMSK0 PCMSK1 PCMSK2 TIMSK0 TIMSK1 TIMSK2 PCMSK3 ADCL ADCH ADCSRA ADCSRB ADMUX DIDR0 DIDR1 TCCR1A TCCR1B TCCR1C TCNT1L TCNT1H ICR1L ICR1H OCR1AL OCR1AH OCR1BL OCR1BH TCCR2A TCCR2B TCNT2 OCR2A OCR2B ASSR TWBR TWSR TWAR TWDR TWCR TWAMR UCSR0A UCSR0B UCSR0C UBBR0L UBRR0H UDR0 UCSR1A UCSR1B UCSR1C UBRR1L UBRR1H UDR1 _ioports_ TESTING } -> { ACTUAL-RESULTS ACTUAL-DEPTH ERROR EMPTY-STACK VERBOSE m+ 2! 2@ 2rot 2tuck 2nip 2rot 2swap 2over 2dup 2drop 2r> 2>r ms u.r ? >body true evaluate environment? aligned align restore-input save-input source-id ?stack ?pairs ?comp postpone to (to) value forget marker d2/ s>d up! up@ 0 1ms >< cmove> i! i@ unloop i sp! sp@ rp! rp@ +! rshift lshift 1- 1+ xor or and 2* 2/ invert um* um/mod m* + - log2 d< d> u> u< 0> 0< > < 0= = <> r@ >r r> rot drop over swap ?dup dup c@ c! ! @ e@ e! execute exit -int +int end-code code abort abort" [char] immediate recurse user constant variable [ ] ; :noname : does> create ?do leave +loop loop do again until repeat while begin then else if literal int! applturnkey >usart0 +usart0 baud0 tx0? tx0 rx0? rx0 is Rdefer Edefer words s" ." .s u. dinvert d- d+ d2* d>s j * defer@ defer! icompare find to value unused noop ver interpret depth rp0 sp sp0 cold pause quit place word /string source cscan parse number char refill accept cskip throw catch handler ' type count spaces space cr icount itype s, digit . sign #> #s # <# hold hld max min abs mod / negate u/mod */ /mod */mod turnkey heap edp bl hex decimal ['] , compile ( \ allot here head /key key? key emit? emit pad tibsize tib #tib >in cell+ cells base state f_cpu  ok
    > .res
    free FLASH cells       23999
    free RAM cells         3732
    used EEPROM cells      3023
    used data stack cells  0
    used return stack      10
    free return stack      70
    ok
    >

フラッシュのフットプリントがだいぶでかいです。

あと、フロー制御もUARTの割り込み駆動もしていないので、 行ごとにレスポンス待つチャットのできる端末を使うか、付属のツールじゃないとコードが流し込めません。

常用するにはちと厳しいぞと。

続きを読む... ( Posted at 2008年8月26日 20:21 | C1 | T0 )

amforth

某Interface誌のColdFire基板に入ってたSilenCも少し触っているのだが。 やはり、対話環境があると少しだけ遊んだり実験してみたりするのに楽ちんだわ。

というわけで、AVRにもなんか無いかなと探していたのだが、 FocyはあんなのFORTHじゃないし、そもそも対話環境が無いから脱落。 ホストで書いてから送り込むんだったら、Cで書いた方がましじゃないか?

んでもって、amforthってのがあるのを見つけてmega644p用にイメージつくって入れてみた。

見た目は昔ながらのフツーのFORTHでなかなかよさそうなのだが。

  1. スタックのアンダーフローをチェックしてないからうっかりするとどんどん変な事になっていく
  2. ワードを定義するとかならずflashに書かれる。ってか、「,」を実行する度に書かれるから書き込み回数がえらいことになるのでは?
  3. 残念ながらmega644p用のIOポートの定義が無いので、すぐにはIOを試せない。まぁ、自分で定義してもいいんだが。

どうせindirect-threadingになるんだし、実験用と考えると定義したワードはRAMにおいて、 ある程度動くのが解ったらまとめてflashに書くとかだとうれしいんだが。

やっぱmega88でやるか…あっちなら壊れても安いし。

続きを読む... ( Posted at 2008年8月25日 23:53 | C0 | T0 )

>>>もっと前の記事を見る...

seagull(かもめ)
体はおっさん、頭脳は子供のサラリーマンエンジニア。
Atom feed / Twitter / タスクリスト / GIT リポジトリ / ギャラリ

follow seagull_kamome at http://twitter.com
タグ クラウド
トピック
最近の記事
RSS feed meter for http://www.mitsuki.no-ip.com/~seagull/diary/
あわせて読みたい