Category Archives: PIC カテゴリ "PIC"のRSS  

[PIC]C18コンパイラでsprintfを使う時の注意

2015年12月23日 (カテゴリ: PIC:)

sprintfの第二引数で指定する文字列は、文字列定数を指定する必要があります。 OKなパターン sprintf( TmpBuff, "test%d", 10 ); NGなパターン char pMsg[] = "test%d"; sprintf( TmpBuff, pMsg, 10 ); これは、以下の理由に起因します。 ・PICはハーバードアーキテクチャを採用している。 ・文字列定数はプログラムメモリ、文字列の配列はファイルレジスタに保存される。 ・sprintf()の第二引数は、プログラムメモリの番地を…


続きを読む

PIC16F84Aのファイルレジスタ

2012年12月2日 (カテゴリ: PIC:)

PIC16Fシリーズの入門用として有名な16F84Aには、83byteのファイルレジスタが用意されています。 ファイルレジスタというのは、パソコンで言うところのRAMと、メモリマップされたI/Oレジスタに相当するものです。 名前は、ファイル”レジスタ”ですが、IntelのCPUで使用されている演算用レジスタ(EAX,EBX等の名前で呼ばれています)とは意味が違うので注意してください。(これに相当する,汎用レジスタはWレジスタというもので別途用意されています) ファイルレジスタのメモリマップ 利用可能な144byteにはそれぞれ固有の(ユニークな)番地が割り振られています…


続きを読む

[PIC]HI-TECH Cのサンプルプログラムを逆アセンブルしてみる

2012年12月2日 (カテゴリ: C#, PIC:, )

前に作りかけたPic16f84のCPUシミュレータですが、暇が出来たので開発を再開させます。 ずいぶん久しぶりなので、何をやってたかを思い出すのを兼ねて、動作確認用サンプルのhexファイルを作る事にします。 今回の対象はHI-TECH Cのコンパイラをインストールしたときに一緒に入っているサンプルPGです。 ファイルは、標準インストールだと以下の辺りに入ってます。 C:\Program Files\HI-TECH Software\PICC\9.83\samples\misc\led.c このプログラムはLEDの点滅プログラムで、コードは以下の通りのシンプルなものです。 “Free…


続きを読む

LEDフラッシャーIC「M34-1L,2L,8L」の点滅をPICで再現する

2012年11月25日 (カテゴリ: PIC:, )

LEDを点滅させるためのICとして、M34シリーズの三端子LEDフラッシャ-ICというものが有ります。 これは、トランジスタのように3本の端子が出ているパーツで、接続するだけで指定された周期でLEDを点滅させる事が出来ます。 点滅の周期は型番によって異なり、以下の通りとなっています。 M34-1L 1.0 秒周期 ON-OFF比率 = 1:8 M34-2L 0.5 秒周期 ON-OFF比率 = 1:8 M34-4L 0.25 秒周期 ON-OFF比率 = 1:8 M34-8L 0.125秒周期 ON-OFF比率 = 1:2 実際にどんな感じで点滅するか、YouTubeに動画があがってました。 …


続きを読む

[PIC]全ピン数対応のライタ基板を製作(PICkit3使用)

2012年11月24日 (カテゴリ: PIC:)

半年ほど前、PICのライタとしてPICkit3を購入しました。 これまで書き込み側の回路はブレッドボードで組んでいたのですが、ブレッドボードだと書き込み/デバッグ中にライタが外れてしまう事もあり不便でした。 ライタは頻繁に使いますしPICの開発も慣れてきたので、今回、書き込み用の回路をユニバーサル基板で作成する事にしました。 PICはブレッドボードにさせるタイプのPDIP形式のものだけでも、ピン数が8, 14, 18, 20, 28, 40ピンと6種類も有り、それぞれ書き込みピンの位置が異なるので、これら全種類に対応できるようにします。 また、ライタにPICを刺したまま状態で、簡単な回路なら確…


続きを読む

[PIC18シリーズ]ピン数別の機能・評価一覧

2012年11月18日 (カテゴリ: PIC:, )

PIC18シリーズの価格と特徴を分かりやすく整理してくれている一覧です。 この一覧にある製品は、秋月で販売されているという事で入手性も良いです。 PIC16シリーズについて知りたい場合はこちらの記事を参考にして下さい。  [PIC16シリーズ]ピン数別の機能・評価一覧 PIC専用のスレ Part40 http://uni.2ch.net/test/read.cgi/denki/1345537082/ より編集 秋月のPIC18シリーズDIP品限定ピン数別評価 特徴 【PIC18】8bitマイコン。 5V動作可(J除)で比較的高速(10~MIPS) 新型のKシリーズは多機能で高速(16MI…


続きを読む

[MPLAB]ブレークポイントで表示される黄色い”B”マークの意味

2012年11月16日 (カテゴリ: PIC:)

PICの開発環境であるMPLABで、ブレークポイントをセットすると、赤色の”B”マークが表示されます。 ですが、開発を行っていると時々、以下の様に黄色い”B”マークが表示される事があります。 この黄色のBの意味は、アセンブリコードに対するブレークポイントです。 厳密に言うと、C言語1行に対して複数行のアセンブリが生成されたとき、生成後アセンブリの1ステップ目以降のコードにブレークポイントが張られたとき、黄色のマークになります。 C言語レベルでのデバッグを行っている場合、黄色のブレークポイントだと、該当行に矢印がある時点でアセンブリの一部分だけが実…


続きを読む

[PIC]MPLABでICD0191エラーが出た時の対処法

2012年11月10日 (カテゴリ: PIC:)

表示されるエラーメッセージ ICD0191: Unable to perform operation as hardware memories are locked. Try later. ICD0191エラーが発生するのは、MPLAB ICD2が他の機能で使用されている為、操作したかった作業が出来ない時に発生します。 対処法としては、通常はそのまま待って、しばらくしてからもう一度同じ作業をすると正常に動作します。 それでもダメな場合は、一度MPLABを再起動&ICDのケーブルを刺しなおして下さい。


続きを読む

PICのスペックを指定して型番を検索できるサイト

2012年11月9日 (カテゴリ: PIC:)

個人でもお手軽に利用できるPICマイコンですが、現在では700種類以上あり、欲しい機能を持った製品を探すのが大変です。この問題を解消するために製造元のMicrochipでは、スペックを指定して型番を検索できるサイトを幾つか用意してくれています。 今回は、PICのスペック検索サイトを紹介します。 Microcontroller Product Selector (MPS) サイト:http://www.microchip.com/productselector/MCUProductSelector.html 以前より存在していた検索ページでAdobeのFlashで作られています。 ページ上部で検…


続きを読む

[PIC]ICD0019エラーが出た時の対処法

2012年11月8日 (カテゴリ: PIC:)

MPLABで、ICD 2ライタ/デバッガを使用しているとき、ICD0019エラーが出た場合の対処法です。 エラーメッセージ Connecting to MPLAB ICD 2 ICD0019: Communications: Failed to open port (USB): (Windows::GetLastError() = 0x2, ‘指定されたファイルが見つかりません。’) ICD0021: Unable to connect with MPLAB ICD 2 (USB) ICD0019エラーは、MPLABがPICのライタを認識できていない事を意味するエラーです。 このエラーが出る時…


続きを読む

[PIC18]PWM機能を使用してLEDをふんわり点滅させる

2012年11月7日 (カテゴリ: PIC:, , )

PIC18シリーズのマイコンで、PWM出力を利用してLEDをふんわり点滅させてみます。 今回はCCP機能に含まれるPWM出力を使用して明るさの制御を行います。 この為、LEDはPWM出力ピンであるCPP1のピンに接続します。 #include "p18f4620.h" #include "timers.h" #include "delays.h" #include "pwm.h"   // Configuration bitの指定 #pragma config OSC = HS // HS oscilla…


続きを読む

PIC向けCコンパイラ(HI-TECH C,C18,C30,C32)のinline関数サポート状況まとめ

2012年11月6日 (カテゴリ: PIC:)

PICで使用できるMicrochip社提供のコンパイラには、HI-TECH C,C18,C30,C32等が有ります。 これらのコンパイラで、インライン関数が使用できるかを調べたのでまとめてみました。 HI-TECH C,C18コンパイラ HI-TECH Cと、C18コンパイラでは、インライン関数はサポートされていません。 使用したい場合は、関数マクロで代替する必要があります。 参考: HI-TECH Software Frequently Asked Questions C30,C32コンパイラ C30とC32のコンパイラではインライン関数はサポートされており、使い方は同じです。 但し、使用す…


続きを読む

[PIC]C18コンパイラでstrcpy()使用時,文字列セットが出来ない

2012年11月5日 (カテゴリ: PIC:)

PICのプログラムをC18コンパイラを使用して開発している場合、以下のコードは正しく動作せず、Bufferに”hello”という文字列がセットされません。 (当然ですが、このコードはVisual C++の様な普通のCコンパイラだと正しく動きます) char Buffer[32]; strcpy( Buffer, "Hello" ); これは、”Hello”の文字列定数がプログラムメモリに配置されるのに対して、strcpy()関数は指定された番地のRAM(File Register)からデータをR…


続きを読む

[HI-TECH C] “Warning [228] illegal character”警告が出る場合の対処法

2012年11月3日 (カテゴリ: PIC:, , )

HI-TECH Cでプログラムをコンパイルすると、以下のようにWarning [228]の警告が出ることがあります。 これは”警告”なのでコンパイルは完了し、大抵の場合プログラムは想定どおり動作することが多いです。 Make: The target "C:\home\project\pic\16F84A_LCD\main.p1" is out of date. Executing: "C:\Program Files\HI-TECH Software\PICC\9.83\bin\picc.exe" –pass1 C:\main.…


続きを読む

PIC16F84Aで,HI-TECH Cを使用してLCD出力を行う

2012年11月3日 (カテゴリ: PIC:, , , )

PIC16シリーズの定番、PIC16F84Aを使用してLCDへの出力を行うプログラムです。 16F84AでC言語を使用したLCD制御のサンプルは、意外と見つからないので公開しておきます。 LCDは16文字x2行表示が行えるSC1602を使用します。 また、Cコンパイラは、HI-TECH Cを使用します。HI-TECH Cは、PICC LITEとも呼ばれています。 HI-TECH CにはLCD制御用のライブラリがない為、プロトコルを確認してコマンド送信を自前で実装する必要があります。 動作確認はPIC16F84Aで行っていますが、特殊な事はしてないので16Fシリーズなら基本的にどのチップでもその…


続きを読む

[PIC]ICD2デバッグ時に「ICD0154エラー」が出た場合の対処法

2012年11月2日 (カテゴリ: PIC:, )

エラーの内容 MPLABでMicrochip ICDを使用してプログラム書き込み/デバッグを行っている時に,以下のエラーが発生する(メッセージ中の”TM = Running”の部分は、変わる場合があります)。 MPLAB ICD 2 ready for next operation ICD0154: Invalid target mode for requested operation (TM = Running)Running Target ICD0083: Debug: Unable to enter debug mode. Please double click …


続きを読む

[PIC]MPLAB ICDで、「ICDWarn0015エラー」出た場合の対処法

2012年11月1日 (カテゴリ: PIC:, )

現象 MPLABでICDを使用してデバッグしようとすると、以下のエラーメッセージが表示される。 ICDWarn0015: Program memory has changed since last program operation? Continue with Debug operation? コンソール上では、以下の様なメッセージが出力されます。 ICD0083: Debug: Unable to enter debug mode. Please double click this message for more information. ICDWarn0015: Program mem…


続きを読む

[PIC]ICDWarn0013エラーが出る時の対処法

2012年11月1日 (カテゴリ: PIC:, )

MPLABでPICのライタにICD2を使用している場合、プログラムをデバッグ実行しようとした時に以下のエラーが出る事があります。 ICDWarn0013: Low Voltage Programming cannot be enabled when ICD 2 is used as a debugger. Disable Low Voltage Programming? これはPICのICD2をデバッガとして使用するときに,ICD2がLVPに対応していないからです。 LVPというのはLow Voltage Programmingの略で、低電圧でPICへプログラム書き込みを行う機能です。 このエ…


続きを読む

[PIC24]UART機能を使用してRS-232C通信を行う

2012年10月14日 (カテゴリ: PIC:, , )

PIC24でUART機能を使用するサンプルです。 とりあえず動いたので、メモ代わりにアップしておきます。 設定は以下の通り。 PIC24FJ32GA002で確認 UART1を使用 送受信処理はポーリングベース(割り込みは使わない)   9600bps 8bit ノンパリティ ストップ 1bit   TxDのピン: RP5 RxDのピン: RP6 PICからの出力はFT2232経由でPCに取り込みます。 #include <p24FJ32GA002.h> #include "uart.h" #include "PPS.h" …


続きを読む

[PIC,C30]#define USE_AND_OR の意味

2012年10月13日 (カテゴリ: PIC:, , )

PICでC30コンパイラを使用したプログラムサンプルを見ると、以下のdefineをしている場合があります。 #define USE_AND_OR このdefineは、ライブラリの下位互換のために使用されています。 PIC24Fのperipheral libraryでI/Oレジスタのフラグ設定方法が、v3.00から変わった事に伴う対応です。 ver3.00までは、複数のフラグを設定する時ORで結合していました。 ConfigIntUART2(UART_RX_INT_EN | UART_RX_INT_PR6 | UART_TX_INT_EN | UART_TX_INT_PR6); …


続きを読む