オリジナルApplePiとRTC

カスタマイズApplePiについて無事動くことを確認できたので、今度はオリジナルの方にRTCをつけることにした。
と、その前にカスタマイズしたほうのRTCにパスコンを取り付けるため改修する。
rtc12rtc13rtc14
いったん配線を取り外し、パスコン用にレジストを削ってはがしてコンデンサを取り付け。
改めてI2Cの配線を行い改修終了。

ちなみに、DS1307のデータシートを見ると、クリスタルの下の部分にGNDパターンをもって来たほうがいいらしく、ちょうどいい空きスペースでもある。
ds1307-4

ではオリジナルの方にもRTCを取り付けることにする。

未加工の基板の裏側
rtc15
DS1307の取り付け場所は前回と同じところにする。
LCDのバックライト用のパターンがちょうどCR1220用のホルダーのサイズにぴったりなのだが、こちらはLCDを取り付けているため、LCDの足の部分が出っ張ってしまっている。
そのため、0.3mm厚の塩ビ板を両面テープで貼り付け。
rtc17rtc18
そして、DS1307のGND端子とコンデンサ用にレジストを削ってはがしておく。

バックライト用のR3については意味がないことを知りつつも取り付けてしまっていたので、取り外した。
rtc16
ちなみに秋月でも8×2行バックライト付きLCDを扱っていたみたいだ。
バックライト付きを使っていたら電池をつける場所に難儀していたことだろう。

DS1307を基板に取り付けてからクリスタルとバックアップ用の配線をしようとすると、下のGNDパターンに熱を奪われて半田付けしづらくなるので、あらかじめ取り付けておく。
rtc19

クリスタル取り付け済みのDS1307のGND端子とコンデンサを取り付け。
rtc20

次にRC1220用のホルダの加工。
まずは位置固定用の出っ張りも削り取っておく。
塩ビ板を取り付けた関係でそのままでは半田付けできないので、半田付け部分を折り曲げる。
また、背面に金具が見えている部分がちょうどLCDのパターン付近にあるため念のためポリイミドテープで養生しておく。
rtc21rtc22rtc23

RC1220用のホルダを取り付けて、残りの配線を行ったところ。
rtc24

最後に、カスタム版ともども配線を固定するためポリイミドテープとグルーガンで固定したのだが、どうも見栄えがよくないなぁ・・・。
rtc25rtc26rtc27

次に、RTCが使えるようにするために設定を行ったのだが、どうしてもうまくいかない。
カスタム版で設定した時はネットで調べながら試行錯誤して使えるようになったのだが、その手順を踏まえて設定してもうまくいかない。まだ何か足りないのだろうか。

一通り設定を行いRTCに時刻を書き込むのだが、再起動するとRTCから時刻を読み取ることができず、ずっと1965-07-20 06:36:28のまま動かない。
そして、hwclock -wコマンドを実行するとRTCが正常に動きだすが、再起動するとやはり時刻を読み取れない。
またLAN/WLANが繋がっていても繋がっていなくても症状は変わらない。
どうしたものか・・・。

root@rasapp:~#
root@rasapp:~# ntpq -pn
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+129.250.35.250  249.224.99.213   2 u   13   64    1    8.558   -0.143   0.141
*60.56.214.78    .GPS.            1 u   12   64    1   21.781   -1.361   3.089
 129.250.35.251  249.224.99.213   2 u   55   64    0    0.000    0.000   0.001
+157.7.154.23    131.113.192.40   2 u   43   64    1    8.304   -1.860   0.403
root@rasapp:~#
root@rasapp:~#
root@rasapp:~# date
2016年 10月 17日 月曜日 20:33:54 JST
root@rasapp:~#
root@rasapp:~#
root@rasapp:~# hwclock
hwclock: The Hardware Clock registers contain values that are either invalid (e.g. 50th day of month) or beyond the range we can handle (e.g. Year 2095).
root@rasapp:~#
root@rasapp:~#
root@rasapp:~# timedatectl status
      Local time: 月 2016-10-17 20:34:12 JST
  Universal time: 月 2016-10-17 11:34:12 UTC
        RTC time: 火 1965-07-20 06:36:28
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
root@rasapp:~#
root@rasapp:~#
root@rasapp:~# timedatectl status
      Local time: 月 2016-10-17 20:45:30 JST
  Universal time: 月 2016-10-17 11:45:30 UTC
        RTC time: 火 1965-07-20 06:36:28
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
root@rasapp:~#
root@rasapp:~#
root@rasapp:~# hwclock
hwclock: The Hardware Clock registers contain values that are either invalid (e.g. 50th day of month) or beyond the range we can handle (e.g. Year 2095).
root@rasapp:~#
root@rasapp:~#
root@rasapp:~# hwclock -w
root@rasapp:~#
root@rasapp:~# hwclock
2016年10月17日 20時46分07秒  -0.511829 seconds
root@rasapp:~#
root@rasapp:~# timedatectl status
      Local time: 月 2016-10-17 20:46:16 JST
  Universal time: 月 2016-10-17 11:46:16 UTC
        RTC time: 月 2016-10-17 11:46:16
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
root@rasapp:~#
root@rasapp:~#
root@rasapp:~#

 

カテゴリー: RaspberryPi, 電子工作 | コメントする

カスタマイズApple PiとRTC

以前トラ技の付録のApple Piを作ったのだが、LCDの表示が8桁×2行と少ない。
また、自分では赤外線リモコン機能や温度・湿度・気圧センサはあまり使うことがなさそうだったので、カスタマイズしてみようと思った。

改めて8月号を買って、早速カスタマイズしてみる。
まず、LCDは16桁×2行にしたかったので、I2C低電圧キャラクタ液晶モジュール(16x2行)[バックライト付]を使うことにした。

applepi-lcd
上記のように接続すれば、ハイレゾリューションオーディオDACモジュール MM-5102
に干渉することなく取り付け可能なことがわかった。

appsp01appsp03appsp02
LCDを取り付けるため、3端子レギュレータとトランジスタを表面実装タイプに変更。
3端子レギュレータを低損失CMOS三端子レギュレータ 3.3V150mAに変更。
それに合わせて、C3,C4を1μFに変更し、C1,C2は未使用とする。
赤外線LED用の回路をLCDのバックライト用に流用している。
バックライトも3.3Vから取ればこの辺のトランジスタも不要になるのだが、バックライトのVFが2.7~3.15Vと3.3Vに近いことから、5Vから電源を取っている赤外線LEDの回路を流用することにした。トランジスタは2SC2712-GRに変更し、R4を10KΩ、R7を470Ωに変更した。

appsp07
LCDの/RSTを基板上で10KΩのチップ抵抗でプルアップ。

appsp04appsp05
若干無理やりな感じで、バックライト用の配線を行う。
もう少し細い線を使ってもよかったかも。

appsp06appsp08
LCDを取り付けたら、AppliPi側でNC端子を利用してVDDとGNDを接続。
合わせてSCL,SDAを10KΩのチップ抵抗でプルアップする。

appsp10appsp09
起動時にホスト名とIPアドレスを表示させるスクリプトを実行させるようにした。
以前書いた/etc/network/*.dにスクリプトを置く方法がうまくいかなくなったので、/etc/rc.localにIPアドレスを表示させるスクリプトを実行させている。
ただ、/etc/rc.localで表示させようとしてもタイミング的にIPアドレスを取得できないので、別途IPアドレスを表示させるスクリプトを準備して、バックグラウンドでスクリプトを実行するようにした。
バックライトのON/OFFは既にあるonLED1.*とoffLED1.*をコピーして使用するポートをGPIO13に変更したonLED3.*とoffLED3.*を作成。
他にもinit.shにLED3用の設定を加えたり、LCD関連のスクリプトなどを16桁対応に書き換えたりいろいろ修正している。

/etc/rc.localに以下の内容を追加
ちなみに/root以下にもApplePiを展開してある。

# ApplePi GPIO init
cd /root/ApplePi
./init.sh
./onLED3.sh

# print host infomation
cd /root/script
./ipdisp.sh &

 

/rootにscriptディレクトリを作って、そこにipdisp.shを作成。
16回IPアドレスの取得を試みて、取得できなかった場合はno ip addressと表示するようにしてある。i2c-disp.shは以前作ったスクリプト。

#!/bin/sh

/root/script/i2c-disp.sh -ic `uname -n`
/root/script/i2c-disp.sh -p 0x40

for i in `seq 16`
do
  ipaddr=`hostname -I`
  case "$ipaddr" in
    "")
        /root/script/i2c-disp.sh "."
        ;;
    *)
        break
        ;;
  esac
  sleep 1
done

case "$ipaddr" in
  "")
      /root/script/i2c-disp.sh -p 0x40 "                "
      /root/script/i2c-disp.sh -p 0x40 "no ip address"
      ;;
  *)
      /root/script/i2c-disp.sh -p 0x40 "                "
      /root/script/i2c-disp.sh -p 0x40  ${ipaddr}
      break
      ;;
esac

ただ、LCDを16桁対応しただけではつまらないので、今度はRTCを乗せてみることにした。

まずは以前買ったミニRTCモジュール(販売終了)で動作を確かめる。
RTCをつないでハードウエアクロックとして使う方法はまた別途説明することにする。
rtc01rtc02rtc04
ただ、これだとApplePiの基板には乗せられないので、他にいいものがないか探してみる。

DS1307というRTCがあり、ピンの数も少なくバックアップ用の電源と32.768KHのクリスタルさえあればすぐ使えるという優れもの。
ds1307-1
ds1307-2
クリスタルは秋月で買ったのだが、標準の物より小さいサイズで今回のように小さめにまとめるのにちょうどよかった。
rtc07

まず、試作基板を使って動作の確認。
ディップスイッチでプルアップ抵抗の有無を選択できるようにして、ブレッドボードに刺さるように作ったので、ほかの工作の試作にも流用ができる。
rtc03rtc05

ところでこのDS1307の動作電圧が5Vなのだが、信号は2.2V以上あればHとして認識してくれるので、電源は5Vから取って、I2CはそのままつなぐだけでOK
ds1307-3

rtc06
RTCを取り付ける前の状態。
LCDの基板でI2Cの端子が隠れてしまうため、空きスペースのパターンを削ってI2C用の端子を取り出している。
I2Cの配線はこれまでの動作の確認のため、仮に配線してある。

RTC用のバックアップ電池はCR1220を使用して、それ用のホルダを本来のLCD用のバックライトをつなげるパターンを利用して取り付けた。
問題ないと思うけど、本来のLCD接続用のパターンをポリイミドテープで養生している。

rtc08rtc09
RTCとボタン電池用ホルダーを取り付けたところ。
よく見ると、パスコンをつけ忘れているので後日直すことにしよう。
ICのGNDの部分のレジストをはがし半田付けしているのだが、ICをGNDのピンでしか固定されていない状態なので、ハックルーをつかってクリスタルとIC付近の配線を固定した。
rtc10rtc11
ただ、このハックルーなのだが、これを使うとこて先に溶けたハックルーが焦げ付いてなかなか拭き取れず、以降の半田付けに支障が出てきそうだ。
まぁ、ともかくこれでネットワークにつながっていない状態でも、正しく時間を取得することができるようになった。

次はオリジナルのApplePiにもRTCを取り付けてみることにする。

カテゴリー: RaspberryPi, 電子工作 | コメントする

導通チェッカ

導通チェックだけを行うのに、いちいちテスターを取り出すのも煩わしい。
他にも測定するものがあったり、複数ヶ所の導通チェックを行うならテスターでもよかったのだけど、2~3ヶ所程度だと、導通チェッカのほうが手軽な気がしてきた。

キットもいくつかあるし、ネットを探せばいくらでも出てくる。
でも作るのであれば、小型の物がほしいなと思った。
そこで見つけたのが、ChaNさんのELMで見つけた回路内導通テスター(旧)( http://elm-chan.org/works/ict/report.html)だった。

もう一つ新型のチェッカがありマイコンを使った作例だったけど、プログラムの書き込みがちょっと面倒かなと思って、旧型のほうを作ることにした。
その際、表面実装の部品を使うことで小型化することにした。

ケースについてはタカチのCS型コイン電池収納型プラスチックケース(ホワイト)【CS90-W】を使うことにした。
http://www.marutsu.co.jp/pc/i/136840/
http://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-0JE8
ict04

表面側に来る側には以下の部品を実装。
ムラタ表面実装圧電サウンダ(トランスデューサ/圧電スピーカ/)
http://akizukidenshi.com/catalog/g/gP-05723/
縦型スライドスイッチ
http://eleshop.jp/shop/g/gC5U121/
ict01
別の作品でも使ったけど、このケースにこのスイッチはぴったりなサイズ。

反対側の様子。
ict02

IC周辺の様子。
かなり無理をしている感じになってしまった。
ChaNさんみたいにきれいに配線できるようになりたいものだ。
ict03

でも、おかげで手軽に導通チェックができるようになったので満足している。

カテゴリー: 電子工作 | 2件のコメント

Raspberry PiでPCA9515を使ってLCDを表示してみる

先日作ったトラ技付録のApple Piの記事の中に、RasberryPiでLCDが表示できない件についてコラムが載っていた。
RaspberryPi側のプルアップ抵抗が小さく、デバイス側のLレベルが既定の電圧まで下がり切れないのが原因とのこと。
このことについては某巨大掲示板ではだいぶ前に判明していて、SDAとGNDの間に抵抗を挟むとか対策があったけど、それをやるならi2cレベルコンバータ(これとかこれ)が使えないかなとか考えていたけど、面倒だったのでほったらかし状態になっていた。

で、先のトラ技付録ではPCA9515Aを使って対応していた。
コラム中にある写真にはテキサス・インスツルメンツ社と説明書きされているが、実際に載っている写真はどう見てもNXP社のPCA9515Aの写真である。
PCA9515A
販売されている部品セットではテキサス・インスツルメンツ社の物が入っていたけど。

そのトラ技が出版されてしばらくしてから、PCA9515Aを秋月電子で取り扱いを始めたので早速入手して遊んでみることにした。

i2crep01
今回作った2作品。
左のはブレッドボード用にPCA9515Aを2つ積んだもの。
右はi2c LCDの確認用に作ったもの。

i2crep02
5ピンコネクタのメス-メスケーブルでRaspberryPiの1,3,5,7,9ピンとつなげばすぐ使えるようにしてある。
RasspberryPi側とつながる方は2段のコネクタにしてあり、GPIO4をEnable用に使う場合は下段に、Enableを使わない場合は上段につなぐようにしてある。
もちろん、余った側から別のi2cデバイスにつなぐこともできる。
右のデバイス側のコネクタは3.3VとGNDを2本分出していて、LCD側に/Reset端子とかあったり、バックライト用だったり使えるようにしてある。
また、デバイス側のプルアップ抵抗の実装の有無に合わせてスライドスイッチでプルアップ抵抗を使うか使わないか選択できるようにしてある。

i2crep03
ブレッドボード用は最初PCA9515Aを1個だけ使用と考えていたけど、基板のサイズがどうしても中途半端になってしまうので、2個積んで28ピンサイズにすることにした。
RaspberryPi側につながる方は、オス-メスの6ピンコネクタで1,3,5,7,9,11ピンとストレートでつなぐことができるようにしてある。
この場合GPIO4が1側のEnableを、GPIO17が2側のEnableを制御できるようになる。
こちらもスイッチでSDA/SCLのプルアップの有無を選択できるようにしてある。
ブレッドボードでの使用を想定しているので、/Reset端子用に10KΩでプルアップされたピンも準備して、ブレッドボード上に別にプルアップ用の抵抗を準備しなくてもいいように作ってある。(というかピンが余ったからそうした)

i2crep

まずはLCDを直接つないでみた場合

pi@testhard01:~/script$ 
pi@testhard01:~/script$ sudo i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n] 
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
pi@testhard01:~/script$ 
pi@testhard01:~/script$ 
pi@testhard01:~/script$ ./i2c-disp-aki.sh -ic Akizuki
pi@testhard01:~/script$ 

i2crep04
秋月の8桁×2行のLCDはちゃんと認識して表示される。

pi@testhard01:~/script$
pi@testhard01:~/script$ sudo i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n]
0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
pi@testhard01:~/script$
pi@testhard01:~/script$
pi@testhard01:~/script$ ./i2c-disp-sbl.sh -ic Strawberry
pi@testhard01:~/script$ ./i2c-disp-sbl.sh -p 0x40 Linux
pi@testhard01:~/script$

i2crep06
ストロベリー・リナックスのLCDも認識して表示もできる。

pi@testhard01:~/script$
pi@testhard01:~/script$ sudo i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n]
0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
pi@testhard01:~/script$
pi@testhard01:~/script$

i2crep05
秋月の16桁×2行のLCDは認識できない。
ゆえに表示もできない。

次にPCA9515を使って表示してみる。
i2crep07i2crep09
秋月の8桁×2行のものとストロベリー・リナックスの物は変わらず表示される。

では、問題の秋月の16桁×2行のLCDで使用してみる。

pi@testhard01:~/script$
pi@testhard01:~/script$ sudo i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n]
0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
pi@testhard01:~/script$
pi@testhard01:~/script$
pi@testhard01:~/script$ ./i2c-disp-aki.sh -ic Akizuki
pi@testhard01:~/script$ ./i2c-disp-aki.sh -p 0x40 "AE-AQM1602A"
pi@testhard01:~/script$

i2crep08
今度はちゃんと認識して文字を表示されるようになった。

続いて、ブレッドボード用に作った物の確認をしてみる。
i2crep10i2crep11
それぞれ単体での動作確認をして正しく動くことを確認。

それでは、今度はLCDを2台つないでそれぞれ別々に表示させてみる。
まずGPIO4と17を出力に設定して、両方をLレベルに設定。

pi@testhard01:~/script$
pi@testhard01:~/script$ echo 4 > /sys/class/gpio/export
pi@testhard01:~/script$ echo 17 > /sys/class/gpio/export
pi@testhard01:~/script$ sudo sh -c 'echo low > /sys/class/gpio/gpio4/direction'
pi@testhard01:~/script$ sudo sh -c 'echo low > /sys/class/gpio/gpio17/direction'
pi@testhard01:~/script$
pi@testhard01:~/script$
pi@testhard01:~/script$ sudo i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n]
0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
pi@testhard01:~/script$
pi@testhard01:~/script$

もちろん両方のEN端子がLレベルなので、LCDは認識されない。

続いて、それぞれのEN端子をHレベルにして各LCDに文字を表示させてみる。

pi@testhard01:~/script$
pi@testhard01:~/script$ sudo sh -c 'echo low > /sys/class/gpio/gpio17/direction'
pi@testhard01:~/script$ sudo sh -c 'echo high > /sys/class/gpio/gpio4/direction'
pi@testhard01:~/script$
pi@testhard01:~/script$ sudo i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n]
0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
pi@testhard01:~/script$
pi@testhard01:~/script$ ./i2c-disp-sbl.sh -ic Strawberry
pi@testhard01:~/script$ ./i2c-disp-sbl.sh -p 0x40 "Linux lcd1"
pi@testhard01:~/script$
pi@testhard01:~/script$
pi@testhard01:~/script$ sudo sh -c 'echo low > /sys/class/gpio/gpio4/direction'
pi@testhard01:~/script$ sudo sh -c 'echo high > /sys/class/gpio/gpio17/direction'
pi@testhard01:~/script$
pi@testhard01:~/script$ sudo i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n]
0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
pi@testhard01:~/script$
pi@testhard01:~/script$ ./i2c-disp-sbl.sh -ic Strawberry
pi@testhard01:~/script$ ./i2c-disp-sbl.sh -p 0x40 "Linux lcd2"
pi@testhard01:~/script$

i2crep12
これで複数のLCDをコントロールすることができるようになった。

ちなみに、以前作ったスクリプトをさらに改修。
初期化の際、1度目のi2csetコマンドが失敗してもリトライするように修正。
さらに秋月のLCDとストロベリー・リナックスのLCDではコントラスト調整等のパラメータが微妙に違うので、それぞれ2つに分けた。
秋月やストロベリー・リナックスではこれ以外のLCDも扱っているし、それ以外のところでもLCDを扱っており、場合によってはさらにパラメータが違ってくるので、オプション指定でコントラスト等の調整ができるような改修も必要かもしれない。

i2c-disp-aki.sh

#!/bin/bash
function usage {
    echo "Usage: $0 [-ic] [-p pos] message" > /dev/stderr;
    echo "       -i : LCD init, -c : Clear Screen" > /dev/stderr
    echo "       -p : position (0:top left, 40:bottom left)" > /dev/stderr
    exit 1
}

function abort
{
   echo "$@" 1>&2
   exit 1
}

[ $# = 0 ] && usage

while getopts "icp:" flag; do
    case $flag in
        \?) usage ;;
        i)  i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x70 0x56 0x6c i
            if [ $? -ne 0 ]; then
                echo "i2c error:initialize step1. retry initialize" 1>&2
                sleep 1
                i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x70 0x56 0x6c i || abort "i2c error:initialize step1"
            fi
            sleep 0.25
            i2cset -y 1 0x3e 0 0x38 0x0c 0x01 i || abort "i2c error:initialize step2"
            sleep 0.05
            ;;
        c)  i2cset -y 1 0x3e 0 0x01 || abort "i2c error:clear screen" ;;
        p)  i2cset -y 1 0x3e 0 $((OPTARG+128)) || abort "i2c error:set position" ;;
    esac
done
shift $((OPTIND-1))
[ $# = 0 ] && exit

LANG=C
MSG=`echo -n "$1" | perl -pe '$_=join" ",map{ord }split//'`
#echo $MSG
i2cset -y 1 0x3e 0x40 $MSG i || abort "i2c error:display string"

 

i2c-disp-sbl.sh

#!/bin/bash
function usage {
    echo "Usage: $0 [-ic] [-p pos] message" > /dev/stderr;
    echo "       -i : LCD init, -c : Clear Screen" > /dev/stderr
    echo "       -p : position (0:top left, 40:bottom left)" > /dev/stderr
    exit 1
}

function abort
{
   echo "$@" 1>&2
   exit 1
}

[ $# = 0 ] && usage

while getopts "icp:" flag; do
    case $flag in
        \?) usage ;;
        i)  i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x78 0x5e 0x6c i
            if [ $? -ne 0 ]; then
                echo "i2c error:initialize step1. retry initialize" 1>&2
                sleep 1
                i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x78 0x5e 0x6c i || abort "i2c error:initialize step1"
            fi
            sleep 0.25
            i2cset -y 1 0x3e 0 0x0c 0x01 0x06 i || abort "i2c error:initialize step2"
            sleep 0.05
            ;;
        c)  i2cset -y 1 0x3e 0 0x01 || abort "i2c error:clear screen" ;;
        p)  i2cset -y 1 0x3e 0 $((OPTARG+128)) || abort "i2c error:set position" ;;
    esac
done
shift $((OPTIND-1))
[ $# = 0 ] && exit

LANG=C
MSG=`echo -n "$1" | perl -pe '$_=join" ",map{ord }split//'`
#echo $MSG
i2cset -y 1 0x3e 0x40 $MSG i || abort "i2c error:display string"
カテゴリー: RaspberryPi, 電子工作 | コメントする

RaspberryPiとアクリル板とネジ

話が前後してしまうが、RaspberryPiの公式LCDについてきたネジ付きスペーサーがきつくて、ネジが締めづらい状態だった。
海外製のものは、加工が雑でネジが締めづらいってのはよくあることだ。
160723-rpi01
無理して最後までねじ込むことはできるのだが、そうすると今度は外すときにスペーサーごと回って取り外すのに苦労する羽目になる。
それとは別に、基板が剥き身のままなのも気になっていた。

話は変わるが、この前のトラ技の基板を見てトラ技と部品セットとRaspberryPi 3 Bを衝動買いしたわけだが、作例のようにケースに収めるのはちょっと違うかなと感じていて、アクリル板に取り付けるというシンプルなものにしようと思った。
アクリル板の残材がいろいろあるので、それを使えば十分だろうと考えたのだが、サイズに合わせて切って穴をあけるの面倒だなと思った。

そんなことを考えながら適当にネットを見て回っているとちょうどいいものが。160723-rpi02
共立から出ているRaspberry Pi Model B シンプルアクリルベースなるものが。
これを買えばトラ技基板用のアクリル板と、LCD用のアクリル板の両方が確保できる。160723-rpi07
トラ技基板のほうは基板とアクリル板を組み合わせるだけなので、すんなり完了。

問題はLCD側である。
LCD側は2.5mmのネジを使っているのだが、2.5mmのネジは入手が困難。
ヒロセでかろうじて2.5mmのネジを見つけたが、スペーサーとかも考えるとちょうどいいものが見つからない。
しかもLCD側のスペーサーのネジがきついのでこれも直さないとならない。
2.5mm用のタップがあればそれでネジ穴を切りなおせそうなのだが、ネジを扱っているところがほとんどないので当然タップも見つからない。
amazonで見つけることができたが、これだけのために取り寄せるのももったいない。
幸い、2.5mmネジと2.6mmネジはネジ山の間隔が同じなので、2.6mmのタップでネジを切りなおすことにする。
160723-rpi03
ネジ山の間隔が同じで0.05mm削るだけなのでそれほど力をかけずに楽に加工ができた。

160723-rpi04
他のスペーサーも同じように加工し、2.6mmネジ付きスペーサを取り付ける。
アクリルベースについてきたスペーサーは高さ8mmの物なので、それに合わせて同じ高さのネジ付きスペーサを購入。
2.6mmネジ付きスペーサは西川電子で購入することができた。

160723-rpi05
こちらもアクリル板を取り付けて完了。
これでLCD側の問題も解消できでちょっと満足。

160723-rpi06

カテゴリー: RaspberryPi | コメントする

トラ技付録基板とRaspberryPi 3

トラ技の今月号(2016年8月号)の付録基板がおもしろそうだったので、早速買って作ってみる。
rasapp001rasapp002
実際作ってみて気になったこと。
LED1,2がまぶしすぎるので、手持ちのチップ抵抗を使って変更。
R5を200Ω→300Ωに、R6を200Ω→620Ωに変更してみたがそれでもまぶしすぎたので 光拡散キャップを二重にかぶせた。
ここ何年か思うのだけど、最近のLEDまぶしすぎるの何とかならんだろうか。

次にR3の22Ωだが、部品セットについてくるLCDはバックライト無しのタイプなのでこのままでは意味はなし。
ストロベリーリナックスでバックライト有りの同等品があるので、多分これが使えればバックライトを光らせることもできると思うけど、試してみた人っているのかな?

LCDを表示させるためにinitLCD.shを実行してみるが、電源投入後の1回目はなぜかError: Write failedで失敗する。
電源投入後にi2csetコマンドで打っても1回目は失敗したのでいったいなぜだろうか。
でも、何回か遊んでいるうちに失敗しなくなったと思ったけどやっぱり1回目はエラーで失敗していた。
なぜだ?

getSW5.shの中身を見ると、読み取るべきGPIOの番号が間違っているので修正してやる必要あり(2か所ある27となってるところを26に直す)。
これはそのうち修正されるのだろうか。
ちなみにSWの状態を試す場合は真っ先にinit.shを実行するかsudo ./pullup.pyを実行してあげないと内部でプルアップしてくれないので注意すること(これは誌面に書いてある)。

そういえばRaspberryPi 3について、最初のころに発売されたものと最近のものでは箱のデザインが違っている(RS製の物)。
rpi3-01rpi3-02
上の紫の箱が初期のもので、下の赤いほうが最近の物。
初期の物は技適マークが印刷されていないため、中央の空白部分に銀色の技適マークのシールが張られていた。
最新の箱にはあらかじめ技適マークが印刷されている。
rpi3-04

でも、初期の技適シールのほうが良かったなと思う。
最初に買ったものはシールをきれいにはがして直接RaspberryPi 3に貼ってある。
もうちょっとシールのサイズを変えればRaspberryPi 3に直接張っても邪魔にならないような気がするのだがなぁ…
rpi3-03

カテゴリー: RaspberryPi, 電子工作 | コメントする

ティロフィナーレ

休みの日、適当にあちこち歩き回っていたら、ティロフィナーレというマンションを見かけた。
ニュースで一時話題になっていたけど、そのマンションとは別のマンションだったので、他にもないか何となくググってみる。

結構あるのな。
なんか近場の物件ばかり出てきたけど、探せばもっとあるのだろうな。

ティロフィナーレ北砂
http://www.athome.co.jp/bldg-library/tokyo/koto/708615/

ティロフィナーレ四つ木
http://suumo.jp/library/tf_13/sc_13122/to_0002596285/

ティロフィナーレ
http://toushi.homes.co.jp/%E7%89%A9%E4%BB%B6%E8%A9%B3%E7%B4%B0/%E7%89%A9%E4%BB%B6%E6%A6%82%E8%A6%81/320240004358/

ティロ フィナーレ 松戸B
https://minimini.jp/hylist/00010012/1210776075/

ティロフィナーレ柴又
http://www.koiwa-cjs.com/detail/10566021940001.html

カテゴリー: ひとりごと, マンガ・アニメ | コメントする

7インチ IGZO LCDパネル その3

背面の基板が丸出しの状態で若干使いづらいので、背面にカバーを付けることにする。
ハンズで切り出してもらったアクリル板のあまりの部分を使って、必要なパーツを作る。
大きめのものや正確さが必要なところ、数が多い場合はハンズで加工してもらって、ある程度誤差があっても何とかなるところは自分で加工したりするので、残材は必ず持ち帰るようにしてある。
lcd3-01
だいぶ前に自作した曲げ加工用のヒーターで加熱して曲げ加工をする。
ヒーターも若干手直ししてあるとはいえ、こんなに何度も出番がくるとは作った当時は思ってもみなかった。
さすがに慣れてきたので、だいぶ正確にきれいに曲げることができるようになってきた。

lcd3-02lcd3-03
加工したパーツを接着したところ。

lcd3-04
背面にカバーを付けると電源・輝度調整ボタンが押せなくなるので、延長用端子のところにロープロファイル用のピンソケットを半田付けして、スイッチを取り付けられるようにする。
ピンソケットはのほうは難なく穴に入ったので、I2Sのほうもソケットのほうを取り付ければよかったかもしれない。
ヘッダよりソケットのほうが取り外したときあまり邪魔にならないし。

lcd3-05lcd3-06
タクトスイッチを背面カバーに取り付け。

lcd3-07lcd3-08lcd3-09
スイッチを取り付けてカバーをしたところ。
フィルム基板用の穴を半分だけふさぐようにサイズを調整してあるので、ケーブルを押さえつけるような形になっている。
前はフィルムが浮き上がって不格好だったのでマスキングテープを使って押さえつけていたが、それはそれで不格好だったので、これでだいぶ見栄えはマシになった。

lcd3-10
アクリル板の残材を使ってスタンドを作成。

lcd3-12lcd3-11
スタンドの立てかけたところ。

lcd3-13
完成したLCDパネルを改めて表示させてみたところ。
0.3mm厚の艶消し黒の塩ビ板で枠を作って、表面のアクリル板と2枚目の枠との間に挟み込んで枠とLCDの間の隙間を隠すようにした。
透明のアクリル板と黒アクリル板やLCDと密着させると、波紋状の模様が浮かんでくるのが気になっていたのだが、これだと枠の部分に模様は浮かんでこないし、LCDと表面のアクリル板の間に隙間が空くので、こちらも模様が浮かんでこなくなって一石二鳥だった。
固定していたネジも枠となじむよう黒のトラスネジに変更した。
写真は以前作ったアンプをつないで音楽を流してみたところ。

カテゴリー: 電子工作 | 1件のコメント

7インチ IGZO LCDパネル その2

LCDのI2Sから音声を出力するのにいいものがないかとググったところ、ちょうどいい感じのものがサンハヤトから出ていた。
ハイレゾリューションオーディオDACモジュール MM-5102
lcd2-01

DAC用ICのPCM5102Aが使用されていて、周辺の回路も一部実装済みの状態でピンのピッチ変換もされているので実に使いやすいモジュールだった。
サンハヤトのサイトから説明書のPDFをダウンロードしてさっそく組み上げてみる。
lcd2-02
ちょっと、右側に部品が偏ってしまった。
モジュールはもう少し左に寄せて乗せるべきだったかな。

lcd2-03
できた基板を、あらかじめ準備していたスペースに取り付ける。

lcd2-04
2×4ピンのピンソケットがどうしても見つからなかったため、2×5ピンのソケットを無理やり加工。

lcd2-05lcd2-06
LCDの基板とDAC基板を接続したところ。
LCDの取説とDACモジュールの取説をよくよく眺めてみると、モジュールの接続例にある「(a)Raspberry Pi Model A またはModel B の場合」の図にあるP5コネクタと、LCDのI2Sコネクタのピンアサインがまったく同じだった。
もしかしたら、RaspberryPi用に作られたDACモジュールをそのまま載せられるように作ってあったのか。

本当ならLCD基板側はロープロファイルのピンヘッダを使いたかったのだけど、ピンの太さの関係でLCDの基板の穴に入らなかったため、ノーマルサイズのピンヘッダとソケットを使う羽目に。
よくよく考えたら、ピンを押し込んでロープロファイルの高さにすればよかったのではないかと思ったのも後の祭りだった。
おかげでコネクタのところだけ出っ張ってしまってどうしたものか。

接続も終えて、実際の音が鳴るか確認。
タブレットPCをつないでみて音楽を流したところ、ちゃんとDAC基板から音声が出力された。
スピーカを鳴らすためにはアンプが必要だけど、ヘッドホンぐらいなら直接接続しても十分な音量だった。
オーディオはあまり詳しくないけど出力インピーダンス1KΩで2VRMSってことはアンプ前提なのだろうな。

カテゴリー: 電子工作 | コメントする

7インチ IGZO LCDパネル

秋月のサイトをチェックしていたら面白そうなのを見つけたので、買ってみた。

http://akizukidenshi.com/catalog/g/gM-10016/
2015/12/08
13,000円

共立やスイッチサイエンスでも同じものを扱っている。

http://eleshop.jp/shop/g/gFCI311/
2015.12.18
16,200円

https://www.switch-science.com/catalog/2565/
2015年12月22日
16,200円

買ってみたはいいけど、フィルム基板の部分が何がふにゃふにゃしてなんか破損しやすそうだったので、先になんか固定したほうがよさそうな気がしてきた。

さてどうしたものかと思っていたのだが、フォトフレームのようにアクリル板で挟むことを思いついた。
ただ挟むだけではどうかなと思い、枠も作って挟み込むことにした。

lcd01lcd1-02
まずはアクリル板を加工。
ハンズで切り出してもらって、家で穴あけ加工。
右の写真は角をとるため、手持ちの木材を利用して治具をでっちあげて加工しようとしているところ。

lcd1-03lcd1-04
枠を乗せたところと、LCDを入れたところ。
大穴をあけるのはめんどくさいので、棒状に加工してもらった4本を枠の形に接着している。

lcd1-05lcd1-06lcd1-07
アクリル板に基板取り付け用の穴をあけて、穴に合わせてポリナットを接着する。
単純に乗せているのではなく、穴をあけてからねじ止めして接着剤を流し込んである程度固まったらねじを取り除いている。

lcd1-08lcd1-09
I2S用のコネクタを半田付け。

lcd1-10lcd1-12lcd1-11
コネクタへ取り付け。
かなり細かいので結構神経使う。

lcd1-13lcd1-14lcd1-15
アクリル板へ取り付けたところ。
基板が重なる部分は低頭ネジを使っている。
LCDの基板だけでなく、秋月のCタイプ基板を乗せられるようになっている。

lcd1-16lcd1-17lcd1-18lcd1-19
Raspberry Piをつないで表示させたところ。
壁紙はりくごうさんの漫画から。
文字がかなり細かい。
あらかじめ/boot/config.txtに設定を書き込んでおく必要があるので、秋月のサイトにあるファイルを参考に設定を追加する。

lcd1-20lcd1-21lcd1-23lcd1-22
タブレットPCにつないでみたところ。
PCの環境にもよるのだろうが、自分のPCでは1920×1200しか選択できなかった。

いま所有しているモニタの中で一番小さいのに一番解像度がでかいモニタになってしまった。
結構きれいに映るのだが、文字が細かくて読むのがちょっと大変。
まだ暫定的なもので、この後はI2Sの端子から音声を出力できるようにしたい。
あと、アクリル板の枠とLCDの間の隙間が気になるのでちょっと何とかしようと思う。

 

カテゴリー: 電子工作 | コメントする