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

PIC24で出力コンペアを使用して,指定した周波数で矩形波を出力する

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

PIC24Fには、タイマモジュールを使用した出力コンペア機能があります。 出力コンペア機能には、以下の3つのモードがあります。 1.シングル比較一致モード   2.デュアル比較一致モード 単一出力パルスモード 連続出力パルスモード   3.単純パルス幅変調モード フォルト保護入力付き フォルト保護入力なし1.シングル比較一致モード 2.デュアル比較一致モード 単一出力パルスモード 連続出力パルスモード 3.単純パルス幅変調モード フォルト保護入力付き フォルト保護入力なし 今回はこの中で、2.デュアル比較一致モードの連続出力パルスモード機能を使用してみます。 この機能を使用…


続きを読む

[PIC]PICの資料にある”R-M-W”の意味

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

PICについて書かれた資料や書籍を見ると、出力ピンの説明で”R-M-W”と書かれている場合があります。 このR-M-Wは、Read,Modify,Writeの略です。 PICでは出力ピンの特定ビットのみ(例えばPortBのRB0)を変更する場合でも、一旦PortBの全ビットに紐付くピンの電圧を読み取った後(Read)、プログラムで指定した値に書き換えられ(Modify)、PortBの全ビットを出力する(Write)という振る舞いをします。 これは、アセンブラだとBSET,BCLRなどの特定ビットを操作する命令で起きます。 プログラマは、データを書き込んでいるだけのつもり…


続きを読む

[PIC]C30コンパイラをインストールする(dsPIC,PIC24用)

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

本記事ではPICのC言語向けコンパイラである、C30コンパイラのインストールと動作確認を行います。 C30コンパイラの正式名称は”MPLAB C Compiler for PIC24 MCUs and dsPIC DSCs”で、dsPICや,PIC24シリーズなどの16bitマイコンで使用可能なCコンパイラです。 C30コンパイラはPRO、Standard、Liteと3つのバージョンがありますが、今回は無償で利用可能なLite版を使用します。Lite版でもコンパイラとしてはフル機能が利用できますが、最適化が部分的にしか使用できないため生成される実行ファイルのサイズが若干…


続きを読む

[PIC]Timer2をPWMモードで使用時のレジスタ値と周波数の対応表

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

PICに搭載されているTimer2タイマにはCCP機能というものがあり、PWMとして使用することが出来ます。この際、レジスタにセットした値とPWMで出力できる周波数の対応が分かり辛かったので、Excelで一覧表を計算できるようにしてみました。 例えば8MHz駆動時にの周波数は以下の通りです。PIC16F88は、T2CONbits.T2CKPSレジスタの値によって最大1/16まで分周することが出来るのですが、8Mhz駆動だと限界まで遅くしても488Hz以下には出来ない事がわかります(クロックを落とせばもっと低い音も出せます)。 スピーカーから音を鳴らすのに使えないかと思って調べてみたのですが、下…


続きを読む

[PIC]16F88でRB6,RB7が入出力ピンとして使えない時にチェックする事

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

PIC16F88等の18ピンのPICを使用している場合、RB6,RB7ピンが入力として使えない場合があります。 このような際ににチェックする事を羅列してみました。 RB6,RB7が入出力ピンとして使用できないときのチェックポイント Check1:アナログ入力ピンとの競合 RB6,RB7は、アナログ入力のAN5,AN6と共用になっています。 PORTBのデジタル入出力として利用したい場合は,ANSELレジスタの値を0にする必要があります。 [PIC]PIC16F88でPortAを入出力ピンとして動作しない場合にチェックする事 HI-TECH Cによるコード例 void main( voi…


続きを読む

[PIC]PIC16F88でPortAが入出力ピンとして動作しない場合にチェックする事

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

PIC16F88にあるPortAのうち、RA0-RA4はアナログ入力と兼用になっているのですが、デフォルトではアナログ入力側が有効になっているのでデジタルのI/Oとして使用できません。 この為、ANSELレジスタ(Analog Select Register)をデジタル入出力として設定する必要があります。 ANSELレジスタ(0x9B) bit7 unimpremented bit6 ANS6 bit5 ANS5 bit4 ANS4 bit3 ANS3 bit2 ANS2 bit1 ANS1 bit0 ANS0bit7 unimpremented bit6 ANS6 bit5 ANS5 bit…


続きを読む

[PIC16F88]HI-TECH CでTimer1割り込みを使用する

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

PICの16F88はTimer0,1,2という3つのタイマーモジュールを持っており、それぞれのタイマーは役割が異なっています。 今回は、16F88でHI-TECH Cを使用してTimer1割り込みを利用し、0.5秒周期でLEDを点灯させてみます。 クロックは16F88の内部オシレータを8MHzで駆動させます。 #include <stdio.h> #include <htc.h>   #define TIMER_INTERVAL (0xffff – 20000) // TMRモジュールのカウント初期値 // 8MHz, 1/1プリスケーラで、10msecごとに…


続きを読む

[HI-TECH C]__CONFIG()でundefined identifier “CP_OFF”エラーが出る場合

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

出力されるエラーの例 [192] C:\project\pic\16F84A_Ctest\main.c; 16.12 undefined identifier "FOSC_HS"Error [192] C:\project\pic\16F84A_Ctest\main.c; 16.22 undefined identifier "WDTE_OFF"Error [192] C:\project\pic\16F84A_Ctest\main.c; 16.33 undefined identifier "PWRTE_ON"Error [192]…


続きを読む

PICの型番とアーキテクチャの対応

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

PICの各シリーズとビット数の対応表です。 8ビット PIC10,12,16,18 PIC F1シリーズ 16ビット PIC24F,24H,24E dsPIC30F,33F,33E 32ビット PIC32MX8ビット PIC10,12,16,18 PIC F1シリーズ 16ビット PIC24F,24H,24E dsPIC30F,33F,33E 32ビット PIC32MX dsPICは、2003年に作られたもので、DSPの機能を持っている(積和演算が高速に出来る)。 PIC24はその後の2004年に開発されたもの。dsPICとの互換性が意識されているて、ハードウェアで乗算が可能。 PIC32は2…


続きを読む

面白い機能を持ったPIC

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

面白い機能を持ったPICを見つけたでメモしておきます。 16F1827 16F88の後継機種です。 PWM回路が4つ付いているので、複数のモータ制御が出来ます。 データシート状は、ECCP1,ECCP2,CCP3,CCP4モジュールと呼ばれています。 (CCPは、Capture/Compare/PWM moduleの略です) 各回路のデューティ比は、3つのタイマーから指定可能なので、3つモータを付けて、それぞれ別の回転数で駆動させるといった事も可能です。 10F320/322 8pinの小型な製品です。 PLD機能付きで、PIC内に小さなロジック回路を作ることが出来ます この機能は、CONFI…


続きを読む

[PIC]HI-TECH Cで7セグ4桁のLEDをダイナミック点灯させる

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

7セグ4桁のLEDを、HI-TECH Cでダイナミック点灯させるプログラムを作成しました。 ダイナミック点灯の仕組みですが、簡単で短い周期で順番に1桁づつ点灯させていくだけです。 どの桁を点灯させるかは7セグのコモン側のピンを操作する事で決定します。BQ-N516RDはカソードコモンなので、点灯したい桁のコモンをLowにすればOKです。 表示の周期ですが、60Hzぐらい(毎秒60回)まで速くしてあげれば、人間の目だと残像で全桁がずっとつきっぱなしになっていると錯覚してしまうようです。低めの周波数だとチラツキを感じる事も有るので、可能なら気持ち速めほうが良いかもしれません。 ネットで見た情報だと…


続きを読む

[PIC] 16F84A->16F88で,ピンに追加された機能を確認する

2012年9月2日 (カテゴリ: PIC, 未分類:, )

PICの入門向け書籍でよく紹介されているPIC16F84Aですが、16F84Aとピン互換がありながらプログラムメモリが4倍に増えたPICに16F88が有ります。 16F88を単に84Aのプログラム容量が大きい版として使うのもよいのですが、機能も追加されています。 今回はデータシートのピンアサインを元に、16F88で増えた機能を確認します。 まず、こちらがPIC16F84Aのピンアサインです。 で、こちらが16F88です。 16F88を見ると分かるように、各ピンに対して様々な機能が追加されています。 慣れればピンの名称だけで機能が類推できますが、最初のうちは略称だけでは内容が分からないので、Pi…


続きを読む

[PIC]HI-TECH Cで、タイマー割り込みを行う(PIC16F84A)

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

PIC16F84Aには、TMRというタイマーモジュールがあり、これを利用と一定周期でタイマ割り込みをかけることが出来ます。 今回は、HI-TECH Cでタイマ割り込み処理を作成してみます。 ※アセンブラ(MPASM)でタイマー割り込み処理を行いたい場合は、こちらの記事を参考にして下さい。 [PIC]TMRモジュールを使用する(タイマー割り込み) TMRを使用したサンプルコードです。 これは,8Mhzで動作しているPICに対して,約10ミリ秒周期でタイマー割り込みをかけています。 #include <stdio.h> #include <htc.h>   #de…


続きを読む

[PIC]HI-TECH Cでコンフィギュレーションビットを指定する

2012年8月28日 (カテゴリ: C, PIC:)

PICのプログラムをアセンブリ(MPASM)で作成する場合は、CONFIG命令でコンフィギュレーションビットを指定するのですが、HI-TECH Cではこの設定は、__CONFIG()マクロで行います。 下記のプログラムは、__CONFIG()マクロの使用を使用したサンプルです。 #include <stdio.h> #include <htc.h>   void main( void ) { __CONFIG( FOSC_HS & WDTE_OFF & PWRTE_ON & CP_OFF ); …


続きを読む

[PIC]HI-TECH Cで一定時間スリープさせる

2012年8月27日 (カテゴリ: C, PIC:)

PICでは、HI-TECH Cコンパイラをを使用した、C言語による開発を行う事ができます。 C言語で開発を行う場合、プログラム中で一定時間処理をスリープさせるにはどうしたら良いでしょうか? HI-TECH Cの環境では、主に以下の4つの手法があります。 1. 空ループを回す 2. _delay()マクロを使用する 3. __delay_ms()マクロを使用する 4. __delay_us()マクロを使用する1. 空ループを回す 2. _delay()マクロを使用する 3. __delay_ms()マクロを使用する 4. __delay_us()マクロを使用する 上記のうち2,3,4のマクロはH…


続きを読む

PIC16F84AをC言語で,MPLAB IDE環境で開発する

2012年8月26日 (カテゴリ: C, PIC:, )

PIC16シリーズでは、入門者向けとしてよく使用されているPIC16F84Aですが、プログラムの格納エリアが小さいため通常はMPASMというアセンブラを使用してプログラムを行う事が多いです。 PICの製造メーカであるMicroChipが提供している統合開発環境のMPLABでも、標準ではアセンブラしか用意されていません。ですが、実はMicroChipはCのコンパイラも用意してくれているので、追加でコンパイラをインストールすれば、Cで開発する事も可能です。 今回はMPLABで、PIC16F84AのプログラムをC言語で開発する方法を説明します。 C言語によるPICプログラミング入門 MicroChi…


続きを読む

[MPASM]list擬似命令の意味と、指定可能なオプション情報一覧

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

PICのアセンブラであるMPASMでは、list命令でターゲットのPICデバイスを指定します。 LIST P=PIC16F84ALIST P=PIC16F84A LISTはデバイス指定用の専用命令なのかというとそうではなくて、他にも色々な付加情報(アセンブラ処理や、フォーマット制御)を指定する事が可能です。 今回はlist命令で指定可能なオプションの一覧を確認してみます。 listオプション一覧 bオプション *.lstファイルのタブストップ位置を指定します。 デフォルト値は8です。 使用例 LIST b=4LIST b=4 cオプション *.lstファイルのカラム幅を指定します。 デフォルト…


続きを読む

[PIC]TRISA,TRISBレジスタの”TRIS”って何?

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

PICのレジスタ一覧を見ると、TRISA/TRISBレジスタというものが有ります。 このレジスタは、それぞれPORTA/PORTBの入出力を決定するもので、役割は分かっているのですが、”TRIS”が何の略なのか語源が気になったので調べてみました。 答えは、MPASMのユーザガイドに記載されていました。 Mnemonic TRIS r   Description Tristate port rMnemonic TRIS r Description Tristate port r と言うわけで、TRISはTristate(トライステート)の略でした。 TRISA,…


続きを読む

[C#]Pic16f84シミュレータを作成する

2012年7月28日 (カテゴリ: C#, PIC:)

これまで1ヶ月ほど掛けて、パタヘネ本でCPUの動作原理を勉強してみたり、PICによるアセンブラプログラムの作成を行ってきました。そこで、今回は勉強した成果として、Microchipから発売されているPic16f84のシミュレーターを作成してみます。 いきなり全部作ると大変になるので、今回は大枠を作るために、ADDLW(Wレジスタの加算)とGOTO命令しか解析できない最低限のCPUシミュレータを、C#で構築します。 このシミュレータは、C#上ではクラス(Pic16f84Simulatorクラス)として実装していきます。 まずはプロパティの定義を行います。 class Pic16f84Simula…


続きを読む

セラロックの波形をオシロスコープで確認する

2012年7月28日 (カテゴリ: PIC, 電子回路基礎:)

ムラタから発売されているセラロックは、主に小規模向けマイコンでクロック生成用の安価なパーツとして使用されています。 この、セラロックが作り出しているクロック波形が気になったので、オシロスコープで確認してみました。 今回の確認で使用したパーツは、8MHz出力のCSTLLS8M00G56です。 まずは、手始めにセラロックをPICマイコンの16F84Aに接続し、動作している状態での波形を確認してみました。 画像がぼやけていて見づらいですが、縦横軸のメモリが波形の下に表示されており、横は1メモリが10nsec,縦は1メモリが1Vです。周期も画面右下に出ているのですが、7.96MHzとほぼ仕様値どおりの…


続きを読む