<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>I2C | 即戦力モノづくり!エンジニアへの道標</title>
	<atom:link href="https://depfields.com/tag/i2c/feed/" rel="self" type="application/rss+xml" />
	<link>https://depfields.com</link>
	<description>組み込み（マイコン）スキルを楽しんで学びながら身につけて短期間で効率よく自由自在に扱えるようになりたいと思いませんか？</description>
	<lastBuildDate>Wed, 01 Jun 2022 05:52:13 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.3.1</generator>

<image>
	<url>https://depfields.com/wp-content/uploads/2020/07/cropped-favicon-1-32x32.png</url>
	<title>I2C | 即戦力モノづくり!エンジニアへの道標</title>
	<link>https://depfields.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>加速度センサ・ジャイロセンサによる姿勢検知【STM32Nucleo】</title>
		<link>https://depfields.com/accel-gyro/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=accel-gyro</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Sun, 11 Jul 2021 06:59:24 +0000</pubDate>
				<category><![CDATA[計測アプリ]]></category>
		<category><![CDATA[計測]]></category>
		<category><![CDATA[I2C]]></category>
		<category><![CDATA[モーションコントロール]]></category>
		<category><![CDATA[フィードバック制御]]></category>
		<guid isPermaLink="false">https://depfields.com/?p=9649</guid>

					<description><![CDATA[<p>加速度センサ・ジャイロセンサ（MPU-6050)を搭載したセンサボードGY-521は 3軸加速度、 3軸ジャイロデータをインターフェースI2Cで簡単に取得でき、情報量も多く安価でお勧めなボードです。 ただし、ネット情報で [&#8230;]</p>
<p>The post <a href="https://depfields.com/accel-gyro/">加速度センサ・ジャイロセンサによる姿勢検知【STM32Nucleo】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img fetchpriority="high" width="620" height="552" src="https://depfields.com/wp-content/uploads/2021/07/gyro-scope.png" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2021/07/gyro-scope.png 620w, https://depfields.com/wp-content/uploads/2021/07/gyro-scope-300x267.png 300w" sizes="(max-width: 620px) 100vw, 620px" /></div>
<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-sm--margin-top"></div></div>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">加速度センサ・ジャイロセンサ（MPU-6050)を搭載したセンサボードGY-521は 3軸加速度、 3軸ジャイロデータをインターフェースI<sup>2</sup>Cで簡単に取得でき、情報量も多く安価でお勧めなボードです。</p>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">ただし、ネット情報ではほとんどがArduino向けのもので、プログラミングは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">既存のライブラリ関数を使用して誰でも簡単に活用できる</span></strong>ようになっていて仕様について理解しなくても動作させることができる反面、なんとなく使うことができてしまいますのでスキルは身につくことにはなりません。</p>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">そこで、今回の記事では加速度センサ・ジャイロセンサ（MPU-6050)の仕様書から要所を把握して、I<sup>2</sup>C通信の基本を押さえながら使いこなせるまでを解説していきます。 </p>







<h2 class="wp-block-heading">加速度・ジャイロセンサボード</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>X,Y,Z3軸傾斜角をはじめから求めようとするとかなり複雑のため、この記事では1軸分(Y軸)まわりの傾斜角を加速度センサおよびジャイロセンサから算出する方法を解説します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>MPU-6050では下図の向きにX、Y、Z軸を設定しています。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/MPU6050-Axis.jpg" alt="" class="wp-image-9654" width="307" height="280" srcset="https://depfields.com/wp-content/uploads/2021/07/MPU6050-Axis.jpg 307w, https://depfields.com/wp-content/uploads/2021/07/MPU6050-Axis-300x274.jpg 300w" sizes="(max-width: 307px) 100vw, 307px" /><figcaption>MPU-6050</figcaption></figure>



<h3 class="wp-block-heading">加速度データ</h3>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>加速度センサでY軸まわりに<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">θ<sub>y</sub>傾斜する場合</span></strong>は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">Z軸方向およびX軸方向の重力比率より傾斜角θ<sub>y</sub>は逆三角関数を使用すると算出</span></strong>できます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><a aria-label="加速度センサアプリ (opens in a new tab)" href="https://depfields.com/accel-apl/" target="_blank" rel="noreferrer noopener"><strong>加速度センサアプリ</strong></a>でも説明しましたが、加速度センサの重力(1G)成分による各軸の値a<sub>x</sub>,a<sub>y</sub>,a<sub>z</sub>は重力に対する抗力の向きとなりますので、下図のようにY軸中心に座標を正方向θ<sub>Y</sub>傾斜したとき、重力Z軸成分(1G<sub>Z</sub>)の抗力<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">a<sub>z</sub>は正値</span></strong>で、X軸成分(1G<sub>X</sub>)の抗力<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">a<sub>x</sub>は負値</span></strong>となります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ここでは動作による加速度は考えていませんので算出データは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">地上に対して傾斜させて静止した角度(絶対角度)</span></strong>となります。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2021/07/accel_sensor.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/accel_sensor2.png" alt="" class="wp-image-9809" width="283" height="296"/></a><figcaption> 加速度センサと動作角度 </figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>算出した絶対角度に<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">オフセットθ<sub>offset</sub>分</span></strong>を<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">差し引くと、任意の角度で基準0°にプリセットできる</span></strong>ので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">基準からの相対角度</span></strong>とすることができます。逆三角関数を使用した場合の角度は単位がradのため、必要に応じて°に変換します。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2021/07/angle_accel.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/angle_accel.png" alt="" class="wp-image-9812" width="474" height="133"/></a><figcaption> 加速度センサによる角度の算出 </figcaption></figure>



<h3 class="wp-block-heading">ジャイロセンサデータ</h3>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ジャイロセンサ</span></strong>の場合、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">データg<sub>y</sub>はY軸まわりの回転時の角速度</span></strong>のため、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">角度を得るにはプログラム内で積分して算出する必要</span></strong>があります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>まず得られた<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">16ビットデータをスケールに応じた角速度（°/s）に変換</span></strong>します。それから<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">オフセットがある場合は予め差し引いて</span></strong>おいてから<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">積分して角度を算出</span></strong>します。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2021/07/angle_gyro.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/angle_gyro.png" alt="" class="wp-image-9707"/></a><figcaption>ジャイロセンサによる角度算出</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>プログラム内での積分は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">離散化した近似</span></strong>です。最もシンプルな積分は下図のアルゴリズムです。サンプリングタイムTsが十分小さい場合はこれでも問題はありません。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2021/07/digital-integral.png"><img decoding="async" width="467" height="258" src="https://depfields.com/wp-content/uploads/2021/07/digital-integral.png" alt="" class="wp-image-9689" srcset="https://depfields.com/wp-content/uploads/2021/07/digital-integral.png 467w, https://depfields.com/wp-content/uploads/2021/07/digital-integral-300x166.png 300w" sizes="(max-width: 467px) 100vw, 467px" /></a></figure>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2021/07/angle_gyro2.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/angle_gyro2.png" alt="" class="wp-image-9793" width="488" height="197"/></a><figcaption> 角速度から角度への算出 </figcaption></figure>



<div style="display: inline-block; background: #191970; padding: 5px 10px; color: #ffffff; border-radius: 5px 5px 0px 0px;"><strong>ポイント</strong></div>
<div style="background: #ffffea; border-radius: 0px 10px 10px 10px; padding: 10px; border: 3px solid #191970;">
<p>ジャイロセンサの場合、角度は角速度を積分して算出されるために、<strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">静止した初期状態でオフセットが存在していて０°/sでなければ誤差が大きめに累積</span></strong>してしまいます。そのため、<strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">オフセットを予め差し引いておくと、角度のドリフトは改善されます</span></strong>。</p>
</div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-height"><div class="vk_block-margin-md--height"></div></div>



<h2 class="wp-block-heading">MPU-6050とNucleoボードとの結線図</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>MPU-6050をNucleo-F103RBに接続して使用する場合の配線例を下図に示します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>センサボードGY-521の電源にはLDOレギュレータを内蔵していますので5Vを接続します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>データ出力インターフェースはI<sup>2</sup>C通信のため、STM32側ではI<sup>2</sup>C2に接続します。I<sup>2</sup>CのI/Oはオープンドレインに設定しますので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">通常ではプルアップ抵抗が必要</span></strong>ですが、センサボードGY-521には予め含まれています。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2021/07/wiring.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/wiring.png" alt="" class="wp-image-9890" width="580" height="443"/></a><figcaption> 配線図 </figcaption></figure>



<h2 class="wp-block-heading">プログラミングによるデータ算出</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>まず、はじめの関門はI<sup>2</sup>C通信の設定およびデータ読み書きを正常に実現することです。データを任意に安定して読み込めることができればあとはこれまでに解説した方法でデータを演算して角度を算出するだけです。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I<sup>2</sup>C通信デバイスを使用するために、I2C2_Configuration()でまず初期設定をします。これは他のI<sup>2</sup>Cデバイスと同様です。詳細は<a href="https://depfields.com/i2c/" target="_blank" aria-label="シリアル通信I2C【STM32のI2C詳細】 (opens in a new tab)" rel="noreferrer noopener"><strong>シリアル通信I2C【STM32のI2C詳細】</strong></a>を参照してください。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I2C2の初期設定のあとはMPU-6050の設定をします。設定はレジスタに値を書き込みます。すべてデフォルトで使用する場合は必要ありませんが、デバイスに内蔵のデジタルフィルタを使用したり、データのフルスケールを変更設定する場合には必要です。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2021/07/main.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/main.png" alt="" class="wp-image-9726" width="591" height="324" srcset="https://depfields.com/wp-content/uploads/2021/07/main.png 663w, https://depfields.com/wp-content/uploads/2021/07/main-300x165.png 300w" sizes="(max-width: 591px) 100vw, 591px" /></a><figcaption>デバイス初期設定</figcaption></figure>



<h3 class="wp-block-heading">I<sup>2</sup>C設定とデータ書き込み・読み込み</h3>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I<sup>2</sup>C通信では1バイト単位でデータを読み書きするのですが、データ読み込みでは個々のバイトデータを単独で読み込むのではなく、一度に複数バイトを読み込む方が効率的です。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>そうなると読み込みデータアドレスは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサのX軸のデータアドレス3Bから14バイト分を読み込んでデータを配列に格納するだけでよい</span></strong>のです。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>話は前後しますが、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">所望のレジスタに1バイトデータを書き込むための関数は自作</span></strong>します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ここでの<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ポイント</span></strong>は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">スレーブアドレス</span></strong>で、I<sup>2</sup>Cのアドレス送信関数I2C_Send7bitAddress()では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">アドレスは1バイト枠で左詰め7ビット分</span></strong>です。これに<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">最下位ビットに送信か受信フラグを付加</span></strong>した１バイトデータとして扱います。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ライブラリ関数の中身を確認して動作をたどると理解できると思います。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>例えば<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">I<sup>2</sup>Cデバイスのスレーブアドレスが0x68の場合は1ビット分左シフトした0xD0を送信関数I2C_Send7bitAddress()に与えるアドレス</span></strong>とします。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2021/07/i2c-write-byte.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/i2c-write-byte.png" alt="" class="wp-image-9728" width="593" height="252" srcset="https://depfields.com/wp-content/uploads/2021/07/i2c-write-byte.png 634w, https://depfields.com/wp-content/uploads/2021/07/i2c-write-byte-300x127.png 300w" sizes="(max-width: 593px) 100vw, 593px" /></a><figcaption>I2C書き込み関数</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>データ読み込みは書き込みの延長のようなものですが、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">複数バイトデータも連続して読み込むことができます</span></strong>。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>これも<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">自作の複数バイト読み込み関数</span></strong>ですが、データが複数ある場合は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">最後のバイトデータ受信直前でACKを返さないNACKとすることがポイント</span></strong>です。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2021/07/i2c-read-multibyte.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/i2c-read-multibyte.png" alt="" class="wp-image-9727" width="592" height="485" srcset="https://depfields.com/wp-content/uploads/2021/07/i2c-read-multibyte.png 631w, https://depfields.com/wp-content/uploads/2021/07/i2c-read-multibyte-300x246.png 300w" sizes="(max-width: 592px) 100vw, 592px" /></a><figcaption>I2C複数バイト読み込み関数</figcaption></figure>



<h3 class="wp-block-heading">MPU-6050の初期設定</h3>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p> MPU-6050 は初期設定としてレジスタへ<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">センサへのクロック源を設定</span></strong>したり、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサ、ジャイロセンサのフルスケール</span></strong>や出力への<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">フィルタを設定</span></strong>します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>加速度センサおよびジャイロセンサにより角度を取得するだけならばデフォルト設定でも使えますが取扱うレジスタはせいぜい下記の程度です。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2021/07/program1.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/program1.png" alt="" class="wp-image-9749" width="443" height="439" srcset="https://depfields.com/wp-content/uploads/2021/07/program1.png 392w, https://depfields.com/wp-content/uploads/2021/07/program1-300x298.png 300w, https://depfields.com/wp-content/uploads/2021/07/program1-150x150.png 150w" sizes="(max-width: 443px) 100vw, 443px" /></a><figcaption>レジスタアドレス</figcaption></figure>



<p><span style="background-color: #003300; color: #ffffff;">　クロック源の指定　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>クロック源を指定することで MPU-6050は機能始めます。クロック源は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">レジスタアドレス6Bの下位3ビット分に設定</span></strong>します。電源投入時のデフォルトでは内部発振8MHzとなっています。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/register_6b.png" alt="" class="wp-image-9677"/></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="374" height="185" src="https://depfields.com/wp-content/uploads/2021/07/clk_config.png" alt="" class="wp-image-9672" srcset="https://depfields.com/wp-content/uploads/2021/07/clk_config.png 374w, https://depfields.com/wp-content/uploads/2021/07/clk_config-300x148.png 300w" sizes="(max-width: 374px) 100vw, 374px" /></figure>



<p><span style="background-color: #003300; color: #ffffff;">　フィルタの指定　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>MPU-6050には出力にノイズ対策の<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ローパスフィルタを設定</span></strong>することができます。必要に応じて<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">レジスタアドレス1Aの下位3ビットに0から6までの値を設定</span></strong>します。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/register_1a.png" alt="" class="wp-image-9674"/></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="515" height="222" src="https://depfields.com/wp-content/uploads/2021/07/lpf_config.png" alt="" class="wp-image-9673" srcset="https://depfields.com/wp-content/uploads/2021/07/lpf_config.png 515w, https://depfields.com/wp-content/uploads/2021/07/lpf_config-300x129.png 300w" sizes="(max-width: 515px) 100vw, 515px" /></figure>



<p><span style="background-color: #003300; color: #ffffff;">　ジャイロセンサスケールの指定　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">レジスタアドレス1B</span></strong>では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ジャイロセンサフルスケールを0から3までの値で設定</span></strong>します。デフォルトでは±250°/sです。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/register_1b.png" alt="" class="wp-image-9675"/></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="219" height="101" src="https://depfields.com/wp-content/uploads/2021/07/gyro_config.png" alt="" class="wp-image-9669"/></figure>



<p><span style="background-color: #003300; color: #ffffff;">　加速度センサスケールの指定　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter"><strong>レジスタアドレス1C</strong></span>では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサフルスケールを0から3までの値で設定</span></strong>します。デフォルトでは±2gです。 </p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/register_1c.png" alt="" class="wp-image-9676"/></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="222" height="115" src="https://depfields.com/wp-content/uploads/2021/07/accel_config.png" alt="" class="wp-image-9668"/></figure>



<p><span style="background-color: #003300; color: #ffffff;">　加速度センサデータの読み込み　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>加速度センサの各軸データは16ビットですが、データ格納アドレスは8ビットですので上位8ビット、下位8ビットで構成されます。X軸、Y軸、Z軸のデータは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">レジスタアドレス3BよりX軸上位、下位...と順に格納</span></strong>されます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>データについては例えばフルスケールが±2gの場合は、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">+2g時に32768</span></strong>となるので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">1g当たり16384</span></strong>となります。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="667" height="140" src="https://depfields.com/wp-content/uploads/2021/07/register_accel.png" alt="" class="wp-image-9678" srcset="https://depfields.com/wp-content/uploads/2021/07/register_accel.png 667w, https://depfields.com/wp-content/uploads/2021/07/register_accel-300x63.png 300w" sizes="(max-width: 667px) 100vw, 667px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="422" height="119" src="https://depfields.com/wp-content/uploads/2021/07/accel_scale.png" alt="" class="wp-image-9670" srcset="https://depfields.com/wp-content/uploads/2021/07/accel_scale.png 422w, https://depfields.com/wp-content/uploads/2021/07/accel_scale-300x85.png 300w" sizes="(max-width: 422px) 100vw, 422px" /></figure>



<p><span style="background-color: #003300; color: #ffffff;">ジャイロセンサデータの読み込み　</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ジャイロセンサの各軸データも加速度センサと同様にX軸、Y軸、Z軸のデータは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">レジスタアドレス43よりX軸上位、下位...と順に格納</span></strong>されます。 </p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>データについては例えばフルスケールが±250°/sの場合は、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">+250°/s 時に32768</span></strong>となるので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">1°/s当たり131</span></strong>となります。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="653" height="139" src="https://depfields.com/wp-content/uploads/2021/07/register_gyro.png" alt="" class="wp-image-9679" srcset="https://depfields.com/wp-content/uploads/2021/07/register_gyro.png 653w, https://depfields.com/wp-content/uploads/2021/07/register_gyro-300x64.png 300w" sizes="(max-width: 653px) 100vw, 653px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="339" height="106" src="https://depfields.com/wp-content/uploads/2021/07/gyro_scale.png" alt="" class="wp-image-9671" srcset="https://depfields.com/wp-content/uploads/2021/07/gyro_scale.png 339w, https://depfields.com/wp-content/uploads/2021/07/gyro_scale-300x94.png 300w" sizes="(max-width: 339px) 100vw, 339px" /></figure>



<h3 class="wp-block-heading">各センサからの角度算出と相補フィルタ</h3>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>加速度およびジャイロセンサからのデータが取得できるようになるといよいよそれぞれのデータから角度を算出できるようになります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I2C_Read_multibyte()関数による複数バイト読み込みで格納したデータにより加速度およびジャイロセンサ各軸の16ビット値が取得できます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>取得できた値により加速度センサによる角度およびジャイロセンサによる角度が算出できます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ジャイロセンサからの角速度データを積分して角度を算出するためのサンプリングタイムを正確に5msとするために<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">RTOSの機能を利用</span></strong>しています。詳細は<a aria-label="FreeRTOSタスク管理の基本 (opens in a new tab)" href="https://depfields.com/task/" target="_blank" rel="noreferrer noopener"><strong>FreeRTOSタスク管理の基本</strong></a>を参照してください。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2021/07/program_angle.png"><img decoding="async" width="550" height="748" src="https://depfields.com/wp-content/uploads/2021/07/program_angle.png" alt="" class="wp-image-9878" srcset="https://depfields.com/wp-content/uploads/2021/07/program_angle.png 550w, https://depfields.com/wp-content/uploads/2021/07/program_angle-221x300.png 221w" sizes="(max-width: 550px) 100vw, 550px" /></a><figcaption> 加速度・ジャイロセンサから角度算出 </figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>加速度センサおよびジャイロセンサから単独で算出された角度はそれぞれ一長一短あり安定しません。そこで、両センサの長所である部分をいいとこ取りするための手段に<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">相補フィルタ</span></strong>というものを使います。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサ</span></strong>では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">重力変化による傾斜角度が得られる</span></strong>ので特に静止状態の場合の<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">絶対的な角度変化は信頼性</span></strong>がありますが、情報にノイズが含まれていたり、動作が伴うと重力以外の成分も加わることにもなります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>対して、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ジャイロセンサ</span></strong>では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">回転を検知した角速度が得られる</span></strong>ので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">動作の伴う角度の変化には信頼性</span></strong>がありますが、プログラム内で積分をしているので誤差も同時に累積し<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ドリフトを発生</span></strong>してしまうことになります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>そこで<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">相補フィルタを使用</span></strong>して、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサ出力にはローパルフィルタ(LPF)</span></strong>により低周波部分だけをとりだし、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ジャイロセンサ出力にはハイパスフィルタ(HPF)</span></strong>により、ドリフト分をキャンセルすることができます。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2021/07/complementary_filter2.png"><img decoding="async" src="https://depfields.com/wp-content/uploads/2021/07/complementary_filter2.png" alt="" class="wp-image-9734" width="530" height="83" srcset="https://depfields.com/wp-content/uploads/2021/07/complementary_filter2.png 530w, https://depfields.com/wp-content/uploads/2021/07/complementary_filter2-300x47.png 300w" sizes="(max-width: 530px) 100vw, 530px" /></a><figcaption>相補フィルタによる角度算出</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>相補フィルタの式だけをみると、至ってシンプルなのですが、奥が深いので別途、<strong><a href="https://depfields.com/complementary-filter/" target="_blank" aria-label="相補フィルタのしくみを解明してみる【加速度・ジャイロセンサ】 (opens in a new tab)" rel="noreferrer noopener">相補フィルタのしくみを解明してみる【加速度・ジャイロセンサ】</a></strong>で詳細を解説しています。</p>
</div></div></div>



<h2 class="wp-block-heading">実測結果</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>下図は加速度センサ、ジャイロセンサおよび相補フィルタを通した出力による角度変化の様子をグラフ化したものです。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">横軸は経過時間(s)、縦軸は角度(°)</span></strong>です。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>加速度センサによる角度は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">細かなノイズが含まれていますが絶対的な角度を示すのでドリフトは発生していません</span></strong>。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ジャイロセンサによる角度は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">プログラム内で積分したものなのでノイズもなく滑らかですが、累積誤差によるドリフトが発生しています</span></strong>。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>相補フィルタを通した出力では加速度センサによる出力とジャイロセンサによる出力の<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">長所のみを引き継いだもの</span></strong>になっていて<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">安定して信頼性があります</span></strong>。相補フィルタの<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">カットオフ周波数は2Hzに設定</span></strong>したものです。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2021/07/angle_output.png"><img decoding="async" width="617" height="382" src="https://depfields.com/wp-content/uploads/2021/07/angle_output.png" alt="" class="wp-image-9657" srcset="https://depfields.com/wp-content/uploads/2021/07/angle_output.png 617w, https://depfields.com/wp-content/uploads/2021/07/angle_output-300x186.png 300w" sizes="(max-width: 617px) 100vw, 617px" /></a><figcaption> カットオフ周波数：2Hz </figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>相補フィルタのカットオフ周波数によりどのような違いがあるのかを確認するために<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">4Hzと2Hzで比べ</span></strong>てみました。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">カットオフ周波数を4Hzに設定した場合</span></strong>はジャイロセンサによる<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ドリフトの影響はない</span></strong>のですが、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサの敏感なノイズ成分が多少含まれて</span></strong>います。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサ寄りの影響を受けた出力</span></strong>になっています。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2021/07/angle_output_4Hz.png"><img decoding="async" width="562" height="421" src="https://depfields.com/wp-content/uploads/2021/07/angle_output_4Hz.png" alt="" class="wp-image-9659" srcset="https://depfields.com/wp-content/uploads/2021/07/angle_output_4Hz.png 562w, https://depfields.com/wp-content/uploads/2021/07/angle_output_4Hz-300x225.png 300w" sizes="(max-width: 562px) 100vw, 562px" /></a><figcaption>カットオフ周波数：4Hz</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">カットオフ周波数を2Hzに設定した場合</span></strong>は加速度センサの<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ノイズ成分はほぼキャンセルされ</span></strong>、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ジャイロセンサ寄りの影響を受けた出力</span></strong>になっています。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ジャイロセンサ出力からドリフト分だけをキャンセルした出力</span></strong>となっています。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2021/07/angle_output_2Hz.png"><img decoding="async" width="606" height="367" src="https://depfields.com/wp-content/uploads/2021/07/angle_output_2Hz.png" alt="" class="wp-image-9658" srcset="https://depfields.com/wp-content/uploads/2021/07/angle_output_2Hz.png 606w, https://depfields.com/wp-content/uploads/2021/07/angle_output_2Hz-300x182.png 300w" sizes="(max-width: 606px) 100vw, 606px" /></a><figcaption> カットオフ周波数：2Hz </figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>下の図はカットオフ周波数を2Hzの場合で、少し速い動作をさせてみた出力結果です。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサ</span></strong>では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">速い動きほどノイズ成分が顕著</span></strong>に現れ、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ジャイロセンサ</span></strong>では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ドリフト成分によるオフセットが突然大きくなったり</span></strong>でこのままでは使用できません。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>対して、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">相補フィルタを通した出力</span></strong>ではこのような動作でも遅れは見られず<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">しっかりと追従</span></strong>し、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ドリフトの影響もなくほぼ理想の状態</span></strong>となっていて<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">フィルタ効果が確認</span></strong>できます。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2021/07/angle_output2.png"><img decoding="async" width="575" height="408" src="https://depfields.com/wp-content/uploads/2021/07/angle_output2.png" alt="" class="wp-image-9660" srcset="https://depfields.com/wp-content/uploads/2021/07/angle_output2.png 575w, https://depfields.com/wp-content/uploads/2021/07/angle_output2-300x213.png 300w" sizes="(max-width: 575px) 100vw, 575px" /></a><figcaption>カットオフ周波数2Hzにおける少し速い動作</figcaption></figure>



<div class="wp-block-vk-blocks-spacer vk_spacer"><div class="vk_spacer-display-pc" style="height:20px"></div><div class="vk_spacer-display-tablet" style="height:10px"></div><div class="vk_spacer-display-mobile" style="height:5px"></div></div>



<div style="display: inline-block; background: #191970; padding: 5px 10px; color: #ffffff; border-radius: 5px 5px 0px 0px;"><strong>ポイント</strong></div>
<div style="background: #ffffea; border-radius: 0px 10px 10px 10px; padding: 10px; border: 3px solid #191970;">
<p>廉価で人気のあるセンサボードGY-521(MPU-6050)をSTM32Nucleoボードに接続して傾斜角を算出する過程を解説しました。たかだか角度算出のためにと思われるかもしれませんが、ここまで踏み込んで動作を確認すると<strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">あいまいな部分が一切なくなる</span></strong>ために、得られた知識等は<strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">新しいスキルとして自信をもって他のアプリケーションにも適用できる</span></strong>ようになります。</p>
</div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>



<div style="background: #00ccff; padding: 5px 10px; color: #ffffff; border-radius: 10px 10px 0 0;"><strong>コラム</strong></div>
<div style="background: #ffffea; padding: 10px; border: 2px solid #00ccff; border-radius: 0 0 10px 10px;">
<p>STM32Nucleoで角度および角速度を取得できる手段を獲得できたところで、ようやく倒立振子を実現する道具が揃いました。現代制御理論による倒立振子のコントロールに関しては<strong><a href="https://depfields.com/controltheory-modern/" target="_blank" rel="noreferrer noopener" aria-label=" (opens in a new tab)">マイコンで実現するフィードバック制御のための基礎知識【番外編】</a></strong>で解説しましたが、近日中に実機での実現に挑戦してみたいと思います。</p>
</div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>


<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/accel-gyro/" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><img class="lkc-favicon" src="https://www.google.com/s2/favicons?domain=en.depfields.com" alt="" width=16 height=16 /><div class="lkc-domain">Most Powerful Bible to Become an Embedded Engineer</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img class="lkc-thumbnail-img" src="//depfields.com/wp-content/uploads/pz-linkcard/cache/8110ed110cfd7bc43cc28ed559ae0b54245c8c842dbcfdb782064992266be621.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">Posture detection by accelerometer and gyro sensor [STM32Nucleo] | Most Power...</div></div><div class="lkc-url">https://en.depfields.com/accel-gyro/</div><div class="lkc-excerpt">The GY-521 Sensor Board with Accelerometer and Gyro Sensor (MPU-6050) can easily acquire 3-axis acceleration and 3-axis gyro data via I2C interface, and is recommended for its high information content and low cost.However, most of the</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/accel-gyro/">加速度センサ・ジャイロセンサによる姿勢検知【STM32Nucleo】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>I2C通信アプリ【STM32のI2C】</title>
		<link>https://depfields.com/i2c-eeprom-apl/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=i2c-eeprom-apl</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Tue, 16 Jun 2020 14:51:32 +0000</pubDate>
				<category><![CDATA[シリアル通信I2Cを使ったアプリ]]></category>
		<category><![CDATA[I2C]]></category>
		<guid isPermaLink="false">https://depfields.com/?page_id=3553</guid>

					<description><![CDATA[<p>STM32マイコンのI2C仕様型EEPROMへの読み込み、書き込みするアプリケーションプログラムです。ペリフェラルの詳細はシリアル通信I2Cで解説しています。 &#160;プログラム解説&#160;</p>
<p>The post <a href="https://depfields.com/i2c-eeprom-apl/">I2C通信アプリ【STM32のI2C】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img width="640" height="426" src="https://depfields.com/wp-content/uploads/2020/06/cyberspace-2784907_640.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/06/cyberspace-2784907_640.jpg 640w, https://depfields.com/wp-content/uploads/2020/06/cyberspace-2784907_640-300x200.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></div>
<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">STM32マイコンのI2C仕様型EEPROMへの読み込み、書き込みするアプリケーションプログラムです。ペリフェラルの詳細は<strong><a href="https://depfields.com/i2c/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener">シリアル通信I2C</a></strong>で解説しています。</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/i2c-eeprom_NUCLEO.jpg" alt="" class="wp-image-5126" width="564" height="368" srcset="https://depfields.com/wp-content/uploads/2020/06/i2c-eeprom_NUCLEO.jpg 564w, https://depfields.com/wp-content/uploads/2020/06/i2c-eeprom_NUCLEO-300x196.jpg 300w" sizes="(max-width: 564px) 100vw, 564px" /><figcaption>I2C EEPROM接続図</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ここではI2C2を使用するためにPB10とPB11を使用します。メモリから読み込んだデータを表示するためにUSART3を使用してモニターへ転送しています。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter"><strong>I<sup>2</sup>C EEPROMのチップアドレス</strong></span>は上図のようにA0,A1,A2を０Vにしているので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">A0</span></strong>です。詳細はI<sup>2</sup>C EEPROM 24LCxxのデータシートで確認してください。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>3つのデータ（data1,data2,data3）をI<sup>2</sup>C EEPROMに書き込んだり読み出したりしています。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>プログラム起動直後はあらかじめEEPROMに保存されているデータを表示します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;プログラム解説&nbsp;</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>３種類の文字列コマンド"1@", "2@", "3@”のどれかをPCで入力すると、そのコマンドに対応したデータがEEPROMに書き込まれ、1000msサイクルごとに保存されたデータを読み出し表示します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>データはコマンドを入力するたびに書き換えられます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>シリアルUART通信によりPCから操作して、読み書き（送受信の機能）の状態をモニターしています。</p>
</div></div></div>



<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img class="wpdm_icon" alt="アイコン"   src="https://depfields.com/wp-content/plugins/download-manager/assets/file-type-icons/box_download.png" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://depfields.com/download/i2c-rxtx/'>I2C通信仕様のEEPROM</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 10.55 KB</div>
            </div>
            <div class="ml-3">
                <a href='#unlock' class='wpdm-download-link wpdm-download-locked btn btn-primary ' data-package='3572'>ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-sm--margin-top"></div></div>



<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/i2c-eeprom-apl/" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><img class="lkc-favicon" src="https://www.google.com/s2/favicons?domain=en.depfields.com" alt="" width=16 height=16 /><div class="lkc-domain">Most Powerful Bible to Become an Embedded Engineer</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img class="lkc-thumbnail-img" src="//depfields.com/wp-content/uploads/pz-linkcard/cache/0ca4914da82c536a9cc3b70a2da209d50df150a17b3f55ad2c0b4090e0e9f0ab.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">I2C communication application [I2C of STM32] | Most Powerful Bible to Become ...</div></div><div class="lkc-url">https://en.depfields.com/i2c-eeprom-apl/</div><div class="lkc-excerpt">This application program reads and writes to the I2C specification type EEPROM of STM32 MCU. Details of the peripherals are explained in Serial Communication I2C.I2C EEPROM circuit diagramHere PB10 and PB11 are used for I2C2. Data</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/i2c-eeprom-apl/">I2C通信アプリ【STM32のI2C】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>シリアル通信I2C【STM32のI2C詳細】</title>
		<link>https://depfields.com/i2c/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=i2c</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Mon, 08 Jun 2020 07:01:09 +0000</pubDate>
				<category><![CDATA[各周辺機能(ペリフェラル)詳細]]></category>
		<category><![CDATA[I2C]]></category>
		<guid isPermaLink="false">https://depfields.com/?page_id=2707</guid>

					<description><![CDATA[<p>STM32に内蔵のペリフェラルI2Cの使い方を解説しています。この章ではI2C仕様のEEPROMへのデータの読み込および書き込を例に解説しています。 シリアル通信I2Cとは I2C通信初期化手順 目的：使用するI2CはI [&#8230;]</p>
<p>The post <a href="https://depfields.com/i2c/">シリアル通信I2C【STM32のI2C詳細】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img width="640" height="453" src="https://depfields.com/wp-content/uploads/2020/06/2760625_s.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/06/2760625_s.jpg 640w, https://depfields.com/wp-content/uploads/2020/06/2760625_s-300x212.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></div>
<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">STM32に内蔵のペリフェラルI<sup>2</sup>Cの使い方を解説しています。この章ではI<sup>2</sup>C仕様のEEPROMへのデータの読み込および書き込を例に解説しています。</p>







<h2 class="wp-block-heading">シリアル通信I<sup>2</sup>Cとは</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">シリアル通信I<sup>2</sup>C</span></strong>は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">同期型の双方向通信</span></strong>です。Philips社が提唱したシリアル通信方式です。信号線が2本だけでそのうちの一本が<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">データを双方向でやり取りする信号線SDA</span></strong>（Serial Data Line）で、他方が同期用<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">クロック信号線SCL</span></strong>(Serial Clock Line)です。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>特徴としては<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">マスタ</span></strong>側と<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">スレーブ</span></strong>側に分かれ、マスタ側が通信をすべてコントロールしています。I<sup>2</sup>C では一つのバスに複数のスレーブを接続することができます。バスは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">オープンドレインで接続</span></strong>されているため<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">プルアップ抵抗（電源電圧が3.3Vのとき、2.2k程度）が必要</span></strong>です。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/i2c-connection.jpg" alt="" class="wp-image-2709" width="264" height="365" srcset="https://depfields.com/wp-content/uploads/2020/06/i2c-connection.jpg 263w, https://depfields.com/wp-content/uploads/2020/06/i2c-connection-217x300.jpg 217w" sizes="(max-width: 264px) 100vw, 264px" /><figcaption>シリアルI2C通信</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I<sup>2</sup>Cでは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">1文字（1バイト）ずつ送受信し</span></strong>,1バイト転送毎に<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">受信側からACK（アクノリッジ）信号を返送</span></strong>し、互いに確認を取りながら（ハンドシェイク）転送を行います。マスタが受信を終了させたい時点でACKを返さないNACK（ノットアクノリッジ）とします。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>その後ストップコンディションを生成して通信を終了させます。I<sup>2</sup>Cデバイスは個々にスレーブアドレスを持っていて、スレーブデバイス内の<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">指定アドレスのレジスタやメモリとアクセスしてデータのやり取り</span></strong>をします。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ここではI<sup>2</sup>C通信仕様のEEPROMを使用したデータの送受信を実際のプログラムで解説していきます。<br><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">I<sup>2</sup>C通信を使った送受信はルールが規格できまったものであるためメーカーなどが作成したサンプルプログラムなどを参考に、ある程度決まった形式のものを使用するのが無難</span></strong>です。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>まず、他のペリフェラルと同様に初期化を解説します。</p>
</div></div></div>



<h2 class="wp-block-heading">I<sup>2</sup>C通信初期化手順</h2>



<p>目的：使用するI<sup>2</sup>CはI<sup>2</sup>C1でGPIOはPB6とPB7<br>■　I<sup>2</sup>Cモードで<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ACK有効</span></strong><br>■　ACKを返すアドレス長は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">7ビット</span></strong><br>■　<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">クロックスピードは200000でデューティ比は1：1</span></strong></p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/i2c-setting.jpg" alt="" class="wp-image-2710"/></figure>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;①　I<sup>2</sup>C1にクロック供給&nbsp;</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>使用するI<sup>2</sup>C1にクロックを供給します。APB1バスに接続していますのでAPB1に供給します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;②　I<sup>2</sup>C1に使用するGPIO設定&nbsp;</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I<sup>2</sup>C1に使用するIOは送受信にPB6とPB7をオルタネートオープンドレイン出力に指定します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;③　I<sup>2</sup>C1の初期設定&nbsp;</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I<sup>2</sup>C通信の初期設定を実行します。初期化はI2C_Init関数を実行して上記のパラメータを設定します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>関数の第1引数は<strong>設定対象のI<sup>2</sup>C</strong>（I2C1,I2C2）、第2引数は<strong>構造体メンバ</strong>になっていて以下に示すとおりです。</p>
</div></div></div>



<p>I<sup>2</sup>C初期化関数実行例： I2C_Init(I2C1, &amp;I2C_InitStructure);</p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I<sup>2</sup>C_Modeメンバには<strong>I<sup>2</sup>C通信ではI<sup>2</sup>Cモードを指定</strong>します。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="780" height="177" src="https://depfields.com/wp-content/uploads/2020/06/i2c-member1.jpg" alt="" class="wp-image-2713" srcset="https://depfields.com/wp-content/uploads/2020/06/i2c-member1.jpg 780w, https://depfields.com/wp-content/uploads/2020/06/i2c-member1-300x68.jpg 300w, https://depfields.com/wp-content/uploads/2020/06/i2c-member1-768x174.jpg 768w" sizes="(max-width: 780px) 100vw, 780px" /></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I2C_DutyCycleメンバには通常クロックパルスデューティ比で<strong>1:1</strong>にしておきます。このメンバは高速クロックの波形整形のためのもので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">クロック周波数がファストモードの場合にのみ有効</span></strong>なメンバです。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/i2c-member2.jpg" alt="" class="wp-image-2714" width="803" height="148" srcset="https://depfields.com/wp-content/uploads/2020/06/i2c-member2.jpg 780w, https://depfields.com/wp-content/uploads/2020/06/i2c-member2-300x55.jpg 300w, https://depfields.com/wp-content/uploads/2020/06/i2c-member2-768x142.jpg 768w" sizes="(max-width: 803px) 100vw, 803px" /></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I2C_AckメンバはACK（アクノリッジ）を返す指定にするため<strong>I2C_Ack_Enable</strong>とします。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="780" height="145" src="https://depfields.com/wp-content/uploads/2020/06/i2c-member3.jpg" alt="" class="wp-image-2715" srcset="https://depfields.com/wp-content/uploads/2020/06/i2c-member3.jpg 780w, https://depfields.com/wp-content/uploads/2020/06/i2c-member3-300x56.jpg 300w, https://depfields.com/wp-content/uploads/2020/06/i2c-member3-768x143.jpg 768w" sizes="(max-width: 780px) 100vw, 780px" /></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I2C_AcknowledgeAddressメンバはスレーブアドレス幅を指定します。スレーブデバイスの仕様に従い、ここでは<strong>7ビットを指定</strong>します。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="780" height="151" src="https://depfields.com/wp-content/uploads/2020/06/i2c-member4.jpg" alt="" class="wp-image-2716" srcset="https://depfields.com/wp-content/uploads/2020/06/i2c-member4.jpg 780w, https://depfields.com/wp-content/uploads/2020/06/i2c-member4-300x58.jpg 300w, https://depfields.com/wp-content/uploads/2020/06/i2c-member4-768x148.jpg 768w" sizes="(max-width: 780px) 100vw, 780px" /></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I2C_ClockSpeedメンバはクロック周波数を指定します。ここでは<strong>I2C_CLOCK(200000)を指定</strong>します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>クロック周波数が<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">100kHz以下であれば標準モード</span></strong>、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">それ以外ではファストモードが自動的に選択</span></strong>されるようになっています。200000の場合はファストモードとなります。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="753" height="90" src="https://depfields.com/wp-content/uploads/2020/06/i2c-member5.jpg" alt="" class="wp-image-9574" srcset="https://depfields.com/wp-content/uploads/2020/06/i2c-member5.jpg 753w, https://depfields.com/wp-content/uploads/2020/06/i2c-member5-300x36.jpg 300w" sizes="(max-width: 753px) 100vw, 753px" /></figure>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;④　I<sup>2</sup>C1を有効化する&nbsp;</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>これまででI<sup>2</sup>C通信の初期化ができましたので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">I2C_Cmd関数を実行</span></strong>してI<sup>2</sup>Cポートを有効にします。</p>
</div></div></div>



<p>I<sup>2</sup>C通信有効化関数実行例：　I2C_Cmd(I2C1, ENABLE);</p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>関数の第1引数には<strong>設定対象のI2C1かI2C2</strong>を指定し、第2引数は<strong>ENABLEで有効</strong>、<strong>DISABLEで無効</strong>となります。</p>
</div></div></div>



<h2 class="wp-block-heading">I<sup>2</sup>C仕様EEPROM書き込み</h2>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/i2c-eeprom.jpg" alt="" class="wp-image-2719" width="298" height="202" srcset="https://depfields.com/wp-content/uploads/2020/06/i2c-eeprom.jpg 302w, https://depfields.com/wp-content/uploads/2020/06/i2c-eeprom-300x204.jpg 300w" sizes="(max-width: 298px) 100vw, 298px" /><figcaption><br><a>I2C</a>型EEPROM接続回路</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I<sup>2</sup>C書き込みは下記のフォーマット手順に従った書き込み関数<strong>I2C_EEPROM_Write()</strong>を作成し実行します。関数内では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">コマンド</span></strong>を<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">時系列で実行</span></strong>していきます。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/i2c-write-format.jpg" alt="" class="wp-image-2720" width="535" height="170" srcset="https://depfields.com/wp-content/uploads/2020/06/i2c-write-format.jpg 535w, https://depfields.com/wp-content/uploads/2020/06/i2c-write-format-300x95.jpg 300w" sizes="(max-width: 535px) 100vw, 535px" /><figcaption>データ書き込み通信フォーマット</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>STM32のI2C通信ではデータ転送の合間に<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">さまざまなイベントが発生</span></strong>しています。実際のプログラムにおいては<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">イベントの状態を確認しながら手順を進めていく</span></strong>ことになります。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/i2c-eeprom-write.jpg" alt="" class="wp-image-2722" width="583" height="534" srcset="https://depfields.com/wp-content/uploads/2020/06/i2c-eeprom-write.jpg 725w, https://depfields.com/wp-content/uploads/2020/06/i2c-eeprom-write-300x275.jpg 300w" sizes="(max-width: 583px) 100vw, 583px" /></figure>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;①　スタートコンディションの生成&nbsp;</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>スタートコンディションは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">I2C_GenerateSTART関数</span></strong>を実行して生成すると<strong>自動的にマスターモードとなり、スレーブ側との通信を開始</strong>します。</p>
</div></div></div>



<p>I2C_GenerateSTART関数の実行例： I2C_GenerateSTART(I2C1, ENABLE);</p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>関数の第1引数は<strong>設定対象のI<sup>2</sup>C</strong>（I2C1,I2C2）、第2引数は<strong>ENABLEで有効、DISABLEで無効</strong>となります。</p>
</div></div></div>



<p>I2C_CheckEvent関数の実行例： while(!I2C_CheckEvent(I2C1, <strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">I2C_EVENT_MASTER_MODE_SELECT</span></strong>));</p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">I2C_CheckEvent関数</span></strong>を実行して、ここでは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">マスターモードになったかどうかを確認</span></strong>しています。</p>
</div></div></div>



<figure class="wp-block-image size-full"><img decoding="async" width="753" height="428" src="https://depfields.com/wp-content/uploads/2020/06/i2c-event.jpg" alt="" class="wp-image-11461" srcset="https://depfields.com/wp-content/uploads/2020/06/i2c-event.jpg 753w, https://depfields.com/wp-content/uploads/2020/06/i2c-event-300x171.jpg 300w" sizes="(max-width: 753px) 100vw, 753px" /><figcaption>I2Cイベントコード</figcaption></figure>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;②　I<sup>2</sup>C通信のモード指定 </span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ここでは<strong>I<sup>2</sup>C通信のモードを設定</strong>します。<strong>I2C_Send7bitAddress関数</strong>を実行して、スレーブ側（EEPROM）のアドレスとデータ方向（受信か送信）を指定します。</p>
</div></div></div>



<p>I2C_Send7bitAddress関数実行例：<br>　I2C_Send7bitAddress(I2C1, EEPROM_SLAVE_ADDRESS, I2C_Direction_Transmitter);</p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>関数の第1引数は<strong>設定対象のI<sup>2</sup>C</strong>（I2C1,I2C2）、第2引数は<strong>8ビットアドレスなのでスレーブアドレス<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">7ビットを左詰めにして指定</span></strong>します</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>採用している回路では<strong>EEPROMアドレス</strong>は上位4ビットが1010の固定で、下位3ビットがA0/A1/A2の指定で000の<strong>1010000</strong>(7ビット）です。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>これを左詰めにして<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%, rgba(255, 253, 107, 0.7) 0px);" class="vk_highlighter"><b>10100000(0xA0)（EEPROM_SLAVE_ADDRESS）</b></span>で指定します。第3引数には書き込みの場合ですのでデータ方向<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter"><strong>I2C_Direction</strong>に<strong>送信(Transmitter)を指定</strong></span>します。ここでも<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">I2C_CheckEvent関数を実行</span></strong>して、ここでは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">送信（トランスミッタ）モードになったかどうかを確認</span></strong>しています。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/i2c-direction.jpg" alt="" class="wp-image-2726" width="776" height="127" srcset="https://depfields.com/wp-content/uploads/2020/06/i2c-direction.jpg 780w, https://depfields.com/wp-content/uploads/2020/06/i2c-direction-300x49.jpg 300w, https://depfields.com/wp-content/uploads/2020/06/i2c-direction-768x125.jpg 768w" sizes="(max-width: 776px) 100vw, 776px" /></figure>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;③　EEPROMデータを格納するアドレス2バイト分を指定</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I<sup>2</sup>Cスレーブ側（EEPROM）に書き込むデータを格納するアドレス2バイト分を指定します。<strong>I2C_SendData</strong>関数を実行して上位、下位に分けて指定します。</p>
</div></div></div>



<p>I2C_SendData関数実行例：<br>　I2C_SendData(I2C1, (uint8_t)((Address &amp; 0xFF00) &gt;&gt; 8)); //上位アドレス<br>　I2C_SendData(I2C1, (uint8_t)(Address &amp; 0x00FF)); //下位アドレス</p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>関数の第1引数は<strong>設定対象のI2C</strong>（I2C1,I2C2）、第2引数は<strong>データを格納する2バイトアドレスを指定</strong>します。アドレス指定の範囲は各EEPROMの容量によりますのでデータシートで確認して<strong>使用できる範囲で指定</strong>します。</p>
</div></div></div>



<p>I2C_CheckEvent関数の実行例：<br>　while(!I2C_CheckEvent(I2C1, <strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">I2C_EVENT_MASTER_BYTE_TRANSMITTED</span></strong>);</p>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;④　EEPROMに</span><span style="background-color: #003300; color: #ffffff;">書き込みデータ（2バイト）を送信&nbsp;</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>EEPRONに書き込みたいデータをデータレジスタに転送します。③のアドレス転送時と同様でデータの上位と下位に分けて転送します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;⑤　ストップコンディション生成</span><span style="background-color: #003300; color: #ffffff;">&nbsp;</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ストップコンディションは<strong>I2C_GenerateSTOP関数</strong>を実行して生成します。関数の第1引数は<strong>設定対象のI<sup>2</sup>C</strong>（I2C1,I2C2）、第2引数は<strong>ENABLEで有効、DISABLEで無効</strong>となります。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;I<sup>2</sup>C_EEPROM_Poll関数</span><span style="background-color: #003300; color: #ffffff;">&nbsp;</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>EEPROMへの書き込みは前述した書き込み関数を実行してストップコンディションを生成してから開始します。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">EEPROMへの書き込みにはある程度時間がかかる</span></strong>ため、連続してデータを書き込むにはデータ転送が完了したことを確認してから次のデータを書き込まなければなりません。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>この処理に関してはSTM32メーカーにより作成した<strong>I2C_EEPROM_Poll関数</strong>がありますので<strong>そのまま使用</strong>します。EEPROM書き込みの際には<strong>I2C_EEPROM_Write関数</strong>とセットで実行します。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/i2c-eeprom-poll.jpg" alt="" class="wp-image-2730" width="641" height="225" srcset="https://depfields.com/wp-content/uploads/2020/06/i2c-eeprom-poll.jpg 699w, https://depfields.com/wp-content/uploads/2020/06/i2c-eeprom-poll-300x105.jpg 300w" sizes="(max-width: 641px) 100vw, 641px" /></figure>



<div style="background: #ffffea; padding: 15px; border: 1px solid #1a66ff; border-radius: 10px; word-break: break-all;">
<p>DATA(16ビット)をEEPROMアドレスADDRESS（2バイト）に送信する実行例：<br>　<strong>I2C_EEPROM_Write</strong>(DATA, ADDRESS)；<br>　<strong>I2C_EEPROM_Poll</strong>();</p>
</div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>



<h2 class="wp-block-heading">I<sup>2</sup>C仕様EEPROM読み込み</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I<sup>2</sup>C読み込みは下記のフォーマット手順に従った読み込み関数<strong>I2C_EEPROM_Read()</strong>を作成し実行します。この関数ではEEPROMの特定のデータが格納しているアドレスを指定するとデータを返します。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/i2c-read-format.jpg" alt="" class="wp-image-2731" width="646" height="163" srcset="https://depfields.com/wp-content/uploads/2020/06/i2c-read-format.jpg 656w, https://depfields.com/wp-content/uploads/2020/06/i2c-read-format-300x76.jpg 300w" sizes="(max-width: 646px) 100vw, 646px" /><figcaption>データ読み込み通信フォーマット</figcaption></figure>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/i2c-eeprom-read1.jpg" alt="" class="wp-image-9544" width="584" height="443" srcset="https://depfields.com/wp-content/uploads/2020/06/i2c-eeprom-read1.jpg 730w, https://depfields.com/wp-content/uploads/2020/06/i2c-eeprom-read1-300x228.jpg 300w" sizes="(max-width: 584px) 100vw, 584px" /></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>読み込みの場合は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">I<sup>2</sup>Cバスが事前に空いているかどうかを確認してから手順を始めます</span></strong>。<br>①から③までは書き込み関数の場合と同じです。ここで読み込みたいデータが格納しているアドレスを指定します。<strong>ここまではアドレスを指定するために送信モード</strong>で行っていました。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/i2c-eeprom-read2.jpg" alt="" class="wp-image-9545" width="615" height="523" srcset="https://depfields.com/wp-content/uploads/2020/06/i2c-eeprom-read2.jpg 697w, https://depfields.com/wp-content/uploads/2020/06/i2c-eeprom-read2-300x255.jpg 300w" sizes="(max-width: 615px) 100vw, 615px" /></figure>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;④　スタートコンディション生成（再スタート）</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ここから指定したアドレスのデータを<strong>受信するための切替</strong>に<strong>スタートコンディションを再度生成</strong>します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;⑤　I<sup>2</sup>C通信のモード指定&nbsp;</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>I<sup>2</sup>C通信モードを受信にするために<strong>I2C_Send7bitAddress関数</strong>を実行して、②と同様に第2引数はスレーブアドレスを、第3引数には読み込みの場合ですのでデータ方向I2C_Directionに<strong>受信(Receiver)を指定</strong>します。ここでも<strong>I2C_CheckEvent関数</strong>を実行して、ここでは受信（レシーバ）モードになったかどうかを確認しています。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;⑥ 　読み込みデータを受信&nbsp;</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>データ受信の準備ができたところで<strong>I2C_CheckEvent関数</strong>を実行して、受信レジスタにデータ転送完了の確認に続いて2バイトデータを上位1バイト分、下位1バイト分の順に受信します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;⑦ 　ACK無効指定&nbsp;</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>この時点で受信を終了させたいのでACKを返さずにNACK（ノットアクノリッジ）とするために、<strong>I2C_AcknowledgeConfig関数でACKを無効</strong>にしています。この例では受信する2バイトデータのうち最後の1バイト（下位バイト分）を受信する前に実行してNACKを返しています。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;⑧ 　ストップコンディション生成&nbsp;</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ストップコンディションを生成します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;⑨ 　ACK有効指定&nbsp;</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>次回の通信に備えて<strong>ACKを有効に戻します</strong>。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;⑩ 　読み出しデータ処理&nbsp;</span></p>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p> 受信した上位、下位データから2バイトデータに処理し、読み込み関数<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">I2C_EEPROM_Read</span></strong>の返り値とします。</p>
</div></div></div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>



<div style="display: inline-block; background: #191970; padding: 5px 10px; color: #ffffff; border-radius: 5px 5px 0px 0px;"><strong>ポイント</strong></div>
<div style="background: #ffffea; border-radius: 0px 10px 10px 10px; padding: 10px; border: 3px solid #191970;">
<p>I<sup>2</sup>Cはペリフェラルのなかでも繊細なもので、ライブラリの関数をブラックボックスとして使用するだけでは行き詰まるかもしれません。<strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">STM32レファレンスマニュアルとライブラリ関数の内容を照らし合わせて動作を確認すること</span></strong>が理解への早道でつぶしが効くようになります。</p>
</div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>


<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/i2c/" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><img class="lkc-favicon" src="https://www.google.com/s2/favicons?domain=en.depfields.com" alt="" width=16 height=16 /><div class="lkc-domain">Most Powerful Bible to Become an Embedded Engineer</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img class="lkc-thumbnail-img" src="//depfields.com/wp-content/uploads/pz-linkcard/cache/f3ccaa451444b03a0e373389dc02d1c5e1261aa167290d839a1c4be08f69fb51.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">Serial communication I2C[I2C details of STM32] | Most Powerful Bible to Becom...</div></div><div class="lkc-url">https://en.depfields.com/i2c/</div><div class="lkc-excerpt">This section explains how to use the STM32&#039;s built-in peripheral I2C. This chapter explains how to read and write data to an I2C-specification EEPROM as an example.What is serial communication I2C?Serial communication I2C is a</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/i2c/">シリアル通信I2C【STM32のI2C詳細】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
