- ベストアンサー
PICのAD変換場所
PIC16F819のAD変換したデータをPIC内に格納する際の格納場所ってどこなんでしょうか?例えばアナログの『ピ~』という音をAD変換してPICに格納する場合などです。。 もしくはPIC16F819に関する詳しいサイト・書籍などを知っている方いましたら教えて下さい。 ネットで沢山探しましたが16F819の情報があまりありませんでした。よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
CALLではありません。割り込み処理は割り込みベクターと呼ばれる番地に割り込み処理ルーチンのはいっている番地を指定します。処理の前後にいろいろなお作法があるのでこれをマスターする必要があります。ソースコードの例はURLにあります。しかし、初めての開発ではいろいろとまどうことがあると思います。いろいろな本を読んで勉強してください。 なお、今回の目的のシステムを考えると、まずハードウエア設計をもう一度見直す必要があると思います。外部メモリーやDAが必要だということはかなり製作の負担になります。もう少しグレードの高いCPUを導入した方が最終的には開発負担を減らすことができると思います。 プログラムの受託開発には百万円単位の設計・開発費が必要です。受託先はインターネットで「PIC 受託開発」などのキーワードで検索すれば見つかると思います。また、PICクラブという趣味の団体がありますのでここに参加してMLで先輩諸氏のご指導を仰ぐという手もあるかと思います。 http://www.picfun.com/
その他の回答 (4)
- nta
- ベストアンサー率78% (1525/1942)
プログラムを拝見しました。ウオッチドグタイマの処理などの細かいところは開発中だとおもいますが、参考意見をすこしだけ。 (1)ポートBの出力データをどのように処理するのかにもよりますが、一般に、DAデータを外部出力するときに出力タイミングを外部に知らせるストローブパルスを出す必要があります。 (3)DAのクロックの設定(ADCSレジスタ)ができていませんが、システムクロックにあわせて適切な値を設定する必要があります。 (2)サンプリングを8kHz(125マイクロ秒単位)で処理するには、割り込み処理を使わなければ、同じ時間間隔で動作させることは困難です。ジッターはかなり厳しく音質に影響を与えます。内蔵タイマモジュールを使って取り込み部分を割り込み処理に変更して下さい。 (3)D/Aのアクイジション時間(おそらくこれが20マイクロ秒の待ち時間の設定?)+変換待ち時間もありますから、これもタイマやAD変換終了の割り込み処理を使った方が、他の処理が複雑になったときに有利でしょう。 いきなりの割り込み処理のプログラミングは難しい場合には(2)の部分だけでも挑戦して下さい。
- nta
- ベストアンサー率78% (1525/1942)
ごめんなさい。0.8秒ですから20Kバイトは必要ですね。DAコンバータを出力に付けるということなので、EEPROMの128kビット(32K×8ビット)製品のシリアル接続バージョンを搭載すればPICのポートが足りると思います。ただし、シリアル伝送のプログラムはやや難しいでしょう。また、そこまでするのであれば、PICマイコンのグレードを上げて内蔵メモリーの多い品種を選んだ方が最終的なコストは安いかもしれません。
補足
ありがとうございます。 一応、色々な資料を参考にしてプログラム作成してみたんですが…。自分の考えではポートA0にマイクを接続してポートA3,4にスイッチ、ポートB1にてAD変換後のデータを出力と考えています。その他、発信機やコンデンサを色々つければ動くかなと考えているんですが・・。 START BSF STATUS,RPO MOVLW 070H MOVWF OSCCON MOVLW 0EH MOVWF ADCON0 MOVLW TRISA CLRF TRISB BCF STATUS,PRO MAIN BTFSS PORTA,3 CALL PATAN1 BTFSS PORTA,4 CALL PATAN2 CALL PATAN3 GOTO MAIN PATAN1 MOVLW 081H MOVWF ADCON0 CALL TIME BSF ADCON0,GO CALL PATAN4 PATAN2 MOVLW ADRESH,W MOVWF PORTB,1 MOVLW ADRESL,W MOVWF PORTB,1 PATAN3 何もない状態(作成中) PATAN4 BTFSC ADCON0,GO GOTO PATAN4 GOTO MAIN TIME 20μ秒(作成中) RETURN END 間違ってる部分が少しあるかもと思っているんですが。 周りにPICの知識のある人が一人もいないのでお世話になってますがよろしくお願いします。
- nta
- ベストアンサー率78% (1525/1942)
PIC内のメモリーがわずか256バイト(キロではありません)、EEPROMも256バイトのみです。内部には残せませんから外部にメモリーを搭載してください。信号処理をして圧縮する能力もありません(かけ算器がないので)から、8キロバイト毎秒で保存するとすれば、2キロバイト程度のEEPROMを外部に搭載すればいいと思います。圧縮作業をしないのでプログラム自体は簡単です。3kには十分収まります。
- nta
- ベストアンサー率78% (1525/1942)
このCPUのデータシートをダウンロードしてご覧下さい。 ADRESL ADRESHと書かれているレジスタ(メモリーマップドIOですからメモリー上の1E,9E)にあります。ご質問の雰囲気からすると、AD変換されたデータが連続で格納されるようなイメージを持たれているようですが、データの連続取得はあくまでプログラムでおこないます。RAMは全部で256バイトとわずかですから、取得すると直ちにCPU外部に書き出す必要があります。長時間の記録が必要であれば外付けでEEPROMを搭載し、メモリーインターフェースも自分で作成して下さい。
- 参考URL:
- http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1335&dDocName=en010227
補足
レスありがとうございます。 説明不足でしたがスイッチを2つ付けて1つを押したら音声を可能な限り(0.8秒位)録音(アナログをAD変換を用いてPIC内に保存)、もう1つを押したら再生されるという物を結果的に作りたいと思っています。再生する際にはポートBよりデータを出力して別にDA変換装置などを取り付けて行う予定です。録音したデータはいつでも再生できるようにPIC内に保存しておきたいと考えています。このプログラム作るのは大変なのでしょうか?
補足
(2)番の割り込み処理はCALLとかでジャンプするということでしょう? このプログラム完成するのにはまだまだ時間かかりそうに最近思ってきたのですが…。 ※PICのプログラムを有料(小額)で作成してくれるサイトとか知っていましたら教えて貰えませんか?