【きむ茶工房ガレージハウスの掲示板】

FC2BBS

24033

誹謗、中傷、虚偽情報や商用目的・宣伝目的等の利用と判断した場合は削除する事があります。

名前
件名
メッセージ
メールアドレス
URL
アイコン
文字色
編集/削除キー (半角英数字のみで4~8文字)
プレビューする (投稿前に、内容をプレビューして確認できます)

外部EEPROMからのPCM再生 - ネコ

2019/04/30 (Tue) 14:19:54

お世話になっています。
長文失礼します。

PIC16F1933と24FC1025で外部EEPから音声データを読み込んでPWMでスピーカーで再生させるおしゃべり時計の試作をしていますが、

下記ソースのところの↓記載のab+cdをしないと音声が出力されません。

また、EEPからの読み出しが追いつかない模様でシーケンシャル読み込みをしたのですが、まだ、追いつかない模様です。
配列に一旦貯めて、順次再生。バッファが空いてきたら更に貯める
というようなコードを思いつく限りトライアルアンドエラーしてみましたがうまくいきませんでしたので、
お忙しいと存じますが、2点アドバイスいただけますでしょうか。
よろしくお願いします。

「ab = I2C_Receive(ACK); // 1バイト目を受信する
cd = I2C_Receive(ACK); // 2バイト目を受信する
ef = (ab+cd);」




下記ソース
------------------------------------------------
#include <xc.h>
#include "skI2Clib.h"
#include "skMC24xxx.h"

#define _XTAL_FREQ 32000000 // delay用に必要(クロック32MHzを指定)

//char ab[128] = {0};
char ab;
char cd;
int ef;
long addres = 0x04;
char ans = 0;

char eeprom_buff[128] = {0};


int addresaddres =0x00;
char ab_addres[8] = 0;

bit end = 0;



int slave_adrs_1;

long eep_adrs = 0;
char eep_x = 0;

bit flg = 0;

void interrupt InterTimer( void ){
InterI2C(); // I2Cの関連割り込み処理



if(TMR4IF){ // 16KHzでぶん回す
TMR4IF = 0;
flg ^= 1;

//CCPR5L = I2C_Receive(ACK);// 指定個数分読み出す(受信する)

//CCPR5L=vdata; //PWM set
// 連続してデータを読み出すi2c_stopするまで
//CCPR5L
/*
dad= voice[aabb];
*/
}
}
void main(void) {
OSCCON = 0b01110100; // 内部クロックは8MHzとするPLLx4=32MHz
ANSELA = 0b00000000; // AN0-AN4は使用しない全てデジタルI/Oとする
ANSELB = 0b00000000; // AN0-AN4は使用しない全てデジタルI/Oとする
TRISA = 0b00000000; // ピン(RA)は全て出力に割当てる
//TRISB = 0b11111111; //
TRISB = 0b00000000; // ピン(RB)は全て出力に割当てる
// TRISC = 0b00011011; // ピン(RC)は全て出力に割当てる
TRISC = 0b00011000; // ピン(RC)は全て出力に割当てる
PORTA = 0b00000000; // RA出力ピンの初期化(全てLOWにする)
PORTB = 0b00000000; // RA出力ピンの初期化(全てLOWにする)
PORTC = 0b00000000; // RA出力ピンの初期化(全てLOWにする)

CCPTMRS1 = 0b00000000;
CCP5CON = 0b00001100;


T2CON = 0x7C; //ポストスケーラ16倍、プリスケーラー1倍 PWM周波数う20KHz

CCPR5L = 0;
CCPR5H = 0;
TMR2 = 0;
PR2 = 24; // PWM周波数20KHz
TMR2ON = 1;


T4CON = 0x05; // 32MHz時 16KHzで回す
PR4 = 124; // 32MHz時 16KHzで回す
TMR4 = 0;
TMR4IE = 1;
TMR4IF = 0;
TMR4ON = 1;

GIE = 1;
PEIE = 1;

// I2Cの初期化処理(通信速度400KHz))
InitI2C_Master(1);
MEM_Init(0,0,0); // 外部EEPROMを選択 (A0,A1,A2)

while(1){

eep_adrs = 0x00;

slave_adrs_1 = 0b01010000 | (0<<2) | (0<<1) | 0;
ans = I2C_Start(slave_adrs_1,RW_1) ; // スタートコンディションを発行する
if(ans == 0){
eep_x = (char)(eep_adrs >> 8);
I2C_Send(eep_x) ; // メモリのHigh側アドレスを指定する

eep_x = (char)(eep_adrs & 0x00ff);
I2C_Send(eep_x) ; // メモリのLow 側アドレスを指定する

I2C_rStart(slave_adrs_1,RW_1); // リピート・スタートコンディションを発行する

for(int iii = 0; iii <= 760; iii++){
ab = I2C_Receive(ACK); // 1バイト目を受信する
cd = I2C_Receive(ACK); // 2バイト目を受信する
ef = (ab+cd);

if(ab == 0x00 || cd == 0x00){
end = 1;
break;
}
CCPR5L =ef;
//CCPR5L =ab;
while(flg == 1);
}
end = 0;
I2C_Receive(NOACK);
I2C_Stop();
}else{
I2C_Stop();
end = 0;
}

}
}

Re: 外部EEPROMからのPCM再生 - きむしげ

2019/05/12 (Sun) 13:47:51

こんにちは、ネコさん。

ここの所少し忙しかったり、おじさんが亡くなったりで
バタバタしていましたので返事が遅れました。

お尋ねの件、
私も、自際に動かして見ないとぉチョットぉ解りません。
ごめんなさい。m(__ )m
ですがぁ、速度が欲しいのなら
SPI接続のEEPROMをお勧めしますがぁ。

Re: 外部EEPROMからのPCM再生 - ネコ

2019/05/22 (Wed) 04:05:32

きむしげさん
こんばんは
お悔やみ申し上げます。

本題ですが、SPI接続の1Mbitが入手出来ないので、
SDカードから読み込むサンプルコードを試してみます。
また、壁に当たったらまたお付き合い願います。

無題 - 朝倉 宏仁

2019/04/22 (Mon) 12:54:57

きむしげさん、こんにちは。

今、PCとPICのUSART通信を試していますが、事情があってADM3202ANを介してPIC16F1827とPC間の通信をしようとしています。
PCはWindows7にUSBーRS232C変換ケーブルを接続、上記構成の自作モジュールにteratermで信号を送り、まずコールバックするかの確認をします。

ソフトはこちらのサイトの「パソコン(PC)と接続するパート1
(FT232RL/234X使用によりUSBをシリアル変換してマイコンと繋ぎます)」のFT232.zipを使用しようとしているのですが、そのままで動作するでしょうか?ヒントなどいただくと大変助かります。

Re: 無題 朝倉宏仁

2019/04/28 (Sun) 00:18:58

問い合わせしていた件、何とかわかりました。
先に事例通りPIC12F1822で動作確認をしうまくいったので、16F1827向けに修正します。

メルアド しーちゃんパパ

2019/04/19 (Fri) 12:50:54

お久しぶりです。
ごめんなさい、アドレス間違ってしまいましたか?

てっきり植木でスイカ作っているものと。ミカンですね。
流石c言語の私の師匠。

いつもお世話になっています。64MHzで1ミリ秒を数える - ネコ

2019/04/13 (Sat) 09:33:40

PIC18F26K80にチャレンジしています。
外部クロック16MHz 4倍PLLで64HMzを供給して、
タイマー2で1ミリ秒ジャストを計算したのですが合っていますでしょうか。
よろしくお願いします。

((1/64)*4*16*100*1 = 100
プリスケーラー:16倍 ポストスケーラー:1倍
T2CON = 0b00000110; // プリスケ:16倍 ポススケ1倍
PR2 = 100-1 = 99

if(TMR2IF == 1){
TMR2IF = 0;
count ++;
if(count >= 10){count = 0;}

}

Re: いつもお世話になっています。64MHzで1ミリ秒を数える - きむしげ

2019/04/13 (Sat) 22:02:03

こんばんは。

プリスケーラーを16倍にするなら
ポストスケーラーを1:8にしPR2=0x7Cにすれば
丁度1msになるはずです、countの必要なし。
MPLAB X IDE の MCC機能を使えば解りますよ。


skSPIlib のダウンロード - mmmm

2019/03/17 (Sun) 20:04:28

mmmmです。

skSPIlib がダウンロード出来ません。
(リンク切れ)

よろしくお願いします。

Re: skSPIlib のダウンロード - きむしげ

2019/03/17 (Sun) 22:27:15

mmmmさん、こんばんは!

ごめんなさい
どのページのskSPIlibでしょうか?

Re: skSPIlib のダウンロード - きむしげ

2019/03/17 (Sun) 22:45:58

もしかして
トップページの16ビット版のなら
リンク切れしてました、
ご迷惑おかけしました、m(_ _)m
ごめんなさい。修正しました。

Re: skSPIlib のダウンロード - mmmm

2019/03/31 (Sun) 13:30:32

きむしげさん
無事ダウンロード出来ました。

修正ありがとうございました。

赤外線リモコンに関連して 西

2019/03/19 (Tue) 12:34:53

はじめまして、Arduino初心者の西と申します。
Arduinoによる赤外線リモコンの記事、興味深く読ませていただきました。この記事を参考に、オーディオアンプの入力セレクターをリモコン操作できるよう改造をしました。引き続き音量調整もリモコン化したいと考え、他の記事も参考にしながら、いろいろ実験をしていますが、思うようにならず頭を抱えています。すなわちリモコンボタンを押している間、電動のボリュームを動かし、ボタンを離したら停止するようにしたい(TVなどと同じように)のです。リモコンから出るリピートコードを使えば可能かと思うのですが、初心者の悲しさ、現在の所実現できていません。暇な時で結構ですので、ヒントを教示いただけたらと思います。リモコンはNECフォーマットです。

Re: 赤外線リモコンに関連して - きむしげ

2019/03/23 (Sat) 07:54:35

こんにちは、西さん

リピートコード受けられた方が良いかもですね。
リモコン受信プログラム改良します。
今しばらくお待ちください。

Re: 赤外線リモコンに関連して - きむしげ

2019/03/23 (Sat) 14:02:25

赤外線通信の実験パート2
(赤外線リモコンを送信器にして何か動かす)
の記事に、リピートコード受けられる様に改良した
プログラムを追記して置きました、試してみてください。

Re: 赤外線リモコンに関連して - 西

2019/03/25 (Mon) 07:29:07

早速対応いただき、ありがとうございます。数日のうちに試し結果を連絡します。

Re: 赤外線リモコンに関連して - 西

2019/03/29 (Fri) 18:03:03

やっと時間がとれたので、赤外線受信の関数を、改良された関数に置き換えて試してみました。本体部分のスケッチも若干変更し、最終的には思うような動作をするようになりました。ありがとうございました。なお、Arduinoについては、今後もボチボチですが勉強したいと思っています。こちらの記事は大変参考になりますので読ませていただきます。また、アドバイスを求めるかもしれませんが、その時はよろしくお願いします。

8KHzでの割り込みについて - ネコ

2019/02/20 (Wed) 08:16:01

きむしげさんおはようございます。
また、わからいなことが有りましたのでアドバイスをお願いします。

内部発振の32MHzで

PIC16F1938のタイマー4で8KHz毎に割り込みを行おうと思って((1/32)*4)*10(ポストスケーラー)=1.25usとなりましたので
T4CON = 0b01001100;
PR4 = 255;
として、100回カウントすればいいのかと思い実際にPICに焼いてみましたがうまく動いていないようです。

タイマー2はPWM出力で使用しているのでタイマー4を使用しました。
アドバイスお願いします。m(__)m

Re: 8KHzでの割り込みについて - きむしげ

2019/02/20 (Wed) 13:20:50

こんにちは ネコさん

8KHz毎の割り込みと言う事は125us毎ですよね。
システムクロックが32MHzなら
ポストスケーラは 1:1 プリスケーラは 1:4
で250回カウントアップさせれば良いでしょう。
1カウント当たり ((1/32)*4)*4=0.5us
なら 125us/0.5us=250
T4CON=0b00000101
PR4=249
で良いと思われますがぁ

Re: 8KHzでの割り込みについて - ネコ

2019/02/20 (Wed) 19:02:36

回答有り難うございます。
早速試してみたのですが、デバッグ用LEDをつなげて周波数を測ってみましたが、121KHz(242KHz)となってしまいます。

原因がわかりません。
よろしくおねがいします。

void interrupt InterTimer( void ){

InterI2C(); // I2Cの関連割り込み処理
if(TMR4IF){
TMR4IF = 0;

RA0 ^= 1;

}

T4CON = 0b00000101; // 32MHz時 8KH
PR4 = 249; // 32MHz 8KHz
TMR4 = 0;
TMR4IE = 1;
TMR4IF = 0;
TMR4ON = 1;

Re: 8KHzでの割り込みについて - ネコ

2019/02/20 (Wed) 19:13:23

連続投稿申し訳ありません。
原因が判明しました。

凡ミスです。
タイマー6のところにPR6とするはずが、PR4となっていて
設定が上書きされていました。

赤外線の実験1 リンク確認依頼の件 朝倉宏仁

2019/02/05 (Tue) 22:09:48

初めまして。
昨年末よりPICの勉強を始めましたが、こちらのサイトは大変詳しく、参考にさせていただいています。

こちらのサイトは昨年末に移動になりましたが、その際なのか、赤外線通信の実験パート1のRecive2.zipよりダウンロードができなくなっています。
恐れ入りますがご確認のほど、よろしくお願いします。

Re: 赤外線の実験1 リンク確認依頼の件 - きむしげ

2019/02/06 (Wed) 15:32:56

初めまして、朝倉宏仁さん

ご迷惑をおかけしました。m(_ _)m
今、ファイルをアップしましたのでよろしくお願いします。

Re: 赤外線の実験1 リンク確認依頼の件 朝倉宏仁

2019/02/06 (Wed) 20:21:38

きむしげさん

赤外線通信のzipファイル、ダウンロードできました。 
早々に対応いただき、ありがとうございます。

私はこちらのサイトの事例を参考に、過去のPIC製作例のソースを、
最新のMPLABXでビルドできるようにしたり、PICの種類を変えたり
できるようにしていっているところです。こつは少しつかみました。

今後ともよろしくお願いします。

Re: 赤外線の実験1 リンク確認依頼の件 朝倉宏仁

2019/02/07 (Thu) 00:40:30

赤外線通信のソースをビルドしたところ、最初下記の
エラーが出てどうしようもありませんでした。

skI2CLCDlib.c:45:: error: (1250) could not find space (2 bytes) for variable _LCD_ColumnSu

(→ MPLAB X IDE v5.10、XC8 v2.05にて。) 

その後ネットを調べたりして、試しにProjectProperty-XC8 GrobalOptionで、
Link in C LibraryをC99からC90に変更するとビルドできました。
対策方法として、これで合っているでしょうか?

Re: 赤外線の実験1 リンク確認依頼の件 - きむしげ

2019/02/07 (Thu) 11:14:04

こんにちは
そのエラーはメモリ容量が不足した時などに出たりするのですがぁ...
PIC12F1822ですよね、だとするとこのプログラムで70%以下のはずですがぁ...
私の環境はMPLAB X v4.10でXC8はv1.40とV2.00共にコンパイルは通っていますがぁ...
私のMPLAB Xにはそのオプションが無いようです。

1ミリ秒を数える - ネコ

2019/01/26 (Sat) 09:39:44

PIC16F1938のTimer2で1ミリ秒を数えたいのですが、
下記の計算であっていますでしょうか?

外部発振のクリスタル12.8MHzです。
初歩的ですがよろしくおねがいします。

((1/12.8)*4*16*100*2 = 1000
プリスケ:16倍 ポススケ:2倍
PR2 = 100-1 = 99

Re: 1ミリ秒を数える - きむしげ

2019/01/26 (Sat) 17:29:57

こんばんは、ネコさん

はい、OKと思います、
その設定で1ms毎にカウントされ割り込みも許可すれば発生するでしょう。

Re: 1ミリ秒を数える - ネコ

2019/01/26 (Sat) 20:16:10

ありがとうございます。
今後とも宜しくお願いします。

引っ越しの件 - きむしげ

2019/01/21 (Mon) 20:30:55

こんばんは、
もぉ、今回は、ジオシティーズが終了する為
要らない手間と労力と時間の無駄を消費しました。
移動した先は、えへロリポップ(何かぁ軽そうでぇミイハー?)でぇ~すぅ、
ムームードメインで独自のドメイン(zattouka.net)も得たので次からは
ジャンジャン引っ越ししまくりですね?
なのでぇ、リンク切れとか有るかもですぅ
その時はご報告よろしくお願いいたしますですぅ。
マイコン関連は"zattouka.net/GarageHouse/"で
写真関連は"zattouka.net/Photo/"で
もしブックマークされている人は変更お願いします。m(_ _)m
今後ともよろしくお願いいたします。


Copyright © 1999- FC2, inc All Rights Reserved.