[中級の電子工作テスト]
CANONデジ一で遊ぶ
PIC24F RTCCでカレンダー
PICで赤外線通信
PICでシリアル通信
FT232RL変換モジュール
K型熱電対 AD595CQ
K型熱電対のテスト MAX6675
連枝でラダープログラム
連枝でステッピングモータ
各種デバイスのテスト
[シーケンス回路テスト]
リレーシーケンス
[車載用電子工作テスト]
電源の取り方
[PCBCAD]
EAGLE CAD
[掲示板]
電子工作のテスト工場BBS
[リンク]
工作お役立ちリンク集
[電子工作のテスト工場]
表紙[TOP]へ戻る
[電子工作系]
Sivanyan_Radioのブログ
(↑↑管理人のブログです)
GAMEってたのすぃー
電子回路実験教材の部屋 RLC
電子マスカット 必見[MP3]!
kunioのホームページ AVR+MP3
なひたふ電子
ワタヤンの日記
BLUE's electronics room
isi's 趣味の電子工作
獣医さんの電子工作とパソコン研究室
電子用語集Web
YS電子工作ラボ
(↑↑管理人のブログです)
[プログラム系]
信彦の家
[SNS]
電子工作の広場SNS
[写真]
シャッターを押した瞬間
PIC24FJ64GA002の入出力ピンにはCPUの機能を任意に設定できます。どういうことかと言うと、「このピンにこの機能を付ける」と自分で決めれるという事です。
これはとても便利な機能で、部品を配置する際にも強制的に割付られていない事から配置が楽になります。
しかし、これはPIC16FやPIC18Fに無かった機能なのでPIC24Fを使用する場合は新たに習得する必要があります。
覚えるのは難しいと思いますので表にして掲載しておく事にします。ほとんど自分用の覚書です。 ピン入力割付の表は下記のようになります。
設定例:RP9をSPI1データ入力に設定する場合 RPINR20.SDI1R = 9; //RP9の9だけを記載する ピン出力割り当ては入力とは逆にピンに機能を割り当てます。 ピンの指定
設定例:RP8にSPI1データ出力を設定する場合 RPOR4.RP8 = 7; //RP8はRPOR4でSPIデータ出力は「7」です。 内部プルアップの設定はRPxピン1本毎に行えます。
例えばPIC24FJ64GA002のRP14をプルアップしたい場合はCN12となっているので、CNPU1のCN12を「1」にすればRP14がプルアップされます。 記載方法:CNPU1 = 0x1000;//0001000000000000 |
PIC24F64GA002のSPI通信をテストしようと思いましたが、相手がいないと通信できません。
目の前にはSDカードのソケットが付いたサンハヤトの基板があるので、これとSPIで通信して「こんにちは」を行う事にしました。
こんにちはとは初期化を行ってSDカードから初期化完了のレスポンスをもらう作業を僕はこう呼んでます。 MMC(SD)カードのSPIモードへの初期化手順 1.立ち上げ(立ち上げ時はSPIモードではない) 2.チップセレクトを「H」にする 3.80以上のクロックを与える(ダミークロック) 4.チップセレクトを「L」にする 5.コマンド0(CMD0)を送信 0x400000000095 6.カードからレスポンス(0x01)が返ってくるまで待つ 7.コマンド1(CMD1)を送信 0x410000000095 8.カードからのレスポンスが「0x00」になるまで7番を繰り返す 9.初期化完了 CMD0を送ってレスポンス(0x01)が有ればLED1を点灯させ、CMD1を繰り返し送ってレスポンス(0x00)があればLED2を点灯させています。 こうする事によりどこまで進んでいるか把握できます。いわゆるデバッグ用です。 プログラムはこんな感じ。mmc_spi(void)が初期化ルーチンです。スイッチを押すと初期化します。LED1とLED2が点灯すれば成功です。 アナログ機能のついたI/Oは初期状態でアナログ使用となっています。プログラムの初期でこれをデジタルに設定しないとデジタルに使えません。 これを忘れてて結構悩む事があります。コンパイルは通るのに入力が機能しない場合などはこれを疑って下さい。 ついでにプロジェクトに追加しないといけないものはこちら。 テスト風景 回路図書くの忘れてた・・・(汗)。また後日にアップします。 |
順序が異なりますが、今回は回路の方を載せます。サンハヤトの使用したSD変換基板はSDカードのピンと対応した端子が出ています。
端子には番号が打ってあるので迷うことはありません。SDソケットだけを使用してもブレッドボードでは使用できないのでこういうものがあれば便利です。 RPINR20bits.SDI1R = 9;//SPI1入力をRP9に設定しているのでSDの出力と接続します。 RPOR4bits.RP8R = 7;//RP8をSPI1の出力に設定しているのでSDの入力に接続します。 RPOR3bits.RP7R = 8;//RP7をSPI1のクロックに設定しているのでSDのクロックに接続します。 他にLED2つとスイッチ1つを接続しています。 入出力の設定とプルアップ・アナログの設定はこうなります。 入出力と信号線は全てプルアップを有効にしましょう。 TRISA = 0x0000;//0x0000,0000,0000,0000 TRISB = 0x0224;//0x0000,0010,0010,0100 CNPU1 = 0x0040;//0x0000,0000,0100,0000 CNPU2 = 0x09E0;//0x?000,1001,1110,0000 AD1PCFG = 0xFFFF;//アナログ入力設定0でアナログ1でデジタル。初期はオール0。 最後に回路図ですが下図のようになりました。 |
今回はSDカードのアドレスを指定して読み込むテストを行います。
初期設定でSPIモードに切り替えたカードへのアクセスとなりますので、上記の初期設定をクリアーしていないと出来ません。 データの読み出しはアドレスを指定すると、設定したブロック分が順に送信されてきます。 コマンド16で設定するのですが、今回は初期設定のまま512で行います。つまり、一度アドレス指定して読み込むと512個のデータが続けて送信されてきます。 これを順にメモリに確保していく手順を示します。 1)CSをLにする 2)0x5100000001を送信する(コマンド17) 3)受信用ダミークロック0XFFを送信し続け0x00のレスポンスを受け取る (レスポンスが0x04の場合エラーなので再度2のコマンドを送信する) 4)受信用ダミークロック0xFFを送信し0xFE(送信開始の合図)を受信する 5)0xFFを順に送信(ダミー)するとデータが順に送られてくるのでメモリに格納する 6)CSをHに戻してダミークロック送信 する事はたったこれだけです。 前回からの変更点 1)SPICONValuelのSEC_PRESCAL_1_1をSEC_PRESCAL_2_1にしました。 2)ReadSPI1()をgetcSPI1()に変更しました。(大文字が一個少なくなるので) 読み込んだ結果です。 これでオフセット値を入手する事が出来ます。 |
オフセットが入手できればセクタ0へアクセスが可能となります。 アドレス0でオフセットを入手し、セクタ0の場所を知る。 セクタ0から必要なデータを抽出する。 static long offset;//オフセット static int sect;//セクタ ------------- sect = 0;//セクタ0 mmc_Read((sect * 512) + (offset * 512)); 以上でセクタ0にアクセスできるはずです。オフセットは4つのデータを1つにまとめる処理を先にして置いて下さい。 読み込んだデータ アドレス指定でデータが読めれば後はFATに従ってデータを読み込むだけなので、FATについて知るとデータの読み出しは簡単に行えるようになります。 |
せっかくなのでMP3を再生してみようと思います。それにはまず準備が必要です。
今回は以前に購入したMP3デコーダICの乗った基板を使用します。
ストロベリーリナックスで購入した「VS1011B」というICが乗った基板です。 基板の接続端子 1.Rout(右音声出力) 2.AGND(アナロググランド) 3.Lout(左音声出力) 4.SO 5.SI 6.SCK 7.CS 8.RESET 9.BSYNC 10.DCLK 11.DREQ 12.POWER 13.GND 割と接続端子が多い事がわかります。28ピンのPICではピン配置が難しくなります。 以前に28ピンの18Fで動かしているのでまぁ大丈夫だと思います。 この基板にカードから読み込んだデータを順に送れば繋いだスピーカーから音がなります。 モジュールの初期化手順 1.ソフトウェアリセット(アドレス0x00に0x0004を書き込む) 2.モード設定(アドレス0x00に0x0800を書き込む) 3.クロックの設定(アドレス03) 4.ボリュームの設定(アドレス0x0B 0x0000最大、0xFFFF最小) またプログラムを書く時に説明します。 |
Copyright (c) 2007-2022 amahime All Rights Reserved.