- 締切済み
PIC18FのUART通信について
こんにちは ただいまGPSとSDカードを使ったロガーをPIC18F2550で作成しております。 GPSとSDを使うため、UARTのピンが2つ必要ですがPIC18F2550にはTX/RXは一つずつしかありません。 そこで,ソフトUARTで解決したいのですが, CCS Cコンパイラではソフトウェアシリアル通信の機能があるみたいのですが 現在自分が使っているC18だといくら探しても見つかりませんでした。 C18もソフトUART機能はあるのでしょうか?
- marumarumaaa
- お礼率50% (3/6)
- その他([技術者向] コンピューター)
- 回答数3
- ありがとう数4
- みんなの回答 (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.
SD カード単体で,SPI で通信できます。 http://elm-chan.org/docs/mmc/mmc.html ですが,PIC18F2550 は UART の RX と SPI の SDO が同じピンなので, 同時に使うことは出来なさそうです。 となると, GPS 用と SD 用を時分割で切り替えるか(たぶん切替回路が必要), 汎用 IO ポートを操って SPI で SD カードと通信するか, だと思います。
- Visar
- ベストアンサー率19% (17/87)
C18のランタイムライブラリには ソフトシリアル通信の機能は無いと思います。 PIC18F2550はSPIが1チャネル有るようなので C18でソフトを組むならSDカードのインターフェイスが SPIのものを探したほうがいいような気がします・・・
お礼
投稿ありがとうございます。 参考にさせていただきます。
関連する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に対応していないんでしょうか?どなたかご教授願います。
- ベストアンサー
- C・C++・C#
- トランジスタ技術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()
- 締切済み
- C・C++・C#
お礼
投稿ありがとうございます。 PIC18F2320は UART の RX と SPI の SDOがことなるので,そちらを使ってみようと思います。