2016-02-29 11:22 | カテゴリ:海外旅行
先週は家内と香港へ旅行してきました。
食べ歩きの、食い倒れツアーです。

パッケージツアーでは無くて、貯まったデルタ航空のマイルで無料航空券をゲットしての旅です。
往路は、チャイナエアーで、台湾経由、復路は、中国東方航空で、上海経由です。
乗り継ぎがあり、結構時間がかかりましたが、タダの切符ですから、文句は言えません(笑)

旅行中は、何かとネットアクセスが出来たほうが便利かと思い、iPadを持参し、香港到着後に、SIMカードを調達しました。
入国後に到着ゲートを出て、左に100mほど行くと、セブンイレブンがあり、その先に「1010」と言う通信ショップがあり、そこで8日間のプリペイドSIMを購入。設定も全てしてもらえました。
CLSと言う会社の物で、118HK$でした。


あっ、そうそう、両替ですが、日本でするより、香港の空港の入国手続きゲートの手前にある両替商がおとくです。
日本より、2円/hk$はお得です。(1hk$=約15~16円です)
タクシー代は300$でしたので、2人で電車に乗って、また駅からタクシーに乗ることを考えれば、タクシーが便利です。
ちなみに電車は1人900$くらいでした。<ーーー間違えました、一人90HK$です。

さて、到着したのが夜の8時頃になりましたので、空港で腹ごしらえしました。
到着ゲートを出たところにある、フードコートで、小龍包とジャージャー麺を。
なかなかの味で、幸先良いスタートが切れました。

HK1.jpg

HK2.jpg

HK3.jpg

ホテル(九竜のリーガル九竜ホテル)到着後に近くを散歩。
コンビニ(ファミリーマート)が、あちこちにあります。ビールとつまみをゲット。
また、翌朝の朝粥のお店をホテルで聞いておきました。

HK4.jpg

HK5.jpg

朝粥は、ホテルの裏手の広場に面したお店です。二軒並んだお店ですが、地味な方の店(奥のパラソルのある方)が結構はやっていました。
こちらで、朝粥(牛挽肉、豚レバー)と米粉の茹で春巻きを頂きました。(美味しかった)

HK6.jpg

HK7.jpg

その後、香港島に渡り、しばし散策。
こんなお寺(?)にも行きました。

HK15.jpg

HK14.jpg

疲れたので、近くにあったMACで甘いものを補給。
なんと「北海道あずき」のアイスが新製品として売っていました。

HK8.jpg

昼食は、九竜に戻って、「糖朝」というレストランへ。
結構、ガイドにも掲載されていて、有名らしいのですが、大きく欠けたお皿で出してくるあたりは、御愛嬌。
要注意点は、クレジットカードが使えないことです。現金のみ。
ちなみに、ファミリーマートや、大きなレストランは大体カードが使えます。タクシーは、現金です。
入る前に、レジにクレジットカードのシールが貼ってあるか、確認したほうがいいですね。
ここでは、糖朝チャーハンと牛肉焼きそばを頂きました。(二人で3000円くらい)

HK9.jpg

HK10.jpg

夕食は、あまり食欲が無かったこともあって、朝粥のお店に再度訪問。
海老ワンタン麺と牛肉炒めあんかけ飯。
これもとても美味でした。しかもお安い。(二人で1500円くらい)

HK11.jpg

HK12.jpg

ここで、日本語メニューを見ていて、驚きました。
「石鹸ベース」の表記があります。(笑)
なんで石鹸か!

HK13.jpg



このメニュー写真を見るとお分かりですよね?
中国語から英語に翻訳し、それを元に日本語にしていて、、、
英語にスペルミスがあって、スープがソープに(笑)



落ちが付いたところで、今回はここまで。
帰国後に風邪をひいて、体調が良くありませんので、続きは今度にさせていただきます。





【ジャンル】:グルメ 【テーマ】:こんな店に行ってきました
コメント(4)
2016-02-20 20:40 | カテゴリ:1/8モデル
紆余曲折を経て、フライデー電飾の部分が完成しました。
一部、頭部のLEDは、組み立ての都合上、接続していませんが、胴体部分のLEDは配線し、動作確認が出来ました。
思ったとおりに一応動作しましたので、記念にビデオを撮影しましたので、ご笑覧ください。



今後は、プラモデル本体の塗装と組み立てになります。

あと一息でしょうか。



2016-02-18 15:16 | カテゴリ:1/8モデル
電子回路の基板作成の仕上げと、プログラム作成を検討しています。

実は、また、はまってしまいました。
昨日までちゃんと動作していたプログラムに、カラーLED点滅を追加すべく、プログラムの整理をしました。
そのとたん、音声が出ない状態に。

また、はまりました。
一体なのがどう悪さしているのか見当もつきません。
昨日までのハードにソフトを見やすく整理しただけです。

ハードの半田付け不良は無いか?
ICがソケットにちゃんと入っているか?
2時間掛けて調べました。
問題ありません。

後はソフト。もう一度じっくり見たら、問題ありました。
リセット後に、コマンドを送る前に、最初に音声モジュールにダミーのコマンドを送ることを前提でプログラムしていましたが、それを忘れて、ダミーのコマンド送信部分を消去していました。
その部分に説明を記述していなかったので、不要コマンドと勝手に考えていました。

ダミー

で、今日は、フライデーが喋ると、音声モジュールの信号を検知して、LEDを細かく点滅させる部分を製作しました。
まずは、ロジックが上手くいくか、モニター用のLEDを変わりに点滅させてみました。
今後はこれをカラーLEDで、しかも、話す内容に合わせてカラーを変化させるようにしたいと思います。

と、書いた後で、諸問題が発生しました。

PIC-16F877に先日、カラーLEDを駆動させて成功したプログラム(C言語とアセンブラ)を組み入れて、コンパイルしましたが、うまくありません。
エラーメッセージが多く出て、よく理解できないのですが、要するに、このクラスのPICではメモリーをバンク切り替えで使用しているのですが、その境界を超えてデータのやり取りをしている、と言っているようです。
アセンブラにC言語からパラメータを渡し、それを処理するのですが、今回は、渡すパラメータを、配列の色指定から、LED駆動の配列に移しているところが悪さしているようです。
はっきり分かりません。

いろいろプログラムの場所やメモリー領域の位置を調整しても、コンパイルできません。
もっとも原因がはっきり理解できていませんので(汗)

何か解決策は無いかと考えましたが、唯一、思いついたのは、もう一つPICを搭載して、それにカラーLEDの制御をさせればよいのでは?
と言う考えです。

早速、一番標準のPIC-16F84Aをブレッドボードにセットして、先日のカラーLEDを駆動したプログラムをセットし、電源オン!
当たり前ですが、ちゃんと動きました。
あとは、ここに、メインのPIC基板から、何色にカラーLEDを発色させるかのデータを3か4ビットで入力して、喋っている時に光らせればOKです。

で、ふとXC8の画面を見るとリソース(データメモリーとプログラムメモリー)が90%使用中となっています。
なんとXC8では、16F84Aのメモリーはあっという間に消費してしまうようです。

memory.jpg


仕方が無いので、16F873というメモリーに余裕があるPICを使用することにしました。

先は見えてきました。

早速、PICを用意して回路をブレッドボード上に組んでテスト。
ちゃんとフルカラーLEDも点灯します。よしよし。

次に、メイン基板から送られる色指定の番号に従って、カラーLEDの色を変化させます。
まずは、ブレッドボード上で、指定したポートBの0-2番の3ビットで、7色の色を指定するようにプログラム。
ところが、これがビット指定とは無関係に色が変化します。
プログラムも確認し、ブレッドボード上に組んだ回路も、ちゃんとポートB0-2に繋がっています。
そこで、ポートBではなく、ぽーとCのビット0-2につなぎかえることにしました。
すると今度はちゃんと正しく色が点灯します。

あれーっ!
と言うことは、ポートBが壊れたか?
もう一度回路を戻して、新しいPICに交換してみました。
やっぱり、動作が変です。

ポートCではちゃんと動くのにポートBではだめ。
ここではまりました。
一日悩んで、考えて、一晩寝て。
そして、今朝、なんの気なしにPICのピン配列を見ていると、気づきました。
「大ボケ」でした!
ポートBのピン配列をRB0-7と思っていたのが、RB7-0の逆でした。
これでは、ビット0-2に与えた電圧の色信号が読み取れるわけはありません。

もー、イヤになります。

ようやく、サブ基板が出来ました。

17-1.jpg

17-2.jpg


これをメイン基板と接続してテスト。
結果は上々。

17-3.jpg


ちょっと気分が良いので、胴体部分に仮セットして、光らせてみました。
ご笑覧ください。
なかなか雰囲気が出ているのではないかと、自画自賛です(笑)







2016-02-14 21:49 | カテゴリ:1/8モデル
ブレッドボード上で電子回路の動作確認が出来ましたので、ロボットに内蔵する基板を製作しました。
基板を胴体内部にセットした場合のその他のLEDやパーツなどとの干渉が無いか胴体部分を仮組みして確認しました。

16-2.jpg

16-3.jpg

スピーカーも胴体の最下部にちょうど納まります。

16-1.jpg

先に製作していた、口を発光させるカラーLEDモジュールも収まりそうです。

16-5.jpg

16-4.jpg

汎用の基板を胴体の断面に収まるように切削し、PICと音声LSIのICソケットを取り付け、基板回路図を作成して、回路の半田付けを行いました。

16-7.jpg


で、ここで電源ON、、、、、おや???


PICに電源が入るのですが、音声モジュールが発声しません。
うーん、ブレッドボードではちゃんと動作していたのに。
そのままを基板に組み上げて、半田付けしただけです。


また、PCの通信ソフトを用いてRS232のシリアル通信を確認しました。
PICからは、初期化コマンドが送られているのに、音声LSIから、ちゃんとした受信コマンドが返されません。
電源SWをぱちぱちすると、時々動作します。
これで、また2時間悩み。

結果、製作した基板のVDDとVSS間に電解コンデンサーを入れて、音声LSIのリセット端子を単にオープンにしておくのではなく、抵抗とコンデンサーで、電源ON時にゆっくり+になるようにしたら、電源立ち上がり時にちゃんとリセットされて、起動するようになりました。

16-8.jpg


この二つのコンデンサーで、正常に動作するようになりました。

2016-02-12 17:30 | カテゴリ:1/8モデル
気になっていることがあります。

ロボットの音声を出せるようになりましたが、なんとも小さな声です。
虫の鳴くような。
そこで、アンプ回路を取り付けることにしました。
以前に購入した汎用のオーディオアンプICがありました。

AMP.jpg

ゲインは20で十分かと思って、回路をセットしましたが、まったく不十分で、結局ゲイン50の回路となりました。

KAIRO.jpg

ブレッドボードに回路を追加しました。
もう配線がすごいことになっています。
実際は汎用基板に半田付けしますが。

TORITUKE.jpg


そして、音声も大きく、クリアーになりました。






2016-02-11 12:19 | カテゴリ:1/8モデル
電子回路の工作の続きです。
新しい電子部品を使用する時は、なんやかんや、トラブルが発生して、負のスパイラルに入ってしまいます。
こんかいの発声LSIもそうです。

とはいえ、親切な秋月さんから、新しい音声モジュールLSIが届きました。
で、早速、テスト。念のためブレッドボードのセットをすべてはずして、ゼロから配線しなおしました。

ちゃんと起動コマンドやバージョン出力コマンドも反応して正しい答えを返してくれます。
何が悪かったのはよくわかりません。
自分のテスト回路の接触不良かもしれませんし、LSIの不調かもしれませんが、いずれにしろ新しいLSIはちゃんと動作しています。
念のために1-2時間通電して、再テストしてもOKでしたので、これで良しとしました。

さて、LSIがちゃんと動作することが確認できましたので、早速、発声を試してみます。
その前に、TRとスピーカーを出力端子に取り付けて、音出しの準備をします。

DSC01776.jpg


赤丸が取り付けたTR(2SC1815)、緑丸がベース抵抗(4.7K)、奥の黄丸が、音声LSIです。

テスト回路の全体です。

DSC01777.jpg


右下にスピーカー(5Ω、1W)を接続しました。
音が大きく出せるように、下に密封容器のフタを入れました。(笑)
また、左のD-SUBコネクターから、USB変換ケーブルを通して、PCに接続してあります。
PCでは、簡易通信ソフトで、任意の文字や記号を送信したり受信した信号を表示したり出来るようになっています。

PCでソフトを立ち上げ、通信速度を設定し、音声LSIの起動コマンド「?」(3F)を送ります。
すると、ちゃんと「>」記号(3E)が返されました。

あらかじめ、メモ帳ソフトで、ローマ字で発声文章を入力しておき、それをコピペで通信ソフトに貼り付けると、ちゃんと発声してくれました。

ビデオ撮影しましたが、ちゃんと音声が拾えているか心配でしたが、なんとか聴こえるようです。

こちらをご笑覧ください。




発声LSIに喋らせるには、ローマ字(半角ASCIIコード)で文字を書き出し、最後にCRコードを送信すると、それを機に発音します。
また、二種類の「ベル音」が内蔵されていますので、「ピーン」とか「ポーン」といった音も出せます。
ローマ字表記には、アクセントや、発音休止などの記号もあって、細かな設定も可能です。

これで、ロボットに「喋らせる」ことも、どうやら上手く行きそうです(安心)


追加の工作をしました、、、、
2016-02-09 13:21 | カテゴリ:1/8モデル
電子回路の工作の続きです。
プログラムを一部紹介しましたので、長いです、すみません。


音声合成LSIの動作不具合で秋月さんにメールしたら、メーカーに問い合わせるとの事。
もう少し時間がかかりそうですが、今朝、再度実験したら、一切正常の動作はしなくなり、どんなコマンドを送信しても、関係の無いコードを送り返してきました。
故障でしょうね。


そこで、LEDのランダム点滅のプログラミングを進めました。

まずは、今日の結果をご覧ください。


POWERを入れた後、赤色LEDが一回点滅し、動作開始。
その後は、試験的にセットした、赤色と黄色のLEDをランダムに点滅しています。
点灯時間と消灯時間をそれぞれ乱数的に決めて、点滅させていますので、良い感じです。

簡単にプログラムの説明をしますと、

プログラムは
各種の変数と関数の定義をして


//-------------------------------------------------------------------------
// プログラム初期設定
//-------------------------------------------------------------------------
#include

#include

#include

#pragma config FOSC = HS //高速オシレーター(4MHz以上)使用
#pragma config WDTE = OFF //ウォッチドッグタイマーOFF
#pragma config CP = OFF //コードプロテクションOFF
#pragma config PWRTE = ON //パワーアップタイマーON
#pragma config LVP = OFF//
//PICのクロック設定
#define _XTAL_FREQ 20000000 //PICのクロックをHzで設定(20MHz)


//-----------------------------------------------------------------------
// 定義エリア
//-----------------------------------------------------------------------

//------------------------------------------------------------------------
// 変数初期設定
//------------------------------------------------------------------------

unsigned char led_sw[25][2]; // LED毎の点滅時間カウントとON/OFF状態記憶用
unsigned char rcv_1B; // 送受信バイトの変数
unsigned char msg[40]; // 音声モジュールへの文字データ
unsigned char send_1B;
int led_time; //ランダム点滅のカウント値
int i, j; // LOOPカウンター

//------------------------------------------------------------------------
// 関数定義
//------------------------------------------------------------------------
static void interrupt tmr0_int(void);
void RS232_ini(void);
void RS232_write(unsigned char send_1B);
unsigned char RS232_read(void);
void Sound_ini(void);
void Sound_sta(void);
void voice(const char *p);
void PIC_ini(void);
void MTX_set(void);
void LED_brink(void);




メインルーチンでは、
タイマー0を256の分周で使用して、約3msecの定期的な割り込み発生を設定します。
また、タイマー1は使用しない設定にします。

//-------------------------------------------------------------------------
// メインプログラム
//-------------------------------------------------------------------------

main() {

//---------------------------------------
// PIC 初期設定
//---------------------------------------
PIC_ini();

RA1 = 0; // RA0 点灯
__delay_ms(1000);
RA1 = 1; // RA0 消灯
__delay_ms(1000);


//----------------------------------------------------------------
// TRM0 setting 割り込み使用、プリスケーラ256設定
//----------------------------------------------------------------
OPTION_REG = 0b10000111; /// Prescaller 1/256 (3msec interval)
INTCON = 0b00100000;
GIE = 0; // 全体割り込み禁止
T0IE = 1; // TMR0 使用
T0IF = 0; // TMR0 割り込みフラッグクリア

//---------------------------------------------------------------
// TMR1 setting TMR1は使用しない設定に
//---------------------------------------------------------------
T1CON = 0b00000000; // Prescaler 1/8
T1OSCEN = 0; // TMR1
T1SYNC = 0;
TMR1CS = 0; // Internal clock
TMR1ON = 0; // TMR1 clock start
TMR1IE = 0; // TMR1 flag clear
TMR1IE = 0; // TMR1 overflow int off
PEIE = 0; // Peripher al int off
GIE = 0; // GIE is off

//--------------------------------------------------------------
// 配列に初期値をセット
//--------------------------------------------------------------
// 初期値として、最初に最大時間で全LEDを点灯させる設定
MTX_set(); // 255と1をセット

最後に、割り込みを許可して、メインルーチンは、無限ループに入って、お休み。

//--------------------------------------------------------------
// メインルーチン終了LOOP(以降、メインルーチンは無限ループ
//--------------------------------------------------------------
while (1) {
}

//-----------------メインルーチン最後----------------------------------------------
}



タイマー割り込みルーチンでは、

//----------------------------------------------------------------
//TMR0割り込み処理(LED駆動と音声処理起動)
//----------------------------------------------------------------

static void interrupt tmr0_int(void) {
// テスト処理。LEDデータ配列の「0と1」だけを点滅する
GIE = 0; // 割り込み処理中に次の割り込みが入らないように割り込み禁止

最初に割り込みを一時禁止して、次の割り込みが勝手に入らないようにします。

for (i = 0; i <= 6; i++) { // 配列の0番目から1番目(実際は24番目まで拡張する)
// を繰り返して処理

led_sw[i][0] = led_sw[i][0] - 1; // LED点滅配列の最初のカウンターを-1する
if (led_sw[i][0] == 0) { // カウンターがゼロなら
if (led_sw[i][1] == 0) { // LED表示FLGがOFFならONに
led_sw[i][1] = 1;
} else {
led_sw[i][1] = 0; // 表示ONならOFFにセット
}
led_time = rand();

led_sw[i][0] = led_time / 1024; // 新しくカウンター値をセット
}
}


設定した表示用の配列の0番目から順番に読み出して、カウンターをー1します。
もし、カウンターが0になったら、そのLEDが表示ON中なら表示OFFとして、配列に1を、表示OFF中なら表示ONとして、配列に0を代入します。
ハード上、ポートに1出力でLEDがOFF、0出力でLEDがONとなります。

最後に、配列の各LEDの出力を各ポートに出して、割り込みを許可して、処理終了となります。

LED_brink(); // LED点滅配列に沿ってLEDを表示
// led_sw[n][1]ならON
// led_sw[n][0]ならOFF
GIE = 1; // 割り込み許可

T0IF = 0; // タイマー割り込みFLGクリア
} // 割り込み処理終了


また、関連の関数は

//-------------------------------------------------------------
//PIC Initialize
//-------------------------------------------------------------

void PIC_ini(void) {
//PICのポート設定
ADCON0 = 0b10000000; //アナログ使用しない
ADCON1 = 0b00000110; //For degital I/O

//割り込み不使用
INTCON = 0b00000000;

//TMRをフリーランで使用
OPTION_REG = 0b10000000;
GIE = 0; // 全体割り込み禁止
TMR0 = 0;

//周辺機器割り込み不使用
PIE1 = 0;

//周辺機器割り込みフラグクリア
PIR1 = 0;



TRISA = 0b00000000;
TRISB = 0b00000000;
TRISC = 0b10010000; // OUT = RX, Input from Sound LEI
TRISD = 0b00000000;
TRISE = 0b00000000;

PORTA = 0b11111111; // set data port all H
PORTB = 0b11111111;
PORTC = 0b11111111;
PORTD = 0b11111111;
PORTE = 0b11111111;


}

//-----------------------------------------------------------------
// 配列データの初期セットアップ
//-----------------------------------------------------------------

void MTX_set(void) {
int i;
for (i = 0; i <= 19; i++) {
led_sw[i][0] = 255;
led_sw[i][1] = 1;
}

}

//-----------------------------------------------------------------
// 配列データを元にLEDを点灯・消灯する
//-----------------------------------------------------------------

void LED_brink(void) {
int i;
RA0 = led_sw[0][1]; // Body SW LED TR

RA1 = led_sw[1][1]; // Head LED


RE1 = led_sw[2][1];
RE2 = led_sw[3][1];

RC0 = led_sw[4][1]; // Antena
RC1 = led_sw[5][1];
RC2 = led_sw[6][1];

RB7 = led_sw[7][1]; // 12 of color LEDs
RB6 = led_sw[8][1];
RB5 = led_sw[9][1];
RB4 = led_sw[10][1];
RB3 = led_sw[11][1];
RB2 = led_sw[12][1];
RB1 = led_sw[13][1];
RB0 = led_sw[14][1];
RD7 = led_sw[15][1];
RD6 = led_sw[16][1];
RD5 = led_sw[17][1];
RD4 = led_sw[18][1];
RB0 = led_sw[19][1];

RD0 = led_sw[20][1]; // Body 5mm LED
RD1 = led_sw[21][1];


}



です。

これで、LEDのランダム点滅にめどが立ちました。


2016-02-07 16:37 | カテゴリ:1/8モデル

RC飛行所の滑走路が、ドロドロになるので、砕石を敷いて整備することになしました。
6人が集まって、作業を。
1年分の体力を消費してしまいました。
筋肉痛。

このビデオは作業前に時間があったので電動機を飛ばしました。




帰宅して、ロボットの音声LSIのチャックをしたら、なんとちゃんと動作するではありませんか!
おかしいなぁ?
昨日はぜんぜんおかしな動作だったのに。

OK.jpg
起動コマンドの「3F」送信に対して、「3E」が返されています。

バージョンコマンドも動作します。

ver.jpg

ちゃんとバージョンコマンドに、「VR4a」が返されています。
やったぁ!!
そこで、TRとスピーカーを追加して実際の発声をトライしました。

するとまたまた、起動コマンドを認識しなくなっていました。

RX.jpg

起動コマンドに、関係の無い「BF」が返されています。

これはもう、6jiroさんのおっしゃる、ハードのトラブルでしょうか!
秋月電子さんに問い合わせました。

どうなるのでしょうねぇ??
2016-02-05 22:25 | カテゴリ:1/8モデル
制御ソフトの検討を始めました。

先日来の作業で、LED実装の部分が出来上がりました。

DSC01770.jpg

DSC01771.jpg


また、秋月さんから、音声発音モジュール(LSI)も届きましたので、ここらでLSIの動作確認を含めて、基板を製作していこうかと思います。
基板を製作し、ソフトを検討した後で、本体を塗装し、ハード基板モジュールを収納する手順で進めようと思います。

まずは、LEDの点滅(ランダム点滅と一部連続点灯を予定)と発声モジュールのテストを行う為にソフトを製作します。
言語は、C言語で、一部アセンブラを組み入れます。

ランダム点滅の考え方ですが、20個近いLEDを個別にランダムに点滅させる案として、それぞれのLEDに対して、ONかOFFかの状態を記憶する変数と、点灯時間と消灯時間をカウントして、LEDを点滅する為の変数を用意します。
それを、タイマー割り込みを利用して、一つづつカウントダウンしゼロになったら、LEDのONかOFFを反転させ、点滅します。
カウンターの変数には、1-50くらいの乱数を入れておき、タイマー割り込みを10msec毎に発生されれば、点灯と消灯の時間を10msecから500msecの間で、乱数的に調整できるはずです。

と、まぁ、計画は出来ましたが、実際のプログラミングはまだです。
とりあえず、音声LSIの動作確認をしようと思い、ブレッドボードにPICと音声LSIを接続して、PICに、RS232通信の簡単なプログラムを組んで、テストします。

DSC01772.jpg

音声LSIは、電源投入後に、指定のコマンド1文字を送信すると、規定の返信を1文字送り返しますので、これを確認して、通信の確立を判断できるようになっています。
早速、プログラムを組んで、実行!!
あれ??
なったく、うんとも、すんとも、言いません。(喋るのではなく所定の文字を返信してきません。

RS232通信は、送信がだめでも、受信がだめでも、動きません。(そこが厄介なんですが)

まずは、ちゃんと指定のコマンドがPICから送出されているかの確認です。
PICのTX端子に、RSケーブルを接続し、PCの通信ソフトを立ち上げて、所定のコマンドをPCで受信できているか確認しました。
PCで見ると、なんかゴミの様なデータがPICから送信されています。

この様な時は、だいたい、PICの通信速度の設定でなにか間違っている場合がほとんどです。
プログラムの確認をしましたが、このシリアル通信部分(XC8言語です)は、以前に製作して、ちゃんと動作確認できているはずですから、問題ないのですが。

通信速度を指定するパラメータをいろいろ変えてみて、何度もテストしましたが、うまくありません。


2時間後、あることに気が付きました。

今回のPICの出力は、PICのTX端子からRS232ケーブルを経由して、PCのRS232端子(実際にはUSB変換して)に入れています。
これではだめでした、PICの5Vレベルから、RS232レベルに変換するICを入れていませんでした!(汗)

このICを取り付けて、再度確認しなければなりません。(悪魔のネガティブ・スパイラルに入ってしまいました)

急遽、RS232レベル変換ICを取り付けて、PICと音声LSIの動作確認をしました。

まず、PICの所定のコマンドの出力状況ですが、ちゃんと、コマンド「?」のコード「3F」が出力されていました。

TX.jpg

そこで、PICからそのコードを受けて、初期化完了の返信コードが、音声LSIから出ているかの確認です。
PCから、「3F」コードを音声LSIに送信すると、音声LSIから、「BF」が返されました。

RX.jpg


おかしいです。
本来は、「3E」コードが返されなければなりません。
毎回、同じ結果なので、ノイズで誤動作しているとも思えません。

まだまだ、解決には時間がかかりそうです。