• 締切済み

PICのI2C通信を行っているときにタイマ割り込みはできますか?

私はC言語(CCS-Cコンパイラを使用)でPICのプログラミングをしています。使用しているPICは16F877Aです。 いま学習リモコンを製作中なのですが、赤外線信号の学習方法としてベタ読みを(1kByte分)行うつもりです。その際、16F877AではデータメモリがEEPROMを合わせても1kByteには足りません。ということは、赤外線信号を39kHz毎にチェックしながら、1ページ分(64byte)信号データがたまったらI2C通信で外部EEPROMにページ書き込みをしなくてはいけない、と考えています。 そこで、「I2C用組み込み関数を使用して外部EEPROM(24LC256)にページ書き込みを行っている最中に、タイマ割り込みは使用できるのか?」また、「タイマ割り込みが使える場合、正確にI2C通信が行えるのか(データが欠けたりしないか)?」を教えてほしいんです。 もちろん、18F452を使用すればデータメモリだけで1kByteを超えるので、この問題は解決できます。しかし、できれば現在手元にあるものを使って作りたいので、どなたか分かる方がみえましたら、教えてください!

みんなの回答

  • kazusone
  • ベストアンサー率54% (33/61)
回答No.1

Q I2Cで送信中にタイマ割り込みは使用できるか? A YES Q 正確にI2C通信ができるか? A YES

szk_517
質問者

お礼

ありがとうございます! おかげさまで希望がみえたので頑張ってみます☆

関連するQ&A

  • PICマイコンによるI2C通信について

    私は高専の学生で、マイコンを使う部活に所属しております。 今回の活動で、複数のPICを使用することになり、I2C通信を使おうと思っています。 そこで、ある問題が発生しました。 PICによるI2C通信の解説を行っているとある方のサイトには、 「I2Cの通信方式は+5VにプルアップされたSDAとSCLの各信号線を、それぞれのデバイスがオープンドレイン等によるワイヤードオア接続で信号の操作と共有を行っている関係から、 電気的にはあまり強い環境ではありません。 なので、沢山のデバイスを接続したり、通信距離を長くしたりといったことには不向きなので、 ハードウエアの構築には細心の注意が必要でしょう。」 とあります。 今回の活動で使うPICは、事情により700~800mm程度離れた状態になると思われます。 距離が長い通信には不向きとありますが、この場合は大丈夫なのでしょうか。 また、I2C通信が不可能な場合はどのような通信手段を使えばよいのでしょうか。 知っている方がいらっしゃったら、御回答をよろしくお願いいたします。

  • PICでのI2C通信でのマスタ、スレーブの切り替え

    現在PIC18F2550同士で、I2C通信を行いたくアセンブラでプログラミングをしておりますが、教えていただきたい点があります。 ・マスターとスレーブは動作中に入れ替えることはできないのでしょうか? RS等から任意の信号を与えると、マスタとスレーブが切り替わるようなことがしたいのですが、どの書籍をみてもそのような事ができるとは書いてなく困っております。 ・PICだけでなくI2C通信を行うことのできるマイコンorCPU(プログラミングが簡単で高速動作できる)はあるのでしょうか?あればお教えいただきたいです。 以上よろしくお願いいたします。

  • PICマイコン メモリのバックアップ 切換え

    PICマイコンにて電源を切ってもデータを保持したいです。 マイコンはPIC16F84やPIC16F887を使います。 887でEEPROMを試したのですが、書込みのタイミングが悪いのかデータを保持出来ない場合がありました。 基板は、16F84、16F887どちらも共通にしたいので、リチウム電池で保持しようと考えています。 その場合、外部電源とリチウム電池の自動切り替え回路はどのようにすれば良いでしょうか。 簡単な案は、「リレーを使い切り替える。」ですが、他にありましたら教えて頂きたいです。 また、充電電池の場合、参考となる回路があればご紹介ください。 宜しくお願いいたします。 この手のカテゴリはどこなんでしょうか。

  • PIC EEPROM

    PICでLEDのデータをEEPROMに書き込んで電源を切ってもデータを保存させ、再度電源オンの時は電源を切る前のデータで点滅させたいのですが、EEPROMって書き込みと読み出しってありますよね?  この場合は、LEDデータの書き込みのみで大丈夫でしょうか?

  • PIC EEPROM

    CCSでEEPROMへの書き込み読み出しかたがわかりませんどなたか詳しく例題などを付けて教えて下さい。お願いします。またPICの種類によって文法が変わるのでしょうか?16F627Aでやりたいのですが。

  • PIC I2C について

    8ビットのデータを送り、そのままスレーブのLEDに反映させるプログラムを組んでいます。 マスターからはリピートして何度もデータを送ります。 このとき、なぜか一瞬アドレスのビットデータをLEDに反映させてから本来のデータを表示します。 つまり、アドレスとデータを交互にLEDに表示する状況です。 たとえば、アドレスが 0b1111111 データが 0b00000000 だとします。 本来LEDは消灯状態にならなくてはいけないのですが、なぜか一瞬アドレスデータの内容で光ります 原因がお分かりの方はいらっしゃいますか? 使用PIC PIC16F873A //master #use i2c(MASTER, SDA=PIN_C4, SCL=PIN_C3, SLOW, RESTART_WDT, FORCE_HW) output_float(PIN_C3); output_float(PIN_C4); while (1) { i2c_start(); i2c_write(AddData << 1); i2c_write(sBitData); i2c_stop(); delay_ms(50); } //slave #use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, ADDRESS=0x00, SLOW, RESTART_WDT, FORCE_HW) output_float(PIN_C3); output_float(PIN_C4); while (1) { if (i2c_poll()) { indata = i2c_read(); output_b(indata); } }

  • 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を使って赤外線通信をしたいんですが、 いくつか教えていただきたいことがあります。 (1)赤外線の通信仕様・方式なについてなんですが、 下記の2つのページを参考にしたんですが、 http://www.picfun.com/appframe.html http://www.sendai-ct.ac.jp/~ckuma/micom/3048/ir.html 1つ目のページには、リーダー部(8bit)、データ部(16bit)、データ部連送(16bit)の40bitを送ると載っています。 しかし、2つ目のページには、リーダー部()、カスタム部、カスタム反転、データ部、データ部反転の順番で送っているようです。 これって、どちらの方式で送っても、受信した際のソフトの書き方で対応しろってことなんでしょうか? それとも、自分が使用する受信モジュールによって、どっちの送信方法で送れっていうのが決まっているのでしょうか? (2)そもそも、38KHzで変調するということがピンとこないんですが、 例えば上の1つ目のページでいうと、送信する40bit分を1/38K=26mSec周期にしろってことなんでしょうか? ちなみに、PIC16f873、赤外線受信モジュールはSPS440-1を使用しています。 初歩的な質問で申し訳ありませんが、よろしくお願いしますm(_ _)m

  • PICでの赤外線通信について

    PICでの赤外線通信について教えてください。 PIC初心者で、赤外線を利用したものを作るための下準備として、赤外LEDを発光させそれを受信モジュールで受け取り普通のLEDを光らせるということをしています。 受信モジュールにはSANYO製のSPS440-1を使用しており、出力が反転するものなので信号がなければLEDは光り続けています。 テレビのリモコンなどを向けると、チラつくのが確認できました。 次にPIC16F84Aで赤外LEDを38kHzで発光させましたが、何も反応がありません。 受信モジュールの出力が反転するものなので、「13μ間ON、13μ間OFF」を続けていれば、常に「1」ということで受信側のLEDは消える、という予想の元行ったのですが・・・ 私の検討違いなのでしょうか?? ケータイのカメラで赤外線を発光していることは確認できました。 ちなみに10MHzのセラロックを使用していますので、正確には13.2μsecのON・OFFを繰り返しています。これが原因でしょうか?? どなたか教えてください。よろしくお願いします。

  • usartによるpic18fからpic16fへの…

    usartによるpic18fからpic16fへのデータの受け渡しについて いつもお世話になります。 pic18f2680からpic16f690へデータを渡すためにusartを使用して行おうとしていますがうまくいきません。 送り側(18f2680)で i=3 itoa(i,f);//int f,char i putsUSART(f); 上記のように送信し, 受け側(16f690)で     c= getc();//int c printf("%u",c); と、受けたところ000000000000000000000000510と表示されてしまいます。 printfなどの書式を変えても問題が治りません。 どなたかお詳しい方がいらっしゃいましたらご教授よろしくお願い致します。