PIC16F88について教えてください

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
marikoa

PIC16F88について教えてください

#1

投稿記事 by marikoa » 14年前

コード:

// SOUND関数によるサウンド発生
void INIT_88JITSU(); //関数定義
void main()
{
INIT_88JITSU(); // 設定
//------------------------------
SOUND_Init(&PORTB,7); //Bポートのビット7に
SOUND_Play(1000,500); //周波数1000Hzの音を
//500mS間鳴動させる

}
void INIT_88JITSU(){ //関数本体部分
//レジスタの設定---------------------------
ANSEL=0; //アナデジポートをすべてデジタルに設定
OSCCON=0x70; //内部発振器の発振周波数8MHzに設定
TRISA=0; //Aポートを出力に設定
TRISB=0; //Bポートを出力に設定
} 
↑のプログラムから音階を作りたいんですけどわかりません><
よければプログラムを教えてくれませんか?

(参)
ド : 1000Hz レ : 1122Hz ミ : 1260Hz ファ : 1335Hz 
ソ : 1498Hz ラ : 1682Hz シ : 1888Hz ド : 2000Hz

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: PIC16F88について教えてください

#2

投稿記事 by beatle » 14年前

marikoaさんの使っているコンパイラの名前を書いて下さい。
それから、SOUND_Init関数とSOUND_Play関数の中身が分かりませんので示して下さい。

naohiro19
記事: 256
登録日時: 15年前
住所: 愛知県

Re: PIC16F88について教えてください

#3

投稿記事 by naohiro19 » 14年前

フォーラムルールをご覧ください。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: PIC16F88について教えてください

#4

投稿記事 by softya(ソフト屋) » 14年前

mikroCにその名前の関数があるので、たぶんmikroCじゃないかと思いますが微妙に名前が違うんですよね。

MikroCマニュアル(英語) 427ページ(2.14MB)
http://www.mikroe.com/pdf/mikroc/mikroc_manual.pdf
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: PIC16F88について教えてください

#5

投稿記事 by beatle » 14年前

MicroCだとするとSound_Init、Sound_Playという関数名ですね。大文字、小文字の違いです。
で、この2つの関数の説明を読みましたが、Sound_Play(a, b)とすると、aにはサイクル数を10で割った値を入れるらしいです。
4MHzの発振子の場合、命令クロックは1MHzですから、1KHzの音を鳴らす場合は1000サイクルということで、
1000を10で割った100という値をaに指定します。
bは命令クロック単位の値を指定するらしいので、500msec鳴らしたい場合は
500 * 1000を指定しなければなりません。(命令クロックが1MHzですから、1 * 1000 * 1000 (Hz) * 0.5 (sec) = 500 * 1000)
しかし、恐らくMicroCの場合は500 * 1000という数値はunsigned int型に入れようとするとオーバーフローしますから、
もっと短い時間(例えば50 * 1000)を指定して10回ループするなどの対策が必要かと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る