としぶぅ~の「工作部屋」...毎日少しのお勉強

趣味・関心事を書いていこうと思います。

PIC16F88を動かす。。。その33(シリアル通信受信もやりました・・・)

2012-10-24 23:14:08 | PIC16F88

こんばんわ

としぶぅ~です。

 

今日は機動戦士ガンダムオンラインのクローズドβテストの始まりの日でした。

9時過ぎに帰ってきて10時過ぎまで参加しました。

やはり、テストは早くから参加しないと勝てません…^^;

今日はロビーで700人以上の待ち人がカウントされていました。

すごいですね~・・・・人気あるんだ~。短時間の参加でしたが面白かったです。

本格的にやれるのは、金曜日の夜からですかね。。。。日曜日いっぱいまでですから。。。。

週末はこのテストで楽しめそうです!

 

今日は、昨日なんとかシリアル出力のまとめしましたが、受信は確認できていなかったので、

簡単にソフト作って確認しました。

単に、受信したデータをLCD(先日壊したの修理しました!)に1byteだけ表示させるものです。

とりあえず、オープニング!

”UART TEST”にオープニング表示を変更しました。

ちゃんとLCD直ってるでしょ?(笑)

次の表示は、受信待ち状態です。

ここで、”A”をRS232C経由で打ち込むと

最後に”l”を受信!

問題ないです。

 

とりあえずUARTも問題なくできました。

さて次は。。。。PWMでもやりましょうかね。。。

 

明日もβテストに参加するので、時間がとれれば書きます。

 

では、今日はこの辺で。

おやすみなさい~(^^)/

 

 

 


PIC16F88を動かす。。。その32(シリアル通信のまとめ)

2012-10-23 22:58:46 | PIC16F88

こんばんわ

としぶぅ~です。

 

雨が降って・・・・また一段と涼しくなりました。

風邪ひかないようにしないと。。。

今日は、昨日シリアル通信ができるようになったのでとりあえずまとめです。

//メインルーチン
void main( void )
{

unsigned char ansel;
int i;
unsigned char baurate;


IoInit(); // I/Oポートの初期化
Tmr1Init(); // タイマ1の初期化
baurate = 12; // 38.4KBps
usartinit(baurate);
ansel = 0x10; // AD4を指定(20120908追加)
adinit(ansel); // RA4をAD4ポートとして初期化する(20120908追加)

//タイマ周期が1/100秒になるように、初期化する
TMR1H = TMR1H_INIT;
TMR1L = TMR1L_INIT;
//時間のカウンタの初期化

一部ですが、コードを抜き出しました。

マーカー部で、ボーレートを入力してシリアルポートのイニシャライズしています。

//USARTの初期化
void uartinit(unsigned char br)
{

/*************************************************
ボーレート:OSC/(16*(br+1))
設定範囲:1<=br<=255

br= 51 :9600bps
br= 25 :19.1kbps
br= 12 :38.2kbps
br= 8 :57.6kbps
br= 16 :115.2kbps


**************************************************/

SPBRG=br; //ボーレートの設定
BRGH=1; //BRGの設定 1:High Speed
SYNC=0; //SYNCの設定 0:非同期設定
SPEN=1; //シリアル通信を使用
RCIE=1; //RX割り込み許可
// TXIE=0; //送信割り込み使用
TXEN=1; //送信on
TX9 = 0; //8bitTrasmit
RX9 =0; //8bitReciving
CREN=1; //連続受信on
RCREG=RCREG; //RCIF:受信割り込みフラグクリア
//RB5とRB7は入力と出力ポートに設定
TRISB2=1; //RB2入力に設定
TRISB5=0; //RB5出力に設定

}

上記のように、先日訳したレジスタの内容を順に設定します。

これで34.8Kbpsでシリアル転送ができるはずです。

 

それで、昨日とった波形の解説・・・・

これでわかるだろうか・・・

多分波形だけ張っていたら、これでなぜ動いているといえる…?なんて思う人いっぱいいると思うので

とりあえず波形の説明入れました。

この波形であれば38.4kbpsで動いていますよ^^

 

まとりあえず今日はまとめてみました。

まとまってない?(笑)

 

受信も多分できると思います。

受信はコード書いてLCDに表示しないといけないのでちょっと時間あるときにやります。

先週は仕事ほとんどできなかったので。。。。今週は忙しい!

 

とりあえず今日はこの辺で。。。

おやすみなさい^^/

 

 

 


PIC16F88を動かす。。。その31(シリアル通信をPCとやってみる4)

2012-10-22 23:18:10 | PIC16F88

こんばんわ

としぶぅ~です。

 

今日は急に雨が降ってきましたね。。。ビックリでした。

家に帰った後だからよかったけど。。。。

 

本日は昨日のつづき・・・・いろいろ考えて、電源??とか思ってその辺にあったACアダブター

差し込んだら。。。。PICと液晶壊れた(;_;)

動かないのでなんどか抜き差ししたら焦げ臭くなりました。。。

ACアダブターをみると・・・・・8V!

こりゃ・・・・・壊れるわ。。。。

大失敗です。

PIC16F88は予備あるので簡単に変えれました。

LCDもあるけど、半田ずけせねば。。。。

とりあえず、修理が必要なのでLCDは無で確認しました。

原因がわかりましたよ。。。。。。回路不備でした。。。。

こんな感じ

いや~。。。。前は動いていたように思ったけどな~

致命的なのが、TXDとRXDがひっくり返ってました。。。。大丈夫か俺!

最初に気ずけよ。。。。って感じですね。。。^^;

ちゃんと”OK”が送れていますね。。。

case 3: tx1byte(0x4f); //処理4
      tx1byte(0x4B); //処理4
      break;

とりあえず、4fh、4bhを送り続けています。(アスキーで”OK”です)

波形も、上がRS232C出力、下がPICの出力

いや~よかった・・・・

動いて。。。。受信も多分できますよ。。。。ここまでできれば^^

プログラム書いてみますかね。。。

 

とりあえず、動作確認の環境をぱしゃり・・・

 

いや~・・・・はまるとこんなもんです。。。。大したことないんですが。。。思い込みはいかんですね。。。

初心に戻りましょう!(ちなみにボードにLCDついてないです・・・)

 

でもよかった~

シリアルだけで何回ひっぱるか。。。。。なんて感じでしたが。。。やっと抜けれます(笑)

 

ま、今日はこの辺にしておきます。

ではおやすみなさい~

 

 


PIC16F88を動かす。。。その30(シリアル通信をPCとやってみる3)

2012-10-21 21:25:46 | PIC16F88

こんばんわ

としぶぅ~です。

 

夜はだいぶん涼しいですね。。。。窓開けてると少し寒いです。

 

今日は昨日の続きを時間見てやってみました。

昨日問題なっていた、なにも出力できないくなる件。。。わかりました。

受信の割り込みフラグが立ちっぱなしで。。。ずっと割り込みが入りっぱなしになっていた。。。

RCIFをクリアしたらとたんに動き出した。。。。ミスです^^;

上記を修正して、シリアルのところはともかく。。。。どうも時分割の部分が動いていない??

ような動きなので少し確認。

まず1msごとに割り込みかかっているか??

割り込み来るたびに”H”→”L”→”H”→・・・とポートをぱたぱたやらせて確認。。。

一応、1周期2ms・・・・1msごとに出力を反転させているので、ちゃんと動いているようです。

で、おかしいなと思っているのが4msごとに切り替わるはずの処理が。。。

埋め込んでもまともに動いてくれない。。。なぜ。。。

if(tmr_4ms_up == 1){

if(test_bit(PORTB,0)){    ←ここにDEBUG処理を埋め込む
clear_bit(PORTB,0);
}else{
set_bit(PORTB,0);

tmr_4ms_up = 0;

switch(tmr_cnt_up){
case 0: ad_4ms(); //処理1 ADを実施(20120920追加)
       break;
case 1: disp_ad3(); //処理2 ADを実施(20120920追加)
       break;
case 2: tx1byte(0x4F);  //処理3     ←ここの処理が飛ばされる
      tx1byte(0x4B);
           break;
case 3:                       //処理4
         break;
case 4:                      //処理5
           break;
}
}

上記の位置にさっきと同じポートをパタパタさせる処理を入れてみる。

4msごとにぱたぱたしているので、問題ない。

動作は問題ないようなので、上記の処理が入るたびに止まるようにブレイクポイントをいれて、

止まったときのカウント値:tmr_cnt_upを確認していく。。。

どうも、”2”だけ飛ばされてしまう。。。。

なぜか???

何度やっても同じ。

悩んでいたが。。。。わかりました。

これはLcdの表示に時間がかかりすぎていて、2カウント分消費してしまうため、飛ばされている・・

なんだか。。。。^^;

このLCDを使用するときは気を付けないといけません。

表示のための時間がかかりすぎます。

とりあえず、”2”の位置をはずして埋め込めば動作することがわかりました。

こんな感じ。。。なんか通信はできているようです。

しかし、やはり文字化けの嵐です。

 

これも追跡です。。。

かなり時間かけてやりました。

とりあえず出力波形を見る限りボーレートも、意図したデータも出力されているように見えます。

他になにか忘れているものあるのだろうか・・・・・わからん^^;

出力データは”4Fh”(”O”)、ボーレートは38.4Kbps。。。。問題ないように見える。。。

何が問題なんだろうか。。。。謎です。

 

まだまだつづく・・・・シリアル・・・・^^;

 

ま、とりあえず今日はこの辺で。。。。

おやすみなさい(^o^)/


PIC16F88を動かす。。。その29(シリアル通信をPCとやってみる2)

2012-10-20 23:37:14 | PIC16F88

こんばんわ

としぶぅ~です。

 

本日はゆっくりとした週末を送っています。

時間を見つけて昨日の続きをやりましたが、前に進まず。。。

出力は何回か出ているようです。(波形は確認済み)

しかし。。。途中でうんともすんとも言わなくなります。

デバッグしてみましたが。。。どうも、割り込みが入り続けて前に進まなくなっている?

ような動きをしています。

 

今、割り込み関係を見直しています。。。

でも出力なんですが。。。。^^;

転送バッファが一杯かどうかしか判断しないように思うんですが。。。。

ま、また少しずつ見ていきます。

 

本日はこの辺で。。。おやすみなさい(^^)/