PanCakeを挿してもIchigoJamがPCからのシリアル通信を受信できるようにする

# これまでの問題

これまで、PCとIchigoJamの間でのシリアル通信には、
このような自作の拡張基板を用いてFTDI社のUSB-シリアル変換ケーブルをそのまま挿せるようにし、
IchigoJamのTX/RXとPCからのTX/RXを直結して使っていました。

|実機|設計|
|:-:|:-:|
|![USB-シリアル変換器とIchigoJamを直結するやつ (実機)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/034c20af-fb92-4141-54b9-e1fc8999143c.jpeg)|![USB-シリアル変換器とIchigoJamを直結するやつ (設計)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/480db988-c313-294a-6c32-1c4cf81506e4.png)|

しかし、この方式には、このピンソケットに直接PanCakeを接続すると、
なぜかIchigoJamがPCからのシリアル通信を受信できなくなってしまうという問題がありました。
そこで、これはPanCakeがIchigoJamのRX端子にシリアル通信のデータは無いという信号を送っているためであると推測し、対策をすることにしました。

# 今回の制作物

IchigoJamのシリアル通信は、データを送っていない時は信号がHIGHになっており、データを送るとLOWの信号が現れます。
そこで、IchigoJamのRX端子に入れる信号が
「PCからの信号がLOW or 拡張基板の上に接続したものからの信号がLOW」のときLOW、
それ以外のときHIGHになるようにすれば、PCとPanCake両方からのシリアル通信を受信できるはずです。
(すなわち、2本の信号のANDをとるということになります)
(2本から同時にデータを送るとデータが壊れそうですが、仕方ないので運用でカバーしましょう)

具体的な方法を試行錯誤した結果、IchigoJamのRX端子をプルアップし、
2本のシリアル入力との間にそれぞれシリアル入力側にカソードを向けたダイオードを入れることで、
この「2本の入力の少なくとも一方がLOWならLOWとする」を実現できることがわかりました。

![2本の入力の少なくとも一方がLOWならLOWとする回路](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/f156901d-4944-09b1-6cd2-a5e49c868d65.png)
(使用ツール：[CircuitLab](https://www.circuitlab.com/))

ここでダイオードを使う「お気持ち」としては、

* カソードの電圧がアノードより高くなることは許す
* アノードの電圧がカソードより高くなることは許さず、カソードの電圧が下がったらアノードの電圧も下げる

となります。
シミュレーションの結果ではRX端子の電圧は約0.6Vとなっており、
[LPC111X](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpc1100-cortex-m0-plus-m0/scalable-entry-level-32-bit-microcontroller-mcu-based-on-arm-cortex-m0-cores:LPC1100)の Data Sheet の Static characteristics の LOW-level input voltage の条件
(Max 0.3VDD → VDD=3.3Vのとき、～0.99V) を満たしていることがわかります。

これを実際の拡張基板にしました。
基板は [ユニバーサル基板（65X37） - aitendo](https://www.aitendo.com/product/14535) を用いました。

|実機|設計|
|:-:|:-:|
|![USB-シリアル変換器とIchigoJamを接続するやつ (実機)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/5ec47ec8-6739-4d8e-18bd-b0e12c5c75e3.jpeg)|![USB-シリアル変換器とIchigoJamを接続するやつ (設計)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/68a0a466-a12a-3464-474c-4242172ced1f.png)|

これを従来の拡張基板のかわりにIchigoJamとPanCakeの間に接続することで、
PanCakeをピンソケットに挿した状態でもIchigoJamがPCからのシリアル通信を受信できるようになりました。

実際に接続するとこんな感じになりました。
![新拡張基板を接続した様子](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/b61c9f55-aa57-3c9b-55da-d66fd34e15fd.jpeg)

# よりシンプルな解決策

PanCakeの場合、PanCakeからIchigoJamへシリアル通信でデータが送られることは無いはずなので、
単純にPanCakeからIchigoJamのRX端子へ信号が送られてこないようにすればいいです。
これは、14ピンの長足ピンソケットを2個用意し、うち1個のRX端子に相当する足 (一番端の足) をカットし、
カットした足がRX端子の位置に来るように長足ピンソケットをIchigoJamとPanCakeの間に挟んで接続することで実現できます。
![足をカットした長足ピンソケット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/bb524aff-55eb-cf44-83fa-7c7140862281.jpeg)

実際に接続してみました。
PCとの接続には従来の自作拡張基板を用います。
![ピンソケットを接続した様子](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/51fc2340-b10e-3bef-f69a-fdb714a9da28.jpeg)

この方法でも、PanCakeを接続した状態でIchigoJamにPCからのシリアル通信を受信させることができました。
ただし、長足ピンソケット単体では抜き差しが若干しにくく、抜く時にPanCakeの足を曲げてしまいました。
長足ピンソケットを単体で用いるのではなく、基板に取り付けた方がいいかもしれないです。
もしくは、[aitendoの長足ピンソケット](https://www.aitendo.com/product/7088)を用いたので、相性が悪いのかも…？

# おわりに

IchigoJamのRX端子にシリアル通信の出力端子を直結せず、
RX端子をプルアップしてシリアル通信の出力端子との間にダイオードを入れることで、
全て接続したまま複数のシリアル通信の出力を受信することができるようになりました。
(ダイオードはシリアル通信の出力端子側をカソードとする)

IchigoJamはjig.jpの登録商標です。