http://www.wvshare.com/product/3.2inch-RPi-LCD-B.htm これっぽいものを ebay から買ってみた。2000円ぐらい http://www.ebay.com/itm/181663639529


320x240 WaveShare SpotPear V3 Touch panel control chip XPT2046 というやつ。ピクセル数的にものすごく解像度低いがとりあえず液晶を試してみたかった。

表示するまで

基本的には https://github.com/cdario/waveshare-3.5-Spotpear-for-Rpi これの通りするのだが、一部手順が古いためハマる。

fb0 -> fb1 に (HDMI からTFT側に)

sudo vi /usr/share/X11/xorg.conf.d/99-fbturbo.conf

FBTFT kernel module を使えるように firmware update をかける。ちなみにLinux のカーネルバージョンが4系になる。SPI の DMA 転送が有効化される。

sudo REPO_URI=https://github.com/notro/rpi-firmware rpi-update

これは 50MB ぐらいダウンロードする。が https://github.com/notro/rpi-firmware から前もって Download Zip したやつを使うこともできる。notro-rpi-firmware-master.zip としてファイルをダウンロードして、ローカルネットワーク内から scp で転送しておいたとする、そのうえで

unzip -d "/tmp/rpi-firmware"  notro-rpi-firmware-master.zip 
sudo FW_REPOLOCAL="/tmp/rpi-firmware/rpi-firmware-master" SKIP_DOWNLOAD=1 rpi-update

とすれば良い。

/etc/modules に追記

spi-bcm2708

fbtft_device name=waveshare32b gpios=dc:22,reset:27 speed=48000000

waveshare32b width=320 height=240 buswidth=8 init=-1,0xCB,0x39,0x2C,0x00,0x34,0x02,-1,0xCF,0x00,0XC1,0X30,-1,0xE8,0x85,0x00,0x78,-1,0xEA,0x00,0x00,-1,0xED,0x64,0x03,0X12,0X81,-1,0xF7,0x20,-1,0xC0,0x23,-1,0xC1,0x10,-1,0xC5,0x3e,0x28,-1,0xC7,0x86,-1,0x36,0x28,-1,0x3A,0x55,-1,0xB1,0x00,0x18,-1,0xB6,0x08,0x82,0x27,-1,0xF2,0x00,-1,0x26,0x01,-1,0xE0,0x0F,0x31,0x2B,0x0C,0x0E,0x08,0x4E,0xF1,0x37,0x07,0x10,0x03,0x0E,0x09,0x00,-1,0XE1,0x00,0x0E,0x14,0x03,0x11,0x07,0x31,0xC1,0x48,0x08,0x0F,0x0C,0x31,0x36,0x0F,-1,0x11,-2,120,-1,0x29,-1,0x2c,-3

/boot/cmdline.txt を変更

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait fbtft_device.custom fbtft_device.name=waveshare32b fbtft_device.gpios=dc:22,reset:27 fbtft_device.bgr=1 fbtft_device.speed=48000000 fbcon=map:10 fbcon=font:ProFont6x11 logo.nologo dma.dmachans=0x7f35 console=tty1 consoleblank=0 fbtft_device.fps=50 fbtft_device.rotate=90

ここまでやって reboot すればTFT側に表示がでる、はず。

タッチパネルを有効にする

書いてある通りパッケージをいれる。

sudo apt-get -y install xinput evtest libts-bin
wget http://adafruit-download.s3.amazonaws.com/xinput-calibrator_0.7.5-1_armhf.deb

sudo dpkg -i -B xinput-calibrator_0.7.5-1_armhf.deb
sudo rm /usr/share/X11/xorg.conf.d/99-calibration.conf
sudo reboot


/boot/config.txt に追記。XPT2046ADS7846 (-> TSC2046) 互換の中華コントローラらしいので ADS7846 を指定したらいいっぽい?

dtoverlay=ads7846,speed=1000000,penirq=17,swapxy=1

/etc/X11/xinit/xinitrc に追加 (軸補正)

DISPLAY=:0.0 xinput -set-prop "ADS7846 Touchscreen" "Evdev Axis Inversion" 1 0

startx

dpi が恐しく低いので指定して起動したほうが良い。とはいえフォントサイズしか変化しないので、アイコンとかはデカいまま。

startx -- -dpi 60

タッチパネルキャリブレーションは以下でできるが、結果を conf に書いておかないとreboot時に失われる。

DISPLAY=:0.0 xinput_calibrator

備考

タッチパネル座標と画面座標をあわせるためには

  • /boot/cmdline.txt の fbtft_device.rotate=90
    • reboot 必要
  • /boot/config.txt の swapxy=1 (と rotate=...)
    • reboot 必要
  • "Evdev Axis Inversion" 1 0
    • X が起動していれば xinput -set-prop は即時反映されるので reboot いらない

あたりをしっかりする必要があるが、これが結構面倒で試行錯誤した。とはいえあんまりパターンがあるわけではないので適当にやれば良い。

links

ref. https://github.com/cdario/waveshare-3.5-Spotpear-for-Rpi
ref. https://github.com/notro/fbtft/issues/215
ref. http://www.circuitbasics.com/setup-lcd-touchscreen-raspberry-pi/
ref. http://www.circuitbasics.com/raspberry-pi-touchscreen-calibration-screen-rotation/

http://32bits.io/Arturo/ を使うといいっぽい。ino というコマンドがあったがメンテされてないので ano というフォークができたらしい。

使いかた

$ ano init

すると新規プロジェクトができる。

既存プロジェクトの場合、.ino ファイルは src ディレクトリ以下に入っている必要がある。

$ ano list-models
         yun: Arduino Yún
         uno: [DEFAULT] Arduino Uno
   diecimila: Arduino Duemilanove or Diecimila
        nano: Arduino Nano
        mega: Arduino Mega or Mega 2560
     megaADK: Arduino Mega ADK
    leonardo: Arduino Leonardo
       micro: Arduino Micro
     esplora: Arduino Esplora
        mini: Arduino Mini
    ethernet: Arduino Ethernet
         fio: Arduino Fio
          bt: Arduino BT
  LilyPadUSB: LilyPad Arduino USB
     lilypad: LilyPad Arduino
         pro: Arduino Pro or Pro Mini
    atmegang: Arduino NG or older
robotControl: Arduino Robot Control
  robotMotor: Arduino Robot Motor
       gemma: Arduino Gemma

で対応モデル名が出る。

nano 向けにビルドするにはオプションをつける。

$ ano build -m nano --cpu atmega328

アップロード(書きこみ)する場合は build を upload に変えて、-p でシリアルポートへのパスを指定する。ポート指定をつけないと勝手に推測して書きこもうとするが、意図せず違うデバイスに書きこむのを避けるためにも絶対に指定したほうが良い。

.ino とかやめたい場合

.ino はほぼ cpp だが include とかがないというなんか中途半端な状態のファイル型式になっている。

ano preproc src/sketch.ino をすると cpp の完全な形で吐いてくれるので、これを src/sketch.cpp として保存して .ino を消しさっても問題なくビルドできる。

ビルドプロセス

ちなみにおおまかなビルドプロセスは https://www.arduino.cc/en/Hacking/BuildProcess に書いてある

Arduino IDE はヘッダファイルなどのパスを解決しつつ .ino を .cpp に変換(ちょっと足すだけ)して avr-gcc している。

setup() と loop() の定義:
Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Arduino.h

HIGH とか LOW とか定数定義マクロもここに書いてある。
型のエイリアスもここで定義してある。

実際に実行している場所
Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/main.cpp

よくある main ループ。

いっぱいUSBシリアルを繋いでいるとどれがどれだかわからなくなる。

一旦ケーブルをはずして以下のワンライナーを実行する。

ruby -e 'print "Connect Arduino and type RET ";"/dev/tty*".tap{|x|proc{|a,_,b|puts b-a}[Dir[x],gets,Dir[x]]}'

Arduino を繋いで RET を押せば新規に接続されたやつが表示される

eBay 見つつ、電子部品を PayPal で決済しようとしたらカード会社側で決済を拒否というエラーがでた。

最近、中国からの商品を買いまくっていたので、誤検知かと思っていて、翌日電話しよう、と思った矢先、「【重要】楽天カードから緊急のご連絡」というメールを受信し、それには至急電話しろと書いてあったので、とりあえず電話してみた。

電話はなかなか繋がらなかった。

で、話を聞くと、どうやら本当に不正利用の形跡があったらしく、身に覚えのないカナダとアメリカのサイトで(いずれもエラーだったようだが) 与信のリクエストが飛んでいたらしい。つまり PayPal とか中国とかは関係なく、誤検知ではなかった。

ということでカード再発行になってしまった。1週間から10日ぐらいかかりますとのことだが、電気・水道・ケータイ・VPSなどインフラ支払いをこのカードでやっていたので大変大変面倒くさい。

よかったところ

  • 当日18時、19時の不正利用に対し少なくとも23時ぐらいには既にカード停止になったところ
  • 23時50分ぐらいに前述のメールがきたところ (こちらから電話しないとかかってくるらしい)
  • 途中、電話代がかかるので向こうからコールバックするとう申し出があったところ
  • 話がスムーズだったところ

わるかったところ

  • そもそも不正利用されたことが大変遺憾。
  • それなりに気をつけてるつもりだったので、心あたりは全くない。

思うところ

不正利用モニタリングの精度が高くてすごいな、と思った。ちょいちょい海外通販してるけど、特に不正利用検知とかされたことがなくて、モニタリングしていないんじゃないかと思っていたが、しっかりされてたみたい。

直近2日ぐらいの利用履歴を口頭で確認させられるので、細かいの買いまくってると面倒くさい。たまたま PayPal の決済履歴画面を開いていたのである程度スムーズだった。あと、直近でDMMで動画買ってなくてよかった。

新しいカード届いた

なぜセンス抵抗というものが必要なのだろうと疑問に思った。低抵抗で高精度なものは一般的な抵抗に比べると10倍から100倍ぐらいの価格になる。

一方でセンス抵抗を使うときに頻発するのが、パターンの配置に気をつけないとパターン自体の抵抗が影響するというやつで、そんなにパターンに抵抗があるならパターン自体で電流センスしたらいいのではないかと思っていた。

パターンの抵抗はどれぐらいか

電流センス抵抗(シャント抵抗)は普通10mΩとか、あるいはもっと低抵抗値のものが使われる。

銅箔パターンの抵抗値は配線のアスペクト比で決まる (ref. http://www.tij.co.jp/lsds/ti_ja/analog/powermanagement/hints/power_sel_hint52.page )

20°C のときの銅の電気抵抗率 1.68e-8、1oz (35μm) の銅箔パターンの場合、1:1 の比の場合 \( R = 1.68e-8 / 35e-6 = 0.48mΩ \)。

1:10 の比の場合は 0.48 * 10 で約5mΩの抵抗値を持つことになる。基板上のパターンで電流センス程度の値の任意の抵抗値を作るのは割と簡単そうである。

銅の温度特性

しかし銅を抵抗として使おうとすると温度特性が問題になる。銅の温度特性は 4.3e-3/°C で、温度が高くなるほど抵抗値が上がる。

これはかなり大きい変動で、±10%の範囲に納めるには温度変化が±23°Cに収まる必要がある。もし±1%程度の精度を求めるなら±2.3°Cという極めて安定した温度でなければいけない。

抵抗のデータシートに書いてある温度係数単位 ppm/℃になおすと、4300ppm/℃ となり、一般的な(高精度ではない)抵抗の±300ppm/℃と比べてもケタ違いに大きい。

まとめ

ということで、これではとても高精度な電流センスはできそうにないので、代用できるケースはとても限られそうということがわかった。


LTC3780を使った同期整流式DC/DCコンバータモジュールが気になったので買ってみた。ヒートシンクの下に FET が4つ隠れている。

スペック的には

  • 入力は 5〜32V
  • 出力は 2〜24V
  • 出力電流は最大14A
  • スイッチング周波数は200kHz
  • 4.5V 以下で出力停止

昇圧も降圧もできるので、一旦出力電圧を設定すると入力電圧範囲なら何も考えずその電圧がでる。

例によって 5V -> 12V の変換効率を調べてみた。

  • 2.5W -> 2.24W 89.6%
  • 5W -> 4.73W 94.6%
  • 10W -> 9.68W 96.8%
  • 15W -> 14.5W 96.6%
  • 20W -> 19.1W 95.5%
  • 25W -> 23.9W 95.6%
  • 30W -> 28.2W 94.0%
  • 35W -> 32.3W 92.3%
  • 40W -> 36.6W 91.5%
  • 45W -> 40W 88.8%
  • 50W -> 43.8W 87.6%

XL6009, LTC1871 と比べると10ポイントぐらい効率がいい。効率がいいのでそこそこ通電しても基板が全然熱くならない。

ただし2000円ぐらいする。LTC3780 がそもそも高価なのでこんなものだろう。この構成で自力で基板を起こしたらもっとかなり高額になってしまう。コストパフォーマンス的には XL6009 や LTC1871 は相当良いと思う。とはいえ高効率は何にも替えられない価値なので難しいところ。


正直そんなに変わらないんじゃないかと疑って計ってみたけど思いのほか差が大きかった。

中華互換 Arduino Nano を ebay で買ってみた 700円ぐらい。

Arduino 互換という意味ではもっと安いのもあるが、安いものは USB シリアル変換モジュールが中華チップなのでドライバのインストールとか挙動に不安がある。FTDI チップ搭載だとこれぐらいが最安っぽい。FTDI チップは偽物もあるらしく、ドライバ側で弾かれたりするみたいだが、今回買ったのは大丈夫だった。

USB Serial を別途用意するならもっとアホみたいに安いのがある (水晶やら何やらついててもAVR 単独で買うのと同じぐらい)。



今回買ったのはちゃんとブートローダーが書きこみ済みのもので、シリアルポート経由で書きこみができる。ただ、手元に Arduino IDE がないため、avrdude を直で読んで書きこんでみる。

最初適当にこんな感じにしてみたが失敗した。

$ avrdude -pm328p -cstk500v1 -P /dev/tty.usbserial-AL011AVX
avrdude: stk500_recv(): programmer is not responding

ボーレートがあってないとこうなる可能性がある。-b オプションをかえてみる。

$ avrdude -pm328p -cstk500v1 -P /dev/tty.usbserial-AL011AVX -b b57600
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.05s

avrdude: Device signature = 0x1e950f

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

とかなればOK (この例では書きこみまでやってない)


LED が4つ載っていて、TX RX PWR L となっている。最後の L ってなんだ?と思って回路図を見てみたが、単に PB5 に繋がっている LED らしい。デフォルトだとLチカが書きこまれているようでチカチカする。

Arduino Nano 3.1 (ATmega328P搭載) -

3.0 / 5.0

Arduino IDE でも Arduino Nano を指定して書きこむことができた。

最初なぜか Uno と勘違いして設定していて失敗しまくって、なんでだろう?ってなっていた。結局 Arduino.app/Contents/Java/hardware/arduino/avr/boards.txt を見て調べてる途中で気付いた。

Eagle で似たような回路及びボードレイアウトをコピーして配線する。

パネライズ(同じ基板を大きな基板に複数つくる) ではなく、似たような回路・ボードレイアウトを1つ作って、コピーを行なってからさらに配線を続けたい、という場合。

問題点

ボードレイアウトは、回路図を開いている状態だと、コンシステンシー維持のため、そのままではコピーができない。一方、回路図側側でコピーを行うと、部品の配置をイチからやりなおすハメになる。

解決方法

そのため、一旦回路図エディタを閉じ、回路図とのフィードバック維持を切る。

この状態だとボードレイアウトを全て選択してコピーして他の場所にペーストということができる。

これが終わったら、一旦ボードレイアウトを閉じて(閉じなくてもいいけど)、回路図エディタを開き、コピーした部分を選択して回路図側でもペーストする。

そしてボードレイアウトを再び開くが、普通はこの時点で「コンシステンシーが失われた」と怒られるので、ERC を行い、問題を特定する。

完全に回路図とボードで同じコピーを行なっていれば「different connections on pin and pad eagle」というエラーが支配的になるはず。

このエラーは、ボード側のコピー時に、本来共通であるはずの GND などの面がリネームされて GND1 などになることで発生する。なので、GND1 となっている部分を GND にリネームすれば良い。

簡単なものはこれで ERC をかけなおすとコンシステンシーが回復し、普通にフォワードバック編集可能に戻る。他にも「本来共通なのに別の名前になっている」というものは全てリネームする。

ebay で売ってる「40M CW Transmitter Receiver 7.023-7.026MHz QRP Pixie KITS」というのを1つ買ってみた。送料無料600円ぐらい。おそらく世界最安のトランシーバーだろう。

RX

フィルタが一切ないので、ものすごく広い範囲がきこえてくる。高音が特にうるさいので、実用上は数次のオーディオフィルタが必要そう。

安定化電源で動かしてもハム音が盛大にでる。電池なら大丈夫なのかな?

水晶1つのダイレクトコンバージョンなのでイメージ混信があり、どっちのサイドバンドが聞こえているかは聞いているだけでは全くわからない。これはオーディオフィルタを入れても解決しないので、どうしようもない。(やるなら周波数変換前にフィルタするしかない)

ボード上の半固定抵抗はRITのようだ。RIT というか局発が変わるわけではないので、トーンの設定という趣なんだろう。

TX

水晶は 7.023MHz だが、7.026MHz ぐらいで出ていた。

12V で 50Ω負荷 6Vrms なので 720mW ぐらい。9V で4.2Vrms なので 353mW ぐらい。まさにQRPって感じ。

連続で送信してるとファイナルのトランジスタはかなり発熱する…… デューティー比高く送信するのには不安がある。

ファイナルは S8050D (SS8050 のコピー) っぽい。\( I_C = 1.5A, P_C = 1W \)

なお、サイドトーンはない。実用するならエレキーも外部に必要だと思うので、そっちで鳴らしたら良いかな。

その他

使用ICはLM386の低周波増幅 (200倍、46dB) のみ。ミキサーICは使っておらず、ファイナルトランジスタが受信時のミキサを兼ねているっぽい。

まとめ

とりあえず面白いかと思って作ってみたが、免許うけるのも面倒なので、また思い出したらいじる。

まだいくつか ebay に出品されている QRP トランシーバーがあるので、試してみたい。ないしは簡単なものを自分で作ってみたくなる。