どのカテゴリにも属していない投稿[869件](54ページ目)
クロックストレッチングについて改めて調べましたが、最新のRaspberryPiで治っている情報はありません。
2022年7月現在、Broadcom社製のBCMシリーズを使ったRaspberryPiは総じてダメなようで、ソフトウェアデバイスであるi2c-gpioを使うのが有効な対策だと思います。
もちろん、ハードウェアデバイスに比べたらCPUに負担がかかるので、CPU負荷が多いシステムやI2Cメモリなどの扱うデータ量が多いデバイスでの使用は避けるべきかもしれません。
あくまで、扱いデータ量が比較的少なく多少の遅延が発生しても支障がない機内通信で使うのがよいと思われます(I2Cはそもそもそういうモノらしいですけど)。
今回はPICをインターフェースとして用い、パラレルバスのLCDキャラクタディスプレイ(SC1602やSC2004を用いた製品)をI2Cで接続しANSIエスケープシーケンスっぽいASCII文字列で制御できるシステムを目指します。
もちろん、UART(シリアル)でも動く様に考えます。8PのDIPスイッチを取り付け、1PでI2C/UARTを選択し、残りの7PでI2CのアドレスやUARTのビットレートを設定できる様にすれば汎用性が高まるでしょう。
#RaspberryPi #電子工作
2022年7月現在、Broadcom社製のBCMシリーズを使ったRaspberryPiは総じてダメなようで、ソフトウェアデバイスであるi2c-gpioを使うのが有効な対策だと思います。
もちろん、ハードウェアデバイスに比べたらCPUに負担がかかるので、CPU負荷が多いシステムやI2Cメモリなどの扱うデータ量が多いデバイスでの使用は避けるべきかもしれません。
あくまで、扱いデータ量が比較的少なく多少の遅延が発生しても支障がない機内通信で使うのがよいと思われます(I2Cはそもそもそういうモノらしいですけど)。
今回はPICをインターフェースとして用い、パラレルバスのLCDキャラクタディスプレイ(SC1602やSC2004を用いた製品)をI2Cで接続しANSIエスケープシーケンスっぽいASCII文字列で制御できるシステムを目指します。
もちろん、UART(シリアル)でも動く様に考えます。8PのDIPスイッチを取り付け、1PでI2C/UARTを選択し、残りの7PでI2CのアドレスやUARTのビットレートを設定できる様にすれば汎用性が高まるでしょう。
#RaspberryPi #電子工作
ちょいと調べたところ、RaspberryPiのI2Cにはバグがあってクロックストレッチングが機能しないとか・・・マジかい!?
確かに、クロックストレッチングを多用すると噂のジャイロセンサBMX055を扱った時に数値が変だったりしたかも。
i2c-gpioと呼ばれるソフトウェアI2Cを使えばクロックストレッチングが機能するとのことですが、こんな大事な機能にバグがあるとは困ります。
クロックストレッチングを使わなくても機能する様にPIC側を作ればいいか。100kbpsならACKの間に10usecありますから、割り込みを使い5usec程度で処理すれば大丈夫と言えば大丈夫です。複雑な返信はしませんしね。
#電子工作 #RaspberryPi
確かに、クロックストレッチングを多用すると噂のジャイロセンサBMX055を扱った時に数値が変だったりしたかも。
i2c-gpioと呼ばれるソフトウェアI2Cを使えばクロックストレッチングが機能するとのことですが、こんな大事な機能にバグがあるとは困ります。
クロックストレッチングを使わなくても機能する様にPIC側を作ればいいか。100kbpsならACKの間に10usecありますから、割り込みを使い5usec程度で処理すれば大丈夫と言えば大丈夫です。複雑な返信はしませんしね。
#電子工作 #RaspberryPi
これまではPIC16系でI2Cを扱う方法はデータシートを読んでも理解出来なかったのですが、次のページのサンプルプログラムを読みながらフラグの意味を整理したところなんとなくわかってきました。
「I2Cのスレーブモードの使い方」
サンプルソースはPIC18系っぽいですが、違いを読み変えればPIC16系のサンプルにもなります。
SPIもそうですが、シフトレジスタ系の通信方法で重要なことは受信値を処理して次の受信コンディションが整うまで送信を一次停止させることです。
I2Cではこの処理をハードウェア的に行うことが可能です。SSPCON2:SENをセット(フラグを1に)しておくと1バイトの受信が終わったところでクロックストレッチングと呼ばれる一時停止がハードウェア的に自動発生するモードになります。クロックストレッチングを解除し受信コンディションにするにはSSPCON1:CKPをセットするだけです。
スレーブ受信処理の流れは、
1)SSPCON2:SENとSSPCON1:CKPをセットして受信コンディションにする(SSPCON2:SENのセットは初期化処理の時だけでいい)
2)バイトデータが受信されたらSSPBUFからデータを取り出す(この時点でSSPCON1:CKPはハードウェアでクリアされクロックストレッチングが発生している)
3)データを取り出したら(取り出したデータの処理が済んだら)SSPCON1:CKPをセットし次の受信コンディションにする
4)以下、ストップビットが検出されるまで(2)から繰り返し
となります。
スレーブ送信(返信)の場合も同様で、所定のレジスタにデータを入れた後、SSPCON1:CKPをセットするとマスターがクロックを刻み始めて送信となります。
所定のレジスタにデータを入れると自動的にSSPCON1:CKPがセットされて送信が始まるモードもあるようです。
ただ、SSPCON3:AHENとSSPCON3:DHENの意味がわかったようなわからないような状況です。両方ともクリア(=0)で良いような気もしますが、便利機能かもしれないのでデータシートを良く読んで整理しましょう。
I2Cは敷居が高いイメージがありましたが、ハードウェアによる自動処理が多くソフトウェアで細かいタイミングを考える必要が無いため、この調子で整理していけば案外簡単に使えるかもしれません。
PICでI2Cを扱うことが可能になれば、今回のパラレルバスLCDなどのI2Cに対応していないデバイスをI2C化することが容易になります。
通信速度や即応性、RTOS的なリアルタイム性を求めるのは難しいと思われますが、7bitアドレスのノーマルモードでもI2Cバス上に126個のデバイスを置けますので、RaspberryPi、Arduino、ESP32などの製作の幅が広がるような気がします。
#電子工作
「I2Cのスレーブモードの使い方」
サンプルソースはPIC18系っぽいですが、違いを読み変えればPIC16系のサンプルにもなります。
SPIもそうですが、シフトレジスタ系の通信方法で重要なことは受信値を処理して次の受信コンディションが整うまで送信を一次停止させることです。
I2Cではこの処理をハードウェア的に行うことが可能です。SSPCON2:SENをセット(フラグを1に)しておくと1バイトの受信が終わったところでクロックストレッチングと呼ばれる一時停止がハードウェア的に自動発生するモードになります。クロックストレッチングを解除し受信コンディションにするにはSSPCON1:CKPをセットするだけです。
スレーブ受信処理の流れは、
1)SSPCON2:SENとSSPCON1:CKPをセットして受信コンディションにする(SSPCON2:SENのセットは初期化処理の時だけでいい)
2)バイトデータが受信されたらSSPBUFからデータを取り出す(この時点でSSPCON1:CKPはハードウェアでクリアされクロックストレッチングが発生している)
3)データを取り出したら(取り出したデータの処理が済んだら)SSPCON1:CKPをセットし次の受信コンディションにする
4)以下、ストップビットが検出されるまで(2)から繰り返し
となります。
スレーブ送信(返信)の場合も同様で、所定のレジスタにデータを入れた後、SSPCON1:CKPをセットするとマスターがクロックを刻み始めて送信となります。
所定のレジスタにデータを入れると自動的にSSPCON1:CKPがセットされて送信が始まるモードもあるようです。
ただ、SSPCON3:AHENとSSPCON3:DHENの意味がわかったようなわからないような状況です。両方ともクリア(=0)で良いような気もしますが、便利機能かもしれないのでデータシートを良く読んで整理しましょう。
I2Cは敷居が高いイメージがありましたが、ハードウェアによる自動処理が多くソフトウェアで細かいタイミングを考える必要が無いため、この調子で整理していけば案外簡単に使えるかもしれません。
PICでI2Cを扱うことが可能になれば、今回のパラレルバスLCDなどのI2Cに対応していないデバイスをI2C化することが容易になります。
通信速度や即応性、RTOS的なリアルタイム性を求めるのは難しいと思われますが、7bitアドレスのノーマルモードでもI2Cバス上に126個のデバイスを置けますので、RaspberryPi、Arduino、ESP32などの製作の幅が広がるような気がします。
#電子工作
色んなデバイスを考えますと表示装置は避けて通れない課題となります。
数個のLEDで済む事もありますが、ガッツリモニタを組まないといけない事もあります。この中間が望ましいこともあります。
案外必要にして十分なのが16字×2行や20字×4行くらいのLCDディスプレイモジュールです。ただ、制御は難しくありませんが、パラレル信号なので面倒が少なくありません。ならばエスケープシーケンスをシリアルやI2cで受けて動く様にしたらどうかと。PICでインターフェースを作るワケです。
幸い16F1939が沢山あるのでコレを使えばI/Oピンに余裕を持って作れます。
色んなアイデアを出しても製作が進まないのは補助的な周辺機器を作らんからかもしれません。
#ガチ工作 #電子工作
数個のLEDで済む事もありますが、ガッツリモニタを組まないといけない事もあります。この中間が望ましいこともあります。
案外必要にして十分なのが16字×2行や20字×4行くらいのLCDディスプレイモジュールです。ただ、制御は難しくありませんが、パラレル信号なので面倒が少なくありません。ならばエスケープシーケンスをシリアルやI2cで受けて動く様にしたらどうかと。PICでインターフェースを作るワケです。
幸い16F1939が沢山あるのでコレを使えばI/Oピンに余裕を持って作れます。
色んなアイデアを出しても製作が進まないのは補助的な周辺機器を作らんからかもしれません。
#ガチ工作 #電子工作
ちょっと気になって「ESP32」について調べてみました。
IoT向けの汎用マイコンです。安価な割に処理能力が高く、wi-fiでIPネットワークが組めて、私にとってはRaspberryPiとPICマイコンの間を埋められる製品だと思われます。
Arduinoの使用も考えたことはあるのですが、私にとってはPICマイコンをアセンブラで書いた方が手っ取り早く、ケースバイケースのハードウェア製作ではArduinoだとパッケージの調整が面倒です。画期的で素晴らしい製品だと思いますが、私にとっては立ち位置が中途半端です。
RaspberryPiも含め、この手のマイコン製品は開発環境が重要です。安価で高性能でも開発環境がボトルネックになってアマチュア界隈では普及しなかったマイコン製品は少なくありません。AVR対PICにおいても高性能なAVRよりも少し劣るPICなのは開発環境の影響です。AVRはArduinoの本体なので別な意味で普及はしていますけどね。ESP32はArduinoの開発環境が使えます。Arduinoではありませんが、ArduinoIDEに開発ライブラリを追加すればほぼ同じに使えるようです。間借りと言えば間借りで、関数ライブラリに違いはありますが、ほぼ同じ使用感。Arduionoを使える人ならわずかな違いを勉強すれば使えてします。これは画期的かもしれません。
Arduino言語はANSI-Cがベースでフル実装でないもののC++っぽいオブジェクト指向な書き方も出来る言語です。基本書式と変数の考え方がANSI-Cと同じマクロ言語と思えばストレス無く使えそうです。
#電子工作
IoT向けの汎用マイコンです。安価な割に処理能力が高く、wi-fiでIPネットワークが組めて、私にとってはRaspberryPiとPICマイコンの間を埋められる製品だと思われます。
Arduinoの使用も考えたことはあるのですが、私にとってはPICマイコンをアセンブラで書いた方が手っ取り早く、ケースバイケースのハードウェア製作ではArduinoだとパッケージの調整が面倒です。画期的で素晴らしい製品だと思いますが、私にとっては立ち位置が中途半端です。
RaspberryPiも含め、この手のマイコン製品は開発環境が重要です。安価で高性能でも開発環境がボトルネックになってアマチュア界隈では普及しなかったマイコン製品は少なくありません。AVR対PICにおいても高性能なAVRよりも少し劣るPICなのは開発環境の影響です。AVRはArduinoの本体なので別な意味で普及はしていますけどね。ESP32はArduinoの開発環境が使えます。Arduinoではありませんが、ArduinoIDEに開発ライブラリを追加すればほぼ同じに使えるようです。間借りと言えば間借りで、関数ライブラリに違いはありますが、ほぼ同じ使用感。Arduionoを使える人ならわずかな違いを勉強すれば使えてします。これは画期的かもしれません。
Arduino言語はANSI-Cがベースでフル実装でないもののC++っぽいオブジェクト指向な書き方も出来る言語です。基本書式と変数の考え方がANSI-Cと同じマクロ言語と思えばストレス無く使えそうです。
#電子工作
3D-CADとしてFusion360を使っていますが、初めてインストールしてから5年以上経っていますから無料で使うのは難しくなり、昨年からサブスクにしています。サブスクの価格は65,000円/年。機能からすれば妥当な価格だと思いますが、小遣い払いとしては厳しい価格。
フリーな3D-CADには「FreeCAD」があります。私が3D-CADを使い始めた当時ではFusion360が実質無料で圧倒的に高性能だったので他に選択肢はありませんでしたが、Fusion360が実質有料化しFreeCADが高機能化したならば改めて比較評価してみる意味はありそうです。
#CAD
フリーな3D-CADには「FreeCAD」があります。私が3D-CADを使い始めた当時ではFusion360が実質無料で圧倒的に高性能だったので他に選択肢はありませんでしたが、Fusion360が実質有料化しFreeCADが高機能化したならば改めて比較評価してみる意味はありそうです。
#CAD
今週は比較的時間に余裕があるのでホール資料の編集です。
今日の課題は小ホール(大練習室)です。約7.5間四方で天井も高いのでリハーサル室としてはかなり贅沢な寸法です。
建築図面を整理することにも随分慣れましたし、線が少ないので、取り急ぎ必要な図面は1日で終わりました。
ちなみにまだ建築中ですが、議員さんの後援者様は内部の見学が出来て、資料を作っている私は立ち入ることが出来ないのはアルアルですね。
#本業
今日の課題は小ホール(大練習室)です。約7.5間四方で天井も高いのでリハーサル室としてはかなり贅沢な寸法です。
建築図面を整理することにも随分慣れましたし、線が少ないので、取り急ぎ必要な図面は1日で終わりました。
ちなみにまだ建築中ですが、議員さんの後援者様は内部の見学が出来て、資料を作っている私は立ち入ることが出来ないのはアルアルですね。
#本業
低融点ソルダーペーストは入荷したのですが、落ち着いて作業する時間が取れずテストは出来ておりません。自宅の冷蔵庫で休憩中です。
#電子工作
#電子工作
低融点ソルダーペーストは入荷までしばらくかかりそう・・・なんて書いたのに出荷されたとか。
自宅は不在が多いので勤務先に送る様にしていますが、週末では現場かオフです。明日は現場がないのでオフです。
仕方ないので勤務先で工作作業をしましょう。
受け取ったら帰宅してリフローの条件出しです。
#電子工作
自宅は不在が多いので勤務先に送る様にしていますが、週末では現場かオフです。明日は現場がないのでオフです。
仕方ないので勤務先で工作作業をしましょう。
受け取ったら帰宅してリフローの条件出しです。
#電子工作
低融点ソルダーペーストの入荷は2-3週間先のようです。
製作は急ぎじゃありませんが、早々にテストして次の課題に移りたい気持ちなのでちょっと不満。
不思議なのは小売りで扱われる製品が少ない事です。趣味として日常的にハンダ付けをする人が少ない上にリフローハンダを使う人は更に少ないのですから仕方ないのでしょうけど、国内メーカーのハンダ付け関連品はとても優秀で品数も多いのにソルダーペーストの類を避けている感じがします。工場向けの製品は多いので尚更不思議です。
とは言っても無いものは仕方ありません。
#電子工作
製作は急ぎじゃありませんが、早々にテストして次の課題に移りたい気持ちなのでちょっと不満。
不思議なのは小売りで扱われる製品が少ない事です。趣味として日常的にハンダ付けをする人が少ない上にリフローハンダを使う人は更に少ないのですから仕方ないのでしょうけど、国内メーカーのハンダ付け関連品はとても優秀で品数も多いのにソルダーペーストの類を避けている感じがします。工場向けの製品は多いので尚更不思議です。
とは言っても無いものは仕方ありません。
#電子工作