thkana が 2025年05月05日17時52分28秒 に編集
マークダウン誤記修正
本文の変更
# 発端 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10314549380 Yahoo! 知恵袋にて、HX711 + Spresenseでデータが取れない、との質問がありました。 とりあえず本体(1.8VI/O)とHX711を直結しちゃってるんじゃないか、と軽く考えて回答しましたが... # 再現 どうもそういうことではないとのことで、自分でも試してみたら、確かに読めない。 ライブラリは https://github.com/bogde/HX711 のもの。これに同梱されているexampleのbasic_exampleで"HX711 not found."になりました。 このときのHX711のDOUT(マゼンタ)/PD_SCK(黄)波形が以下。DOUTが1.2Vぐらい浮いていて、Spresenseからは1に見えてしまってつまりHX711がreadyでないと判断され、SCKは振られていません。  (プローブのキャリブレーションが甘いのはご容赦) ここで、Spresense側DOUTをGNDに落として(強制的にreadyと認識される。データはとれない)、HX711側DOUTをオープンにしてそこを観察してみました。SCKが振られると、DOUTもちゃんと出ていて、Spresense端子に繋がない状態ではLレベルも低くなっていることがわかります。  # 調べる さて、ここで、[Spresenseの拡張ボードの回路図](https://github.com/sonydevworld/spresense-hw-design-files/raw/master/CXD5602PWBEXT1/schematics/CXD5602PWBEXT1_schematics.pdf)を見てみます。外部に出てるI/O端子のあたりを抜粋すると以下のようになっています。  端子が1kΩでプルアップされています。なぜそんなに低い値でプルアップしているのかはわかりませんが... とにかく、HX711の出力端子がこの1kΩをドライブ仕切れないためにL電圧が上がってしまう、ということのようです。
#対策
# 対策
とりあえず、適当なバッファICとかが手もとに無かったので、トランジスタ2本でDOUT端子をバッファしてやりました。 
#結果
# 結果
これでそれらしい値が取得できるようになりました。そんなに速いクロックではないのでオープンコレクタ2段でもまぁ大丈夫、というところでしょう。 これを挟んだときのSpresense端子側の波形は以下のようでした。  (なんかオシロのキャプチャがそのままだと表示されないみたい?なのでALT文字列をクリックしてやってください。Spresense回路図も、キモの部分が表示されていないのでクリックして全表示をお願いします)