<?xml version="1.0" encoding="utf-8"?><!-- generator="wordpress/ME for XOOPS 0.5.0RC-Final" -->
<rdf:RDF
	xmlns="http://purl.org/rss/1.0/"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:admin="http://webns.net/mvcb/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
>
<channel rdf:about="http://www.k0hobby.jp/modules/wordpress/index.php">
	<title>78K0横丁ブログ</title>
	<link>http://www.k0hobby.jp/modules/wordpress/index.php</link>
	<description>78K0に関するブログ。編集人多数。</description>
	<dc:language>ja</dc:language>
	<dc:date>2006-09-27T08:54:42+09:00</dc:date>
	<dc:creator>&#97;&#100;min&#64;k&#48;&#104;&#111;bb&#121;.j&#112;</dc:creator>
	<admin:generatorAgent rdf:resource="http://www.kowa.org/?v=0.5.0RC-Final"/>
	<admin:errorReportsTo rdf:resource="mailto:&#97;&#100;m&#105;n&#64;&#107;&#48;&#104;ob&#98;&#121;.&#106;&#112;"/>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
	<items>
		<rdf:Seq>
					<rdf:li rdf:resource="http://www.k0hobby.jp/modules/wordpress/index.php?p=44"/>
					<rdf:li rdf:resource="http://www.k0hobby.jp/modules/wordpress/index.php?p=43"/>
					<rdf:li rdf:resource="http://www.k0hobby.jp/modules/wordpress/index.php?p=42"/>
					<rdf:li rdf:resource="http://www.k0hobby.jp/modules/wordpress/index.php?p=41"/>
					<rdf:li rdf:resource="http://www.k0hobby.jp/modules/wordpress/index.php?p=39"/>
					<rdf:li rdf:resource="http://www.k0hobby.jp/modules/wordpress/index.php?p=37"/>
					<rdf:li rdf:resource="http://www.k0hobby.jp/modules/wordpress/index.php?p=36"/>
					<rdf:li rdf:resource="http://www.k0hobby.jp/modules/wordpress/index.php?p=35"/>
					<rdf:li rdf:resource="http://www.k0hobby.jp/modules/wordpress/index.php?p=33"/>
					<rdf:li rdf:resource="http://www.k0hobby.jp/modules/wordpress/index.php?p=29"/>
				</rdf:Seq>
	</items>
</channel>
<item rdf:about="http://www.k0hobby.jp/modules/wordpress/index.php?p=44">
	<title>78K0で電力料金計</title>
	<link>http://www.k0hobby.jp/modules/wordpress/index.php?p=44</link>
	<dc:date>2009-04-10T11:54:51+09:00</dc:date>
	<dc:creator>ome &lt;s&amp;#97;&amp;#107;&amp;#117;ma.&amp;#116;&amp;#64;g&amp;#97;&amp;#105;&amp;#111;&amp;#46;c&amp;#111;.jp&gt;</dc:creator>
	
	<dc:subject>工作</dc:subject>	<description>	予告どおり、今回は78K0を使ってコンセントに挿した家電製品の電気代を算出する「電力料金計」の製作記事です！計測を開始してからの時間と、現在の消費電力(1400Wまで)と、計測開始から現在までの電気料金が1秒ごとに更新されて表示されます。この電力料金計では、電圧は100V一定であるとみなし、電流のみを測定しているので、回路自体の誤差に加え、電圧の変動や電圧と電流の位相差によって誤差が生じます。力率を常に1として計算してしまうので、消費電力というよりは皮相電力になります。なので表示される電力は大まかですが、これよりあれのほうが電力を大きく消費する、とか、1時間使い続けると電気代が大体何円になるかとか、そういうことがわかります。パソコンのように、はっきりと消費電力が表示されていない機器の大まかな消費電力を知るのに便利です。■電力料金計の仕様！■CPU：uPD78F0503DAAC100V専用最大計測電力：1400W最大計測時間：約18時間最大積算料金：4294円96銭まで電力計測分解能：2W電力算出方式：テーブルタップを通過する電流実効値×100誤差：力率を算出しないことによる誤差を除いて約3％コンセント差込口：3口表示：USB接続したパソコン上のターミナルソフトさらに今回は昨秋リリースされた新マイコン統合開発プラットフォーム「CubeSuite」を使ってソフトを書いています！！！CubeSuiteのすごいところは、このソフト一つでコンパイル・アセンブル・シミュレーション・オンチップデバッグ・書き込みができることです。これまでの開発環境のように別々にダウンロード・インストールする必要がなく、一つですんでしまうのです！★重要★　安易にまねしないように！　★重要★今回の工作はAC100Vラインの被覆をむいてしまいます。なのできちんと絶縁をしないと、ギャー！大惨事！！！ということになりかねません。工作経験の少ない人はまねしないでください。この記事の執筆者(ome)は、記事の内容についてなんら責任を負いません。まねするときは、むき出しになったAC100Vラインとそのほかの導体部分の距離を十分に保つか、絶縁体をはさんできちんと絶縁してください！■■■まずは「CubeSuite」をインストール！■■■１．マイコン登録ユーザ　になる！NECエレクトロニクス　マイコン登録ユーザ　になっている人は、ここを飛ばして.NET Framework・Visual C++ ランタイムライブラリ　ダウンロードに進んでください。マイコン登録ユーザ　になっていない人はここ↓でhttps://www5.necel.com/micro/tool_reg/McTechNoteEntrance.do新規登録の方はこちら　をクリックして新規登録します。登録をして翌日か翌々日ぐらいに「このページにアクセスしてオンラインユーザ登録手続きを続行してください」という旨と、その手続きのためのURLが載ったメールが届くので、URLをクリックして手続きを完了させます。すると、ログインすればNECエレクトロニクスのサイトからフリーツールをダウンロードできるようになります。２．.NET Framework・Visual C++ ランタイムライブラリ　ダウンロード！！http://msdn.microsoft.com/ja-jp/netframework/default.aspxとhttp://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&amp;amp;displaylang=jaにアクセスして、「.NET Framework」と「Visual C++ ランタイムライブラリ」をダウンロード＆インストールしてください。すでにインストールしている人は３．CubeSuite　をダウンロードに進んでください。３．CubeSuite　をダウンロード！！！http://www.necel.com/micro/ja/freesoft/cubesuite/index.htmlにアクセスして、下のほうにスクロールするとダウンロードのためのボタンがあります。それをクリックして、同意したり、ログインしたりしてダウンロードします。ななんと450MBもあります。でっかいソフトなんですね。最初だけ時間かかりますが、これまでのように、コンパイラ・アセンブラ・シュミレータなどをいくつも別々にダウンロードしなくてすみます。便利です。ただ書き込みは、書き込み機能付インサーキットエミュレータ「MINICUBE」を接続しないとできないので、「MINICUBE」を持っていない人は書き込みソフト「PG-FPL3」をダウンロードしてください。ここ↓でダウンロードできます。http://www.necel.com/micro/ja/freesoft/78k0/kx2/index.html４．CubeSuite　をインストール！！！！！ダウンロードしたEXEファイルを起動すると次のようなウィンドウが出ます。次へをクリックしてすすみます。ここでは開発ツールはみんなインストールしてしまいましょう！ライセンスは購入していないので、この画面ではただ次へをクリックすれば大丈夫です。インストールが始まりました。450MBもあるだけに時間がかかります。omeの使用しているマシン（Pen4 2.6GHz 1GB）で約20分ぐらいかかりました。しばしの間待ちます。終わりました！さっそくこれでソフトを書いてみます！！起動中です。起動中の画面がかっこよい。起動直後の画面です。新しいプロジェクトを作成ＧＯをクリックして電力料金計のプロジェクト作成！！！※ターミナルソフトも必要なので、TeraTermをダウンロードしてインストールしておいてください。■■■ハードウェアの説明！■■■回路図はコレ↓。■回路の大まかな説明■左上らへんが電源部分で、ここでスイッチングACアダプタの+15Vから、OPアンプに必要な±12Vとマイコンの電源の+5Vを作っています。OPアンプはオフセット電圧の小ささと、ノイズの小ささからOP07CPにしました。下半分は左から電圧－電流変換のための抵抗、絶縁のためのトランス、入力された電圧を20倍するアンプ、全波整流回路です。ダイオードはなんでか2素子入りのものを使っていますが、べつにスイッチングダイオード2本でも大丈夫です。■78K0に入る前■1.抵抗に1Aの電流が流れると、オームの法則でV=RI=0.01×1=0.01[V]の交流電圧が抵抗の両端に生じます。これが20倍されて交流0.2[V]になります。2.さらにこれが全波整流回路に入り、実効値0.2[V]の脈流になります。3.これを78K0のA/D変換の入力端子に入れ、RMS-DC変換を78K0のソフトウェアで行います。■78K0に入った後■78K0のAVREF端子にはアナログ電圧のリファレンスとして、約4.096Vを抵抗の分圧で作って加えています。なので正しくA/D変換できるのは0～4.096Vになります。4Vをアンプの電圧利得の20倍で割ると0.2Vとなり、オームの法則からI=V/R=0.2/0.01=20[A]、これが　瞬間で　検出できる電流の限界になります。これはあくまで瞬間の最大の数字なので、仮に電流波形がゆがみのない正弦波であり、このときの電流のピークが20[A]であるとすると、このときの電流の実効値はこれをルート2で割った値、つまり14.14[A]になります。これに電圧の100Vをかけると、P=VI=100×14.14=約1400[W]が今回計れる最大の電力であることがわかります。※実効値の算出方法　実効値＝瞬間値の2乗の平均の平方根　標準のライブラリmath.h内の平方根を算出する関数sqrt()は、計算に数秒かかって　しまうので、計測周期の1秒に間に合いません。そこで　平方根　算出　でググると　あゆしゃ法（世界最速の平方根算出アルゴリズム）というのを見つけました。　http://ayusya.hp.infoseek.co.jp/ProgramAlgorithm.html#Sqrt　この↑ページを下にスクロールしていくとあります。　世界最速だけあって、なんと約4ms@10MHzで平方根を出せました！すごい！！！■■■ハードウェアの製作！■■■まずは電力料金計の電源になるACアダプタの加工です。秋月の15V0.8A出力の小さいやつです。電力料金計は必ずコンセントにつないで使うのに、使うたびに電力料金計のACアダプタをコンセントに挿していたのではめんどくさいので、電力料金計をテーブルタップと一体化させ、その途中からAC100Vをとることにします。ACアダプタを開けると内部はこんなんです。で、プラグは使わないのではずしてしまいます。AC100Vの入力とDC15Vの出力の線を引き出して、それが通るようにケースに穴を開けて、プラグがあったところがむき出しにならないようプラ板を入れてケースを閉めたらこんな風になります。今回使うテーブルタップです。普通の3口のやつです。加工したACアダプタから出した線を通す穴、テーブルタップのコードを通す穴、USBケーブルを通す穴を電力料金計のケースに開けます。写真は加工後のケースです。テーブルタップのコードの被覆をカッターでコの字の形に向きます。片側は芯線をむき出しにするだけ(写真の右側)にし、もう片側は線をむき出しにして、抵抗を取り付けられるだけの間隔をあけて芯線を切り(写真の左側)ます。今回は小さなケースを選んでしまったので、基板の上はとてもきゅうくつです。三端子レギュレータが三つ並んだ奥に、負電圧生成ICのLTC1144があります。三つ並んでいる8PのICが0P07CPです。ケースに入れるとき、基板の上にAC100Vの線がむき出しになっているので、絶縁のためにL字に曲げたプラ板を三端子レギュレータに取り付けています。ケースに入れた写真です。トランスもあるので中は結構ぎっしりです。ケースのふた部分がこれまたアルミ板なので、絶縁のためにプラ板を切ってのせてからふたをして完成です。●●●ソフトウェア●●●78K0のいいところは、コードサイズが32KまでCコンパイラが無料で使えるところです！コーディングが楽！！！ソースコードが結構大きくなってしまったので、ソースコードの公開はしません。すみません。ですが、文章でソフトウェアの概略のみ説明します。1.UART6をUSBシリアル変換ICにつなぎます。2.ターミナルソフトから&quot;S&quot;か&quot;s&quot;を受信したら計測と1秒ごとの送信を開始します。3.もう一度&quot;S&quot;か&quot;s&quot;を受信すると計測と送信を停止します。4.計測していないときに&quot;R&quot;か&quot;r&quot;を受信したら、それまでの時間・電気料金をゼロクリアします。5.計測中は1秒ごとに計測時間の変数をインクリメントします。6.計測中は1秒ごとの10msの間に128回、A/D変換とその結果の2乗の算出、合計を出します。7.128回の計測と2乗の算出、合計ができたら、その合計値を128で割って、2乗の平均値を出し、さらにそれの平方根を求めます。つまりA/D変換結果の実効値を求めるということです。8.A/D変換結果の実効値を電流の実効値に変換します。この電力料金計の分解能は最大20Aの入力、A/D変換のビット数を10とすると、20/1000=0.02A、これに100VをかけるとP=VI=100×0.02=2Wであることがわかります。つまり、A/D変換結果の実効値に2をかけた数字が電力になります。9.お世話になっている電力会社のホームページから1KWhあたりの電力料金を見つけて、それを3600で割ると単位が[KWs]、それをさらに1000で割ると単位が[Ws]となって、8.で求めた電力[Ws]と単位がそろいます。この数字を求めた電力にかけると、1秒あたりの電力料金になります。これを1秒ごとに積算していきます。10.5.で求めた計測時間、8.で求めた電力、9.で求めた積算電力料金を1秒ごとにパソコンに送信します。計測中は5.～10.が繰り返されることになります。■■■実際に計測！■■■計測中の画面はこんな感じ。右から計測時間:分:秒、そのときの電力、積算電力料金。パソコンは消費電力が表示されていないので、いったいどれぐらいのものなのかいつも疑問でした。そこで、omeが使用しているパソコンの電力を測ってみた！パソコンのスペック：Pen4 2.6GHz 1GB、19インチ液晶モニタ×2起動したあと何も作業していないとき(本体＋画面)120W、1時間で2.7円画面の電源が切れているとき(本体のみ)67W、1時間で1.5円スタンバイ時：24W、1時間で0.5円うーん、意外と少ない！パソコンはアメリカ主導で作られてきたし、DOS/Vパソコンのパーツ屋に行っても売っている電源は300Wとか400Wだからもっと大きいと思っていました。CPU使用率が100%になると180Wぐらいを示していました。それでも意外と少ない！■オマケ■消費電力が一定で変動しない場合は、電化製品の消費電力と、1KWhあたりの電力料金がわかっていれば、一時間あたりの電力料金は簡単に計算できます。電力料金[円]＝表示されている消費電力[W]÷1000×1KWhあたりの電力料金[円]例）20Wの蛍光灯、東京電力,従量電灯B,第1段階料金,燃料調整費なし　の場合　　20÷1000×17.87＝1時間当たり0.3574円

 </description>
	<content:encoded><![CDATA[<p>予告どおり、今回は78K0を使ってコンセントに挿した家電製品の電気代を算出する<br />「電力料金計」の製作記事です！<br />計測を開始してからの時間と、現在の消費電力(1400Wまで)と、計測開始から現在までの<br />電気料金が1秒ごとに更新されて表示されます。</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/512%C5%C5%CE%CF%CE%C1%B6%E2%B7%D7%B3%B0%B4%D1.jpg"><img title="512電力料金計外観.jpg" alt="512電力料金計外観.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-512%C5%C5%CE%CF%CE%C1%B6%E2%B7%D7%B3%B0%B4%D1.jpg"></a></p>
	<p>この電力料金計では、電圧は100V一定であるとみなし、電流のみを測定しているので、<br />回路自体の誤差に加え、電圧の変動や電圧と電流の位相差によって誤差が生じます。<br />力率を常に1として計算してしまうので、消費電力というよりは皮相電力になります。<br />なので表示される電力は大まかですが、これよりあれのほうが電力を大きく消費する、<br />とか、1時間使い続けると電気代が大体何円になるかとか、そういうことがわかります。<br />パソコンのように、はっきりと消費電力が表示されていない機器の大まかな消費電力を<br />知るのに便利です。</p>
	<p><font size="4">■電力料金計の仕様！■</font></p>
	<p>CPU：uPD78F0503DA<br />AC100V専用<br />最大計測電力：1400W<br />最大計測時間：約18時間<br />最大積算料金：4294円96銭まで<br />電力計測分解能：2W<br />電力算出方式：テーブルタップを通過する電流実効値×100<br />誤差：力率を算出しないことによる誤差を除いて約3％<br />コンセント差込口：3口<br />表示：USB接続したパソコン上のターミナルソフト</p>
	<p>さらに今回は昨秋リリースされた新マイコン統合開発プラットフォーム<br />「CubeSuite」を使ってソフトを書いています！！！<br />CubeSuiteのすごいところは、このソフト一つでコンパイル・アセンブル・シミュレーション・<br />オンチップデバッグ・書き込みができることです。これまでの開発環境のように<br />別々にダウンロード・インストールする必要がなく、一つですんでしまうのです！</p>
	<p><font style="color: rgb(255, 0, 0);" size="4">★重要★　安易にまねしないように！　★重要★</font><br style="color: rgb(255, 0, 0);"><br style="color: rgb(255, 0, 0);"><span style="color: rgb(255, 0, 0);">今回の工作はAC100Vラインの被覆をむいてしまいます。なのできちんと絶縁をしないと、</span><br style="color: rgb(255, 0, 0);"><span style="color: rgb(255, 0, 0);">ギャー！大惨事！！！ということになりかねません。工作経験の少ない人は</span><br style="color: rgb(255, 0, 0);"><span style="color: rgb(255, 0, 0);">まねしないでください。この記事の執筆者(ome)は、記事の内容についてなんら</span><br style="color: rgb(255, 0, 0);"><span style="color: rgb(255, 0, 0);">責任を負いません。まねするときは、むき出しになったAC100Vラインとそのほかの</span><br style="color: rgb(255, 0, 0);"><span style="color: rgb(255, 0, 0);">導体部分の距離を十分に保つか、絶縁体をはさんできちんと絶縁してください！</span></p>
	<p><font size="4">■■■まずは「CubeSuite」をインストール！■■■</font></p>
	<p>１．マイコン登録ユーザ　になる！<br />NECエレクトロニクス　マイコン登録ユーザ　になっている人は、ここを飛ばして<br />.NET Framework・Visual C++ ランタイムライブラリ　ダウンロードに進んでください。<br />マイコン登録ユーザ　になっていない人はここ↓で<br /><a href="https://www5.necel.com/micro/tool_reg/McTechNoteEntrance.do">https://www5.necel.com/micro/tool_reg/McTechNoteEntrance.do</a><br />新規登録の方はこちら　をクリックして新規登録します。<br />登録をして翌日か翌々日ぐらいに「このページにアクセスしてオンラインユーザ登録<br />手続きを続行してください」という旨と、その手続きのためのURLが載った<br />メールが届くので、URLをクリックして手続きを完了させます。すると、ログインすれば<br />NECエレクトロニクスのサイトからフリーツールをダウンロードできるようになります。</p>
	<p>２．.NET Framework・Visual C++ ランタイムライブラリ　ダウンロード！！<br /><a href="http://msdn.microsoft.com/ja-jp/netframework/default.aspx">http://msdn.microsoft.com/ja-jp/netframework/default.aspx</a><br />と<br /><a href="http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&amp;displaylang=ja">http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&amp;displaylang=ja</a><br />にアクセスして、「.NET Framework」と「Visual C++ ランタイムライブラリ」を<br />ダウンロード＆インストールしてください。<br />すでにインストールしている人は３．CubeSuite　をダウンロードに進んでください。</p>
	<p>３．CubeSuite　をダウンロード！！！<br /><a href="http://www.necel.com/micro/ja/freesoft/cubesuite/index.html">http://www.necel.com/micro/ja/freesoft/cubesuite/index.html</a><br />にアクセスして、下のほうにスクロールするとダウンロードのためのボタンがあります。<br />それをクリックして、同意したり、ログインしたりしてダウンロードします。<br />ななんと450MBもあります。でっかいソフトなんですね。最初だけ時間かかりますが、<br />これまでのように、コンパイラ・アセンブラ・シュミレータなどをいくつも別々に<br />ダウンロードしなくてすみます。便利です。<br />ただ書き込みは、書き込み機能付インサーキットエミュレータ「MINICUBE」を<br />接続しないとできないので、「MINICUBE」を持っていない人は書き込みソフト<br />「PG-FPL3」をダウンロードしてください。ここ↓でダウンロードできます。<br /><a href="http://www.necel.com/micro/ja/freesoft/78k0/kx2/index.html">http://www.necel.com/micro/ja/freesoft/78k0/kx2/index.html</a></p>
	<p>４．CubeSuite　をインストール！！！！！<br />ダウンロードしたEXEファイルを起動すると次のようなウィンドウが出ます。</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/451%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB%B3%AB%BB%CF.jpg"><img title="451インストール開始.jpg" alt="451インストール開始.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-451%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB%B3%AB%BB%CF.jpg"></a></p>
	<p>次へをクリックしてすすみます。ここでは開発ツールはみんなインストールして<br />しまいましょう！</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/452%B3%AB%C8%AF%A5%C4%A1%BC%A5%EB%C1%AA%C2%F2.jpg"><img title="452開発ツール選択.jpg" alt="452開発ツール選択.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-452%B3%AB%C8%AF%A5%C4%A1%BC%A5%EB%C1%AA%C2%F2.jpg"></a></p>
	<p>ライセンスは購入していないので、この画面ではただ次へをクリックすれば大丈夫です。</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/453%A5%E9%A5%A4%A5%BB%A5%F3%A5%B9%C5%D0%CF%BF.jpg"><img title="453ライセンス登録.jpg" alt="453ライセンス登録.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-453%A5%E9%A5%A4%A5%BB%A5%F3%A5%B9%C5%D0%CF%BF.jpg"></a></p>
	<p>インストールが始まりました。450MBもあるだけに時間がかかります。<br />omeの使用しているマシン（Pen4 2.6GHz 1GB）で約20分ぐらいかかりました。<br />しばしの間待ちます。</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/454%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB%C3%E6.jpg"><img title="454インストール中.jpg" alt="454インストール中.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-454%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB%C3%E6.jpg"></a></p>
	<p>終わりました！さっそくこれでソフトを書いてみます！！</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/455%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB%B4%B0%CE%BB.jpg"><img title="455インストール完了.jpg" alt="455インストール完了.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-455%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB%B4%B0%CE%BB.jpg"></a></p>
	<p>起動中です。起動中の画面がかっこよい。</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/501%B5%AF%C6%B0%C3%E6.jpg"><img title="501起動中.jpg" alt="501起動中.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-501%B5%AF%C6%B0%C3%E6.jpg"></a></p>
	<p>起動直後の画面です。新しいプロジェクトを作成ＧＯをクリックして<br />電力料金計のプロジェクト作成！！！</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/502%B5%AF%C6%B0%C4%BE%B8%E5.jpg"><img title="502起動直後.jpg" alt="502起動直後.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-502%B5%AF%C6%B0%C4%BE%B8%E5.jpg"></a></p>
	<p>※ターミナルソフトも必要なので、TeraTermをダウンロードしてインストール<br />しておいてください。</p>
	<p><font size="4">■■■ハードウェアの説明！■■■</font></p>
	<p>回路図はコレ↓。</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/514%C5%C5%CE%CF%CE%C1%B6%E2%B7%D7%B2%F3%CF%A9%BF%DE_01.jpg"><img title="514電力料金計回路図_01.jpg" alt="514電力料金計回路図_01.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-514%C5%C5%CE%CF%CE%C1%B6%E2%B7%D7%B2%F3%CF%A9%BF%DE_01.jpg"></a></p>
	<p>■回路の大まかな説明■<br />左上らへんが電源部分で、ここでスイッチングACアダプタの+15Vから、<br />OPアンプに必要な±12Vとマイコンの電源の+5Vを作っています。<br />OPアンプはオフセット電圧の小ささと、ノイズの小ささからOP07CPにしました。<br />下半分は左から電圧－電流変換のための抵抗、絶縁のためのトランス、<br />入力された電圧を20倍するアンプ、全波整流回路です。<br />ダイオードはなんでか2素子入りのものを使っていますが、べつにスイッチングダイオード<br />2本でも大丈夫です。</p>
	<p>■78K0に入る前■<br />1.抵抗に1Aの電流が流れると、オームの法則でV=RI=0.01×1=0.01[V]の<br />交流電圧が抵抗の両端に生じます。これが20倍されて交流0.2[V]になります。<br />2.さらにこれが全波整流回路に入り、実効値0.2[V]の脈流になります。<br />3.これを78K0のA/D変換の入力端子に入れ、RMS-DC変換を78K0のソフトウェアで行います。</p>
	<p>■78K0に入った後■<br />78K0のAVREF端子にはアナログ電圧のリファレンスとして、約4.096Vを抵抗の分圧で<br />作って加えています。なので正しくA/D変換できるのは0～4.096Vになります。<br />4Vをアンプの電圧利得の20倍で割ると0.2Vとなり、オームの法則からI=V/R=0.2/0.01=20[A]、<br />これが　瞬間で　検出できる電流の限界になります。これはあくまで瞬間の最大の<br />数字なので、仮に電流波形がゆがみのない正弦波であり、このときの電流のピークが<br />20[A]であるとすると、このときの電流の実効値はこれをルート2で割った値、<br />つまり14.14[A]になります。これに電圧の100Vをかけると、<br />P=VI=100×14.14=約1400[W]が今回計れる最大の電力であることがわかります。</p>
	<p>※実効値の算出方法<br />　実効値＝瞬間値の2乗の平均の平方根<br />　標準のライブラリmath.h内の平方根を算出する関数sqrt()は、計算に数秒かかって<br />　しまうので、計測周期の1秒に間に合いません。そこで　平方根　算出　でググると<br />　あゆしゃ法（世界最速の平方根算出アルゴリズム）というのを見つけました。<br />　<a href="http://ayusya.hp.infoseek.co.jp/ProgramAlgorithm.html#Sqrt">http://ayusya.hp.infoseek.co.jp/ProgramAlgorithm.html#Sqrt</a><br />　この↑ページを下にスクロールしていくとあります。<br />　世界最速だけあって、なんと約4ms@10MHzで平方根を出せました！すごい！！！</p>
	<p><font size="4">■■■ハードウェアの製作！■■■</font></p>
	<p>まずは電力料金計の電源になるACアダプタの加工です。秋月の15V0.8A出力の小さい<br />やつです。電力料金計は必ずコンセントにつないで使うのに、使うたびに電力料金計の<br />ACアダプタをコンセントに挿していたのではめんどくさいので、電力料金計を<br />テーブルタップと一体化させ、その途中からAC100Vをとることにします。</p>
	<p>ACアダプタを開けると内部はこんなんです。</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/503%A5%A2%A5%C0%A5%D7%A5%BF%C6%E2%C9%F4.jpg"><img title="503アダプタ内部.jpg" alt="503アダプタ内部.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-503%A5%A2%A5%C0%A5%D7%A5%BF%C6%E2%C9%F4.jpg"></a></p>
	<p>で、プラグは使わないのではずしてしまいます。</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/504%A5%A2%A5%C0%A5%D7%A5%BF%A5%D7%A5%E9%A5%B0%A4%CF%A4%BA%A4%B7.jpg"><img title="504アダプタプラグはずし.jpg" alt="504アダプタプラグはずし.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-504%A5%A2%A5%C0%A5%D7%A5%BF%A5%D7%A5%E9%A5%B0%A4%CF%A4%BA%A4%B7.jpg"></a></p>
	<p>AC100Vの入力とDC15Vの出力の線を引き出して、それが通るようにケースに穴を開けて、<br />プラグがあったところがむき出しにならないようプラ板を入れてケースを閉めたら<br />こんな風になります。</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/505%A5%A2%A5%C0%A5%D7%A5%BF%B2%C3%B9%A9%B8%E5.jpg"><img title="505アダプタ加工後.jpg" alt="505アダプタ加工後.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-505%A5%A2%A5%C0%A5%D7%A5%BF%B2%C3%B9%A9%B8%E5.jpg"></a></p>
	<p>今回使うテーブルタップです。普通の3口のやつです。</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/506%A5%C6%A1%BC%A5%D6%A5%EB%A5%BF%A5%C3%A5%D7.jpg"><img title="506テーブルタップ.jpg" alt="506テーブルタップ.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-506%A5%C6%A1%BC%A5%D6%A5%EB%A5%BF%A5%C3%A5%D7.jpg"></a></p>
	<p>加工したACアダプタから出した線を通す穴、テーブルタップのコードを通す穴、<br />USBケーブルを通す穴を電力料金計のケースに開けます。写真は加工後のケースです。</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/507%A5%B1%A1%BC%A5%B9%B2%C3%B9%A9%B8%E5.jpg"><img title="507ケース加工後.jpg" alt="507ケース加工後.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-507%A5%B1%A1%BC%A5%B9%B2%C3%B9%A9%B8%E5.jpg"></a></p>
	<p>テーブルタップのコードの被覆をカッターでコの字の形に向きます。片側は芯線を<br />むき出しにするだけ(写真の右側)にし、もう片側は線をむき出しにして、抵抗を<br />取り付けられるだけの間隔をあけて芯線を切り(写真の左側)ます。</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/508%A5%C6%A1%BC%A5%D6%A5%EB%A5%BF%A5%C3%A5%D7%B2%C3%B9%A9%B8%E5.jpg"><img title="508テーブルタップ加工後.jpg" alt="508テーブルタップ加工後.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-508%A5%C6%A1%BC%A5%D6%A5%EB%A5%BF%A5%C3%A5%D7%B2%C3%B9%A9%B8%E5.jpg"></a></p>
	<p>今回は小さなケースを選んでしまったので、基板の上はとてもきゅうくつです。<br />三端子レギュレータが三つ並んだ奥に、負電圧生成ICのLTC1144があります。<br />三つ並んでいる8PのICが0P07CPです。</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/509%B4%F0%C8%C4%B3%B0%B4%D1.jpg"><img title="509基板外観.jpg" alt="509基板外観.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-509%B4%F0%C8%C4%B3%B0%B4%D1.jpg"></a></p>
	<p>ケースに入れるとき、基板の上にAC100Vの線がむき出しになっているので、絶縁の<br />ためにL字に曲げたプラ板を三端子レギュレータに取り付けています。</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/510%A5%D7%A5%E9%C8%C4%BC%E8%A4%EA%C9%D5%A4%B1%B8%E5.jpg"><img title="510プラ板取り付け後.jpg" alt="510プラ板取り付け後.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/510%A5%D7%A5%E9%C8%C4%BC%E8%A4%EA%C9%D5%A4%B1%B8%E5.jpg" width="384"></a></p>
	<p>ケースに入れた写真です。トランスもあるので中は結構ぎっしりです。</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/511%C5%C5%CE%CF%CE%C1%B6%E2%B7%D7%C6%E2%C9%F4.jpg"><img title="511電力料金計内部.jpg" alt="511電力料金計内部.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-511%C5%C5%CE%CF%CE%C1%B6%E2%B7%D7%C6%E2%C9%F4.jpg"></a></p>
	<p>ケースのふた部分がこれまたアルミ板なので、絶縁のためにプラ板を切ってのせてから<br />ふたをして完成です。</p>
	<p><font size="4">●●●ソフトウェア●●●</font></p>
	<p>78K0のいいところは、コードサイズが32KまでCコンパイラが無料で使えるところです！<br />コーディングが楽！！！<br />ソースコードが結構大きくなってしまったので、ソースコードの公開はしません。<br />すみません。ですが、文章でソフトウェアの概略のみ説明します。</p>
	<p>1.UART6をUSBシリアル変換ICにつなぎます。</p>
	<p>2.ターミナルソフトから"S"か"s"を受信したら計測と1秒ごとの送信を開始します。</p>
	<p>3.もう一度"S"か"s"を受信すると計測と送信を停止します。</p>
	<p>4.計測していないときに"R"か"r"を受信したら、それまでの時間・電気料金をゼロクリアします。</p>
	<p>5.計測中は1秒ごとに計測時間の変数をインクリメントします。</p>
	<p>6.計測中は1秒ごとの10msの間に128回、A/D変換とその結果の2乗の算出、合計を出します。</p>
	<p>7.128回の計測と2乗の算出、合計ができたら、その合計値を128で割って、2乗の平均値を出し、<br />さらにそれの平方根を求めます。つまりA/D変換結果の実効値を求めるということです。</p>
	<p>8.A/D変換結果の実効値を電流の実効値に変換します。この電力料金計の分解能は<br />最大20Aの入力、A/D変換のビット数を10とすると、20/1000=0.02A、これに100Vを<br />かけるとP=VI=100×0.02=2Wであることがわかります。つまり、A/D変換結果の実効値に<br />2をかけた数字が電力になります。</p>
	<p>9.お世話になっている電力会社のホームページから1KWhあたりの電力料金を見つけて、<br />それを3600で割ると単位が[KWs]、それをさらに1000で割ると単位が[Ws]となって、8.で<br />求めた電力[Ws]と単位がそろいます。この数字を求めた電力にかけると、1秒あたりの<br />電力料金になります。これを1秒ごとに積算していきます。</p>
	<p>10.5.で求めた計測時間、8.で求めた電力、9.で求めた積算電力料金を1秒ごとに<br />パソコンに送信します。計測中は5.～10.が繰り返されることになります。</p>
	<p><font size="4">■■■実際に計測！■■■</font></p>
	<p>計測中の画面はこんな感じ。<br />右から計測時間:分:秒、そのときの電力、積算電力料金。</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/513%B2%E8%CC%CC.JPG"><img title="513画面.JPG" alt="513画面.JPG" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-513%B2%E8%CC%CC.JPG"></a></p>
	<p>パソコンは消費電力が表示されていないので、いったいどれぐらいのものなのか<br />いつも疑問でした。そこで、omeが使用しているパソコンの電力を測ってみた！</p>
	<p>パソコンのスペック：Pen4 2.6GHz 1GB、19インチ液晶モニタ×2<br />起動したあと何も作業していないとき(本体＋画面)120W、1時間で2.7円<br />画面の電源が切れているとき(本体のみ)67W、1時間で1.5円<br />スタンバイ時：24W、1時間で0.5円</p>
	<p>うーん、意外と少ない！<br />パソコンはアメリカ主導で作られてきたし、DOS/Vパソコンのパーツ屋に行っても<br />売っている電源は300Wとか400Wだからもっと大きいと思っていました。<br />CPU使用率が100%になると180Wぐらいを示していました。それでも意外と少ない！</p>
	<p><font size="4">■オマケ■</font></p>
	<p>消費電力が一定で変動しない場合は、電化製品の消費電力と、1KWhあたりの電力料金が<br />わかっていれば、一時間あたりの電力料金は簡単に計算できます。</p>
	<p>電力料金[円]＝表示されている消費電力[W]÷1000×1KWhあたりの電力料金[円]</p>
	<p>例）20Wの蛍光灯、東京電力,従量電灯B,第1段階料金,燃料調整費なし　の場合<br />　　20÷1000×17.87＝1時間当たり0.3574円
</p>]]></content:encoded>
</item>
<item rdf:about="http://www.k0hobby.jp/modules/wordpress/index.php?p=43">
	<title>78K0でラジコン</title>
	<link>http://www.k0hobby.jp/modules/wordpress/index.php?p=43</link>
	<dc:date>2009-03-11T09:58:10+09:00</dc:date>
	<dc:creator>ome &lt;&amp;#115;a&amp;#107;u&amp;#109;a&amp;#46;&amp;#116;&amp;#64;&amp;#103;a&amp;#105;o.&amp;#99;&amp;#111;&amp;#46;jp&gt;</dc:creator>
	
	<dc:subject>工作</dc:subject>	<description>	７８Ｋ０　＋　無線モジュール　＝　ラジコン！

 </description>
	<content:encoded><![CDATA[<p>これまでの記事78K0で無線通信<a title="78K0で無線通信(1)" href="http://www.k0hobby.jp/modules/wordpress/index.php?p=39">(1)</a><a title="78K0で無線通信(3)" href="http://www.k0hobby.jp/modules/wordpress/index.php?p=41">(2)</a><a title="78K0で無線通信(3)" href="http://www.k0hobby.jp/modules/wordpress/index.php?p=42">(3)</a>で<br />78K0のUARTを使って簡単に無線通信できることがわかりました。<br />今回はその応用編として、トイラジを動かしてみたいと思います！</p>
	<p>今回動かしたラジコン</p>
	<p><img title="201ラジコン外観.jpg" alt="201ラジコン外観.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/201%A5%E9%A5%B8%A5%B3%A5%F3%B3%B0%B4%D1.jpg"></p>
	<p><font size="5"><br />■■78K0でラジコンを制御することのメリット■■</font><br /><font size="3"><br />短く言うと高機能化。</font><br /><font size="3"><br />●メリット１●たくさんのものを制御できる</font><br />今回は前後左右のモーターのON/OFFだけを行っていますが、<br />もちろんソフトと回路次第でライト類の点灯・消灯など<br />制御対象となるものを自由に増やすことができるようになります。<br /><font size="3">●メリット２●自動操縦もできる</font><br />制御しているのが78K0なので、動作をプログラムの中に記述することで、<br />たとえばあるスイッチを押すと、自動で部屋を一周して戻ってくる、<br />というような自動操縦もできるようになります。<br /><font size="3">●メリット３●操縦される側にも自律性を持たせることができる</font><br />通常のラジコン受信機用ICは決まったことしかできません。<br />でも制御される側に78K0を使うことで、暗くなったら自動的に<br />ライトをつけたり、進む先に障害物があったら自動的にそれを<br />よけたりさせることができるようになります。<br />もちろんそれだけのプログラムを組むことが必要ですが。</p>
	<p>いろいろ書きましたが、今回は単純に走行用モータとステアリングのON/OFFの<br />制御だけを行います。</p>
	<p><font size="5">■■送信機■■</font></p>
	<p><font size="3">■ハードウェア■</font></p>
	<p>改造前の送信機です。</p>
	<p><img title="202送信機改造前.jpg" alt="202送信機改造前.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/202%C1%F7%BF%AE%B5%A1%B2%FE%C2%A4%C1%B0.jpg"></p>
	<p>分解すると･･･</p>
	<p><img title="203送信機分解.jpg" alt="203送信機分解.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/203%C1%F7%BF%AE%B5%A1%CA%AC%B2%F2.jpg"></p>
	<p>こうなってます。基板が裏返っていてちょっとしか見えませんが、この基板の<br />部品面に銅板？とすずめっき線による接点が設けられていて、それがレバーで<br />押されてスイッチとして機能しています。回路的にはこの基板のスイッチ部分だけを<br />使用します。基板上のスイッチ部分とそれ以外の箇所がつながっている部分を<br />カッターでパターンカットします。そして下のように回路を組み、配線します。</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/209%C1%F7%BF%AE%B5%A1%B2%F3%CF%A9%BF%DE.jpg"><img title="209送信機回路図.jpg" alt="209送信機回路図.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/209%C1%F7%BF%AE%B5%A1%B2%F3%CF%A9%BF%DE.jpg" width="503"></a></p>
	<p>配線し終わったのが、次の写真です。送信機の基板の上側にある蛇の目基板は<br />LM1117-ADJとコンデンサ、微弱無線送信モジュールが載っています。</p>
	<p><img title="205送信機配線.jpg" alt="205送信機配線.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/205%C1%F7%BF%AE%B5%A1%C7%DB%C0%FE.jpg"></p>
	<p>これを元の送信機のケースに戻したのがこの写真です。<br />トラ技78K0基板にUSBケーブルを挿せるように、ケースに切り欠きを入れています。</p>
	<p><img title="206送信機内部.jpg" alt="206送信機内部.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/206%C1%F7%BF%AE%B5%A1%C6%E2%C9%F4.jpg"></p>
	<p>ふたを閉めてプログラムを書き込めば、送信機として動作します。</p>
	<p><font size="4">■ソフトウェア■</font></p>
	<p>今回送信機側で必要なプログラムは以下のとおりです。<br />・radicon_tx.c<br />・uart6.c<br />・RamStart.asm<br />・trgbios.h<br />・radicon_tx.h<br />・RAMAPP.dr<br />radicon_tx.c、radicon_tx.h以外は前々回の記事（78K0で無線通信(2)）に掲載した<br />ものと同じものを使います。ただし、uart6.cの</p>
	<p>#include&nbsp;&nbsp; &nbsp;"wireless_test.h&#8221;</p>
	<p>の行を</p>
	<p>#include&nbsp;&nbsp; &nbsp;"radicon_tx.h&#8221;</p>
	<p>に変更して使ってください。</p>
	<p><font size="3">●ラジコン送信機メインプログラム　radicon_tx.c●</font></p>
	<p><font size="1">/*<br />■トラ技78K0付録基板<br />■uPD78F0730</p>
	<p>■radicon_tx.c<br />■315MHz微弱無線モジュールによるラジコン送信機</p>
	<p>2009.2.25作成</p>
	<p>*/</p>
	<p>#pragma&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;EI&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 全体割り込み許可命令を使用できるようにする */<br />#pragma&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;DI<br />#pragma &nbsp;&nbsp; &nbsp;sfr&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* プログラム上で直接SFR名でSFRを操作できるようにする */<br />#include&nbsp;&nbsp; &nbsp;"trgbios.h&#8221;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* トラ技CDのUSBの関数を使用するためにトラ技BIOSをインクルード */<br />#include&nbsp;&nbsp; &nbsp;"radicon_tx.h&#8221;</p>
	<p>/*<br />****************************************<br />&nbsp; main 初期化<br />****************************************<br />*/<br />void main( void )<br />{<br />/* クロックは内部発振 16 MHz */<br />/* 関数の宣言 */<br />&nbsp;&nbsp; &nbsp;unsigned char temp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* データ一時保存 */<br />/* 入出力ポートの初期化(0:出力,1:入力) */<br />&nbsp;&nbsp; &nbsp;PM0.0 = 0;<br />&nbsp;&nbsp; &nbsp;PM0.1 = 0;<br />&nbsp;&nbsp; &nbsp;PM1 = 0b11110001;<br />&nbsp;&nbsp; &nbsp;/*&nbsp;&nbsp; &nbsp;P10 スイッチ後<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P13 TxD6<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P15 スイッチ左<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P16 スイッチ右<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P17 スイッチ前<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; */<br />&nbsp;&nbsp; &nbsp;PM3.0 = 0;<br />&nbsp;&nbsp; &nbsp;PM3.1 = 0;<br />&nbsp;&nbsp; &nbsp;PM6.0 = 0;<br />&nbsp;&nbsp; &nbsp;PM6.1 = 0;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;PM12.0 = 0;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;P6.1 = 0;/* 起動中青消灯 */<br />/* 通信ポートの初期化 */<br />&nbsp;&nbsp; &nbsp;UART6_INIT( 0x09 , 13 , 0x04 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART6初期化(1200bps,8bit,none　CPUユーザーズマニュアル参照) */<br />&nbsp;&nbsp; &nbsp;UART6_MANEGE( 1 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART6動作開始 */</p>
	<p>/* タイマ50初期化 */<br />&nbsp;&nbsp; &nbsp;TCL50 = 0x07;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* クロックは1953.125Hz */<br />&nbsp;&nbsp; &nbsp;CR50 = 0xC3;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* インターバル周期は0.512mS*195 = 99.84mS */<br />&nbsp;&nbsp; &nbsp;TMC50 = 0x00;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* インターバル */</p>
	<p>/* タイマH1初期化 */<br />&nbsp;&nbsp; &nbsp;TMHMD1 = 0b01000000;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* タイマーH1クロックは3906.25Hz (周期0.256mS) インターバル */</p>
	<p>/* トラ技biosに対する割り込み関数の設定 */<br />&nbsp;&nbsp; &nbsp;trg_regintsrv( TRG_INTID_BSITM50 , READ_AND_TX );</p>
	<p>&nbsp;&nbsp; &nbsp;TMC50.7 = 1;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* タイマ50動作開始 */<br />&nbsp;&nbsp; &nbsp;MK0H.5 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* タイマ50割り込みマスクをクリア */</p>
	<p>&nbsp;&nbsp; &nbsp;P6.1 = 1;/* 青消灯 */</p>
	<p>/* 割り込み受付 */<br />&nbsp;&nbsp; &nbsp;EI();<br />&nbsp;&nbsp; &nbsp;while( 1 );/* 以後0.1Sごとにスイッチ読み込み＆送信 */<br />}</p>
	<p>/*<br />****************************************<br />&nbsp; スイッチの読み込みと送信<br />****************************************<br />*/<br />void READ_AND_TX( void )&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/*&nbsp;&nbsp; &nbsp;0.1秒ごとにスイッチの状態を読み込み、<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;それに応じた送信データを作る */<br />{<br />&nbsp;&nbsp; &nbsp;unsigned char txdata = 0x00;<br />&nbsp;&nbsp; &nbsp;IF1L.3 = 0;/* トラ技biosが動作しているため、割り込み要求フラグのクリアが必要 */<br />&nbsp;&nbsp; &nbsp;if( P1.6 == 0 )&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 右なら2ビット目1 */<br />&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;txdata = txdata | 0b00000100;<br />&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;else if( P1.5 == 0 )&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 左なら3ビット目1 */<br />&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;txdata = txdata | 0b00001000;<br />&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;if( P1.7 == 0 )&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 前なら0ビット目1 */<br />&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;txdata = txdata | 0b00000001;<br />&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;else if( P1.0 == 0 )&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 後なら1ビット目1 */<br />&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;txdata = txdata | 0b00000010;<br />&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;txdata = txdata &amp; 0b00001111;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 上位4ビットは使わないのでクリアしておく */<br />&nbsp;&nbsp; &nbsp;if( txdata != 0b00000000 )&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 前後左右のいずれかが押されているときのみ送信する */<br />&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P6.1 = 0;/* 送信中青点灯 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;UART6_TX( 0x55 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 受信側安定化待ち */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;UART6_TX( 0xff );<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;WAIT256U( 0x26 );<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;UART6_TX( 0x02 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* ヘッダ */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;UART6_TX( 0x0A );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* ヘッダ */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;UART6_TX( txdata + 0x40 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 無線で出力(UART6) *//* + 0x40 しているのはターミナルソフトでの表示のため */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;UART6_TX( 0x03 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* フッタ */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P6.1 = 1;/* 送信後青消灯 */<br />&nbsp;&nbsp; &nbsp;}<br />}</p>
	<p>/*<br />****************************************<br />&nbsp; タイマーH1を使った待ち時間生成<br />****************************************<br />*/<br />void WAIT256U( unsigned char c )<br />{<br />&nbsp;&nbsp; &nbsp;CMP01 = c;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* タイマーH1リセット周期は c * 256uS */<br />&nbsp;&nbsp; &nbsp;TMHMD1.7 = 1;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* タイマーH1動作開始 */<br />&nbsp;&nbsp; &nbsp;IF0H.3 = 0;<br />&nbsp;&nbsp; &nbsp;while( IF0H.3 != 1 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* タイマーH1リセットかかったらタイムアウト */<br />&nbsp;&nbsp; &nbsp;TMHMD1.7 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* タイマーH1動作停止 */<br />&nbsp;&nbsp; &nbsp;<br />}</font></p>
	<p><font size="3">●ラジコン送信機プログラム用ヘッダファイル　radicon_tx.h●</font></p>
	<p><font size="1">/*<br />■トラ技78K0付録基板<br />■uPD78F0730</p>
	<p>■radicon_tx.h<br />■315MHz微弱無線受信モジュールによるラジコン送信機のヘッダファイル</p>
	<p>2009.2.25作成</p>
	<p>*/</p>
	<p>/* メイン関数の宣言 */<br />void main( void );<br />/* サブ関数の宣言 */<br />void READ_AND_TX( void );<br />void WAIT256U( unsigned char );</p>
	<p>void UART6_INIT ( unsigned char , unsigned char , unsigned char );<br />void UART6_MANEGE ( unsigned char );<br />unsigned char UART6_RX( void );<br />void UART6_TX( unsigned char );</font></p>
	<p><font size="3">●プログラムの解説●</font></p>
	<p>タイマ50で約0.1秒ごとの割り込みをつくり、そのたびに前後左右のスイッチの<br />ON/OFFを読み込み、前後左右のいずれかがONであれば、送信を行います。</p>
	<p>寝ている送信モジュールを起こし、常にランダムデータを受信している<br />受信モジュールが正しくスタートビットを認識できるように、<br />前々回（78K0で無線通信(2)）と同じように、0x55・0xFF・ウェイト・0x02を<br />送信してから、前後左右のON/OFFデータを送信しています。</p>
	<p>今回のプログラムもトラ技BIOS上で動くものだったので、割り込みを使うためには<br />トラ技BIOS上のルールに従う必要がありました。<br />通常は78K0の開発環境でC言語を使うときはこのように、</p>
	<p>#pragma&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;interrupt INTTM50 READ_AND_TX nobank</p>
	<p>割り込みが生じたときに実行する関数を前処理指令で指定しますが、トラ技BIOS上で<br />割り込みを使うときには、</p>
	<p>trg_regintsrv( TRG_INTID_BSITM50 , READ_AND_TX );</p>
	<p>のようにトラ技BIOSの中にある割り込み関数設定用関数を使う必要があります。<br />また、通常の割り込みでは割り込み要求フラグは割り込みが生じると自動的に<br />クリアされますが、トラ技BIOS上ではこれを割り込みごとにクリアしてやる必要が<br />あります。クリアしないとクリアするまで次の割り込みが起こらないことになります。</p>
	<p>また、送信時にはトラ技基板上の青LEDを点灯させています。スイッチのすきまから<br />青い光が見えて、送信中であることがわかります。</p>
	<p><font size="5">■■受信機■■</font></p>
	<p><font size="3">■ハードウェア■</font></p>
	<p>まず元のラジコン受信機の基板に載っているトイラジ受信機専用ICのデータシートを<br />探してみてみるか、基板から回路図を起こして、基板のどこにどんな信号を入れれば<br />走行用モーター・ステアリング用モーターをまわせるのか調べます。<br />今回の基板ではモーターをドライブしているトランジスタが見つかったので、<br />基板のそのほかの部分に電源を供給しているパターンをカットして、それらの<br />トランジスタのベースにエレキジャック78K0基板のデジタル出力を接続しました。</p>
	<p><img title="208受信機基板.jpg" alt="208受信機基板.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/208%BC%F5%BF%AE%B5%A1%B4%F0%C8%C4.jpg"></p>
	<p>エレキジャック78K0基板側の回路もブレットボード上に組みます。</p>
	<p><img title="207受信機回路.jpg" alt="207受信機回路.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/207%BC%F5%BF%AE%B5%A1%B2%F3%CF%A9.jpg"></p>
	<p>回路図は下のとおりです。</p>
	<p><a href="http://www.k0hobby.jp/modules/wordpress/attach/210%BC%F5%BF%AE%B5%A1%B2%F3%CF%A9%BF%DE.jpg"><img title="210受信機回路図.jpg" alt="210受信機回路図.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/210%BC%F5%BF%AE%B5%A1%B2%F3%CF%A9%BF%DE.jpg" width="535"></a></p>
	<p><font size="3">■ソフトウェア■</font></p>
	<p>受信機側に必要なプログラムは以下のとおりです。<br />・radicon_rx.c<br />・uart6.c<br />・radicon_rx.h</p>
	<p>uart6.cは前々回（78K0で無線通信(2)）と同じものを使います。ただ、<br />送信側と同じように、</p>
	<p>#include&nbsp;&nbsp; &nbsp;"wireless_test.h&#8221;</p>
	<p>を</p>
	<p>#include&nbsp;&nbsp; &nbsp;"radicon_rx.h&#8221;</p>
	<p>に変更してください。</p>
	<p><font size="3">●ラジコン受信機メインプログラム　radicon_rx.c●</font></p>
	<p><font size="1">/*<br />■エレキジャック78K0付録基板<br />■uPD78F0503DA</p>
	<p>■radicon_rx.c<br />■315MHz微弱無線受信モジュールによるラジコン受信機</p>
	<p>2009.2.25作成</p>
	<p>*/</p>
	<p>#pragma&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;interrupt INTTM50 TURNOFF nobank/* タイマ50割り込み時に実行する関数 */<br />#pragma&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;DI&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 全体割り込み禁止命令を使用できるようにする */<br />#pragma&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;EI&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 全体割り込み許可命令を使用できるようにする */<br />#pragma &nbsp;&nbsp; &nbsp;sfr&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* プログラム上で直接SFR名でSFRを操作できるようにする */<br />#include&nbsp;&nbsp; &nbsp;"radicon_rx.h&#8221;</p>
	<p>/*<br />****************************************<br />&nbsp; ハードウェアの初期化<br />****************************************<br />*/<br />void INIT( void )<br />{<br />/* クリスタルは 10 MHz */<br />/* メモリ・クロック初期化 */<br />&nbsp;&nbsp; &nbsp;IMS&nbsp; = MEMORY_IMS_SET;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 内部RAM,内部ROMのメモリサイズ設定 */<br />&nbsp;&nbsp; &nbsp;AMPH = OSC_FREQ_CONT;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 発振周波数範囲の設定 */<br />&nbsp;&nbsp; &nbsp;OSCCTL = CLOCK_MODE;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* クロック動作モード設定 */</p>
	<p>&nbsp;&nbsp; &nbsp;MOC = 0x00;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* X1発振回路の発振開始 */<br />&nbsp;&nbsp; &nbsp;while( OSTC != 0x1f );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* X1入力クロック発振安定待ち（6.55ms以上） */<br />&nbsp;&nbsp; &nbsp;MCM&nbsp; = SYSTEM_CLOCK_SELECT;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* システムクロック供給選択 */<br />&nbsp;&nbsp; &nbsp;PCC&nbsp; = 0x00;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* CPU動作クロック：fx（10MHz）に設定 */</p>
	<p>/* 入出力ポートの初期化(0:出力,1:入力) */<br />&nbsp;&nbsp; &nbsp;/* PORT0 */<br />&nbsp;&nbsp; &nbsp;PM0.0 = 0;<br />&nbsp;&nbsp; &nbsp;PM0.1 = 0;<br />&nbsp;&nbsp; &nbsp;/* PORT1 */<br />&nbsp;&nbsp; &nbsp;PM1.0 = 0;/* TxD0 */<br />&nbsp;&nbsp; &nbsp;PM1.1 = 0;/* RxD0 */<br />&nbsp;&nbsp; &nbsp;PM1.2 = 0;<br />&nbsp;&nbsp; &nbsp;PM1.3 = 0;/* TxD6 */<br />&nbsp;&nbsp; &nbsp;PM1.4 = 1;/* RxD6 *//* 受信 */<br />&nbsp;&nbsp; &nbsp;PM1.5 = 0;/* 受信確認用 */<br />&nbsp;&nbsp; &nbsp;PM1.6 = 0;/* 右 */<br />&nbsp;&nbsp; &nbsp;PM1.7 = 0;<br />&nbsp;&nbsp; &nbsp;/* PORT2 A/D兼用 */<br />&nbsp;&nbsp; &nbsp;PM2.0 = 0;<br />&nbsp;&nbsp; &nbsp;PM2.1 = 0;<br />&nbsp;&nbsp; &nbsp;PM2.2 = 0;<br />&nbsp;&nbsp; &nbsp;PM2.3 = 0;<br />&nbsp;&nbsp; &nbsp;/* PORT3 割り込み兼用 */<br />&nbsp;&nbsp; &nbsp;PM3.0 = 0;/* 左 */<br />&nbsp;&nbsp; &nbsp;PM3.1 = 0;<br />&nbsp;&nbsp; &nbsp;PM3.2 = 0;/* 前 */<br />&nbsp;&nbsp; &nbsp;PM3.3 = 0;/* 後 */<br />&nbsp;&nbsp; &nbsp;/* PORT6 I2C */<br />&nbsp;&nbsp; &nbsp;PM6.0 = 0;<br />&nbsp;&nbsp; &nbsp;PM6.1 = 0;<br />&nbsp;&nbsp; &nbsp;/* PORT12.0 割り込み兼用 */<br />&nbsp;&nbsp; &nbsp;PM12.0 = 0;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;P1.5 = 1;/* 電源投入確認のためLED点灯 */<br />&nbsp;&nbsp; &nbsp;<br />/* UART初期化・動作開始 */<br />&nbsp;&nbsp; &nbsp;UART6_INIT( 0x06 , 0x41 , 0x04 );&nbsp;&nbsp; &nbsp;/* UART6初期化(1200bps,8bit,none　CPUユーザーズマニュアル参照) */<br />&nbsp;&nbsp; &nbsp;UART6_MANEGE( 1 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART6動作開始 */<br />/* タイマ50初期化 */<br />&nbsp;&nbsp; &nbsp;TCL50 = 0x07;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* クロックは2441.40625Hz */<br />&nbsp;&nbsp; &nbsp;CR50 = 0xF2;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 0.4096ms×242＝99.1232ms */<br />&nbsp;&nbsp; &nbsp;TMC50 = 0x00;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* インターバル */<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;MK0H.5 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* タイマ50割り込みマスククリア */<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;EI();&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 全体割り込み許可 */<br />}</p>
	<p>/*<br />****************************************<br />&nbsp; main 315MHz微弱無線受信<br />****************************************<br />*/</p>
	<p>void main( void )<br />{<br />/* 変数の宣言 */<br />&nbsp;&nbsp; &nbsp;unsigned char temp;<br />/* ハードウェアの初期化 */<br />&nbsp;&nbsp; &nbsp;INIT();&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* メモリ・クロック初期化、入出力設定 */<br />/* 無線受信→UART送信 */<br />&nbsp;&nbsp; &nbsp;while( 1 )<br />&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;temp = UART6_RX();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if( temp == 0x02 )<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;temp = UART6_RX();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if( temp == 0x0A )&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 連続で0x20,0x0Aを受信したときのみ駆動 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;temp = UART6_RX();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;DRIVE( temp );<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;}<br />}</p>
	<p>/*<br />****************************************<br />&nbsp; モータ駆動<br />****************************************<br />*/<br />void DRIVE ( unsigned char temp )<br />{<br />&nbsp;&nbsp; &nbsp;if( ( temp &lt;= 0x4A ) &amp; ( temp &gt;= 0x41 ) )<br />&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;TMC50.7 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* タイマ50動作停止 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P1.5 = 1;/* 受信LED点灯 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if( ( temp &amp; 0b00000001 ) == 0b00000001 )<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P3.2 = 1;/* 前駆動 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;else if( ( temp &amp; 0b00000010 ) == 0b00000010 )<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P3.3 = 1;/* 後駆動 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;else<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P3.2 = 0;/* 前後とも停止 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P3.3 = 0;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if( ( temp &amp; 0b00000100 ) == 0b00000100 )<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P1.6 = 1;/* 右駆動 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;else if( ( temp &amp; 0b00001000 ) == 0b00001000 )<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P3.0 = 1;/* 左駆動 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;else<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P1.6 = 0;/* 右左とも停止 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P3.0 = 0;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;TMC50.7 = 1;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* タイマ50動作開始 */<br />&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;else<br />&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P3.2 = 0;/* 前後右左とも停止 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P3.3 = 0;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P1.6 = 0;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P3.0 = 0;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P1.5 = 0;/* 受信LEDも消灯 */<br />&nbsp;&nbsp; &nbsp;}<br />}</p>
	<p>/*<br />****************************************<br />&nbsp; 一回受信につき0.1秒のみモーターを駆動<br />****************************************<br />*/<br />void TURNOFF ( void )<br />{<br />&nbsp;&nbsp; &nbsp;TMC50.7 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* タイマ50動作停止 */<br />&nbsp;&nbsp; &nbsp;P3.2 = 0;/* 前後右左とも停止 */<br />&nbsp;&nbsp; &nbsp;P3.3 = 0;<br />&nbsp;&nbsp; &nbsp;P1.6 = 0;<br />&nbsp;&nbsp; &nbsp;P3.0 = 0;<br />&nbsp;&nbsp; &nbsp;P1.5 = 1;/* 受信LED消灯 */<br />}</font></p>
	<p><font size="3">●ラジコン受信機プログラム用ヘッダファイル　radicon_rx.h●</font></p>
	<p><font size="1">/*<br />■エレキジャック技78K0付録基板<br />■uPD78F0503DA</p>
	<p>■radicon_rx.h<br />■315MHz微弱無線受信モジュールによるラジコン受信機のヘッダファイル</p>
	<p>2009.2.25作成</p>
	<p>*/</p>
	<p>#define MEMORY_IMS_SET&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;0xC8&nbsp;&nbsp; &nbsp;/* 内部RAM1KByte,内部ROM32KByteに設定 */<br />#define OSC_FREQ_CONT&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;0x00&nbsp;&nbsp; &nbsp;/* 発振周波数範囲「1 MHz≦fXH≦10 MHz」 */<br />#define CLOCK_MODE&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;0x40&nbsp;&nbsp; &nbsp;/* X1,X2端子をX1発振モードに設定 */<br />#define SYSTEM_CLOCK_SELECT&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;0x07&nbsp;&nbsp; &nbsp;/* CPUや周辺に高速システムクロックを供給 */</p>
	<p>/* メイン関数の宣言 */<br />void main( void );<br />/* サブ関数の宣言 */<br />void INIT( void );</p>
	<p>void UART6_INIT ( unsigned char , unsigned char , unsigned char );<br />void UART6_MANEGE ( unsigned char );<br />unsigned char UART6_RX( void );<br />void UART6_TX( unsigned char );</p>
	<p>void DRIVE ( unsigned char );<br />void TURNOFF ( void );</font></p>
	<p><font size="3">●プログラムの解説●</font></p>
	<p>信号がなければ何もせずにただ待ちます。連続して0x02,0x0Aを受信すると<br />そのあとの1バイトを読み込み、スイッチが入っているモーターをスイッチが<br />入っている方向にON（"H"を出力）します。同時にタイマを動作開始し、<br />その後約0.1秒以内に連続して0x02,0x0Aを受信しなければ、タイマの割り込みで<br />ONにしていたモーターをOFFにします。約0.1秒以内に連続して0x02,0x0Aを<br />受信すれば、タイマを停止してスイッチの入っているモーターをONにします。<br />そしてタイマを動作開始します。タイマは何かスイッチがONになっているときだけ<br />動作するということになります。<br />要は一回の受信につき約0.1秒間モーターを動かしているということです。<br />そして送信機のスイッチが連続してONされているときは、約0.1秒ごとに送受信<br />することになるので、連続してモーターも駆動されるということです。</p>
	<p>また、電源を入れるとLEDが点灯します。最初の連続した0x02,0x0A受信以後は<br />モーター動作中のみ点灯します。</p>
	<p>実はこのプログラムでは元のトイラジとは同じ動作をしません。トイラジの<br />ステアリングはON/OFFで、切れ角の制御をしていません。右いっぱいに切るか、<br />左いっぱいに切るか、切れ角0°（直進）のいずれかしかありません。<br />そしてステアリングの切れ角をトイラジ受信機専用ICに伝える信号線が<br />ステアリング部分から出ており、直進時はこの切れ角が0°でなくなったときに<br />反対方向にステアリングを切り、直進の状態を保ちます。</p>
	<p>今回のプログラムでは、ステアリングのモーターを単にON/OFFさせているだけ<br />なので、ステアリングのレバーを戻して直進にしても、ステアリングは切れたまま<br />になっています。ステアリングを切ったあとは切れたままのステアリングを<br />切れ角0°にするために、ステアリングを短時間反対側に切って戻してやる必要が<br />あります。もちろん切れ角検出の線を78K0に入力して、ソフトを変えてやれば<br />元のトイラジと同じように、ステアリングを切ったあとに自動的に切れ角0°に<br />戻してくれるようにすることもできます。</p>
	<p><font size="5">■■次回予告！！！■■</font><br />次回はトラ技・エレキジャック78K0基板を使って、コンセントに挿した家電製品の<br />電気代を算出してパソコン上に表示する電力料金計を製作します！！！<br />省エネもとい、エコが叫ばれる昨今、強力な味方となるはずです！！！<br />そしてその電力料金計のソフトは、去年の秋にリリースされた<br />マイコン統合開発プラットフォーム　<a title="CubeSuite特設サイト" href="http://www.necel.com/micro/ja/development/asia/Integrated_Development_Environment/CubeSuite/CubeSuite_vol.1.html">CubeSuite</a>　を使って書こうと思います！！！<br />乞うご期待！！！
</p>]]></content:encoded>
</item>
<item rdf:about="http://www.k0hobby.jp/modules/wordpress/index.php?p=42">
	<title>78K0で無線通信（3）</title>
	<link>http://www.k0hobby.jp/modules/wordpress/index.php?p=42</link>
	<dc:date>2009-03-04T15:52:51+09:00</dc:date>
	<dc:creator>ome &lt;&amp;#115;&amp;#97;k&amp;#117;ma&amp;#46;&amp;#116;&amp;#64;&amp;#103;&amp;#97;&amp;#105;&amp;#111;&amp;#46;co.&amp;#106;&amp;#112;&gt;</dc:creator>
	
	<dc:subject>工作</dc:subject>	<description>	実際に行った微弱無線通信実験の手順と、実験に必要なUARTの制御をするプログラム、
ヘッダファイル、プログラムの開始番地の指定ファイルを公開！

 </description>
	<content:encoded><![CDATA[<p>今回が78K0で微弱無線通信シリーズの最終回です！<br />といっても次回の記事も78K0＋微弱無線の予定で、<br />いきなり冒頭で次回予告ですが、78K0＋微弱無線でラジコンを動かしてみます！<br />というか動きました！！！次回をお楽しみに！<br />掲載が延び延びになった<font size="a?μa??a?o">送信側78K0用HEXファイル・受信側78K0用HEXファイル</font>も<br />このページの一番下にあります！お待たせいたしました！！</p>
	<p>前回の予告どおり、実際に行った実験の手順をご紹介！<br />また、実験に必要で前回掲載できなかった、UARTの制御をするプログラム、<br />ヘッダファイル、プログラムの開始番地の指定ファイルも大公開！</p>
	<p>前回（78K0で無線通信(1)）、前々回（78K0で無線通信(2)）の記事を<br />読んでおられない方はぜしあわせてお読みください！</p>
	<p><font size="3"><br />■■プログラムを動作させて実際に微弱無線通信してみる手順■■</font><br />では実際に読者の方が78K0で無線通信(1)回路を組んだとして、実際に<br />わたしが行ったのと同じ微弱無線通信を行う手順を紹介します。</p>
	<p>●受信側のプログラムの書き込み●<br />回路を組んでパソコンとUSB接続し、PG-FPL3を起動して受信側78K0用HEXファイル<br />を書き込みます。回路図の青い*の部分を書き込んだあとに動作側に切り替える<br />のをお忘れなく。</p>
	<p>●送信側プログラムの書き込み●<br />トラ技BIOSはとても便利なので、これを消さずに動作させます。なのでPG-FPL3を<br />使わず、トラ技BIOSを使って書き込みます。</p>
	<p>まず回路を組んでパソコンとUSB接続し、Teratermを起動します。<br />Teratermの設定は<br />ポート：トラ技基板が接続されているポート<br />ボーレート：何でもいいけど115200が速い<br />データ：8bit<br />パリティ：なし<br />ストップ：1bit<br />フロー制御：なし<br />にします。<br />Enterを押すと下のような画面になります。これでトラ技BIOSが起動しました。</p>
	<p><img title="101トラ技BIOS起動.JPG" alt="101トラ技BIOS起動.JPG" src="http://www.k0hobby.jp/modules/wordpress/attach/101%A5%C8%A5%E9%B5%BBBIOS%B5%AF%C6%B0.JPG"></p>
	<p>ここで"load"と入力しEnterを押すと、Drop a HEX file. と表示されるので、<br />送信側78K0用HEXファイルをTeratermの白い部分にドラッグアンドドロップします。<br />すると次のような画面になります。これで送信側の書き込みも終わりです。</p>
	<p><img title="102HEXファイルドロップ後.JPG" alt="102HEXファイルドロップ後.JPG" src="http://www.k0hobby.jp/modules/wordpress/attach/102HEX%A5%D5%A5%A1%A5%A4%A5%EB%A5%C9%A5%ED%A5%C3%A5%D7%B8%E5.JPG"></p>
	<p>●いよいよ微弱無線通信！！！●<br />送信側のTeratermは終了させずに、"jmp f000&Prime;と入力しEnterを押します。<br />すると下のような画面になり、書き込んだプログラムが動作し始めます。<br />これで送信側の準備はOKです。</p>
	<p><img title="103jmpf000.jpg" alt="103jmpf000.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/103jmpf000.jpg"></p>
	<p>受信側はPG-FPL3を終了して、代わりに受信のためにもう一つTeratermを起動します。<br />その設定は<br />ポート：FT232RLが接続されているポート<br />ボーレート：19200<br />データ：8bit<br />パリティ：なし<br />ストップ：1bit<br />フロー制御：なし<br />にします。これで受信側の準備も終わりです。</p>
	<p>この準備が終わった状態で送信側のTeratermをアクティブにし、<br />キーボードを適当に打ってみてください。送信側で"asdf"と打ったら、</p>
	<p><img title="104送信側.JPG" alt="104送信側.JPG" src="http://www.k0hobby.jp/modules/wordpress/attach/104%C1%F7%BF%AE%C2%A6.JPG"></p>
	<p>受信側のTeratermにも"asdf"と表示されました！！通信は大成功！！！</p>
	<p><img title="105受信側.JPG" alt="105受信側.JPG" src="http://www.k0hobby.jp/modules/wordpress/attach/105%BC%F5%BF%AE%C2%A6.JPG"></p>
	<p><font style="font-weight: bold;" size="3">■■次回予告！！！■■</font><br />冒頭でもいきなり次回予告してしまいましたが、来週はこれまでの無線通信実験の<br />応用編として78K0でラジコンを動かします！<br />そいでもってomeの投稿記事の次々回予告もしますが、今度は78K0を使って<br />さらに微弱無線でまた別なことをやりたいと思います！！！<br />さらにさらに！去年の秋に新しく公開された<font size="2">マイコン統合開発プラットフォーム<br /></font>　CubeSuite　も使ってみようと思います！！！乞うご期待！！！</p>
	<p><font size="3">■■前回掲載できなかった実験に必要なそのほかのファイル</font><font size="3">■■</font><br />いっぱいスクロールしなくてもよいようにプログラム本文やHEXファイルの<br />フォントを小さくしてあります。メモ帳などにコピーして参照ください。</p>
	<p><font size="3">●●送信側に必要なファイル●●</font><br />送信側には以下の4つのファイルと送信側メインプログラム　wireless_test.cが<br />必要です。<br />・送信側ヘッダファイル　wireless_test.h<br />・送信側ヘッダファイル　trgbios.h<br />・UART6制御プログラム　uart6.c<br />・プログラムの開始番地の指定ファイル　RAMAPP.dr</p>
	<p>●送信側ヘッダファイル　wireless_test.h●</p>
	<p><font size="1">/*<br />■トラ技78K0付録基板<br />■uPD78F0730</p>
	<p>■wireless_test.h<br />■315MHz微弱無線受信モジュールのテスト用ヘッダ</p>
	<p>2008.12.10作成</p>
	<p>*/</p>
	<p>/* メイン関数の宣言 */<br />void main( void );<br />/* サブ関数の宣言 */<br />void WAIT256U( unsigned char );</p>
	<p>void UART6_INIT ( unsigned char , unsigned char , unsigned char );<br />void UART6_MANEGE ( unsigned char );<br />unsigned char UART6_RX( void );<br />void UART6_TX( unsigned char );</font></p>
	<p>●送信側ヘッダファイル　trgbios.h●<br />→トラ技2008年8月号付録CD-ROMからコピーしてください</p>
	<p>●UART6制御プログラム　uart6.c●</p>
	<p><font size="1">/*<br />■トラ技78K0付録基板<br />■uPD78F0730</p>
	<p>■uart6.c<br />■UART6初期化・送受信</p>
	<p>2008.12.10作成</p>
	<p>*/</p>
	<p>#pragma &nbsp;&nbsp; &nbsp;sfr&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* プログラム上で直接SFR名でSFRを操作できるようにする */<br />#include&nbsp;&nbsp; &nbsp;"wireless_test.h&#8221;</p>
	<p>/*<br />****************************************<br />&nbsp; UART6 初期化<br />****************************************<br />*/<br />void UART6_INIT ( unsigned char u6clk , unsigned char u6rate , unsigned char u6mode )<br />{<br />//&nbsp;&nbsp; &nbsp;STMK6 = 0; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 割り込み処理許可 */<br />//&nbsp;&nbsp; &nbsp;STPR6 = 0; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 高優先順位レベル */</p>
	<p>&nbsp;&nbsp; &nbsp;P1.3 = 1;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* P13から"H"を出力 */</p>
	<p>&nbsp;&nbsp; &nbsp;CKSR6 = u6clk;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART基本クロックの選択 */<br />&nbsp;&nbsp; &nbsp;BRGC6 = u6rate;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* ボーレートの設定 */<br />&nbsp;&nbsp; &nbsp;ASIM6 = u6mode;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 動作モードの設定 */<br />}</p>
	<p>/*<br />****************************************<br />&nbsp; UART6 動作開始・停止<br />****************************************<br />*/<br />void UART6_MANEGE ( unsigned char m )<br />{<br />&nbsp;&nbsp; &nbsp;unsigned char i;<br />&nbsp;&nbsp; &nbsp;if( m == 0x01 )&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 引数 1 なら動作開始 */<br />&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;POWER6 = 1;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 内部動作クロックの許可 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;TXE6 = 1;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 送信動作許可 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;RXE6 = 1;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 受信動作許可 */<br />&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;else if( m == 0x00 )&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 引数 0 なら動作停止 */<br />&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;TXE6 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 送信動作禁止 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;RXE6 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 送信動作禁止 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;POWER6 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 内部動作クロックの禁止 */<br />&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;for( i = 0; i &lt; 50; i++ );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 動作安定のためのwait */<br />}</p>
	<p>/*<br />****************************************<br />&nbsp; UART6 1バイト受信<br />****************************************<br />*/<br />unsigned char UART6_RX( void )<br />{<br />/* 変数の宣言 */<br />&nbsp;&nbsp; &nbsp;char rx1byte;<br />&nbsp;&nbsp; &nbsp;char rx_err;</p>
	<p>&nbsp;&nbsp; &nbsp;while( SRIF6 != 1 )&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART受信完了フラグが立つまでループ */<br />&nbsp;&nbsp; &nbsp;rx_err = ASIS6;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART受信エラー・ステータス変数"rx_err"へ代入 */<br />&nbsp;&nbsp; &nbsp;rx1byte = RXB6;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART受信データを変数(rx_ascii)へ代入 */<br />&nbsp;&nbsp; &nbsp;SRIF6 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART受信完了フラグをクリア */<br />&nbsp;&nbsp; &nbsp;return rx1byte;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 受信した1バイトを返す */<br />&nbsp;&nbsp; &nbsp;<br />}</p>
	<p>/*<br />****************************************<br />&nbsp; UART6 1バイト送信<br />****************************************<br />*/<br />void UART6_TX( unsigned char tx1byte )<br />{<br />&nbsp;&nbsp; &nbsp;while( ASIF6 != 0x00 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 送信可になるまでループ */<br />&nbsp;&nbsp; &nbsp;TXB6 = tx1byte;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 送信バッファレジスタへ送信データの書き込み */</p>
	<p>&nbsp;&nbsp; &nbsp;P1.5 = 0;/* 通信中赤点灯 */<br />&nbsp;&nbsp; &nbsp;while( STIF6 != 1 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART送信完了フラグが立つまでループ */<br />&nbsp;&nbsp; &nbsp;STIF6 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART送信完了フラグをクリア */<br />&nbsp;&nbsp; &nbsp;P1.5 = 1;<br />}</font></p>
	<p>●プログラムの開始番地の指定ファイル　RAMAPP.dr●<br />→トラ技2008年8月号付録CD-ROMからコピーしてください</p>
	<p><font size="3">●●受信側に必要なファイル●●</font><br />受信側には以下の3つのファイルと受信側メインプログラム　wireless_test.cが<br />必要です。<br />・UART6制御プログラム　uart6.c（送信側とは別物）<br />・UART0制御プログラム　uart0.c<br />・受信側ヘッダファイル　wireless_test.h（送信側とは別物）</p>
	<p>●UART6制御プログラム　uart6.c（送信側とは別物）●</p>
	<p><font size="1">/*<br />■エレキジャック78K0付録基板<br />■uPD78F0503DA</p>
	<p>■uart6.c<br />■UART6初期化・送受信</p>
	<p>2008.12.10作成</p>
	<p>*/</p>
	<p>#pragma &nbsp;&nbsp; &nbsp;sfr&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* プログラム上で直接SFR名でSFRを操作できるようにする */<br />#include&nbsp;&nbsp; &nbsp;"wireless_test.h&#8221;</p>
	<p>/*<br />****************************************<br />&nbsp; UART6 初期化<br />****************************************<br />*/<br />void UART6_INIT ( unsigned char u6clk , unsigned char u6rate , unsigned char u6mode )<br />{<br />//&nbsp;&nbsp; &nbsp;STMK6 = 0; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 割り込み処理許可 */<br />//&nbsp;&nbsp; &nbsp;STPR6 = 0; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 高優先順位レベル */</p>
	<p>&nbsp;&nbsp; &nbsp;P1.3 = 1;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* P13から"H"を出力 */</p>
	<p>&nbsp;&nbsp; &nbsp;CKSR6 = u6clk;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART基本クロックの選択 */<br />&nbsp;&nbsp; &nbsp;BRGC6 = u6rate;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* ボーレートの設定 */<br />&nbsp;&nbsp; &nbsp;ASIM6 = u6mode;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 動作モードの設定 */<br />}</p>
	<p>/*<br />****************************************<br />&nbsp; UART6 動作開始・停止<br />****************************************<br />*/<br />void UART6_MANEGE ( unsigned char m )<br />{<br />&nbsp;&nbsp; &nbsp;unsigned char i;<br />&nbsp;&nbsp; &nbsp;if( m == 0x01 )&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 引数 1 なら動作開始 */<br />&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;POWER6 = 1;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 内部動作クロックの許可 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;TXE6 = 1;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 送信動作許可 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;RXE6 = 1;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 受信動作許可 */<br />&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;else if( m == 0x00 )&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 引数 0 なら動作停止 */<br />&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;TXE6 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 送信動作禁止 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;RXE6 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 送信動作禁止 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;POWER6 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 内部動作クロックの禁止 */<br />&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;for( i = 0; i &lt; 50; i++ );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 動作安定のためのwait */<br />}</p>
	<p>/*<br />****************************************<br />&nbsp; UART6 1バイト受信<br />****************************************<br />*/<br />unsigned char UART6_RX( void )<br />{<br />/* 変数の宣言 */<br />&nbsp;&nbsp; &nbsp;char rx1byte;<br />&nbsp;&nbsp; &nbsp;char rx_err;</p>
	<p>&nbsp;&nbsp; &nbsp;P1.6 = 1;<br />&nbsp;&nbsp; &nbsp;P1.7 = 1;<br />&nbsp;&nbsp; &nbsp;while( (SRIF6 != 1) &amp; (ASIS6 == 0x00) );/* UART受信完了フラグまたはエラーフラグが立つまでループ */<br />&nbsp;&nbsp; &nbsp;if( SRIF6 == 1 )<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P1.7 = 0;<br />&nbsp;&nbsp; &nbsp;else<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P1.6 = 0;<br />&nbsp;&nbsp; &nbsp;rx_err = ASIS6;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART受信エラー・ステータス変数"rx_err"へ代入 */<br />&nbsp;&nbsp; &nbsp;rx1byte = RXB6;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART受信データを変数(rx_ascii)へ代入 */<br />&nbsp;&nbsp; &nbsp;SRIF6 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART受信完了フラグをクリア */<br />&nbsp;&nbsp; &nbsp;SREIF6 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART受信エラーフラグをクリア */<br />&nbsp;&nbsp; &nbsp;return rx1byte;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 受信した1バイトを返す */<br />&nbsp;&nbsp; &nbsp;<br />}</p>
	<p>/*<br />****************************************<br />&nbsp; UART6 1バイト送信<br />****************************************<br />*/<br />void UART6_TX( unsigned char tx1byte )<br />{<br />&nbsp;&nbsp; &nbsp;while( ASIF6 != 0x00 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 送信可になるまでループ */<br />&nbsp;&nbsp; &nbsp;TXB6 = tx1byte;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 送信バッファレジスタへ送信データの書き込み */</p>
	<p>&nbsp;&nbsp; &nbsp;while( STIF6 != 1 )&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART送信完了フラグが立つまでループ */<br />&nbsp;&nbsp; &nbsp;STIF6 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART送信完了フラグをクリア */<br />}</font></p>
	<p>●UART0制御プログラム　uart0.c●</p>
	<p><font size="1">/*<br />■エレキジャック78K0付録基板<br />■uPD78F0503DA</p>
	<p>■uart6.c<br />■UART6初期化・送受信</p>
	<p>2008.12.3作成</p>
	<p>*/</p>
	<p>#pragma &nbsp;&nbsp; &nbsp;sfr&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* プログラム上で直接SFR名でSFRを操作できるようにする */<br />#include&nbsp;&nbsp; &nbsp;"wireless_test.h&#8221;</p>
	<p>/*<br />****************************************<br />&nbsp; UART0 初期化<br />****************************************<br />*/</p>
	<p>void UART0_INIT( unsigned char u0rate , unsigned char u0mode )<br />{</p>
	<p>&nbsp;&nbsp; &nbsp;P1.0 = 1;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* P10から"H"を出力 */</p>
	<p>&nbsp;&nbsp; &nbsp;BRGC0 = u0rate;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* ボーレートの設定 */<br />&nbsp;&nbsp; &nbsp;ASIM0 = u0mode;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 動作モードの設定 */<br />}</p>
	<p>/*<br />****************************************<br />&nbsp; UART0 動作開始・停止<br />****************************************<br />*/</p>
	<p>void UART0_MANEGE ( unsigned char m )<br />{<br />&nbsp;&nbsp; &nbsp;unsigned char i;<br />&nbsp;&nbsp; &nbsp;if( m == 0x01 )&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 引数 1 なら動作開始 */<br />&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;POWER0 = 1;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 内部動作クロックの許可 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;TXE0 = 1;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 送信動作許可 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;RXE0 = 1;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 受信動作許可 */<br />&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;else if( m == 0x00 )&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 引数 0 なら動作停止 */<br />&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;TXE0 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 送信動作禁止 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;RXE0 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 送信動作禁止 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;POWER0 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 内部動作クロックの禁止 */<br />&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;for( i = 0; i &lt; 50; i++ );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 動作安定のためのwait */<br />}</p>
	<p>/*<br />****************************************<br />&nbsp; UART0 1バイト受信<br />****************************************<br />*/</p>
	<p>unsigned char UART0_RX( void )<br />{<br />/*** 変数の宣言 ***/<br />&nbsp;&nbsp; &nbsp;char rx_1byte;<br />&nbsp;&nbsp; &nbsp;char rx_err;</p>
	<p>&nbsp;&nbsp; &nbsp;while( IF1L.1 != 1 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART受信完了フラグが立つまでループ */<br />&nbsp;&nbsp; &nbsp;rx_err = ASIS0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART受信エラー・ステータス変数"rx_err"へ代入 */<br />&nbsp;&nbsp; &nbsp;rx_1byte = RXB0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART受信データを変数(rx_ascii)へ代入 */<br />&nbsp;&nbsp; &nbsp;IF1L.1 = 0; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART受信完了フラグをクリア */<br />&nbsp;&nbsp; &nbsp;return rx_1byte;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 受信した1バイトを返す */<br />}</p>
	<p>/*<br />****************************************<br />&nbsp; UART0 1バイト送信<br />****************************************<br />*/</p>
	<p>void UART0_TX( unsigned char tx_ascii )<br />{<br />&nbsp;&nbsp; &nbsp;while( IF0H.2 != 0x00 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 送信可になるまでループ */<br />&nbsp;&nbsp; &nbsp;TXS0 = tx_ascii;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 送信バッファレジスタへ送信データの書き込み */</p>
	<p>&nbsp;&nbsp; &nbsp;while( IF0H.2 != 1 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART送信完了フラグが立つまでループ */<br />&nbsp;&nbsp; &nbsp;IF0H.2 = 0; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART送信完了フラグをクリア */<br />}<br /></font></p>
	<p>●受信側ヘッダファイル　wireless_test.h（送信側とは別物）●</p>
	<p><font size="1">/*<br />■エレキジャック78K0付録基板<br />■uPD78F0503DA</p>
	<p>■wireless_test.h<br />■315MHz微弱無線モジュールのテスト(エレキジャック基板:受信側 トラ技基板:送信側)</p>
	<p>2008.12.3作成</p>
	<p>*/</p>
	<p>#define MEMORY_IMS_SET&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;0xC8&nbsp;&nbsp; &nbsp;/* 内部RAM1KByte,内部ROM32KByteに設定 */<br />#define OSC_FREQ_CONT&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;0x00&nbsp;&nbsp; &nbsp;/* 発振周波数範囲「1 MHz≦fXH≦10 MHz」 */<br />#define CLOCK_MODE&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;0x40&nbsp;&nbsp; &nbsp;/* X1,X2端子をX1発振モードに設定 */<br />#define SYSTEM_CLOCK_SELECT&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;0x07&nbsp;&nbsp; &nbsp;/* CPUや周辺に高速システムクロックを供給 */</p>
	<p>/* メイン関数の宣言 */<br />void main( void );<br />/* サブ関数の宣言 */<br />void INIT( void );</p>
	<p>void UART6_INIT ( unsigned char , unsigned char , unsigned char );<br />void UART6_MANEGE ( unsigned char );<br />unsigned char UART6_RX( void );<br />void UART6_TX( unsigned char );</p>
	<p>void UART0_INIT ( unsigned char , unsigned char );<br />void UART0_MANEGE ( unsigned char );<br />unsigned char UART0_RX( void );<br />void UART0_TX( unsigned char );<br /></font></p>
	<p><font size="3">■■送信側78K0用HEXファイル・受信側78K0用HEXファイル■■</font></p>
	<p>送信側78K0用HEXファイル</p>
	<p><font size="1">:010080007F00<br />:01008100007E<br />:01008400007B<br />:10F00000B7B1891CD6710B20711B20132110710B15<br />:10F0100023711B23710B26711B26710A2C1B0610F2<br />:10F020000400B1A00DB1A0099A96F0B0B010010093<br />:10F030009AABF0136C40AE014D20AD429ACC1862F1<br />:10F04000BE01100100B1C6809AD818B01B06105539<br />:10F05000009AFDF010FF009AFDF01026009A83F050<br />:10F060001002009AFDF0100A009AFDF0AE01A00017<br />:10F07000309AFDF01003009AFDF01A06FAB81A064D<br />:10F08000B0B6AF60F21A717A6C713BE13136E102D1<br />:10F09000FAFA717B6CAFB7B1891CD63A0187F65684<br />:10F0A000AE06F657AE08F650B0B6AFB7B1B1891C90<br />:10F0B000D6AE0251BD0B717A50716A50715A50FA36<br />:10F0C0000FAE024D00BD09716B50715B50717B50EA<br />:10F0D000A100BE01AE014D329D07AE0141BE01FA55<br />:10F0E000F3B0B0B6AFB73106E105F45377FAF7F0F5<br />:10F0F0000A76710BE16670276131D2B6AFB7D6F4EC<br />:10F10000554D00BDFA66F20B5B013116E102FAFAC9<br />:07F11000711BE15A01B6AFCB<br />:00000001FF<br />&nbsp;</font></p>
	<p>受信側78K0用HEXファイル</p>
	<p><font size="1">:0200000080007E<br />:1000800061D0EE1CE0FE9AF6001000000354FB0362<br />:1000900040FB0344FB400342FB1058FB0356FB1696<br />:1000A0001FFEA3C0A100BB8BFD1680001478FBC609<br />:1000B000EA8000AD0687958684FAF41678FBC6EAD6<br />:1000C00078FBAD06A1009786FAF41680001478FB41<br />:1000D000C6EA8000AD0687958684FAF41678FBC6DA<br />:1000E000EA78FBAD06A1009786FAF49A9F0110000A<br />:1000F000009AF700FAFEAF0240FB3061013027D6CC<br />:1001000067616EAD129696B7C6CA00FBD68730AE51<br />:0B01100001B69A1901FAE9FAFE3198D5<br />:10011B0013F0C8710B9F139F4013A200F4A34D1F44<br />:10012B00BDFA13A10713FB00710B20711B20710B80<br />:10013B0021711A21712B21713B21714A21715B2194<br />:10014B00716B21717B21710B22711B22712B22711F<br />:10015B003B22710B23711B23712B23713B23710BDF<br />:10016B0026711B26710B2C7B01100400B1A041B131<br />:10017B00A0069AC401B0B01001009AD90110050075<br />:10018B00B1A0C89A6102B01001009A7602136C609C<br />:10019B00111AFFAFB79A1B019A130262764D02BD7B<br />:1001AB00F79A130262764D0ABDEE9A13026276C677<br />:1001BB00A1009AC802FAE1B6AFB7B1891CD63A01D1<br />:1001CB0087F656AE06F657AE08F650B0B6AFB7B1D7<br />:1001DB00B1891CD6AE0251BD0B717A50716A507148<br />:1001EB005A50FA0FAE024D00BD09716B50715B5046<br />:1001FB00717B50A100BE01AE014D329D07AE014196<br />:10020B00BE01FAF3B0B0B6AFB76A017A01A1003103<br />:10021B0006E1014172F4534D00A100BD0141615A49<br />:10022B00BDEB3107E1047B01FA026B01F45377F06C<br />:10023B000A76710BE1717BE06670276131D2B6AF44<br />:10024B00B7D6F4554D00BDFA66F20B3116E10571C8<br />:10025B001BE1FAF7B6AFB7B1891CD68730AE06D61D<br />:10026B000A0166F67167F670B0B6AFB7B1B1891C0B<br />:10027B00D6AE0251BD0B717A70716A70715A70FAF9<br />:10028B000FAE024D00BD09716B70715B70717B70AD<br />:10029B00A100BE01AE014D329D07AE0141BE01FA78<br />:1002AB00F3B0B0B6AFB73116E202FAFAF47377F4E3<br />:1002BB007276711BE26670276131D2B6AFB7D63159<br />:1002CB0027E102FAFA66F6743126E102FAFA712B8B<br />:0302DB00E1B6AFDA<br />:00000001FF<br />&nbsp;</font></p>]]></content:encoded>
</item>
<item rdf:about="http://www.k0hobby.jp/modules/wordpress/index.php?p=41">
	<title>78K0で無線通信(2)</title>
	<link>http://www.k0hobby.jp/modules/wordpress/index.php?p=41</link>
	<dc:date>2009-02-26T14:27:09+09:00</dc:date>
	<dc:creator>ome &lt;&amp;#115;&amp;#97;&amp;#107;&amp;#117;&amp;#109;&amp;#97;&amp;#46;t&amp;#64;&amp;#103;a&amp;#105;o.&amp;#99;&amp;#111;.&amp;#106;&amp;#112;&gt;</dc:creator>
	
	<dc:subject>工作</dc:subject>	<description>	前回掲載の微弱無線通信実験の結果の詳細、
通信の具体的な方法・プログラムの解説！

 </description>
	<content:encoded><![CDATA[<p>前回の続きです。なので前回の記事を読んでおられない方は<br />なんのことやら、ということになると思いますので、<br />前回の78K0で無線通信(1)を読んでから、今回の記事を<br />読んでいただければいいと思います。<br />また、今回の記事はC言語のプログラムが出てきますので、<br />C言語がまったくわからない方にはまったくわからないと思います。<br />そのような方には、何らかの形でC言語のプログラムを書いて<br />動作されてから読まれるといいと思います。</p>
	<p>では予告どおり今回は微弱無線通信実験の結果の詳細、<br />通信の具体的な方法・プログラムの解説をお送りします！！！</p>
	<p>一つお詫びしなければなりません。結局前回HEXファイルを<br />アップロードできずに今回の投稿をむかえてしまいました。<br />前回アップロード予定だった<br />送信側78K0用HEXファイル・受信側78K0用HEXファイル<br />は記事の長さの関係で今回も掲載できません。申し訳ありません。<br />次回公開しますのでもう少しお待ちください。</p>
	<p><font size="3">■■実験の結果・ちょっとの工夫でお手軽に通信できた！■■</font><br />実は今回使用した微弱無線モジュールは、そのままUARTにつないだだけでは<br />動作してくれません！でもルールを守ればUART同士で通信するのと変わりなく、<br />無線通信できるようになります！大丈夫です、難しくないのでご心配なく！！</p>
	<p>●受信モジュールは無信号時ランダムデータを受信する●<br />受信モジュールはキャリア（搬送波）を検出していない間はDATA端子が<br />0Vと電源電圧のどちらにも安定せず、ランダムにばたついています。<br />なので78K0のUARTにつないだだけでは、DATA端子の立ち下がりをスタートビットと<br />誤解し、ストップビットを受信するタイミングでタイミングよく電源電圧<br />だったりすると、無信号時でも変なデータを受信し続けることになります。<br />タイミングが悪く、ストップビットのときに電源電圧でなければ<br />フレーミングエラーになってしまいます。まずここに対策が必要です。</p>
	<p>●送信モジュールは送信し始めるときちょっと工夫がいる●<br />送信モジュールはDATA端子に一定時間（約35ms）以上立ち上がりも立ち下がりも<br />ないと省電力モードに入るのか、搬送波の出力がとまってしまいます。<br />省電力モードの状態から搬送波を再び出力させるには何回か立ち上がり・<br />立ち下がりをDATA端子に入力してやる必要があります。<br />しかも送信し始めの1バイトはスタートビットから送信されるのではなく、<br />データビットの途中から送信し始められるので、そのままただデータを<br />送信しようとしただけでは、受信側がスタートビットを正しく検出できずに<br />変なデータを受信するか、受信エラーが起きることになります。<br />（連続して送信する場合2バイト目以後はスタートビットから送信される）</p>
	<p><font size="3">■■実際に通信する・送受信部分のプログラムの解説■■</font><br />結論から言うと、前回の送信終了から約35ms以上経過後は0x55送信、0xFF送信、<br />その直後に1バイト送信時間分よりちょっと長い（約1.2倍）ウェイトを入れる<br />ことによって、送信モジュールも受信モジュールも正しくデータを送受信する<br />準備ができるということになります。<br />この送受信準備後はストップビットとスタートビットの間が約35ms以上あかない<br />限り、連続してデータを送信できるということです。</p>
	<p>ここからは実際に送信側のプログラムを見ながら説明していきます。<br />
このプログラムはターミナルソフトからキーを何か打つと、<br />
0x55・0xFF・ウェイト・0x02・0x0A打たれた一文字のASCIIデータを連続して<br />
送信し、次にキーが打たれるのを待つ、というものです。</p>
	<p>送信側メインプログラム　wireless_test.c</p>
	<p><font size="1">/*<br />■トラ技78K0付録基板<br />■uPD78F0730</p>
	<p>■wireless_test.c<br />■315MHz微弱無線モジュールのテスト(トラ技基板:送信側 エレキジャック基板:受信側)</p>
	<p>2008.12.10作成</p>
	<p>*/</p>
	<p>#pragma &nbsp;&nbsp; &nbsp;sfr&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* プログラム上で直接SFR名でSFRを操作できるようにする */<br />#include&nbsp;&nbsp; &nbsp;"trgbios.h&#8221;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* トラ技CDのUSBの関数を使用するためにトラ技BIOSをインクルード */<br />#include&nbsp;&nbsp; &nbsp;"wireless_test.h&#8221;</p>
	<p>/*<br />****************************************<br />&nbsp; main USB-UART6間通信テスト<br />****************************************<br />*/<br />void main( void )<br />{<br />/* クロックは内部発振 16 MHz */<br />/* 関数の宣言 */<br />&nbsp;&nbsp; &nbsp;unsigned char temp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* データ一時保存 */<br />/* 入出力ポートの初期化(0:出力,1:入力) */<br />&nbsp;&nbsp; &nbsp;PM0.0 = 0;<br />&nbsp;&nbsp; &nbsp;PM0.1 = 0;<br />&nbsp;&nbsp; &nbsp;PM1 = 0b00010000;<br />&nbsp;&nbsp; &nbsp;/*&nbsp;&nbsp; &nbsp;P13 TxD<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P14 RxD<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; */<br />&nbsp;&nbsp; &nbsp;PM3.0 = 0;<br />&nbsp;&nbsp; &nbsp;PM3.1 = 0;<br />&nbsp;&nbsp; &nbsp;PM6.0 = 0;<br />&nbsp;&nbsp; &nbsp;PM6.1 = 0;<br />&nbsp;&nbsp; &nbsp;PM12.0 = 1;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* プログラム終了用 +5V:リセット GND:動作 */<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;P6.1 = 0;/* 起動中青消灯 */<br />/* 通信ポートの初期化 */<br />&nbsp;&nbsp; &nbsp;UART6_INIT( 0x09 , 13 , 0x04 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART6初期化(1200bps,8bit,none　CPUユーザーズマニュアル参照) */<br />&nbsp;&nbsp; &nbsp;UART6_MANEGE( 1 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART6動作開始 */</p>
	<p>/* タイマH1初期化 */<br />&nbsp;&nbsp; &nbsp;TMHMD1 = 0b01000000;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* タイマーH1クロックは3906.25Hz (周期0.256mS) インターバル */</p>
	<p>/* USB-UART6間の通信 */<br />&nbsp;&nbsp; &nbsp;while( temp != 0x20 )&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* P12.0がGND電位ならトラ技BIOSへ戻る */<br />&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;temp = (unsigned char)trg_getc();/* USBから読み込み */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;trg_senddata( &amp;temp,1 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* USBへ出力 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P6.1 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 無線送信中青点灯 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;UART6_TX( 0x55 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* スタートビットのみ送る */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;UART6_TX( 0xff );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* スタートビットのみ送る */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;WAIT256U( 0x26 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 1バイト送信時間分待つ */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;UART6_TX( 0x02 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* ヘッダ */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;UART6_TX( 0x0A );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* ヘッダ */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;UART6_TX( temp );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 無線で出力(UART6) */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;UART6_TX( 0x03 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* フッタ */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P6.1 = 1;<br />&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;P6.1 = 1;/* 終了後青消灯 */<br />}</p>
	<p>/*<br />****************************************<br />&nbsp; タイマーH1を使った待ち時間生成<br />****************************************<br />*/<br />void WAIT256U( unsigned char c )<br />{<br />&nbsp;&nbsp; &nbsp;CMP01 = c;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* タイマーH1リセット周期は c * 256uS */<br />&nbsp;&nbsp; &nbsp;TMHMD1.7 = 1;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* タイマーH1動作開始 */<br />&nbsp;&nbsp; &nbsp;IF0H.3 = 0;<br />&nbsp;&nbsp; &nbsp;while( IF0H.3 != 1 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* タイマーH1リセットかかったらタイムアウト */<br />&nbsp;&nbsp; &nbsp;TMHMD1.7 = 0;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* タイマーH1動作停止 */<br />&nbsp;&nbsp; &nbsp;<br />}</font></p>
	<p>上で説明したとおり、<br />・受信モジュールは搬送波を検出していない間はH,Lをランダムに出力する<br />・送信モジュールは省電力状態から抜け出すために何回か立ち上がり・下がりが必要<br />・省電力状態から抜け出した直後はデータビットの途中から送信を始めてしまう<br />この三つの理由から通信開始時に受信側が正しくスタートビットと<br />ストップビットを検出できるように工夫が必要です。<br />またこれらに加えて<br />・受信したランダムデータの並びが、たまたま受信したいデータの並びと一致して<br />しまった場合、送信側が送信をしていないのに受信側が勝手に変な受信をしてしまう<br />という現象が起きます。これにも対策が必要です。</p>
	<p><font size="3">①</font>まず、0x55を送信して立ち上がり・下がりを送信モジュールに加えて<br />寝ている送信モジュールを起こします。0x55は2進数では01010101なので<br />これにスタートビットとストップビットがつくと0101010101の順で送信側78K0から<br />送信モジュールに送信されることになり、寝ている送信モジュールを<br />激しく揺さぶることになります。<br />ですが、送信モジュールは寝起きが悪く、ちゃんとはじめのスタートビットからは<br />送信してはくれず、データビットの途中から送信し始めることになり、<br />受信モジュールが0を受信したときに受信側78K0はスタートビットと認識して<br />しまいます。このはじめに送信する0x55は送信モジュールを起こすための<br />ダミーのデータなので、受信側には受信してほしくないのです。<br /><font size="3">②</font>そこで、0x55のあとに0xFFというデータを送信、直後に1バイト送信時間分より<br />ちょっと長い（約1.2倍）ウェイトを入れます。0xFFはスタートビットとストップ<br />ビットがつくと0111111111の順で送信されることになり、その後もウェイトを<br />入れている間はHの状態が維持されます。この約2バイト送信時間分連続してHを<br />出力することで受信側が0x55・0xFFの中のどのLをスタートビットと認識されても<br />必ずストップビットを正しく検出できることになります。また、同様にして<br />0x55が送信され始める前のどのタイミングでランダムデータを受信していても、<br />ウェイトが終わるまでにはそのランダムデータの受信を無効化できます。<br /><font size="3">③</font>そして、受信側が受信したいデータとランダムデータを見分けられるように、<br />送信時には決まって0x55・0xFF・ウェイトのあとに0x02・0x0Aを連続して送信し、<br />そのあとにはじめて送りたいデータを送信します。受信側では連続して0x02・0x0A<br />が受信できたあとのデータ以外は受信しても無視するようにプログラムしています。<br />（補足：送信してないデータを勝手に受信するのを防止するために、今回は<br />0x02・0x0Aというヘッダがあるかどうかを判定するようにしました。しかし実は<br />それでもやっぱりそれを抜けてしまうランダムデータが実験では数十秒から<br />数分に1回ほどあります。これ以上の対策としては、データの送信の最後にCRCを<br />つけて受信側でそれをチェックする、フッタをつける等の方法が考えられます。）</p>
	<p>受信側のプログラムは連続して0x02・0x0Aを受信した場合のみその次に受信した<br />データをターミナルソフトに送信し、その後はまた0x02・0x0Aの受信を待つ、<br />というものです。</p>
	<p>受信側メインプログラム　wireless_test.c</p>
	<p><font size="1">/*<br />■エレキジャック78K0付録基板<br />■uPD78F0503DA</p>
	<p>■wireless_test.c<br />■315MHz微弱無線モジュールのテスト(エレキジャック基板:受信側 トラ技基板:送信側)</p>
	<p>2008.12.10作成</p>
	<p>*/</p>
	<p>#pragma &nbsp;&nbsp; &nbsp;sfr&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* プログラム上で直接SFR名でSFRを操作できるようにする */<br />#include&nbsp;&nbsp; &nbsp;"wireless_test.h&#8221;</p>
	<p>/*<br />****************************************<br />&nbsp; ハードウェアの初期化<br />****************************************<br />*/<br />void INIT( void )<br />{<br />/* クリスタルは 10 MHz */<br />/* メモリ・クロック初期化 */<br />&nbsp;&nbsp; &nbsp;IMS&nbsp; = MEMORY_IMS_SET;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 内部RAM,内部ROMのメモリサイズ設定 */<br />&nbsp;&nbsp; &nbsp;AMPH = OSC_FREQ_CONT;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 発振周波数範囲の設定 */<br />&nbsp;&nbsp; &nbsp;OSCCTL = CLOCK_MODE;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* クロック動作モード設定 */</p>
	<p>&nbsp;&nbsp; &nbsp;MOC = 0x00;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* X1発振回路の発振開始 */<br />&nbsp;&nbsp; &nbsp;while( OSTC != 0x1f );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* X1入力クロック発振安定待ち（6.55ms以上） */<br />&nbsp;&nbsp; &nbsp;MCM&nbsp; = SYSTEM_CLOCK_SELECT;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* システムクロック供給選択 */<br />&nbsp;&nbsp; &nbsp;PCC&nbsp; = 0x00;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* CPU動作クロック：fx（10MHz）に設定 */</p>
	<p>/* 入出力ポートの初期化(0:出力,1:入力) */<br />&nbsp;&nbsp; &nbsp;/* PORT0 */<br />&nbsp;&nbsp; &nbsp;PM0.0 = 0;<br />&nbsp;&nbsp; &nbsp;PM0.1 = 0;<br />&nbsp;&nbsp; &nbsp;/* PORT1 */<br />&nbsp;&nbsp; &nbsp;PM1.0 = 0;/* TxD0 */<br />&nbsp;&nbsp; &nbsp;PM1.1 = 1;/* RxD0 */<br />&nbsp;&nbsp; &nbsp;PM1.2 = 0;<br />&nbsp;&nbsp; &nbsp;PM1.3 = 0;/* TxD6 */<br />&nbsp;&nbsp; &nbsp;PM1.4 = 1;/* RxD6 */<br />&nbsp;&nbsp; &nbsp;PM1.5 = 0;<br />&nbsp;&nbsp; &nbsp;PM1.6 = 0;<br />&nbsp;&nbsp; &nbsp;PM1.7 = 0;<br />&nbsp;&nbsp; &nbsp;/* PORT2 A/D兼用 */<br />&nbsp;&nbsp; &nbsp;PM2.0 = 0;<br />&nbsp;&nbsp; &nbsp;PM2.1 = 0;<br />&nbsp;&nbsp; &nbsp;PM2.2 = 0;<br />&nbsp;&nbsp; &nbsp;PM2.3 = 0;<br />&nbsp;&nbsp; &nbsp;/* PORT3 割り込み兼用 */<br />&nbsp;&nbsp; &nbsp;PM3.0 = 0;<br />&nbsp;&nbsp; &nbsp;PM3.1 = 0;<br />&nbsp;&nbsp; &nbsp;PM3.2 = 0;<br />&nbsp;&nbsp; &nbsp;PM3.3 = 0;<br />&nbsp;&nbsp; &nbsp;/* PORT6 I2C */<br />&nbsp;&nbsp; &nbsp;PM6.0 = 0;<br />&nbsp;&nbsp; &nbsp;PM6.1 = 0;<br />&nbsp;&nbsp; &nbsp;/* PORT12.0 割り込み兼用 */<br />&nbsp;&nbsp; &nbsp;PM12.0 = 0;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;P1.7 = 0;<br />&nbsp;&nbsp; &nbsp;<br />/* UART初期化・動作開始 */<br />&nbsp;&nbsp; &nbsp;UART6_INIT( 0x06 , 0x41 , 0x04 );&nbsp;&nbsp; &nbsp;/* UART6初期化(1200bps,8bit,none　CPUユーザーズマニュアル参照) */<br />&nbsp;&nbsp; &nbsp;UART6_MANEGE( 1 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART6動作開始 */<br />&nbsp;&nbsp; &nbsp;UART0_INIT( 0xC8 , 0x05 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART0初期化(C8で19.2kbps,8bit,none　56で115.2kbps　D0で9600　CPUユーザーズマニュアル参照) */<br />&nbsp;&nbsp; &nbsp;UART0_MANEGE( 1 );&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* UART0動作開始 */<br />&nbsp;&nbsp; &nbsp;<br />/* タイマH1初期化 */<br />&nbsp;&nbsp; &nbsp;TMHMD1 = 0b01100000;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* タイマーH1クロックは470Hz (周期2.1276mS) */<br />&nbsp;&nbsp; &nbsp;CMP01 = 0xFF;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* タイマーH1リセット周期は 0xFF = 約0.5S */<br />}</p>
	<p>/*<br />****************************************<br />&nbsp; main 315MHz微弱無線モジュールのテスト<br />****************************************<br />*/</p>
	<p>void main( void )<br />{<br />/* 変数の宣言 */<br />&nbsp;&nbsp; &nbsp;unsigned char temp;<br />/* ハードウェアの初期化 */<br />&nbsp;&nbsp; &nbsp;INIT();&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* メモリ・クロック初期化、入出力設定 */<br />/* 無線受信→UART送信 */<br />&nbsp;&nbsp; &nbsp;while( 1 )<br />&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;temp = UART6_RX();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if( temp == 0x02 )<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;temp = UART6_RX();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if( temp == 0x0A )&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* 連続で0x20,0x0Aを受信したときのみ<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; そのあとの1文字を送信 */<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;temp = UART6_RX();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;UART0_TX( temp );<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;}<br />}</font></p>
	<p><font size="3">■■次回予告！！！■■</font><br />実は今回実験の手順も書こうと思っていたのですが、長くなってしまったので<br />次回ご紹介したいと思います！乞うご期待！！！<br />あと、今回掲載したプログラムだけでは動作しません。他にUARTの制御をする<br />プログラム、ヘッダファイル、プログラムの開始番地の指定ファイル等も<br />必要ですが、これらの必要なファイルも次回公開します！それではまた！！！
</p>]]></content:encoded>
</item>
<item rdf:about="http://www.k0hobby.jp/modules/wordpress/index.php?p=39">
	<title>78K0で無線通信(1)</title>
	<link>http://www.k0hobby.jp/modules/wordpress/index.php?p=39</link>
	<dc:date>2009-02-16T10:00:35+09:00</dc:date>
	<dc:creator>ome &lt;&amp;#115;ak&amp;#117;m&amp;#97;.&amp;#116;&amp;#64;g&amp;#97;&amp;#105;o.&amp;#99;o&amp;#46;&amp;#106;p&gt;</dc:creator>
	
	<dc:subject>工作</dc:subject>	<description>	はじめまして！新メンバーのomeです！！よろしくお願いします！！！できるだけ記事を簡単に書きますので、電子工作やマイコンに始めて挑戦される方もぜしぜし読んでみてください！！！分からない用語があればgoogleやウィキペディアで調べてみてください親切な人たちや企業がたくさん解説してくださっています。78K0を使って315MHzの微弱無線通信に挑戦してみます！これができれば、78K0同士やパソコンとの間の通信をワイヤレスにできます。そうなれば、従来のラジコンよりも多チャンネルのラジコンを作ることができたり、制御・処理部分とセンサーや表示機の間をワイヤレスにしたりと、いろんなことに応用することが期待できます。■■微弱無線についての注意■■この記事の実験を行う場合は、アンテナの長さに注意してください。アンテナが長くなると法令で定められた電界強度を超えてしまいます。総務省による解説のページhttp://www.tele.soumu.go.jp/j/material/rule.htm■■トラ技とエレキジャックの付録基板のそれぞれの簡単なスペック・特長■■今回使うのはトランジスタ技術2008年8月号付録78K0USBマイコン基板と、エレキジャック№8付録78K0マイコン基板です。CQ出版社のバックナンバーをおいている店舗なら、取り寄せずに店頭で購入できます。これらの基板をブレットボードに挿して回路を作っていきます。なななんと、エレキジャック基板には電源部を除いて300穴のブレッドボードがついてきます！とりあえず回路が組めるのでありがたい！■トラ技付録基板■・CPU型番 uPD78F0730・連結ソケットをつければDIPサイズになって使いやすい！・追加部品なしでそのままUSBポートに挿せる！・追加部品なしでUSBでプログラムの書き込み！・発振子搭載(16MHz)・ROM16kB、RAM1kB・１５本のI/O、タイマ16bit１ch,8bit３ch・UART１ch、3線式シリアル１ch・線を引き出せばオンチップデバッグ対応！■エレキジャック付録基板■・CPU型番 uPD78F0503DA・連結ソケットをつければDIPサイズになって使いやすい！・ROM32kB、RAM1kB ちょっと大きいプログラムも動く！・A/Dコンバータ１０bit４chもついてる！・２１本のI/O、タイマ16bit２ch,8bit４ch・UART２ch、3線式シリアル２ch、I2C１ch・こちらも線を引き出せばオンチップデバッグ対応！●使う前に付録基板をちょっと加工●付録基板に連結ソケットをつけてブレッドボードで扱いやすくします。写真はトラ技基板に連結ソケットをつけた例です。トラ技基板は28pinなのに40pinの連結ソケットをつけたのには理由があります。今回は通信ができることを確認するための実験なので、すべてブレッドボード上で回路を作っていますが、いずれはプリント基板か蛇の目基板にするつもりなのです。トラ技基板はUSBのデバイスの機能を内蔵しているので、もっぱらパソコンに挿してつかう予定でいます。なので追加する回路を連結ソケットの飛び出た部分に組めるように28pinではなく40pinをつけました。連結ソケットの足の太いほうを付録基板側に取り付けるようにしてください。トラ技基板につけたのは・40pin連結ソケット(千石電商＠390円 秋月が暫定営業日だった…)・ピンヘッダ2列×1を2個(手持ち)・USB-Bレセプタクル(秋月電子＠50円)です。一方エレキジャック基板は主にパソコン側の指示を受けて動作することを想定しているので、いろんな回路につなぐこと見込んでエレキジャック誌に書いてあるとおりの28pinの連結ソケットを使っています。エレキジャック基板につけたのは・28pin連結ソケット(千石電商＠270円)・4.7uFセラミックコンデンサ(手持ち)です。●315MHz微弱無線通信実験●結論から言うと、試行錯誤の上、実験は成功しました！！！要は78K0のUARTの端子を微弱無線モジュールにつなぐだけで、通常のUARTの通信と同じように無線で通信ができるということです！実験はトラ技付録基板側の回路をパソコンにつなぎ、パソコンのターミナルソフト上から１文字打つとそれが315MHzの微弱無線に乗って、エレキジャック基板側の回路がそれを受信し、接続されたパソコンのターミナルソフト上にその１文字が表示されるというものです。●部品一覧と入手先、価格●・トランジスタ技術2008年8月号 ×1冊　　CQ出版書籍雑誌常備店http://www.cqpub.co.jp/hanbai/syoten/JINDEX.HTMなど　　1090円・エレキジャック№8 ×1冊　　CQ出版書籍雑誌常備店など　　2480円・ブレッドボード ×1枚　　電源ラインを除いて400穴以上のものをお好みで　　価格の一例)EIC-501(電源ラインを除いて400穴)400円＠秋月電子・ブレッドボード用ジャンプワイヤ 20本　　長さは100mm程度、あるいはお好みで　　価格の一例)サンハヤトSPP-70(全長約100mm×10本入り)400円＠千石電商・微弱無線モジュール ×送受各一台　　315MHz 5V動作のもの　　価格の一例)送信500円・受信500円＠ストロベリーリナックス・USB-シリアル変換モジュール ×1台　　FT232RL使用のもの　　950円＠秋月電子・40pin連結ソケット ×1個　　価格の一例)390円＠千石電商・28pin連結ソケット ×1個　　価格の一例)270円＠千石電商・USB-Bレセプタクル ×1個　　価格の一例)50円＠秋月電子・セラロック10MHz ×1個　　価格の一例)40円＠秋月電子・2.54mmピッチピンヘッダ 2×1 ×2個　　ピンヘッダを買って2×1になるように折ればOK　　価格の一例)50円＠秋月電子・セラミックコンデンサ4.7uF ×2個　　ちょっと思いつきませんが、1個30円程度？・抵抗10kΩ ×4本・抵抗220Ω ×2本　　価格の一例)100本入り1袋100円＠秋月電子・トランジスタ2SC1815 ×1個　　価格の一例)20個入り1袋100円＠秋月電子・LED 赤緑各1個　　φ5のものが使いやすいかと…・USBコード Aプラグ-Bプラグ・Aプラグ-miniBプラグ各1本　　Aプラグ-Bプラグ1m200円＠千石電商　　Aプラグ-miniBプラグ1.5m150円＠秋月電子●回路図●送信側・受信側の回路をそれぞれブレッドボード上に組みます。送信側回路図（クリックで拡大）受信側回路図（クリックで拡大）写真ではこんなです。写真の配線は一部回路図とは異なるかもしれません。その場合は回路図のほうが正解です。電源は送信側・受信側ともUSBからもらうので、今回の実験では準備しなくてOK●プログラム●解説は次回にします。とりあえず今回の実験を再現するためのHEXファイルのみアップロードします。これをそれぞれのCPUに書き込んでください。送信側78K0用HEXファイル(書き込み方法はトラ技を参照ください)受信側78K0用HEXファイル(書き込み方法はエレキジャックを参照ください)↑準備中（2/16アップロード予定）●パソコンにインストールしておきたいソフト一覧●みんな無料でダウンロードできます。・PG-FPL3(78K0書き込みソフト)　　今回の用途：エレキジャック基板へのプログラムの書き込み　　ダウンロード先：NECエレクトロニクス・TeraTerm(フリーのRS232C通信ソフト)　　今回の用途：トラ技基板へのプログラムの書き込み　　ダウンロード先：ベクターなど・FT232Rドライバ　　(パソコンがUSBで受信した信号をパソコンの内部でRS232Cに変換するもの)　　今回の用途：秋月USB-シリアル変換モジュールの接続に必要　　ダウンロード先：FTDI社■■次回予告■■次回は実験の結果の詳細、通信の方法・プログラムの解説をレポートする予定です！乞うご期待！！！

 </description>
	<content:encoded><![CDATA[<p>はじめまして！新メンバーのomeです！！よろしくお願いします！！！<br />できるだけ記事を簡単に書きますので、電子工作やマイコンに始めて<br />挑戦される方もぜしぜし読んでみてください！！！<br />分からない用語があればgoogleやウィキペディアで調べてみてください<br />親切な人たちや企業がたくさん解説してくださっています。</p>
	<p>78K0を使って315MHzの微弱無線通信に挑戦してみます！<br />これができれば、78K0同士やパソコンとの間の通信をワイヤレスにできます。<br />そうなれば、従来のラジコンよりも多チャンネルのラジコンを作ることができたり、<br />制御・処理部分とセンサーや表示機の間をワイヤレスにしたりと、<br />いろんなことに応用することが期待できます。</p>
	<p><font size="3">■■微弱無線についての注意■■</font></p>
	<p>この記事の実験を行う場合は、アンテナの長さに注意してください。<br />アンテナが長くなると法令で定められた電界強度を超えてしまいます。<br />総務省による解説のページ<br /><a target="_blank" href="http://www.tele.soumu.go.jp/j/material/rule.htm">http://www.tele.soumu.go.jp/j/material/rule.htm</a></p>
	<p><font size="3">■■トラ技とエレキジャックの付録基板のそれぞれの簡単なスペック・特長■■</font></p>
	<p>今回使うのはトランジスタ技術2008年8月号付録78K0USBマイコン基板と、<br />エレキジャック№8付録78K0マイコン基板です。CQ出版社のバックナンバーを<br />おいている店舗なら、取り寄せずに店頭で購入できます。<br />これらの基板をブレットボードに挿して回路を作っていきます。<br />なななんと、エレキジャック基板には電源部を除いて300穴のブレッドボードが<br />ついてきます！とりあえず回路が組めるのでありがたい！</p>
	<p>■トラ技付録基板■<br />・CPU型番 <font size="3">uPD78F0730</font><br />・連結ソケットをつければDIPサイズになって使いやすい！<br />・追加部品なしでそのままUSBポートに挿せる！<br />・追加部品なしでUSBでプログラムの書き込み！<br />・発振子搭載(16MHz)<br />・ROM16kB、RAM1kB<br />・１５本のI/O、タイマ16bit１ch,8bit３ch<br />・UART１ch、3線式シリアル１ch<br />・線を引き出せばオンチップデバッグ対応！</p>
	<p>■エレキジャック付録基板■<br />・CPU型番 <font size="3">uPD78F0503DA</font><br />・連結ソケットをつければDIPサイズになって使いやすい！<br />・ROM32kB、RAM1kB ちょっと大きいプログラムも動く！<br />・A/Dコンバータ１０bit４chもついてる！<br />・２１本のI/O、タイマ16bit２ch,8bit４ch<br />・UART２ch、3線式シリアル２ch、I2C１ch<br />・こちらも線を引き出せばオンチップデバッグ対応！</p>
	<p>●使う前に付録基板をちょっと加工●</p>
	<p>付録基板に連結ソケットをつけてブレッドボードで扱いやすくします。<br />写真はトラ技基板に連結ソケットをつけた例です。<br /><img title="001トラ技基板組み立て.jpg" alt="001トラ技基板組み立て.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/001%A5%C8%A5%E9%B5%BB%B4%F0%C8%C4%C1%C8%A4%DF%CE%A9%A4%C6.jpg"></p>
	<p>トラ技基板は28pinなのに40pinの連結ソケットをつけたのには理由があります。<br />今回は通信ができることを確認するための実験なので、すべてブレッドボード上で<br />回路を作っていますが、いずれはプリント基板か蛇の目基板にするつもりなのです。<br />トラ技基板はUSBのデバイスの機能を内蔵しているので、もっぱらパソコンに<br />挿してつかう予定でいます。なので追加する回路を連結ソケットの飛び出た部分に<br />組めるように28pinではなく40pinをつけました。連結ソケットの足の太いほうを<br />付録基板側に取り付けるようにしてください。</p>
	<p>トラ技基板につけたのは<br />・40pin連結ソケット(千石電商＠390円 秋月が暫定営業日だった…)<br />・ピンヘッダ2列×1を2個(手持ち)<br />・USB-Bレセプタクル(秋月電子＠50円)<br />です。</p>
	<p>一方エレキジャック基板は主にパソコン側の指示を受けて動作することを<br />想定しているので、いろんな回路につなぐこと見込んでエレキジャック誌に<br />書いてあるとおりの28pinの連結ソケットを使っています。</p>
	<p>エレキジャック基板につけたのは<br />・28pin連結ソケット(千石電商＠270円)<br />・4.7uFセラミックコンデンサ(手持ち)<br />です。</p>
	<p><font size="3">●315MHz微弱無線通信実験●</font></p>
	<p>結論から言うと、試行錯誤の上、実験は成功しました！！！<br />要は78K0のUARTの端子を微弱無線モジュールにつなぐだけで、<br />通常のUARTの通信と同じように無線で通信ができるということです！</p>
	<p>実験はトラ技付録基板側の回路をパソコンにつなぎ、パソコンのターミナルソフト上から<br />１文字打つとそれが315MHzの微弱無線に乗って、エレキジャック基板側の回路が<br />それを受信し、接続されたパソコンのターミナルソフト上にその１文字が<br />表示されるというものです。</p>
	<p><font size="3">●部品一覧と入手先、価格●</font><br />・トランジスタ技術2008年8月号 ×1冊<br />　　CQ出版書籍雑誌常備店<a target="_blank" href="http://www.cqpub.co.jp/hanbai/syoten/JINDEX.HTM">http://www.cqpub.co.jp/hanbai/syoten/JINDEX.HTM</a>など<br />　　1090円<br />・エレキジャック№8 ×1冊<br />　　CQ出版書籍雑誌常備店など<br />　　2480円<br />・ブレッドボード ×1枚<br />　　電源ラインを除いて400穴以上のものをお好みで<br />　　価格の一例)EIC-501(電源ラインを除いて400穴)400円＠秋月電子<br />・ブレッドボード用ジャンプワイヤ 20本<br />　　長さは100mm程度、あるいはお好みで<br />　　価格の一例)サンハヤトSPP-70(全長約100mm×10本入り)400円＠千石電商<br />・微弱無線モジュール ×送受各一台<br />　　315MHz 5V動作のもの<br />　　価格の一例)送信500円・受信500円＠ストロベリーリナックス<br />・USB-シリアル変換モジュール ×1台<br />　　FT232RL使用のもの<br />　　950円＠秋月電子<br />・40pin連結ソケット ×1個<br />　　価格の一例)390円＠千石電商<br />・28pin連結ソケット ×1個<br />　　価格の一例)270円＠千石電商<br />・USB-Bレセプタクル ×1個<br />　　価格の一例)50円＠秋月電子<br />・セラロック10MHz ×1個<br />　　価格の一例)40円＠秋月電子<br />・2.54mmピッチピンヘッダ 2×1 ×2個<br />　　ピンヘッダを買って2×1になるように折ればOK<br />　　価格の一例)50円＠秋月電子<br />・セラミックコンデンサ4.7uF ×2個<br />　　ちょっと思いつきませんが、1個30円程度？<br />・抵抗10kΩ ×4本<br />・抵抗220Ω ×2本<br />　　価格の一例)100本入り1袋100円＠秋月電子<br />・トランジスタ2SC1815 ×1個<br />　　価格の一例)20個入り1袋100円＠秋月電子<br />・LED 赤緑各1個<br />　　φ5のものが使いやすいかと…<br />・USBコード Aプラグ-Bプラグ・Aプラグ-miniBプラグ各1本<br />　　Aプラグ-Bプラグ1m200円＠千石電商<br />　　Aプラグ-miniBプラグ1.5m150円＠秋月電子</p>
	<p><font size="3">●回路図●</font></p>
	<p>送信側・受信側の回路をそれぞれブレッドボード上に組みます。</p>
	<p>送信側回路図（クリックで拡大）<br /><a href="http://www.k0hobby.jp/modules/wordpress/attach/004%C1%F7%BF%AE%C2%A6%B2%F3%CF%A9%BF%DE.jpg"><img title="004送信側回路図.jpg" alt="004送信側回路図.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-004%C1%F7%BF%AE%C2%A6%B2%F3%CF%A9%BF%DE.jpg"></a></p>
	<p>受信側回路図（クリックで拡大）<br /><a href="http://www.k0hobby.jp/modules/wordpress/attach/003%BC%F5%BF%AE%C2%A6%B2%F3%CF%A9%BF%DE.jpg"><img title="003受信側回路図.jpg" alt="003受信側回路図.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/thumb-003%BC%F5%BF%AE%C2%A6%B2%F3%CF%A9%BF%DE.jpg"></a></p>
	<p>写真ではこんなです。写真の配線は一部回路図とは異なるかもしれません。<br />その場合は回路図のほうが正解です。<br />電源は送信側・受信側ともUSBからもらうので、今回の実験では準備しなくてOK<br /><img title="002組んだあと.jpg" alt="002組んだあと.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/002%C1%C8%A4%F3%A4%C0%A4%A2%A4%C8.jpg"></p>
	<p><font size="3">●プログラム●</font></p>
	<p>解説は次回にします。とりあえず今回の実験を再現するための<br />HEXファイルのみアップロードします。これをそれぞれのCPUに書き込んでください。<br />送信側78K0用HEXファイル(書き込み方法はトラ技を参照ください)<br />受信側78K0用HEXファイル(書き込み方法はエレキジャックを参照ください)<br />↑準備中（2/16アップロード予定）</p>
	<p><font size="3">●パソコンにインストールしておきたいソフト一覧●</font></p>
	<p>みんな無料でダウンロードできます。</p>
	<p>・PG-FPL3(78K0書き込みソフト)<br />　　今回の用途：エレキジャック基板へのプログラムの書き込み<br />　　ダウンロード先：NECエレクトロニクス<br />・TeraTerm(フリーのRS232C通信ソフト)<br />　　今回の用途：トラ技基板へのプログラムの書き込み<br />　　ダウンロード先：ベクターなど<br />・FT232Rドライバ<br />　　(パソコンがUSBで受信した信号をパソコンの内部でRS232Cに変換するもの)<br />　　今回の用途：秋月USB-シリアル変換モジュールの接続に必要<br />　　ダウンロード先：FTDI社</p>
	<p><font size="3">■■次回予告■■</font><br />次回は実験の結果の詳細、通信の方法・プログラムの解説をレポートする予定です！<br />乞うご期待！！！
</p>]]></content:encoded>
</item>
<item rdf:about="http://www.k0hobby.jp/modules/wordpress/index.php?p=37">
	<title>ボールランチャー Part II</title>
	<link>http://www.k0hobby.jp/modules/wordpress/index.php?p=37</link>
	<dc:date>2009-01-30T11:00:09+09:00</dc:date>
	<dc:creator>jwinkler &lt;&amp;#106;.&amp;#119;inkl&amp;#101;&amp;#114;&amp;#64;g&amp;#97;io.co&amp;#46;j&amp;#112;&gt;</dc:creator>
	
	<dc:subject>78K0モータボード</dc:subject>	<description>	PartIのブログに書いたとおり今回のボールランチャーは以前の１軸ステージで使ったモータとガイオ・テクノロジー製のモータ制御ボードを使っています。先ずはモータとモータコントロール基板を接続して、ガイオのソースでどのような設定があるか確認しました。「Tera Term Pro」でパソコンと接続すると以下の画面が出ました。色々な設定を変えてみるとモータの機能がだいたい分かってきました。でも残念ながらこのモータがあまり速くありません。しかし、ステッピングモータは元々位置決め制御用だから遅いのはしかたがないですね。この結果はあるていど予想していました。こうなるとデザインを考え直すしかないですね。元デザインは次の写真です。それと違ってプランBは垂直じゃなくて水平に近づけました。水平に近づければプロジェクト名は「ボールランチャー」ではなくて「ボールキッカー」のほうがいいかも知りません。次の写真が実物です。写真から分かりませんが、チューブの後ろをすこし上げ、重力でボールが元の位置に戻るようになっています。いよいよボールランチャーを動かしてみました。ボールが30cm以上転がった！

 </description>
	<content:encoded><![CDATA[<p>PartIのブログに書いたとおり今回のボールランチャーは以前の１軸ステージで使ったモータと<a href="http://www.gaio.co.jp/product/dev_tools/pdt_nec_motor_stepping.html">ガイオ・テクノロジー製のモータ制御ボード</a>を使っています。先ずはモータとモータコントロール基板を接続して、ガイオのソースでどのような設定があるか確認しました。「Tera Term Pro」でパソコンと接続すると以下の画面が出ました。</p>
	<p><img title="settings.jpg" alt="settings.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/settings.jpg"></p>
	<p>色々な設定を変えてみるとモータの機能がだいたい分かってきました。でも残念ながらこのモータがあまり速くありません。しかし、ステッピングモータは元々位置決め制御用だから遅いのはしかたがないですね。この結果はあるていど予想していました。こうなるとデザインを考え直すしかないですね。元デザインは次の写真です。</p>
	<p><img title="launcher-up.jpg" alt="launcher-up.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/launcher-up.jpg"></p>
	<p>それと違ってプランBは垂直じゃなくて水平に近づけました。水平に近づければプロジェクト名は「ボールランチャー」ではなくて「ボールキッカー」のほうがいいかも知りません。次の写真が実物です。</p>
	<p><img title="launcher.jpg" alt="launcher.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/launcher.jpg"></p>
	<p>写真から分かりませんが、チューブの後ろをすこし上げ、重力でボールが元の位置に戻るようになっています。いよいよボールランチャーを動かしてみました。ボールが30cm以上転がった！</p>
	<p><img title="measure.jpg" alt="measure.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/measure.jpg">
</p>]]></content:encoded>
</item>
<item rdf:about="http://www.k0hobby.jp/modules/wordpress/index.php?p=36">
	<title>ボールランチャー Part I</title>
	<link>http://www.k0hobby.jp/modules/wordpress/index.php?p=36</link>
	<dc:date>2008-12-26T14:53:05+09:00</dc:date>
	<dc:creator>jwinkler &lt;j&amp;#46;w&amp;#105;n&amp;#107;&amp;#108;&amp;#101;r&amp;#64;&amp;#103;&amp;#97;io&amp;#46;&amp;#99;&amp;#111;.&amp;#106;p&gt;</dc:creator>
	
	<dc:subject>78K0モータボード</dc:subject>	<description>	今回もモータを利用するプロジェクトです。今回はボールランチャーを作ってみようと思います。デザインを簡単に説明しましょう。写真のようにモータに棒を取り付けてあります。モータを回転させるとこの棒でチューブの中のボールをはじくしくみになっています。これが上手くいけばボールが垂直に飛んでいきます。このデザインを完成する必要な部品を全部東急ハンズで購入しました（モータ以外）。部品リスト以下のとおりです：
	日本サーボ　ステッピングモーターモータスタンドモータカップリング棒チューブ発砲スチロールボールプラステック用接着剤アクリルシート
	まずはモータスタンドから組み立てを始めました。素材は東急ハンズで買った完成されたアクリルの透明ボックスです。モータをスタンドに乗せるだけだとモータの位置が動いてしまいますので固定するためこのようにしました。次にアクリルシートから長方形の部分を切ってモータのねじとシャフトを合わせる穴をドリルで開けました。それからプラステック用接着剤でスタンドに長方形のアクリルを接着してモータの位置が固定されました。最後にモータカップリングとプラステック棒（8ｃｍ）をモータに付けてモータの準備が完了しました。
	次はチューブの作成です。まずはボールスタンドとして図のようにアクリルを切り出しました。
	このパーツをチューブに写真のように取り付けます。なぜボールスタンドを作る必要があるかというと棒で当たられる位置を決めるためです。このボールスタンドを取り付けた場所でボールをはじくことになります。
	これでボールランチャーの組み立てを終了しました。
次はいよいよ１軸ステージ制御のモータコントロール基板（ガイオ・テクノロジー製のモータ制御ボード）をもちいて動作をさせてみます。どのぐらいボールは飛ぶでしょうか？
乞うご期待！！！

 </description>
	<content:encoded><![CDATA[<p>今回もモータを利用するプロジェクトです。今回はボールランチャーを作ってみようと思います。デザインを簡単に説明しましょう。写真のようにモータに棒を取り付けてあります。モータを回転させるとこの棒でチューブの中のボールをはじくしくみになっています。これが上手くいけばボールが垂直に飛んでいきます。このデザインを完成する必要な部品を全部東急ハンズで購入しました（モータ以外）。部品リスト以下のとおりです：</p>
	<p><a href="http://www.originalmind.co.jp/id.php?i=0420.jpg">日本サーボ　ステッピングモーター</a><br />モータスタンド<br />モータカップリング<br />棒<br />チューブ<br />発砲スチロールボール<br />プラステック用接着剤<br />アクリルシート</p>
	<p>まずはモータスタンドから組み立てを始めました。素材は東急ハンズで買った完成されたアクリルの透明ボックスです。モータをスタンドに乗せるだけだとモータの位置が動いてしまいますので固定するためこのようにしました。次にアクリルシートから長方形の部分を切ってモータのねじとシャフトを合わせる穴をドリルで開けました。それからプラステック用接着剤でスタンドに長方形のアクリルを接着してモータの位置が固定されました。最後にモータカップリングとプラステック棒（8ｃｍ）をモータに付けてモータの準備が完了しました。</p>
	<p><img title="motor.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/motor.jpg" alt="motor.jpg" width="50%" height="50%"></p>
	<p>次はチューブの作成です。まずはボールスタンドとして図のようにアクリルを切り出しました。</p>
	<p><img title="ball stand.jpg" alt="ball stand.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/ball%20stand.jpg" width="50%" height="50%"></p>
	<p>このパーツをチューブに写真のように取り付けます。なぜボールスタンドを作る必要があるかというと棒で当たられる位置を決めるためです。このボールスタンドを取り付けた場所でボールをはじくことになります。</p>
	<p><img title="tube.jpg" alt="tube.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/tube.jpg" width="50%" height="50%"></p>
	<p><img title="motor&amp;tube5.jpg" alt="motor&amp;tube5.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/motor%26tube5.jpg" width="50%" height="50%"></p>
	<p>これでボールランチャーの組み立てを終了しました。<br />
<br />次はいよいよ１軸ステージ制御のモータコントロール基板（<a href="http://www.gaio.co.jp/product/dev_tools/pdt_nec_motor_stepping.html">ガイオ・テクノロジー製のモータ制御ボード</a>）をもちいて動作をさせてみます。どのぐらいボールは飛ぶでしょうか？<br />
<br />乞うご期待！！！
</p>]]></content:encoded>
</item>
<item rdf:about="http://www.k0hobby.jp/modules/wordpress/index.php?p=35">
	<title>１軸ステージ Part II</title>
	<link>http://www.k0hobby.jp/modules/wordpress/index.php?p=35</link>
	<dc:date>2008-12-10T11:25:51+09:00</dc:date>
	<dc:creator>jwinkler &lt;&amp;#106;.&amp;#119;&amp;#105;nkl&amp;#101;&amp;#114;&amp;#64;ga&amp;#105;&amp;#111;.co&amp;#46;j&amp;#112;&gt;</dc:creator>
	
	<dc:subject>78K0モータボード</dc:subject>	<description>	この１軸ステージのプロジェクトの組み立てまたは配線に対しての情報はPart Iのブログに書きました。次は１軸ステージの動きを制御するモータボードをプログラムしていきます。Part Iのブログで書いたモータボードの中にNECエレクトロニクス社製の78K0シリーズのμPD78F0513D　CPUとALTERA社製のEPM240T100C5 (MAX II)　CPLDが搭載されています。ちょうどよいことにモータボードキットの中にそのCPUとCPLDを動かす方法が説明書に書かれています。ガイオのハードウェアマニュアルにCPLDのプログラミングの方法が書いてあります。ただALTERAのQuartus II（ALTERAのサイトからQuartus II Web Editionを無料でダウンロード出来る）を使ってガイオからのデータファイルを書き込むだけです。次に、CPUのプログラミングの仕方です。CPUの場合はCPLDより手順が多いですけれどもCPLDのように説明がスタートアップガイドに書いてます。それに従ってまずはNECエレクトロニクスのサイトから色々な開発ツールをゲットします（全部無料です）。必要なツールと設定が終わったらサンプルコードを書き込めば動きます！説明書とサンプルコードがあったおかげで大した問題無しで１軸ステージを動かすことが出来ました。１軸ステージが実際に動くのを確認したあと最後にその動きをコントロールしてみます。このモータ制御ボードが外部から入力を受けるので１軸ステージの動作データのマクロを作成しました。それから「Tera Term Pro」というプログラムでそのマクロ（.TTLファイル）を起動してやっと1軸ステージを完成しました！
 </description>
	<content:encoded><![CDATA[<p>この１軸ステージのプロジェクトの組み立てまたは配線に対しての情報は<a href="http://www.k0hobby.jp/modules/wordpress/index.php?p=33">Part Iのブログに書きました。</a>次は１軸ステージの動きを制御するモータボードをプログラムしていきます。</p>
	<p>Part Iのブログで書いた<a href="http://www.gaio.co.jp/product/dev_tools/pdt_nec_motor_stepping.html">モータボード</a>の中にNECエレクトロニクス社製の78K0シリーズのμPD78F0513D　CPUとALTERA社製のEPM240T100C5 (MAX II)　CPLDが搭載されています。ちょうどよいことにモータボードキットの中にそのCPUとCPLDを動かす方法が説明書に書かれています。ガイオのハードウェアマニュアルにCPLDのプログラミングの方法が書いてあります。ただALTERAのQuartus II（ALTERAのサイトからQuartus II Web Editionを無料でダウンロード出来る）を使ってガイオからのデータファイルを書き込むだけです。</p>
	<p>次に、CPUのプログラミングの仕方です。CPUの場合はCPLDより手順が多いですけれどもCPLDのように説明がスタートアップガイドに書いてます。それに従ってまずはNECエレクトロニクスのサイトから色々な開発ツールをゲットします（全部無料です）。必要なツールと設定が終わったらサンプルコードを書き込めば動きます！説明書とサンプルコードがあったおかげで大した問題無しで１軸ステージを動かすことが出来ました。</p>
	<p>１軸ステージが実際に動くのを確認したあと最後にその動きをコントロールしてみます。このモータ制御ボードが外部から入力を受けるので１軸ステージの動作データのマクロを作成しました。それから「Tera Term Pro」というプログラムでそのマクロ（.TTLファイル）を起動してやっと1軸ステージを完成しました！</p>
	<p><img title="image_081128_001_1.jpg" alt="image_081128_001_1.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/image_081128_001_1.jpg"></p>
	</p>
	<p><img title="image_081128_002_1.jpg" alt="image_081128_002_1.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/image_081128_002_1.jpg">
</p>]]></content:encoded>
</item>
<item rdf:about="http://www.k0hobby.jp/modules/wordpress/index.php?p=33">
	<title>１軸ステージ Part I</title>
	<link>http://www.k0hobby.jp/modules/wordpress/index.php?p=33</link>
	<dc:date>2008-11-28T09:09:13+09:00</dc:date>
	<dc:creator>jwinkler &lt;&amp;#106;.wi&amp;#110;kl&amp;#101;&amp;#114;&amp;#64;&amp;#103;&amp;#97;&amp;#105;&amp;#111;.co&amp;#46;jp&gt;</dc:creator>
	
	<dc:subject>78K0モータボード</dc:subject>	<description>	最近研究プロジェクトとしてモータ制御を利用して何か作ってみようと思いました（動く物が面白いからです）。 動かしてみたい物としてOriginalmind.co.jpの1軸ステージ基本セットにしました。
Originalmind.co.jpから注文した部品：1軸ステージ基本セット×１
日本サーボ　ステッピングモーター×１
ステッピングモーター取付板×１
フォトマイクロセンサ×２
注文した物が届いてからまず１軸ステージを組み立て始めました。 組み立てるのは簡単だったけどロッドの調整は意外に難しかったです。 でも調整しないとスムーズに動かないのでちゃんとねじを１本ずつ調整しました。 やっとスムーズに動くようになったら次はフォトマイクロセンサの２個を付けてモータボード（モータボードの情報は下にあります）とインターフェースするための配線も準備しました。 いよいよ１軸ステージ組み立て完了です！
１軸ステージのモータを動かすためこのガイオ・テクノロジー製のモータ制御ボードにしました。 
	ガイオ・テクノロジーのサイトを見るといくつかのモータボードがあるみたいですがステッピングモータを利用しているのでこのステッピングモータ版のボードに決めました。 ボードの仕様を見ると他にNECエレクトロニクス社製の78K0シリーズのμPD78F0513D CPU と ALTERA社製の EPM240T100C5 (MAX II) CPLDが搭載されています。 次回はその CPU と CPLDを利用して動かしてみよう！

 </description>
	<content:encoded><![CDATA[<p>最近研究プロジェクトとしてモータ制御を利用して何か作ってみようと思いました（動く物が面白いからです）。 動かしてみたい物として<a href="http://www.originalmind.co.jp/">Originalmind.co.jp</a>の<a href="http://www.originalmind.co.jp/cargo5/stage/assy1.jpg">1軸ステージ基本セット</a>にしました。 </p>
	<p><a href="http://www.originalmind.co.jp/">Originalmind.co.jp</a>から注文した部品：</p>
	<p><a href="http://www.originalmind.co.jp/cargo5/stage/assy1.jpg">1軸ステージ基本セット</a>×１ </p>
	<p><a href="http://www.originalmind.co.jp/id.php?i=0420.jpg">日本サーボ　ステッピングモーター</a>×１ </p>
	<p><a href="http://www.originalmind.co.jp/cargo5/stage/510204.jpg">ステッピングモーター取付板</a>×１ </p>
	<p><a href="http://www.originalmind.co.jp/cargo5/stage/510216.jpg">フォトマイクロセンサ</a>×２ </p>
	<p>注文した物が届いてからまず１軸ステージを組み立て始めました。 組み立てるのは簡単だったけどロッドの調整は意外に難しかったです。 でも調整しないとスムーズに動かないのでちゃんとねじを１本ずつ調整しました。 やっとスムーズに動くようになったら次はフォトマイクロセンサの２個を付けてモータボード（モータボードの情報は下にあります）とインターフェースするための配線も準備しました。 いよいよ１軸ステージ組み立て完了です！ </p>
	<p><img title="image_081128_003_1.jpg" alt="image_081128_003_1.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/image_081128_003_1.jpg"> </p>
	<p>１軸ステージのモータを動かすため<a href="http://www.gaio.co.jp/product/dev_tools/pdt_nec_motor_stepping.html">このガイオ・テクノロジー製のモータ制御ボード</a>にしました。 </p>
	<p><img title="image_081128_004_1.jpg" alt="image_081128_004_1.jpg" src="http://www.k0hobby.jp/modules/wordpress/attach/image_081128_004_1.jpg"></p>
	<p><a href="http://www.gaio.co.jp/product/product.html">ガイオ・テクノロジーのサイト</a>を見るといくつかのモータボードがあるみたいですがステッピングモータを利用しているのでこのステッピングモータ版のボードに決めました。 ボードの仕様を見ると他にNECエレクトロニクス社製の78K0シリーズのμPD78F0513D CPU と ALTERA社製の EPM240T100C5 (MAX II) CPLDが搭載されています。 次回はその CPU と CPLDを利用して動かしてみよう！</p>]]></content:encoded>
</item>
<item rdf:about="http://www.k0hobby.jp/modules/wordpress/index.php?p=29">
	<title>プログラムの書き込み方</title>
	<link>http://www.k0hobby.jp/modules/wordpress/index.php?p=29</link>
	<dc:date>2006-09-27T08:54:42+09:00</dc:date>
	<dc:creator>NAO &lt;&amp;#109;&amp;#97;tsumur&amp;#97;&amp;#64;&amp;#103;&amp;#97;io&amp;#46;co&amp;#46;&amp;#106;&amp;#112;&gt;</dc:creator>
	
	<dc:subject>レポート</dc:subject>	<description>	今まで紹介したプログラムはどのように書き込んだかご紹介します。
まず、書き込む前に基板にジャンパーしなくてはいけません。
買った際に一緒に入っていた「みのむしクリップ」を使って基板のテストピンを下の写真の様に接続します。
	これで準備はOK！
次に書き込みに必要なツールですが、箱の中に入っていたCD-ROMにある「FPL」という書き込みツールを使います。
	↑「FPL」の起動画面。
「Device Setup」でPort、Speedの設定を行います。（下写真参照）
	これで準備はすべてOK！
いよいよ書き込みです。
	↑書き込み中の画面。うまくいくかドキドキものです。
これで書き込みは全て終了。
今回は手でモータをまわして回転数をカウントするプログラムを書き込んでみました。
実際に動作するか確認してみましょう！
	なんと動いています！書き込み成功です!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
（ちょうど78カウント目の写真を撮って見ました。）
みのむしクリップを使わなきゃいけないのは面倒に思いましたが、
書き込みが成功したときには感動しました。

 </description>
	<content:encoded><![CDATA[<p>今まで紹介したプログラムはどのように書き込んだかご紹介します。</p>
	<p>まず、書き込む前に基板にジャンパーしなくてはいけません。</p>
	<p>買った際に一緒に入っていた「みのむしクリップ」を使って基板のテストピンを下の写真の様に接続します。</p>
	<p><img title=001_1.jpg alt=001_1.jpg src="/modules/wordpress/attach/001_1.jpg"><a href="/modules/wordpress/attach/001.jpg"></a></p>
	<p>これで準備はOK！</p>
	<p>次に書き込みに必要なツールですが、箱の中に入っていたCD-ROMにある「FPL」という書き込みツールを使います。</p>
	<p><img title=004_1.JPG alt=004_1.JPG src="/modules/wordpress/attach/004_1.JPG"></p>
	<p>↑「FPL」の起動画面。</p>
	<p>「Device Setup」でPort、Speedの設定を行います。（下写真参照）</p>
	<p><img title=005.JPG alt=005.JPG src="/modules/wordpress/attach/005.JPG"></p>
	<p>これで準備はすべてOK！</p>
	<p>いよいよ書き込みです。</p>
	<p><img title=007.JPG alt=007.JPG src="/modules/wordpress/attach/007.JPG"></p>
	<p>↑書き込み中の画面。うまくいくかドキドキものです。</p>
	<p>これで書き込みは全て終了。</p>
	<p>今回は手でモータをまわして回転数をカウントするプログラムを書き込んでみました。</p>
	<p>実際に動作するか確認してみましょう！</p>
	<p><img title=003.jpg alt=003.jpg src="/modules/wordpress/attach/003.jpg"></p>
	<p>なんと動いています！書き込み成功です!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!</p>
	<p>（ちょうど78カウント目の写真を撮って見ました。）</p>
	<p>みのむしクリップを使わなきゃいけないのは面倒に思いましたが、</p>
	<p>書き込みが成功したときには感動しました。</p>
<a href="/modules/wordpress/attach/004.JPG"></a>
</p>]]></content:encoded>
</item>
</rdf:RDF>