<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
	<title><![CDATA[ No.337 - 電装工芸日記 - 舞台照明機器の製作とか - ]]></title>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi</link>
	<description><![CDATA[ 今年は開発案件を進めたい ]]></description>
	<language>ja</language>
	<copyright>Copyright 2026</copyright>
	<lastBuildDate>Tue, 21 Apr 2026 06:51:15 +0900</lastBuildDate>
	<generator><![CDATA[ <!-- てがろぐ Version: -->Powered by <a href="https://www.nishishi.com/cgi/tegalog/" target="_top">てがろぐ</a> Ver 3.4.0 ]]></generator>
	<!-- BEGIN ENTRIES -->
	<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 　これまではPIC16系でI2Cを扱う方法はデータシートを読… ]]></title>
	<description><![CDATA[ 　これまではPIC16系でI2Cを扱う方法はデータシートを読んでも理解出来なかったのですが、次のページのサンプルプログラムを読みながらフラグの意味を整理したところなんとなくわかってきました。<br />　<a class="url" href="http&#58;//www.picfun.com/pic18/mod18x14.html" target="_blank" title="http&#58;//www.picfun.com/pic18/mod18x14.html">「Ｉ２Ｃのスレーブモードの使い方」</a> <br />　サンプルソースはPIC18系っぽいですが、違いを読み変えればPIC16系のサンプルにもなります。<br /><br />　SPIもそうですが、シフトレジスタ系の通信方法で重要なことは受信値を処理して次の受信コンディションが整うまで送信を一次停止させることです。<br />　I2Cではこの処理をハードウェア的に行うことが可能です。SSPCON2&#58;SENをセット(フラグを1に)しておくと１バイトの受信が終わったところでクロックストレッチングと呼ばれる一時停止がハードウェア的に自動発生するモードになります。クロックストレッチングを解除し受信コンディションにするにはSSPCON1&#58;CKPをセットするだけです。<br /><br />　スレーブ受信処理の流れは、<br />１）SSPCON2&#58;SENとSSPCON1&#58;CKPをセットして受信コンディションにする（SSPCON2&#58;SENのセットは初期化処理の時だけでいい）<br />２）バイトデータが受信されたらSSPBUFからデータを取り出す(この時点でSSPCON1&#58;CKPはハードウェアでクリアされクロックストレッチングが発生している)<br />３）データを取り出したら(取り出したデータの処理が済んだら)SSPCON1&#58;CKPをセットし次の受信コンディションにする<br />４）以下、ストップビットが検出されるまで(2)から繰り返し<br />　となります。<br /><br />　スレーブ送信(返信)の場合も同様で、所定のレジスタにデータを入れた後、SSPCON1&#58;CKPをセットするとマスターがクロックを刻み始めて送信となります。<br />　所定のレジスタにデータを入れると自動的にSSPCON1&#58;CKPがセットされて送信が始まるモードもあるようです。<br /><br />　ただ、SSPCON3&#58;AHENとSSPCON3&#58;DHENの意味がわかったようなわからないような状況です。両方ともクリア(=0)で良いような気もしますが、便利機能かもしれないのでデータシートを良く読んで整理しましょう。<br /><br />　I2Cは敷居が高いイメージがありましたが、ハードウェアによる自動処理が多くソフトウェアで細かいタイミングを考える必要が無いため、この調子で整理していけば案外簡単に使えるかもしれません。<br />　PICでI2Cを扱うことが可能になれば、今回のパラレルバスLCDなどのI2Cに対応していないデバイスをI2C化することが容易になります。<br />　通信速度や即応性、RTOS的なリアルタイム性を求めるのは難しいと思われますが、7bitアドレスのノーマルモードでもI2Cバス上に126個のデバイスを置けますので、RaspberryPi、Arduino、ESP32などの製作の幅が広がるような気がします。<br /><br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%e9%9b%bb%e5%ad%90%e5%b7%a5%e4%bd%9c" class="taglink" title="電子工作">#電子工作</a>  -- Posted by 電装工芸 〔1224文字〕 ]]></description>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=337</link>
	<guid>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=337</guid>
	<category>tegalog</category>
	<pubDate>Sun, 24 Jul 2022 21:28:17 +0900</pubDate>
</item>

	<!-- END ENTRIES -->
</channel>
</rss>

