jl7gmnのblog

yahooブログから移行してきました。アマチュア無線を中心としたブログです。

PIC

PICその29

いままで使用していたブラウザが調子悪くなり、WEBページ表示で落ちるようになってしまった。Google Chromeのブラウザでは、結構エラーが報告されているようだ。何度かアンインストールと再インストールを行ってみたが、相変わらずWEBページ表示(Yahoo japan)で落ちてしまう。結局WEBで対策をチェックしてみたが、どれも改善ならなかった。PCのセキュリティの影響もあるように書いているものもあったが、エラーがでるまでトラブル等は無かったので思い切ってブラウザを変更することにしました。現在はFirefoxでトラブルなしで動いています。もう少し使ってみてみようかという状態です。なので、PICは少し休憩!PCのセッティングも見直し中です。
イメージ 1

PICその28

MPLAB X IDEとXC8コンパイラーがバージョンアップしていたので、早速ダウンロードしアップディト・インストールした。(2013年6月26日(水)にアップディトされたようです。)

ちなみにそれぞれのバージョンは 以下の通りです。
MPLAB X IDE v1.85
XC 8 C Compiler V1.20

イメージ 1
MPLAB X IDE Release NotesはXC8の対応チップが全てわかるので便利!是非ともダウンロード
イメージ 2

早速、タイマー確認プログラムPIC12F683 で、XC8のアップディト後のコンパイルチェックを行いました。
イメージ 3
-------------------------------------------------------------------------------------------
Microchip MPLAB XC8 C Compiler V1.20
Copyright (C) 2013 Microchip Technology Inc.
License type: Node Configuration

:: warning: Omniscient Code Generation not available in Free mode

Memory Summary:
    Program space        used    47h (    71) of   800h words   (  3.5%)
    Data space           used     9h (     9) of    80h bytes   (  7.0%)
    EEPROM space         used     0h (     0) of   100h bytes   (  0.0%)
    Configuration bits   used     1h (     1) of     1h word    (100.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)


Running this compiler in PRO mode, with Omniscient Code Generation enabled,
produces code which is typically 40% smaller than in Free mode.
See http://microchip.com for more information.

make[2]: Leaving directory `C:/MPLAB_Project/PIC12F683_LESSON1-001.X'
make[1]: Leaving directory `C:/MPLAB_Project/PIC12F683_LESSON1-001.X'

BUILD SUCCESSFUL (total time: 10s)
Loading code from C:/MPLAB_Project/PIC12F683_LESSON1-001.X/dist/default/production/PIC12F683_LESSON1-001.X.production.hex...
Loading symbols from C:/MPLAB_Project/PIC12F683_LESSON1-001.X/dist/default/production/PIC12F683_LESSON1-001.X.production.elf...
Loading completed
-------------------------------------------------------------------------------------------
ちなみに前のバージョン1.12との比較もして見ました。以下の通りです。

Microchip MPLAB XC8 C Compiler V1.12
Copyright (C) 2012 Microchip Technology Inc.
License type: Node Configuration

:: warning: Omniscient Code Generation not available in Free mode

Memory Summary:
    Program space        used    53h (    83) of   800h words   (  4.1%)
    Data space           used     9h (     9) of    80h bytes   (  7.0%)
    EEPROM space         used     0h (     0) of   100h bytes   (  0.0%)
    Configuration bits   used     1h (     1) of     1h word    (100.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)


Running this compiler in PRO mode, with Omniscient Code Generation enabled,
produces code which is typically 40% smaller than in Free mode.
See http://microchip.com for more information.

make[2]: Leaving directory `C:/MPLAB_Project/PIC12F683_LESSON1-001.X'
make[1]: Leaving directory `C:/MPLAB_Project/PIC12F683_LESSON1-001.X'

BUILD SUCCESSFUL (total time: 14s)
Loading code from C:/MPLAB_Project/PIC12F683_LESSON1-001.X/dist/default/production/PIC12F683_LESSON1-001.X.production.hex...
Loading symbols from C:/MPLAB_Project/PIC12F683_LESSON1-001.X/dist/default/production/PIC12F683_LESSON1-001.X.production.cof...
Loading completed
-------------------------------------------------------------------------------------------
XC8 のバージョンアップするとProgram space が4.1%から3.5%に少なくなっています。最適化が少しされているのでしょうか?とにかくこんな短い簡単なプログラムでも少ないメモリで構成できれば、それに越したことは無いですね!アップディト・バージョンアップすべし!です。プログラムを考えて減らすより楽で良いです。ほんとに簡単なのは、有償バージョンにすればいい話なんですが......

とここまで順調に見えますが、実際はインストールは2回しています。1回目はオプションの設定でコンパイラをスキャンして新しいバージョンを選択した後にコンパイルがうまくいかない状態でした。プログラムデータフォルダのパスの設定がおかしくなったようでした。なので一旦削除して2回目のインストールを行って無事コンパイルOKとなっています。よくよく考えてみると、最初のアップディトの時に前のバージョンのMPLAB X IDEを削除しないでインストールしたのが、失敗の原因だったようです。2回目のインストール時には、なぜか最初のインストール時に出なかった前のバージョンを削除しろうんぬんとメッセージが出ました。
以上従来のMPLAB&コンパイル環境が変わらず設定完了というところです。

PICその27

前回のPIC12F683のTIMER0の確認で使用した回路とブレッドボード配線その他を忘備録用として記す。

確認で使用したPIC12F683と組んだ小型のブレッドボード
イメージ 1

ロジアナ接続の全体像
イメージ 3

TMR0がmainで設定されないときの出力ポートのタイミング約1.6sec
イメージ 2

TMR0を割り込みルーチン内で設定したOK時のタイミング理論計算値通り1.0sec
イメージ 4

確認で使用したPIC12F683の回路図
(確認は簡単な回路ほど良いと思う)
イメージ 5

TIMER0の使い方がほぼ前回の確認サンプルでわかった。また今回は手順はわかっても実際のプログラミング手法ではうまくいかないケースがありうることも!。サンプルプログラムはmikroCだったが、XC8ではそのままではうまくいかなかったようです。TMR0の設定値がmainルーチンで設定しているサンプルをもう少し見てみようと思う。またまだまだいろいろとタイマーの種類があるので、順次確認してみようか?!

PICその26

タイマー0の確認でサンプルプログラムを動かし本当に計算どおりに動いているかを確かめた。
なんとタイマー0の計算と全く異なる時間で動いていた。サンプルプログラムは以下(PICはPIC12F683です。)
********************************************************************************************
#include <xc.h>
static void pic_init();

// XC8 CONFIG
#pragma config FOSC = INTOSCIO  // Oscillator Selection bits (INTOSCIO oscillator
//: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN)
//#pragma config WDTE = ON        // Watchdog Timer Enable bit (WDT enabled)
#pragma config WDTE = OFF        // Watchdog Timer Enable bit (WDT enabled)
//#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config PWRTE = ON      // Power-up Timer Enable bit (PWRT disabled)
//#pragma config MCLRE = ON       // MCLR Pin Function Select bit (MCLR pin function is MCLR)
#pragma config MCLRE = OFF       // MCLR Pin Function Select bit (MCLR pin function is MCLR)
#pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)
#pragma config BOREN = ON       // Brown Out Detect (BOR enabled)
#pragma config IESO = ON        // Internal External Switchover bit
                                //(Internal External Switchover mode is enabled)
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enabled bit
                                //(Fail-Safe Clock Monitor is enabled)

unsigned int cnt;

void interrupt timing(){
    if(INTCONbits.T0IF == 1){
        INTCONbits.T0IF = 0;
        cnt++;
        if(cnt == 50){  //50:20mSECx50=1000mSec=1Sec
            cnt = 0;
            GPIObits.GP5 = ~GPIObits.GP5;
            GPIObits.GP4 = ~GPIObits.GP4;
        }
    }
}
int main(void) {
    pic_init();//PICの初期化

    cnt = 0;
    TMR0 = 100;
    INTCONbits.T0IE = 1;//Timer0 interrupt enable
    INTCONbits.GIE = 1;//Genaral interrupt enable
    while(1){
    }
}

//PICの初期化
static void pic_init(){
    OSCCON     = 0b01110000;//8MHz internal clock
    TRISIO     = 0b00000000;//ALL output
    ANSEL      = 0b00000000;//ALL Digital output
    GPIO       = 0b00000000;//GPIO 0 clear
    CMCON0     = 0b00000111;//Comparator not use
    OPTION_REG = 0b00000111;//Pull-up Enable and prs 111:1/256
}
********************************************************************************************
青色がタイマー0の主要設定にかかわる部分だが、ロジアナでの時間は1.6secである。本来なら1secでないといけない。ためしにTMR0の設定値をいろいろと変えてみたが、全く時間の変化がない状態でした。
理論計算上の待ち時間は(256-TMR0)*256*(4*(1/8MHz))なので(256-100)*256*0.5E-6=0.019968sec(≒20msec)で カウント数が50で トータル 20msec*50=1000msec(1秒)なはずなのだ。(実際の計算値は0.9984sec)
TMR0の値が書き込まれていない。つまりTMR0のカウントは初期値の256カウントをしているのか?計算してみると256と想定して 待ち時間は(256-0)*256*0.5E-6=0.032768sec  50カウントで 50*0.032768=1.6384sec なんとTMR0がやはり設定されていないようだ。サンプルプログラムではタイマー0がうまく動作していない。設定がされていない状態が分ったので、mainルーチン上のTMR0=100;を削除して、間違いなく設定されるプログラムの割り込みルーチンに書き加えることにした。
********************************************************************************************
void interrupt timing(){
    TMR0=100;
    if(INTCONbits.T0IF == 1){
        INTCONbits.T0IF = 0;
        cnt++;
        if(cnt == 50){  //50:20mSECx50=1000mSec=1Sec
            cnt = 0;
            GPIObits.GP5 = ~GPIObits.GP5;
            GPIObits.GP4 = ~GPIObits.GP4;
        }
    }
}
********************************************************************************************
上記でコンパイルしてタイマー0の動作時間を確認したところ計算どおりに動くようになりました。
XC8の場合TMR0設定はグローバル変数のようなわけにはいかないようです。?
もう少し調べてみる必要がありそうな感じだ。

PICその25

PICの回路図を記録したくて前に使っていたEAGLE CADのfreeの最新版をインストールしてみた。
CADなので100x80mmの基板まで2層パターンで作成できるものだ。前のバージョンはEAGLE ver5.4.0だったが、いまはver6.4.0になっている。しばらく使っていなかったので、回路図の描き方をわすれていたが、あちらこちら触っているうちに思い出してきた。3Dでのパーツ立体表示なぞもあったと思うが、どうやるんだっけ??状態だ。が何とかPICの回路図はかけました。フレームつけるのわすれた!これもまたどうするんだっけ状態だ。忘備録がいるな~!!
イメージ 1
EAGLE Ver6.4.0を実行したフォーム

実際の回路図作成Schematicフォーム
イメージ 2

Boardで自動パターン作成実行画面
イメージ 3

自動作成だといろいろとパターンの不満がでるが、回路図どおりに自動結線してくれるのは、見ていて楽しいですよ。実際にパターンは作成する必要はまだないが、回路図を作っているとパターはどうしても作成したくなります。ベタアースなんかもできるし、基板サイズは小さいとはいえ本格的CADだ。今回も回路図を作った後に結構な時間パターン修正で遊んで時間をとられています。ということで今回は回路図を記録しておく為のEAGLE CADでした。


アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード
アーカイブ
  • ライブドアブログ