• 締切済み

PIC18FのUART通信について

こんにちは ただいまGPSとSDカードを使ったロガーをPIC18F2550で作成しております。 GPSとSDを使うため、UARTのピンが2つ必要ですがPIC18F2550にはTX/RXは一つずつしかありません。 そこで,ソフトUARTで解決したいのですが, CCS Cコンパイラではソフトウェアシリアル通信の機能があるみたいのですが 現在自分が使っているC18だといくら探しても見つかりませんでした。 C18もソフトUART機能はあるのでしょうか?

みんなの回答

noname#137556
noname#137556
回答No.3

あれ? ↓の Cahpter 3 にそれっぽいのがありますね・・・ http://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB_C18_Libraries_51297f.pdf 3.6 SOFTWARE UART FUNCTIONS These functions are designed to allow the implementation of a UART using I/O pins from a PIC18 microcontroller.

全文を見る
すると、全ての回答が全文表示されます。
noname#137556
noname#137556
回答No.2

SD カード単体で,SPI で通信できます。 http://elm-chan.org/docs/mmc/mmc.html ですが,PIC18F2550 は UART の RX と SPI の SDO が同じピンなので, 同時に使うことは出来なさそうです。 となると,  GPS 用と SD 用を時分割で切り替えるか(たぶん切替回路が必要),  汎用 IO ポートを操って SPI で SD カードと通信するか, だと思います。

marumarumaaa
質問者

お礼

投稿ありがとうございます。 PIC18F2320は UART の RX と SPI の SDOがことなるので,そちらを使ってみようと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • Visar
  • ベストアンサー率19% (17/87)
回答No.1

C18のランタイムライブラリには ソフトシリアル通信の機能は無いと思います。 PIC18F2550はSPIが1チャネル有るようなので C18でソフトを組むならSDカードのインターフェイスが SPIのものを探したほうがいいような気がします・・・

参考URL:
http://strawberry-linux.com/catalog/items?code=18006
marumarumaaa
質問者

お礼

投稿ありがとうございます。 参考にさせていただきます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • dspicからpicへのUARTでの信号送信

    現在,dspic33fj32mc202を使用して回路を作成しています。 ピンの都合から、UART機能を利用して、dspicのTXピンから,pic16f690のRXピンに信号を送りたいと考えています。 しかしdspic33fは3.3Vで、pic16f690は5Vです。 上記のようなことは可能なのでしょうか?

  • PIC12F683のソフトウェアUARTはタイマ割り込みとか使っている?

    PIC12F683で、 http://www.picfun.com/P12F/p12f02.html このサイトにあるように、PIC12F683にはハードウェアUARTモジュール機能がないので、ソフトウェアでこれを実現するために #use RS232(BAUD=9600, XMIT=PIN_A2, PCV=PIN_A3)というのを やればprintf関数でUARTデータを出力できるとのことですが、 この機能を宣言した場合にはPIC12F683のタイマ割り込み機能はどれか1つ占有されたりするのでしょうか? その場合、開けておかなければならないタイマは0,1,2のどれになるのでしょうか?

  • pic 同士のシリアル通信

    picから別のpicにシリアル通信でデータを送ることは可能なのでしょうか? また、出来るとしたらどのようなプログラムになるでしょうか? 上記質問に追記です。 送信側はtxピン、受信側はrxピンという接続で可能でしょうか?

  • pic16FのコンパイルにCCSのCコンパイラ

    pic16FのコンパイルにCCSのCコンパイラをMPLABに統合した環境で使用しています。 大文字と小文字の区別をつけることは出来ないのでしょうか? 誰か教えてください。

  • PIC16F877内蔵USARTが受信しない

    PIC16F877です。 [環境]  MPLAB IDE 6.6  CCS 3.15  WinXP sp3 送受信ピンは専用ピンに割り当て、内蔵USARTを使ってRS232C通信しています。 PICから相手機器にコマンド発行し、相手から応答データが帰ってきていますが、 kbhit()を確認してもHighになってくれません。 PIC入力ピンをオシロで当たって波形も確認済み、また信号ラインをシリアルモニタで 受信データラインを横取りして確認してもデータは正常に読み取れていますので、データは 正常だと思います。 同じような経験をお待ちの方はおられませんか? よろしくご教授、お願いします。

  • PIC18F2550でのUSARTの使い方について

    フリーのC18コンパイラで電子工作をしています。 今回18F2550でシリアル通信に挑戦していますが、自分の目的の動作のためのレジスタ設定が理解できません。教えて下さい。 動作内容はPICからシリアル通信でデータを送り12ビットシリアル-パラレル変換の「NJU3714」でシリパラ変換させることです。PICのデータ受信は今のところしないつもりです。

  • PICのI2C通信のプログラムについて

    I2Cの同報機能を使いたいのですが、プログラムの書き方がよく分かりません。 後閑さんの電子工作の実験室も見たんですが、そこに書いてあったのは多分アセンブラのプログラムで、CCSを使っている自分には理解できませんでした。 CCSで同報機能は使えるのでしょうか?もし使えるのなら、プログラム例などをいただけると助かります。 ちなみに、使っているPICはマスターが16F873でスレーブが16F819です。 よろしくお願いいたします。

  • PIC18f452 のtxとrxピンの使い方

    PIC18f452 には TX と RX の pin が一つずつしかないのですが、それらを別々の目的に使うことは可能でしょうか? たとえば、TX の pin を XBee の送信に使い、RX の pin を Rs232からの受信 に使うことは可能でしょうか? よろしくお願いします。

  • PIC12F1822で内部クロックが使えない

    表題のとおりPIC1F1822+CCS-Cで開発していますが、内部クロックの32MHzが使えません。 setup_oscillator(OSC_32MHZ);と記載した行でエラーが出て16MHzだと動きます。 C:\Program Files\PICC\Devicesにある12f1822.hを見てみるとOSC_32MHZが存在しないことに気がつきました。このコンパイラでは32MHzに対応していないんでしょうか?どなたかご教授願います。

  • トランジスタ技術8月号:UARTについて

    こんにちは。 トランジスタ技術2007年8月号付録のdsPIC30Fを使って色々といじっているのですが、UARTのところで問題が現れてしまいました。 付録基盤の23・24ピン(dsPIC30F2012の16・17ピン)のURx/UTxを使って、他の組み込みチップと20~30バイトのパケットを通信したいのですが、ボーレートやパリティの設定を正しく行っても送受信ができません。 PCのRS232-Cと組み込みチップを繋げて通信はできているのですが、付録基盤から同じパケットを送信すると不定値が現れてしまいます。 電圧や配線は確かめましたが、特に問題がありそうな場所はありませんでした。 ソースは次のような感じです。助けていただけないでしょうか。 #include <uart.h> #include <p30f2012.h> void init() { unsigned int _U1BRG; // U1BRG register config unsigned int _U1MODE; // U1MODE register config unsigned int _U1STA; // U1STA register config CloseUART1(); ConfigIntUART1( UART_RX_INT_DIS & UART_TX_INT_DIS ); // U1BRG register _U1BRG= ( (7370000*4/19200)/16); // Fcy / BaudRate / 16 // U1MODE register, I/O (U1TX/U1RX), N81 _U1MODE = UART_EN & UART_IDLE_CON & UART_RX_TX & UART_DIS_WAKE & UART_DIS_LOOPBACK & UART_EN_ABAUD & UART_NO_PAR_8BIT & UART_1STOPBIT; // U1STA register _U1STA = UART_INT_TX_BUF_EMPTY & UART_TX_PIN_NORMAL & UART_TX_ENABLE & UART_INT_RX_CHAR & UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR; // Open UART1 OpenUART1(_U1MODE, _U1STA, _U1BRG); } // end of init() int main(void){ unsigned int packet[] = {パケットデータ} unsigned int result[30]; unsigned int i; // write process for(i=0; i<PACKET_LENGTH; i++) { while(U1STAbits.UTXBF != 0) { ; } U1TXREG = packet[i] & 0xFF; } while(!U1STAbits.TRMT) {;} // read process for(i=0; i<PACKET_LENGTH; i++) { while(U1STAbits.URXDA != 0) {;} result[i] = U1RXREG & 0xFF; } // for(i) while(1) {;} } // end of main()

このQ&Aのポイント
  • mfc j 6980cdwで用紙をいれても認識しない場合の対処方法を紹介します。
  • パソコンやスマートフォンのOSや接続方法、関連ソフト・アプリ、電話回線の種類について教えてください。
  • この記事ではブラザー製品の用紙トレイ認識エラーについて詳しく解説しています。
回答を見る