PIC24で出力コンペアを使用して,指定した周波数で矩形波を出力する
PIC24Fには、タイマモジュールを使用した出力コンペア機能があります。 出力コンペア機能には、以下の3つのモードがあります。 1.シングル比較一致モード 2.デュアル比較一致モード 単一出力パルスモード 連続出力パルスモード 3.単純パルス幅変調モード フォルト保護入力付き フォルト保護入力なし1.シングル比較一致モード 2.デュアル比較一致モード 単一出力パルスモード 連続出力パルスモード 3.単純パルス幅変調モード フォルト保護入力付き フォルト保護入力なし 今回はこの中で、2.デュアル比較一致モードの連続出力パルスモード機能を使用してみます。 この機能を使用…
続きを読む
[PIC]PICの資料にある”R-M-W”の意味
PICについて書かれた資料や書籍を見ると、出力ピンの説明で”R-M-W”と書かれている場合があります。 このR-M-Wは、Read,Modify,Writeの略です。 PICでは出力ピンの特定ビットのみ(例えばPortBのRB0)を変更する場合でも、一旦PortBの全ビットに紐付くピンの電圧を読み取った後(Read)、プログラムで指定した値に書き換えられ(Modify)、PortBの全ビットを出力する(Write)という振る舞いをします。 これは、アセンブラだとBSET,BCLRなどの特定ビットを操作する命令で起きます。 プログラマは、データを書き込んでいるだけのつもり…
続きを読む
[C言語基礎]switch文で偶数・奇数の判定を行う方法
int型の変数に入っている値をswitch文で偶奇判定するプログラムです。 int a = …; switch( a % 2 ) { case 0: printf( "偶数です\n" ); break; case 1: printf( "奇数です\n" ); break; }int a = …; switch( a % 2 ) { case 0: printf( "偶数です\n" ); break; case 1: printf( "奇数です\n&q…
続きを読む
[PIC]C30コンパイラをインストールする(dsPIC,PIC24用)
本記事ではPICのC言語向けコンパイラである、C30コンパイラのインストールと動作確認を行います。 C30コンパイラの正式名称は”MPLAB C Compiler for PIC24 MCUs and dsPIC DSCs”で、dsPICや,PIC24シリーズなどの16bitマイコンで使用可能なCコンパイラです。 C30コンパイラはPRO、Standard、Liteと3つのバージョンがありますが、今回は無償で利用可能なLite版を使用します。Lite版でもコンパイラとしてはフル機能が利用できますが、最適化が部分的にしか使用できないため生成される実行ファイルのサイズが若干…
続きを読む
[C#]ファイルの中身を2進数で出力するツール(TextToBinaryDigit.exe)
ファイルの中身を2進数でダンプする必要があったので、勉強もかねてC#で作ってみました。 コマンドラインプログラムで、以下の様な感じで使います。 c:\> type c:\input.txt Hello world にほんご c:\> type c:\input.txt | TextToBinaryDigit.exe 01001000 01100101 01101100 01101100 01101111 00100000 01110111 01101111 01110010 01101100 01100100 00001101 00001010 10000010 11…
続きを読む
[C#]StreamReaderのRead()がcharではなくintを返す理由
ファイルなどのストリームからデータを1文字読み込むためのメソッドとしてRead()というものが有ります。このメソッドは”1文字”読み込むのだから戻り値はcharでよいはずなのですが、なぜかint型になっています。 なぜintを返すような仕様となっているのでしょうか? それは、Read()メソッドの戻り値は、ファイルから取得した文字に加えて、ファイルの終端(EOF)を返してくるからです。EOFというのは、読み込んでいるファイルがファイルの最後に達してしまい、それ以上読むべきデータが無い状況です。 (ちなみに、EOFに達している状態でさらにRead()をコールしても-1が返…
続きを読む
[C#]指定されたASCIIコードをstring型の文字列に変換する
C#で、数字で指定されたASCIIコードをstring型の文字列に変換する方法です。 基本的には、charにキャストした上でToString()をコールすれば良いです。 int data = 2; string ans = ((char)data).ToString();int data = 2; string ans = ((char)data).ToString(); これで、ans には0x02(制御コードのSTX)が入ります。 キャストを忘れると正しく動作しません。 以下のコードだとansには”2″(数字の2)が入…
続きを読む
[C#]WebBrowerコントロールで、jQueryを使用して任意のJavaScriptを実行する
.Net Frameworkで用意されているWebBrowerコントロールを使用して、JavaScriptを実行できるプログラムを作成しました。実行するJavaScriptは素のままだと使い辛いので、jQueryを自動ロードしています。 例えば、Yahooのトップページに対して下記のコードを実行させると… $(’input#srchtxt’).val( "hello world" ); $(’input#srchbtn’).click();$(‘input#srchtxt’).val( "…
続きを読む
[PIC]Timer2をPWMモードで使用時のレジスタ値と周波数の対応表
PICに搭載されているTimer2タイマにはCCP機能というものがあり、PWMとして使用することが出来ます。この際、レジスタにセットした値とPWMで出力できる周波数の対応が分かり辛かったので、Excelで一覧表を計算できるようにしてみました。 例えば8MHz駆動時にの周波数は以下の通りです。PIC16F88は、T2CONbits.T2CKPSレジスタの値によって最大1/16まで分周することが出来るのですが、8Mhz駆動だと限界まで遅くしても488Hz以下には出来ない事がわかります(クロックを落とせばもっと低い音も出せます)。 スピーカーから音を鳴らすのに使えないかと思って調べてみたのですが、下…
続きを読む
[C#]WebBrowserコントロールで、指定されたURLのページを表示させる
以下のコードで、指定されたアドレスのページを表示させる事が出来ます。 private void button1_Click( object sender, EventArgs e ) { webBrowser1.Url = new Uri( "http://yahoo.co.jp/" ); }private void button1_Click( object sender, EventArgs e ) { webBrowser1.Url = new Uri( "http://yahoo.co.jp/"…
続きを読む
ドレミの音と周波数の関係
ドレミのそれぞれの音と、周波数の関係は以下の通り ラ 440.00 ラ♯ 466.16 シ 493.88 ド 523.25 ド♯ 554.37 レ 587.33 レ♯ 622.25 ミ 659.26 ファ 698.46 ファ♯ 739.99 ソ 783.99 ソ♯ 830.61 ラ 880.00ラ 440.00 ラ♯ 466.16 シ 493.88 ド 523.25 ド♯ 554.37 レ 587.33 レ♯ 622.25 ミ 659.26 ファ 698.46 ファ♯ 739.99 ソ 783.99 ソ♯ 830.61 ラ 880.00 ラの音が基準で440Hzになる。 1オクターブ上げるには…
続きを読む
[WordPress]titleタグの表示をカスタマイズする
WordPressのテーマ編集で、以下の様なタイトル表示を行わせてみます。 ページタイトルを表示する トップページの場合は、ブログ名をタイトルに表示 カテゴリ、タグ別の記事一覧ページの場合は「xxxの記事一覧」という表記にする 複数ページの場合は、ページ番号を表示ページタイトルを表示する トップページの場合は、ブログ名をタイトルに表示 カテゴリ、タグ別の記事一覧ページの場合は「xxxの記事一覧」という表記にする 複数ページの場合は、ページ番号を表示 上記の要件を満たすコードは以下の通りとなります。 <title><?php // ページタイトルを表示する wp_title&#…
続きを読む
[PIC]16F88でRB6,RB7が入出力ピンとして使えない時にチェックする事
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が入出力ピンとして動作しない場合にチェックする事
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…
続きを読む
DB開発を行うときのベストプラクティス
データベースのテストについての記事、Tips for Testing Database Codeを読んでのメモです。 元記事を訳したものと、感想・意見がごちゃまぜで箇条書きで書いてあります。 DBの自動テストは遅く、管理が難しい DBの変更は全て、人が読める形でバージョン管理システムで管理する。 DB定義の仕様書から、ワンクリックでDB定義のスクリプトが生成できること DB定義の仕様書は、Excelなどで作成することも多いが、この際、Excelのマクロでcreate table等の DBオブジェクト生成を行えるようにしておく。 また、この際、直前の生成内容との差分を…
続きを読む
[PIC16F88]HI-TECH CでTimer1割り込みを使用する
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ごとに…
続きを読む
[C#]文字列中の制御文字を、[CR][LF]や[0D][0A]のように可視化する
Stringオブジェクトの文字列中に制御文字(0x00~0x19)が入ると、TextBoxなどに値を表示する際、制御文字が入っている事を確認する事が出来ません。 このような場合、制御文字を他のテキスト文字に置き換えると分かりやすいです。 という訳で今回は、制御文字を可視化(例えば0x02を[STX]に置き換えるなど)させるコードを紹介します。 変換作業は、正規表現による置換機能を利用します。正規表現を使って制御文字をマッチさせたいのですが、幸いな事に.Netでは、制御文字は「\p{Cc}」というパターンであらわす事が可能です。 「\p{Cc}」って何???と思われるかもしれませんが、分解して考…
続きを読む
[C#]各種データ型と16進数文字列の変換方法
byteの配列に入った値を16進文字列に変換する byte[] inData = { 0x01, 0x02, 0x88 }; string outStr = BitConverter.ToString( inData ); // 01-02-88byte[] inData = { 0x01, 0x02, 0x88 }; string outStr = BitConverter.ToString( inData ); // 01-02-88 16進文字列をbyteに変換する byte outByte = Convert.ToByte( …
続きを読む
[C#]ComboBoxのSelectedIndexをオブジェクト指定でセットする。
ComboBoxでどの項目が選択されているかを,コードから指定(変更)したい場合があります。 このような場合、SelectedIndexプロパティをセットする事で目的を達成できるのですが、Index番号では無くItemsに登録されたオブジェクトで指定を行いたい場合も有ります。 このような場合は、以下のようにSelectedItemを使用すればOKです。 // フロー制御の選択肢を追加 cmbHandshake.Items.Add( System.IO.Ports.Handshake.None ); cmbHandshake.Items.Add( System.IO.Po…
続きを読む