• ベストアンサー

PICでLEDの点滅について

http://okwave.jp/qa/q2987225.html を参考にして、C言語で作成しようとしているときに、コピーアンドペーストしたにもかかわらず、ビルドは成功しますが、LEDが点滅しません。何が悪いのか見当がつきません。ただ、いろいろなソースを試してみましたが、ビルドは成功しますが実行時に期待通りに動きません。どうもコンパイラの設定辺りが怪しいのですが、どなたかわかる方が居られたらアドバイスをいただけますようよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • htk433
  • ベストアンサー率81% (9/11)
回答No.1

申し訳ないですが、この質問内容ではズバリ解決ができるような回答は引き出せないと思いますよ… 状況も現象も詳しいことは記述されていませんし。(開発環境とか。あと実行時にどういう挙動をしたか、コンパイルエラーならばその時のメッセージ、などです) まぁ…原因の見当もつかない状態なのに詳細を書けと言われても「無理だろ!」と思われるでしょうけど…(私も同じ立場ならそう思うでしょうし;) とりあえず、本文の中に開発環境と今使っているマイコンの種類、現在の状況を書いていただくだけでもだいぶ回答の付きやすさは違うと思いますよ。今後のご質問の時にでもお役立てください。 どこかのソースをコピーされたのでしたら、掲載サイトのURL(ソースを直接貼るとスペースの表示の関係とかで非常に見づらかったりするので…)とその時のコンパイル結果(エラーメッセージが出たのなら全文そのままコピペを推奨)・実行時の挙動などがあれば見る側にもわかりやすいです。 さて。 16F84AはMPLABで昔ちょろっとやったぐらいなので、あんまり人のこと言えたほど私も詳しくはないのですが……私なりにいくつか思ったことを挙げてみます。↑で偉そうなこと言った割に詳しくなくてすいません-_-; ないとは思いますが、マイコンの種類がそもそも違っていたり…とか。 文法は間違っていないからコンパイルは通るけれど、そもそもターゲットマイコンが違うのでバイナリを書き込んでも動作しない、と。 ビルドには成功しているようなのでIDE(と言うよりはコンパイラ)は正しい設定のようですが、ライティングソフトの方で指定をし忘れていたり…ということがあります。私が初めてPIC触った時はこの辺だけで相当長いことつまずきました… ハードウェア・回路面で問題があることもあります。 おそらく学校、ブレットボードを使っての実習なのではないでしょうか。 電源の種類を間違えたり、抵抗の差し忘れなんかでマイコン本体が壊れてしまっていたとか、結線を間違えていた、なんてのは良くあることですし。 あと、これはMPLAB限定ですが、バージョンによってはパス名に日本語が入っているとうまくいかなかったり(どううまくいかないのかは忘れたので今回とは関係ないかもです;)、ということもあります。 コードについてはコメントしようがないので、今思いつく感じではこんなものでしょうか。

fumihara2258
質問者

お礼

ご親切に回答していただいて有難うございました。 開発環境はMPLAB、CCS社のCCSCコンパイラです。コンパイルできてHEXファイルも作成されているのですが回路に組み込むとうんともすんとも言いません。 解決したとはいえないのですが、一応載せておきます。 現在わたしは、CCS社のコンパイラを使っていましたが、質問のと おりの状況です。そこで、少しお金を出して、「キットで遊ぼう電子回路、新PIC入門C言語編」を購入しました。HITEC社のコンパイラをインストール等を行い、サンプルコードをコピペしました。そのままでは動かなかったので、「C:\Program Files\HI-TECH Software\PICC\9.81\include\legacy」のパスの中のpic16f62xa.hをインクルードするとビルド成功しました。それをPICに書き込み回路にセットすると動作しました。HITEC社のC言語のコンパイラは動作しましたが、CCS社のC言語のコンパイラは未だに動作しません。 以下が、HITEC社のコンパイラで動作したソースです。 #include <pic.h> #include <pic16f6x.h>//適当にコピーしてください。 __CONFIG ( UNPROTECT & LVPDIS & BOREN & MCLREN & PWRTEN & WDTDIS & INTIO ); void main (void) { int counter=0; // 1,2,17,18端子を入出力端子に設定 CMCON = 0x07; // 電圧レベルの初期設定 PORTA = 0xFF; PORTB = 0xFF; // 入出力設定 TRISA = 0x03; TRISB = 0x00; // 永久ループ while(1) { switch(counter) { case 0: RB0=1; RB1=1; RB2=0; RB3=0; break; case 1: RB0=0; RB1=1; RB2=1; RB3=0; break; case 2: RB0=0; RB1=0; RB2=1; RB3=1; break; case 3: RB0=1; RB1=0; RB2=0; RB3=1; break; } while(RA1!=1){} counter++; if(counter==4) { counter=0; } while(RA1!=0){} } }

fumihara2258
質問者

補足

その後について、、、いろいろやってみた結果、コンフィグレーションワードがおかしかったようでした。とりあえず、動作しました。有難うございました。 いちおうCCSCコンパイラの動作したコードを載せておきます。 #include<16F628A.h> #include <stdio.h> #fuses INTRC_IO,NOWDT,PUT,NOPROTECT,NOMCLR,LVP,BROWNOUT,MCLR, //////// Fuses: NOWDT,WDT,PUT,NOPUT,LP,XT,HS,EC_IO,INTRC_IO,INTRC,RC_IO,RC //////// Fuses: NOMCLR,MCLR,NOBROWNOUT,BROWNOUT,NOLVP,LVP,CPD,NOCPD,PROTECT //////// Fuses: NOPROTECT //PWRTEN & WDTDIS void main (void) { int counter=0; // 1,2,17,18端子を入出力端子に設定 //CMCON = 0x07; // 電圧レベルの初期設定 output_a(0xff); output_b(0xff); set_tris_a(0x03); set_tris_b(0x00); // 永久ループ while(1) { switch(counter) { case 0: output_high(PIN_B0); output_high(PIN_B1); output_low(PIN_B2); output_low(PIN_B3); break; case 1: output_low(PIN_B0); output_high(PIN_B1); output_high(PIN_B2); output_low(PIN_B3); break; case 2: output_low(PIN_B0); output_low(PIN_B1); output_high(PIN_B2); output_high(PIN_B3); break; case 3: output_high(PIN_B0); output_low(PIN_B1); output_low(PIN_B2); output_high(PIN_B3); break; } while(input(PIN_A1)!=1){} counter++; if(counter==4) { counter=0; } while(input(PIN_A1)!=0){} } }

関連するQ&A

  • PIC LEDの点滅プログラム

    現在C言語でLEDの点滅プログラムを作成しているのですが なかなかうまくいきません。 LEDの点滅プログラムのソースなど公開しているサイトがありましたら教えてください。 参考にしてプログラムを考えていきたいと思っています。 基本的、シンプルな点滅プログラムを希望します。 PIC16F84Aを使用することを前提に考えています。 よろしくお願いいたします。

  • PICマイコンでLEDの点滅をC言語で記述法を教えてください

    PICマイコン(PIC16F84A)にLEDを1個接続し点滅だけのプログラムをC言語で記述を書きたいのですが、教えていただけないでしょうか? CCS社のコンパイラを用いた時の記述の書き方を教えていただけないでしょうか? 条件は、 ・電池を繋げるとLEDが点滅、スイッチ素子は用いません。 ・LEDは1秒間隔で点滅し、永遠に点滅 ・LEDは、PICマイコン(PIC16F84A)の9番ピン(RB3に該当)に接続 ・水晶発振子は、10MHzを使用。 ・コンパイラは、CCS社を使用 私が分かる範囲は下記なのですが、これから先の記述方法が分かりません。 #include <16f84a.h> #fuses HS, NOWDT, NOPROTECT #use delay(clock=10000000) #byte port_b=6 main() { この中身の記述方法が分かりません。 教えていただけないでしょうか? } よろしくお願いします。

  • HEW4 GUI LED点滅

    High-performance Embedded Workshop4でLEDがシフトして点灯するプログラムのシミュレーションを行おうとしたのですが、GUI入出力ウィンドウに作った仮想LEDが動いてくれません。極稀に点滅してくれるのですが、たいてい動きません。 ・ステップ実行をすると期待通りに1ビットずつシフトしながら点灯するのが確認できる。 ・実行→ブレークとする度に点灯している(していた?)LEDが違うのでプログラム自体は動いていそう。 ・実際に3664Fに書き込み、LEDを繋いで確認すると期待通りの動作をする。 以上の点からGUI入出力ウィンドウに問題がありそうな気もしないでもないですが・・・PCのスペックが関係あるのか・・・ どなたかアドバイスお願いします。 ちなみに簡単にスペックを言いますと、Windows XP sp3  1.86GHz  メモリ1Gになります。

  • LEDイルミの点滅プログラムを教えてください

    プログラミングは超初心者ですが、以下条件でLEDクリスマスイルミネ-ションをマイコン制御したく、適切なソースプログラムを教えて下さい(プリプロセッサ-部含め)? 使用PIC: 12F683-I/Pを予定(もっと適当なもながあればそれでも可) プログラミングソフト: MBLAB X IDE ver.2.20 使用言語: C コンパイラ-: XC8 ver.1.33 書込み器: PIC KIT3 動作内容: 点滅は2個のLED出力を以下内容で行う(使用する内臓クロックは1MHzを希望): LED1(GP0、7番ピン) 起動後1秒間で徐々に明るく(デュ-テイ比0→100)     その後7秒間はON(点灯)維持 その後1秒間で徐々に暗く(デュ-テイ比100→0) その後3秒間はOFF(消灯)維持 合計12秒間のサイクルで元に戻る LED2(GP2、5番ピン) 6秒遅れで上記と同じサイクルを繰り返す。つまり LED1とLED2は点灯が一部重なりあう

  • 交流電源でLED点滅回路

     まずは、以前質問したこのURLをご覧ください。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1437197  LED20個を6kΩ付近の抵抗を使って、コンセントから電源を取り、点灯させる事に成功しました。家にあったLEDを除き材料費は20円でした。  それに加えお聞きしたいのですが、この作った回路を点滅させることはできるでしょうか。一応点滅回路は見つけたのですが、電解コンデンサを使っていたので交流電流は流せないですよね。他にモーターで、金属端子を取り付けた円盤をまわし、電流が通ったり通らなかったりということも考えましたが、これより簡単に、且つ"廉価"でできるでしょうか。 まだまだ電気回路について生半可な知識しかないので教えていただければ嬉しいです。是非教えてください。

  • WindowsアプリケーションをMacで作れなくて困っていますて

     ダウンロードした自作アプリケーションにWindowsでつくられた自作アプリケーションのC言語ソースがついていました。そこで、Mac OS Xで同じ物を作ろうと思いソースをコピー&ペーストしビルドして実行をしましたがエラーとなってしまいました。  Windows C言語とMac C言語は何か違う物なのでしょうか?ご回答お願いします

  • AKI-H83048で割り込みを使用してLEDを点滅させたいのですが、、、、

    はじめまして、組み込みソフト超初心者です。 割り込みタイマを使用してLEDを特定時間点滅させる、ということを行いたいのですが、コンパイルができず、頓挫しております。どなたか、アドバイス頂けませんでしょうか。 ・開発環境はAKI-H8 3048 ・割り込みを使用してLEDを点滅させるということを目的にCでソースをコーディングしています。 ・巷の参考書など参考にしてmain、割込関数、コーディングしました。 ・コンパイラはAKI-H8マイコンキットについてきた専用CコンパイラCC38Hを使用しています。(統合開発環境はありません) 上記の条件でコンパイルすると、interruptがイリーガルとエラーが出ます エラーの出ているコードは #pragma interrupt itu0_int(vect=24) の部分です。 参考書で、interruptはコンパイラによって使用できないようなことも読んだのですが、どうすればコンパイルできるのでしょうか、また、何が足りないのでしょうか なにぶん初心者なもので、正直質問の的が絞れていないのかも解らないのですが、とにかくまず動かしたいと思い質問させて頂きました。 同じ開発環境の方が居られましたら有難いです。 何とぞよろしくお願い致します。

  • PIC 16F84A でLEDが点滅しない

    どんな事をしても、LEDが点滅しません何が原因なのかわかりません。何方か教えて頂けませんか。 環境は、Windowos8 MPLAB X IDE XC8 PICkit3  Pickit3対応ICSP書き込みアダブターです。 PICは PIC16F84A を使用しています。ソースコードは下記のようにしてあります。  #include <xc.h> // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF. // CONFIG #pragma config FOSC = EXTRC // Oscillator Selection bits (RC oscillator) #pragma config WDTE = ON // Watchdog Timer (WDT enabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (Power-up Timer is disabled) #pragma config CP = OFF // Code Protection bit (Code protection disabled) #define_XTAL_FREQ 20000000 void main(void) { TRISA = 0x00; PORTA = 0x031; TRISB = 0x00; PORTB = 0x00; while (1) { PORTA = 0x02; Delay_ms(1000); PORTA = 0x01; Delay_(1000); } } ------------回路  PIC16F84A      ------------   18  RA1-----1Kオーム----- (K)LED(A)----←  5V      17  RA0----- 1Kオーム-----(K)LED(A)----←  5V     16  OSC1----             セラロック20MHZ -------- GND   15  OSC2----   14 VDD---------------← 5V    4  MCLR--------------← 5V 5 VSS----------------- GND   コンパイルも、書き込みもできましたが駄目でした。いろいろ試みましたが成功しません。 コンフィギレーションに決定的な間違いがあるのではないか?疑っております。 よろしくお願いいたします。

  • pi18でLEDを点灯するプログラム教えてください

    プログラムはC言語 ソフトはMPLAB IDEv8.60 コンパイラはMPLAB ICD2です。 picはpic18f2550です。 回路は OSCにセラロック RB7とRB6に抵抗とLED が接続されています。 この条件でLEDを点滅させる簡単なプログラムを教えてください。 本やネットで調べ、取り上げられているプログラムを見ていろいろ試したのですがLEDが光りません。 私ではどうしようもないので、よろしくお願いします。 #include <p18f2550.h> void main (void) { }

  • 質問ですが

    http://oshiete1.goo.ne.jp/qa4976551.htmlのつづきで質問をしたいのですが、いろいろと教えていただいたとおりにやっていき、出来そうなところまではきたのですが、 作成したプログラムをビルドを行おうとすると **** プロジェクト C言語 の構成 Debug の ビルド **** **** 内部ビルダーがビルドに使用されます **** C言語 用にビルドするものはありません と表示され、そのままデバッグしようとすると セッションの作成エラー…(詳細)セッションの作成エラー プログラム "gdb" を実行できません: Launching failed プログラム "gdb" を実行できません: Launching failed プログラム "gdb" を実行できません: Launching failed と出てきてしまいます。 これを解消するためにはどうすればいいか教えていただけないでしょうか? コンパイラはMinGWを使っています。

専門家に質問してみよう