2010年03月20日

PIC24FJ128GA006を作ってみた!

PIC24FJ128GA006を作ってみた!

* はじまり
* RTCで1秒のパルスを出力する
* マルツのPIC
* RTCの時刻あわせ


* はじまり
以前、秋月に注文したついでに (ツイデ?
PIC24FJ128GA006を買ってみた。

ホントは44ピンのPIC24FJ64GA004がよかったけど
http://akizukidenshi.com/catalog/g/gI-02522/
秋月では変換基板がなかった。

しかたないので100円の変換基板がある方の
http://akizukidenshi.com/catalog/g/gP-01989/
PIC24FJ128GA006


にした。

64ピン、Flash128kバイト、SRAM8kバイトで550円ポッキリだ。
写真で見るとでかいけど約1cm角の0.5mmピッチなので
かなり小さい。

pic24fj128ga006-qfp-pwb-all.jpg
できた。

0.6mmピッチくらいはやったことがあって0.5mmピッチは今回初。
でもやり方同じでバッチリできた。

ググると出てくるけどコツがあっておおざっぱに書くと
慣れればかなり正確に簡単に短い時間でできる。
これなら100ピンでも簡単そうだった。

今回の0.5mmピッチが大成功したことにより

く、空前のマイ面実装マイコンブーム到来は間違いないのだった。


pic24fj128ga006-qfp-pwb-wire-A.jpg
上は基板上にVDD、GNDやリセットのプルアップ抵抗、パスコン類を
最近マイブームのUEW線で配線した。

なのでこれにPICkit2からの5本の線をつなげるだけで
書込みデバッグ、動作確認ができるのだ。

上の写真には秋月で買った32.768khzのチップ水晶発振子も付けてある。


チップ部品なので超小さくて上の写真では見にくいけど
47ピンと48ピンの間にピッタリ付いている。
32.786khz-chip-xtal.jpg
1個あたり50円なので意外に良い。
これで正確な時計(RTC機能)を作ることができる。
22pFの温度補償タイプのセラミックコン、普通の大きさなのをこのあとつけた。


pic24fj128ga006-qfp-pwb-con.jpg
裏面はメス型ヘッダにしてみた。これでブレッドボード用
ワイヤが使える。

写真で大きな字の()内の数字はPICkit2の端子番号。
で、PICkit2で簡易デバッグまで動きました。 v(^^)

残念なことに「超大量のエラッタ」があるリビジョンでした。 (TT)

で、上で書いた44ピンの
PIC24FJ64GA004
http://akizukidenshi.com/catalog/g/gI-02522/
今(2010/03/e)の時点で売り切れなので次に入荷した時はエラッタ少ない
リビジョンになるはずなので要注目だ。
売切れ時の価格は450円だった。

* RTCで1秒のパルスを出力する
以下は "config-pic24fj128ga006.h"
#define setConfig1 _CONFIG1( \
    JTAGEN_OFF & \
    GCP_OFF & \
    GWRP_OFF & \
    BKBUG_OFF & \
    COE_OFF & \
    ICS_PGx1 & \
    FWDTEN_OFF & \
    WDTPS_PS1 & \
    WINDIS_OFF \
)

#define setConfig2 _CONFIG2( \
        IESO_OFF & \
        FNOSC_FRCPLL & \
        FCKSM_CSDCMD & \
        POSCMOD_NONE & \
        OSCIOFNC_ON \
        )

///// define config bits
setConfig1
setConfig2
以下は"main.c"
#include <p24Fxxxx.h>
#include "config-pic24fj128ga006.h"

#define OSCCON_SOSCEN     0x0002

typedef unsigned char byte;

/***************************
    mRTC_reg_write_enable()
 ***************************/
#define mRTC_reg_write_enable() {  \
  asm volatile("disi #5");         \
  asm volatile("mov #0x55, w7");   \
  asm volatile("mov w7, _NVMKEY"); \
  asm volatile("mov #0xAA, w8");   \
  asm volatile("mov w8, _NVMKEY"); \
  asm volatile("bset _RCFGCAL, #13");/* set the RTCWREN bit */ \
}

/***************************
    mRTC_reg_write_disable()
 ***************************/
#define mRTC_reg_write_disable()   _RTCWREN=0

/*************
    main()
 *************/
int main(void)
{
  _RCDIV0   = 0;            /* Fc=32MHz に設定 */
  /* RTC発振用インバータ有効化 */
  __builtin_write_OSCCONL( OSCCON | OSCCON_SOSCEN );
  mRTC_reg_write_enable();  /* RTC設定レジスタの書込み許可 */
  _RTCEN    = 1;            /* RTCモジュール有効化         */
  _RTCOE    = 1;            /* RTCCピン有効化              */
  mRTC_reg_write_disable(); /* RTC設定レジスタの書込み禁止 */
  _RTSECSEL = 1;            /* RTCCピンに1Hzのパルスを出す */
  //AD1PCFG = 0xffff;

  while(1){
    /* infinite loop */
  }
  return 0;
}
これでRTCCモジュールが動き出しRTCCピンに1秒(1Hz)のパルスが出る。 と、上はべた書きだけどC30のライブラリを使うと"main.c"は
#include <p24Fxxxx.h>
#include "config-pic24fj128ga006.h"
#include <rtcc.h>

/*************
    main()
 *************/
int main(void)
{
  _RCDIV0   = 0;            /* Fc=32MHz に設定             */
  //AD1PCFG = 0xffff;
  RtccInitClock();          /* RTC初期化                   */
  RtccWrOn();               /* RTC設定レジスタの書込み許可 */
  mRtccOn();                /* RTCモジュール有効化         */
  mRtccSetClockOe(1);       /* RTCCピン有効化              */
  mRtccWrOff();             /* RTC設定レジスタの書込み禁止 */
  _RTSECSEL = 1;            /* RTCCピンに1Hzのパルスを出す */
  while(1){
    /* infinite loop */
  }
  return 0;
}
となる。こっちの方が短いけどライブラリのヘルプがわかりにくくて 結局ライブラリのソースを見ることになるのだった。 * マルツのPIC マルツでもPIC24FJ128GA006は https://www.marutsu.co.jp/user/shohin.php?p=69470 550円と秋月と変わらないので今度はマルツで買ってみる。 ちなみに PIC24FJ128GA006のFlash書き換え回数は1000回なのだ。 ポートを入れ替える機能もないのでシリアル系は2個ずつあるが 排他利用なので実質1個ずつな感じだ。 PIC24FJ128GA106になるとこれらは改善されている。 * RTCの時刻あわせ ruby-serialportを使ってPCの時刻をUART経由でPICに送って時刻を合わせる。 http://ruby-serialport.rubyforge.org/ 以下が「send.rb」
# use : ruby-serialport-0.7.0.gem
# >gem install ruby-serialport
#  "serialport.so" がカレントフォルダに必要.
#
# 2010/03/27 by audin
#

require 'rubygems'
Kernel::require 'serialport'

# Send RTC adjust data to MCU throgh UART.
class Rtc

    def initialize(comNo="COM6",baud=115200)
        @fs = SerialPort.new(comNo, baud)
        #@fs.binmode
    end

    def adj
        tm = Time.now
        ts=  "mcta" + tm.strftime("%y%m%d%w%H%M%S")
        puts ts
        @fs.write ts+"\n"
    end
end

#
# example
# send ascii string
# "mcta" + 1003276185441 + '\n"
#  id    + yymmddwHHMMSS +  \n(=0x0A)
#
# commandline to execute
# 1. default com no.6
#  >ruby send.rb
#
# 2. specify com no.7
#  >ruby send.rb 7
#

if ARGV.size > 0 then
    comn = "COM"+ARGV[0]
    rtc = Rtc.new(comn)
else
    rtc = Rtc.new
end

rtc.adj
コマンドラインで
> ruby send.rb
と実行するとPCの現在時刻を送信してピタリとRTCを設定できる。 ようにPIC側も作った。 で、「require 'serialport'」でなく「Kernel::require 'serialport'」と書かないと rubyがうまく動かないのに予想外にはまりました。orz この「ruby-serialport」はバイナリデータが送れない気がする。 上は仕方ないのでASCIIで送っている。ホントはBCD形式で送りたいのだった。
posted by Copyright (C) avrin All Rights Reserved. at 21:20| Comment(0) | PIC24F系 | このブログの読者になる | 更新情報をチェックする

2010年02月01日

PIC24F:共立のバグの少ない PIC24FJ64GA002とorz

PIC24F:共立のバグの少ない PIC24FJ64GA002とorz

テクノベースのブログに最新リビジョンであることが書かれていたので助かった。

共立エレショップで購入した。
2010/01/中旬時点で既にPIC24FJ64GA002のバグの少ないリビジョンB5になっている。

製造番号は「0942JBQ」。

共立の写真と全く同じ製造番号のものが届いた。

従って現物購入時は最初の4桁が「0942」より大きければ
「リビジョンB5」になる。

MPLABで確認すると
Found PICkit 2 - Operating System Version 2.32.0
Target power not detected - Powering from PICkit 2 ( 3.25V)
PIC24FJ64GA002 found (Rev 0x3043)
PICkit 2 Ready
と、「Rev 0x3043」はリビジョン「B5」。 やったぁ〜〜〜!! これであの大量のエラッタ文書を読まなくてよいのだ。 少しだけ読めばよい。 秋月は誰かが新リビジョンになったことを確認するまで要注意だ。 で、 あらためてエラッタ表の項目をながめると自分的には あまり関係なさそうなのも多い感じなので古いPIC24Fも なんとか有効に使おうと思うのだった。 そのうちね。 (2010/02/b) 秋月PICリビジョン続報 http://piconpcb.blogspot.com/2010/01/pic.html と、 秋月も徐々に改善傾向のようだ。 この分だと通販なら意外と早くリビジョン「B5」に入れ替わるかもしれない。 要因としては上の「秋月とコラボのラトルズ本」と2009年末の後閑さんの怒濤の LCD作例にPIC24Fが使われたからだろう。 非常によい傾向だ (オイ * dsPIC33FJ64GP802のエラッタ orz 話変わって このdsPIC33FJ64GP802というマイコン結構すごいんです。 ググるとつい最近後閑さんの作例で使われたり、ほんの一部の人が目を付けている。 何が良いかというと 1,28pin DIPである。 2,SRAMが16kバイトある。 3、40MIPSをたたき出す。 4,それ以外はPIC24FJ64GA002+dsPIC機能風。 と、 「PIC24FJ64GA002を上回るクラス最強性能風なのだ」 値段は1000円くらいか。 dsPIC33FJ64GP802 http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en532310 で、このマイコンも現状ではひどいエラッタ持ちで、 「EXCH」というレジスタのスワップ命令がPLLが有効だと 正しく実行できないバグがある。 コンパイルオプションで「EXCH」を生成しないように指定する必要がある。 これ以外にもエラッタに要注意。 orz
posted by Copyright (C) avrin All Rights Reserved. at 22:19| Comment(0) | PIC24F系 | このブログの読者になる | 更新情報をチェックする

2009年12月30日

PIC:PIC24F 驚きのconst領域サイズの制限!!

PIC24F:驚きのconst領域サイズの制限!!

今回も驚愕の事実が次々と明らかになるのだった。


orz


実際問題、影響を受ける人は限られるかもしれないが。。。

*大きなconst定数確保の制限
*最大32kバイト単位に分断される
*32kバイト確保すると48kバイト消費する!!(オイオイ
*で?


*大きなconst定数確保の制限
PIC24FJ64GA002はFlash64kバイトなのでFlash領域(プログラム領域)に
大きなテーブル(50kバイトとか)が確保できるかと思い込んでいた。
たとえば、
「フォントテーブル」や「画像ファイル」を実験のため一時的にFlashにいれて
試す場合とか。

ところが
実際は最大32kバイト単位でしか定数を確保できないのだった。
(PSVウインドウからアクセスできるのが32kバイト)

これはPIC24Fの共通アーキテクチャでFlash256kバイトのPIC24Fでも
PSVのマッピングは同じで32kバイト単位でしか見えない。

*最大32kバイト単位に分断される
1つの定数領域はPSVウインドウの最大値である32kバイトが最大になる。

「最大32kバイトの定数領域を複数確保することは可能である」

ということになる。

例えば
Flash256kバイトのPIC24FJ256GB106を買ってきて
余った200kバイト全部にフォントや画像を入れる場合、
32kバイト単位で分断されるので注意が必要。
(既存のテーブルデータなら改造が必要になる)

一応オーバヘッドは増えるけどシームレスにアクセスするような
Cのコードは書ける。(配列を切り替えれば)



*32kバイト確保すると48kバイト消費する!!(オイオイ

な、な、な、なんですとっ〜〜〜っ!?

これが今回のヤマ場なんだけど、詳しくは
「C30コンパイラのマニュアル」や「PIC24Fのデータシート」を見てほしい。

お〜〜〜〜〜〜〜〜い

ざっくり言うと
「2バイト確保するごとに1バイト分、無駄領域が発生する」のだった。

プログラム領域は3バイト単位(1ワード)でアクセス可能だが
PSVウインドウを通すと下位2バイトだけしか見えなくなる。(仕様だ)
最上位1バイト分が無駄に消費されることになるのだ。


これ、知らないと目測を誤ることになる場合もあるでしょう。

32kバイトのテーブルを2つ確保すると

32kx2x1.5= 96k =32kx2 +32k(無駄容量)

と、

まるごと32kバイトのプログラム領域が無駄になるのだった。

に、にわかに信じがたい。 し、心霊現象か。

これは「const領域」ではなく「ghost領域」といっていいだろう。

ざぶとんお願い (オイ


*で?
そ、そういうことです。

で、
アセンブラレベルでは上記の問題を回避できる命令体系になっているようです。
あとは大容量のデータがコンパイラの管理外になるのでリンカレベルでの細工
をすればインラインアセンブラを使ってアクセス可能な気がします。

あとひょっとするとPSVの時よりオーバヘッドが大きくなるかも、とか
詳細は「詳細に調査」しないと分かりませんね。

誰かが「ひな型」を作れば頂くだけの気もします。


お〜〜〜い



と、いうことで、PIC24Fの注意点でした。

PIC18Fに比べればPIC24FJ64GA002は

ブッちぎりの性能なので、

よしとしよう。

350円だしね。




おしまいっ。

posted by Copyright (C) avrin All Rights Reserved. at 12:10| Comment(0) | PIC24F系 | このブログの読者になる | 更新情報をチェックする

2009年12月10日

PIC:PIC24F 共立でPIC24F販売開始

「共立」とは自分的には「共立エレショップ」のことです。

PIC24FJ64GA002 420円
http://eleshop.jp/shop/g/g9BU251/

めでたくPIC24F販売開始です。

拡大写真を見ると「0942xxx」とあるので2009年の9月生産で
かなり新しいです。写真と同じ物ならレビジョンB4以降は
間違いないはずです。

共立の良いところは1個だけカードを使って頼むなら
420円+120円(送料)で良いところ。
ただし、到着まで1週間くらいかかる。

*拡大写真ブーム
(^_^)v


*書籍の影響
共立の販売開始はやはりラトルズの基板付き書籍の影響が
大きいんじゃないかと思います。
おかで
PIC24Fユーザが増える→新規取り扱い店も増える。
→PIC24Fバグ情報も増える。
→どこで買うのが安心かわかる。
と良い傾向かと。

2010年中には落ち着くかと。

*シリコンハウス共立
http://www.siliconhouse.jp/top/index.html
ここのものを「共立エレショップ」の「ネット見積もり」を利用して
購入できるようです。

ここはPIC24F16KAシリーズもおいてあります。
これは後閑さんのところで解説が始まったnanoWatt対応のPIC。


*PIC24FxxKAシリーズ
PIC24F16KA101は待望の20ピンのPIC24F。
posted by Copyright (C) avrin All Rights Reserved. at 00:48| Comment(0) | TrackBack(0) | PIC24F系 | このブログの読者になる | 更新情報をチェックする

2009年12月07日

秋月のPIC24F値下げで350円

秋月のPIC24FJ64GA002が450円→350円に値下げされて
商品写真も最新の物に差し替えられていることをirukaさんに
教えてもらいました。

(たぶん11月の終わりか12月の1日か2日くらい?)←記録用

ぜんぜん気づかなった。
価格改定情報が分かりにくい秋月。

商品写真を見ると製造年月日が「0939xxx」なので
2009年8月の終わりに製造されたものだ。
出来たてでゆげが立ってる感じだ (ヲイ

プリント基板で作るPIC応用装置
http://piconpcb.blogspot.com/2009/11/i2c.html

の部品群を秋月がパック販売するのでクレームを避けるため
I2Cバグなしに入れ替えた可能性もあるが実際のところは購入前に
確認した方が良い。

秋月も説明文でレビジョン情報を明確にしたほうがよい。
12月以降に購入してバグ付きA3/A4レビジョンに当たれば
「秋月要注意」になってしまう。まぁデジキーも同じだが。
posted by Copyright (C) avrin All Rights Reserved. at 01:09| Comment(0) | TrackBack(0) | PIC24F系 | このブログの読者になる | 更新情報をチェックする