[][mobile][Homepage][BBS][Blog][YouTube][asablo]

過去の記事の検索が簡単にできるよ (・∀・) 例 ランチャー9
カスタム検索

PIC16F1939からPIC16F1827にマイグレーション2013/02/17 23:55:56



とある案件で開発中。納品物件はプログラムと回路図なので、ブレッドボードで開発していた。
キャラクターLCDやスイッチなどを付けることを見越して40ピンタイプのPIC16F1939を使用していたが、仕様がある程度決まって、周辺もI2Cとシリアル通信、数個のLED表示になったので、ピン数の少ないPICマイコンにマイグレーション(migration:移植)することにした。



移植先はPIC16F1827。PIC16F1939ではSSPがひとつだったのに対してこれはI2CやSPIのエンジンであるSSPグループが2つある。というわけで、ソースを少し変更することになる。
SSPxxxというレジスター名を全部SSP1xxxに置換してしまう。SSP2はUARTのピンと排他的に使うことになるので、今回は使用しなかった。

またUARTピンと重複しているのでRXDTSEL =1、TXCKSEL =1にに設定。これで、
 RB1→SDA
 RB4→SCL
 RB2→RXD
 RB5→TXD
と使えるようになった。これらの特別機能ピンを使う時は入力に切り替える。TXDだから出力と勘違いして動かなかったりした事があった。UARTやI2C設定に切り替えると自動的にポートがその機能にあった入出力に設定される。


16F1827に移植中

PORTもAとBだけになるので、それ以外の要らないポートは削除。数回エラーを取り除いたら、さほど苦労もせずにマイグレーション完了。けっこうあっさり終わるものだ。



I2Cの動作も問題なく動いている。



一日かけて、納品に耐えうるプログラムと手作り基板を作り上げたので、今まで使ったブレッドボードはこれにて役目を終える。



数十分かけて組み上げたブレッドボードは数分で分解。それと引き換えに回路図とプログラムが出来上がる。10年以上前はブレッドボードの使用に否定的だったが、今ならブレッドボード+PIC+PICkit3+USBシリアルでの構成が一番デバッグが楽でよく行う開発手法となった。資源の有効活用できるし、時間もさほど掛からない。

PICマイコンは、このPICを初めとした次世代14ビットPICであるF1000番を好んで使うようになった。書き込み速度は速いし、PICkit3でインラインでバッグができる。

PIC16F1827でも4Kワードも使えるので、#include <stdio.h>を組み込んで、

void putch(unsigned char c){
sci_PutByte(c);
}

と定義すれば、
printf("DATA=r:%5u ",sensordata[i]);

とか簡単に0~65535をUARTに出力できて便利。printfデバッグ+PICkit3によるトレースデバッグが低コストで開発期間が早い。PICに書いては動作させて、UARTからレジスタ内容を送り出す様にプログラムを書いて、デバッグを繰り返す開発だった数年前を考えると、個人宅環境で素晴らしいデバッグ環境が安価に揃うようになったものだ。


コメント

_ えむずはんず ― 2013/02/18 18:55:38

はじめまして。
tweet もまったりと楽しませていただいております。

12F676 -> 16F1823 の載せ換えは、ちょっとばかり苦労いたしました。
初期設定からタイミングから、エエカゲンにしてたのが、全部バレてしまったものですから。

ハードウエアが用意されてるのに、いつも I2C や SPI はチャートとオシロやロジアナで、直接一発コードを書いてしまうので、キッチリとバチが当ったものと思われます。(笑)

「メンドクセ」を反省して、ちゃんと、汎用ライブラリを書くことにします。(笑)

_ air_variable ― 2013/02/19 01:11:49

twitterでもどうもです。
ハードウェアI2Cは参考サイトで助かりました。
こちらにその事を紹介しています。
http://airvariable.asablo.jp/blog/2013/02/08/6716136

昔PS/2をPICを使ってソフトウェアで通信のやり取りをしましたが、
今思うと、ハードASSPを使えば簡単に行えたと思いましたw

_ えむずはんず ― 2013/02/19 18:51:57

リプライ、ありがとうございます。
URLも、メールアドレスも入れ忘れ、失礼いたしました。

それに、I2Cの件をご案内していただき、たいへんありがとうございました。
が、残念ながら、既に書き上げておりました。(笑)

K&R とは違って、自分流に、
// //////////////
// YYY proc
void xxx( int aaa )
// //////////////
{
int bbb = 10;
  if ( aaa != bbb )
  {
    return;
  }
}
てな書き方を続けていたものですから、include とか、教科書型ソースの前では、どうも敗北感(笑)
というか、小さい字がとっても辛くなっておりまする(笑)
さておき、ソースもたくさん公開されておられますので、目がゴキゲンなとき、しっかり読ませていただきます。

_ air_variable ― 2013/02/19 22:59:15

ブログを拝見しました。
光るロータリーエンコーダーいいですね。
これからも拝見させていただきます。

_ えむずはんず ― 2013/02/20 21:40:15

お粗末ながらご覧いただき、ありがとうございました。

あれは、まだBカーブが納得できてないので X なのですが、もし宜しければ他のブツのモニターなどお願いできればシアワセと、あつかましく。

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
全角で「あ」をタイプしてください。Japanese language only.

コメント:

トラックバック





Google
www Blog HP BBS


air_variableサイトをまとめて検索 
カスタム検索
[][admin][mobile][Homepage][BBS][Blog][YouTube][asablo]