So-net無料ブログ作成
検索選択

最近はNASにも凝っています [ネットワークHDD]

B社の3TB 都同じくB社の2TBX2にしようとしたんですがこちらの方は温度が上がりすぎ、

アクセス制限をするととってもややこしいことになりました。

このHDDは取りだしてN社のMS2000-100JPに入れました。

温度はほとんど上がらず、ファームの書き換えで引っ掛かり、

結局、アプリの削除、レジストリー の削除、Cドライブサポートソフトの削除、

本体のリセットもダメで(これは使い方がややこしかったので間違い操作をしたようです)

この後winアプリと、マイコンピュータに認識させるソフト、を入れ、

アドミを入れて別名のアドミも入れて

フォーマットRAID1組をやって 見ますと、約3時間チョイ掛かりました。

画面が暗いのが難点です 。

WS001494.JPG

3TBの分はシングルなのでRAID1に出来ません。

まあ簡単な記憶媒体向きです。

 


コメント(0) 

PICのソースの書き方 [PIC]

PICソースの書き方について考えてみました。

ファイル名 日付

PIC素子のピン配列 (普通は書きませんが有ったら便利です)

初期 定義ファイル

fuse領域の記述 (特殊定義ファイル)

テーブル領域 定義

関数ファイル群

ループやシーケンス定義

終わり

 

これらのうち 「PIC素子のピン配列」はて持ちの分で必要になるので、少しずつ書いてみます。

 

それとコメントアウトに ブロック型 /*・・*/ と 各個型 //

が有りますが、 ブロック型は 途中で /等が挟まると内容がめちゃくちゃになるので、

// に統一して行きます。

ピン配列 は 新シリーズ 16f1827 16f933 16f1939

旧シリーズ 16f628a 16f648a 16f883 16f886 16f887

小ピンシリーズ まだ手持ちを調べたい無いのですが 4種類ほど

外部ICなどは無しの自己完結型 で行く分です。

 

それと、技術的質問や討論は歓迎ですが、 自分で勉強しろとか、他の書籍を読め、買え、(大概はアフリエイトが絡んでいます)、

この様な場合はそこの言葉や文章、を拝借して反論 するというスタンスでいます。

自分で判ることは返事をし、わから無いことは判らないと書きますので 、それでご勘弁下さい。


コメント(0) 

お習字 [PIC]

PICでお習字のように、お勉強を・・

etcさんの 

フルカラーLED(色設定ユニット

元は16f88 ですが mikroC にて作られています。

現在では 古いタイプのPICは入手しにくく、mikroC-PRO の方に換わっています。

そこで入手しやすい16f1827に置き換えてみました、18pinタイプですと配置も同じです。

16f88           
1    AN2/CVREF/        VR_10k    in
2    RA3/AN3/VREF+/    VR_10k    in
3    RA4/AN4/T0CKI/    VR_10k    in
4    RA5/MCLR/VPP    SW1_10k    in
5    VSS    GND   
6    RB0/INT/CCP1(1)       
7    RB1/SDI/SDA        E    out
8    RB2/SDO/RX/DT    R/W    out
9    RB3/PGM/CCP1(1)    RS    out
           
18    RA1/AN1            LED_B_75    out
17    RA0/AN0            LED_R_300    out
16    RA7/OSC1/CLKI    LED_G_133    out
15    RA6/OSC2/CLKO        sp
14    VDD    5v   
13    RB7/AN6/PGD/    D7_LCD    out
12    RB6/AN5/PGC/    D6_LCD    out
11    RB5/SS/TX/CK    D5_LCD    out
10    RB4/SCK/SCL        D4_LCD    out

16f1827                               
1    RA2    AN2            VR_10k    in
2    RA3    AN3            VR_10k    in
3    RA4    AN4            VR_10k    in
4    RA5/MCLR/VPP    SW1_10k    in       
5    VSS/GND   
6    RB0   
7    RB1                E    out   
8    RB2                R/W    out           
9    RB3                RS    out           
                                   
18    RA1                LED_B_75    out   
17    RA0                LED_R_300    out           
16    RA7                LED_G_133    out   
15    RA6                    sp           
14    VDD/5
13    RB7/PGD            D7_LCD    out       
12    RB6/PGC            D6_LCD    out       
11    RB5                D5_LCD    out       
10    RB4                D4_LCD    out       
 

//*********************************************************************
//
//           『LEDフルカラー』 (Shift_Jis)
//    16f88 to 16f1827
//     1    RA2    AN2            VR_10k    in   18    RA1                LED_B_75    out   
//     2    RA3    AN3            VR_10k    in   17    RA0                LED_R_300    out   
//     3    RA4    AN4            VR_10k    in   16    RA7                LED_G_133    out   
//     4    RA5/MCLR/VPP    SW1_10k    in     15    RA6                    sp           
//     5    VSS/GND                         14    VDD/5
//     6    RB0                             13    RB7/PGD            D7_LCD    out       
//     7    RB1                E    out         12    RB6/PGC            D6_LCD    out       
//     8    RB2                R/W    out         11    RB5                D5_LCD    out       
//     9    RB3                RS    out         10    RB4                D4_LCD    out       
//
//
//
//
//
//********************************************************************

// LCD module connections //この部分が 新しい LCD ポート設定です
        sbit LCD_RS at RB3_bit;
        sbit LCD_EN at RB1_bit;
        sbit LCD_D4 at RB4_bit;
        sbit LCD_D5 at RB5_bit;
        sbit LCD_D6 at RB6_bit;
        sbit LCD_D7 at RB7_bit;

        sbit LCD_RS_Direction at TRISB3_bit;
        sbit LCD_EN_Direction at TRISB1_bit;
        sbit LCD_D4_Direction at TRISB4_bit;
        sbit LCD_D5_Direction at TRISB5_bit;
        sbit LCD_D6_Direction at TRISB6_bit;
        sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections


#define                LED_R        RA0_bit //100*3
#define                LED_G        RA7_bit //100*4
#define                LED_B        RA1_bit //100*7

#define                SW1                  RA5_bit
#define                SW2                  RB0_bit

#define                ON                 0
#define                OFF                  1



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

static          unsigned          short        pwm_cnt, led_R, led_G, led_B;

void        interrupt()        // 約0.128msec周期
{
        static          short        onFlg, offFlg;
        //
        INTCON.T0IF = 0;
        //
        onFlg  = (SW1 == 1) ? 0 : 1;
        offFlg = (SW1 == 1) ? 1 : 0;
        //
        LED_R = (pwm_cnt <= led_R) ? onFlg : offFlg;
        LED_G = (pwm_cnt <= led_G) ? onFlg : offFlg;
        LED_B = (pwm_cnt <= led_B) ? onFlg : offFlg;
        //約12.8msec(78Hz)
        if (pwm_cnt < 100)
                pwm_cnt++;
        else
                pwm_cnt = 1;
}

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

void        main()
{
        static          char          buf[10];
        //
        OSCCON = 01110010;              // クロックは8Mhz
//          CMCON  = 0b00000111;          // レジスタ名変更、コンパレータは使用しない。
        CM1CON0.C1ON = 0;
        CM2CON0.C2ON = 0;
        ANSELA          = 0x1C;         // A/D変換を使用する。 00011100
        ANSELB          = 0x00;         // A/D変換を使用する。 00000000
        TRISA  = 0x7C;          //
        TRISB  = 0x01;          //
       
        Lcd_Init();                  // Initialize LCD
        Lcd_Cmd(_LCD_CLEAR);         // Clear display
        Lcd_Cmd(_LCD_CURSOR_OFF);     // Cursor off

//          Lcd_Cmd(LCD_CURSOR_OFF);
//          Lcd_Cmd(LCD_CLEAR);
        Lcd_Chr(1, 2, 'R');
        Lcd_Chr(1, 6, 'G');
        Lcd_Chr(1, 10, 'B');
       
        // TIMER0の設定
        INTCON.T0IE = 1;
        INTCON.T0IF = 0;
        OPTION_REG.T0CS = 0;
        OPTION_REG.PSA = 1;
        OPTION_REG.PS0 = 0;
        OPTION_REG.PS1 = 0;
        OPTION_REG.PS2 = 0;
        TMR0 = 0;
        //
        pwm_cnt = 1;
        led_R = 50;
        led_G = 50;
        led_B = 50;
        // 割り込みを許可する。
        INTCON.PEIE = 1;
        INTCON.GIE = 1;
        //
        while (1) {
                led_R = (double)Adc_Read(2) / 10.13;
                led_G = (double)Adc_Read(3) / 10.13;
                led_B = (double)Adc_Read(4) / 10.13;
                //
                ByteToStr(led_R, buf);
                Lcd_Out(2, 1, buf);
                ByteToStr(led_G, buf);
                Lcd_Out(2, 5, buf);
                ByteToStr(led_B, buf);
                Lcd_Out(2, 9, buf);
                //
                Delay_ms(10);
        }
}//~!

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


WS001479.JPG

lcdライブラリーが換わった分や内部レジスタ名などを変更すると、無事コンパイルできました。

(実際には動作させていませんので、プログラムが合っているかは判りません)

 


 


コメント(0) 

mikroPROC ビット素子の記述実験 [PIC]

こんにちは

etcさんの

 PIC UpDownカウンタ サンプル (mikroPROCでコンパイルできました)

#define		CLEAR		(tmp.F5 == 0) を

#define            CLEAR        (RA5_bit == 0) の様に書き換える実験をしました。

リストのほとんどは拝借したものですが、ビット記述の部分と64進カウンタを変化させています。

//**********************************************************************
//7UpDownカウンタ.c
#define            LED                 RA2_bit
#define            UP                (RA3_bit == 0)
#define            DOWN         (RA4_bit == 0)
#define            CLEAR        (RA5_bit == 0)

//#define                                                                 //AN9        RB3 A
//#define                                                                 //c1-        RA0 A ansela
//#define                                                                 //c2-        RA1 A
//#define                                                                 //c1+        RA2 A
//#define                                                                 //c2+        RA3 A
//#define                                                                 //C1OUT        RA4
//#define                                                                 //C2OUT        RA5
//#define                                                                 //CCP2        RC1
//#define                                                                 //CCP1        RC2

//#define                                                                //LATA
//#define                                                                //LATB
//#define                                                                //LATC
//#define                                                                //LATD(1)
//#define                                                                //LATE(1)

//**********************************************************************
void ADC_Init();
//ADC_Init();  // Initialize ADC module with default settings
unsigned ADC_Get_Sample(unsigned short channel);
unsigned adc_value;
//...
//adc_value = ADC_Get_Sample(2);          // read analog value from ADC module channel 2
unsigned ADC_Read(unsigned short channel);
unsigned tmp;
//...
//tmp = ADC_Read(2);        // Read analog value from channel 2

unsigned int temp_res;

void intmain() {
        ANSELA = 0x0F;
        ANSELB = 0x00;
       
        CM1CON0.C1ON = 1 ; //
        CM2CON0.C2ON = 1 ; // にしてコンパレータを許可し、
        CM1CON0.C1OE = 1 ; //
        CM2CON0.C2OE = 1 ; // にしてコンパレータ出力を許可し、
        CM1CON0.C1SP = 0 ; //
        CM2CON0.C2SP = 0 ; //にして
        CM1CON0.C1HYS =0 ; //
        CM2CON0.C1HYS =0 ; //
        APFCON.C2OUTSEL =0 ; // にして RA5にきり換えます       
       
        TRISA = 0x9F ;
        TRISB = 0x03 ;
        TRISC = 0xF8 ;


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

static                unsigned          char                segIndex, seg0, seg1, seg2, seg3, flg10000;

void        interrupt()
{
        if (INTCON.T0IF == 1) {
                INTCON.T0IF = 0;
                //
        switch (segIndex) {
        case 3:
                PORTB = seg3;
                RA0_bit = 1;
                RA1_bit = 1;
                RA6_bit = 0;
                RA7_bit = 1;
                segIndex = 0;
                break;
        case 2:
                PORTB = seg2;
                RA0_bit = 1;
                RA1_bit = 1;
                RA6_bit = 1;
                RA7_bit = 0;
                segIndex++;
                break;
        case 1:
                PORTB = seg1;
                RA0_bit = 0;
                RA1_bit = 1;
                RA6_bit = 1;
                RA7_bit = 1;
                segIndex++;
                break;
        case 0:
                PORTB = seg0;
                RA0_bit = 1;
                RA1_bit = 0;
                RA6_bit = 1;
                RA7_bit = 1;
                segIndex++;
                break;
                }
        }
if (PIR1.TMR1IF == 1) {
        PIR1.TMR1IF = 0;
        if (flg10000 == 0)
                LED = ~LED;
        else
                LED = 1;
        }
}

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

static                        unsigned                  char                        segmentTbl[13] = {
                0b00100001,            // 0
                0b11100111,            // 1
                0b00110100,            // 2
                0b10100100,            // 3
                0b11100010,            // 4
                0b10101000,            // 5
                0b00101000,            // 6
                0b11100001,            // 7
                0b00100000,            // 8
                0b10100000,            // 9
                0b11111110,            // -
                0b00000000,            // all-on
                0b11111111,            // all-off
};


unsigned        char        ChangeSegData(unsigned                char          c)
{
        switch (c) {
        case '0':
                return (segmentTbl[0]);
                break;
        case '1':
                return (segmentTbl[1]);
                break;
        case '2':
                return (segmentTbl[2]);
                break;
        case '3':
                return (segmentTbl[3]);
                break;
        case '4':
                return (segmentTbl[4]);
                break;
        case '5':
                return (segmentTbl[5]);
                break;
        case '6':
                return (segmentTbl[6]);
                break;
        case '7':
                return (segmentTbl[7]);
                break;
        case '8':
                return (segmentTbl[8]);
                break;
        case '9':
                return (segmentTbl[9]);
                break;
        case '-':
                return(segmentTbl[10]);
                break;
        case '*':
                return(segmentTbl[11]);
                break;
        case ' ':
                return(segmentTbl[12]);
                        break;
        }
}

void        main()
{
                static                unsigned          int           cnt;
                static                unsigned          char                buf[10], tmp, tmp1, tmp2;
                //
//                        CMCON = 0b00000111;         // コンパレータは使用しない。
//                TRISA = 0b00111000;            // PORTAのモードを背呈する。
//                TRISB = 0b00000000;            // PORTBのモードを背呈する。
                //
                INTCON.GIE = 0;            // 割り込みを無効にする。
                INTCON.PEIE = 1;        // Peripheral Interrupt Enable
                // タイマー0を設定する。
                INTCON.T0IE = 1;        // TMR0 Overflow Interrupt Enable
                INTCON.T0IF = 0;        // TMR0 Overflow Interrupt Flag
                OPTION_REG.T0CS = 0;
                OPTION_REG.PSA = 0;
                OPTION_REG.PS0 = 0;
                OPTION_REG.PS1 = 1;
                OPTION_REG.PS2 = 0;
                TMR0 = 0;
                // タイマー1を設定する。
                PIE1.TMR1IE = 1;        // TMR1 Overflow Interrupt Enable
                PIR1.TMR1IF = 0;        // TMR1 Overflow Interrupt Flag          
                T1CON.T1CKPS0 = 1;
                T1CON.T1CKPS1 = 1;
                T1CON.TMR1ON = 1;
                //
                segIndex = 0;
                // 保存されたデータを読み込む
                tmp1 = Eeprom_Read(0);
                Delay_ms(20);
                tmp2 = Eeprom_Read(1);
                Delay_ms(20);
                cnt = (tmp2 << 8) | tmp1;
                cnt = (cnt > 19999) ? 0 : cnt;
                // 表示データをセットする。
                IntToStr(cnt, buf);
                flg10000 = (buf[1] == '1') ? 1 : 0;
                seg3 = ChangeSegData(buf[2]);
                seg2 = ChangeSegData(buf[3]);
                seg1 = ChangeSegData(buf[4]);
                seg0 = ChangeSegData(buf[5]);
                //
                INTCON.GIE = 1;            // これ以降の処理で割り込みを許可する。
                //
        while(1) {
                tmp = PORTA;
//                        if (UP | DOWN | CLEAR) {                  // スイッチの押下をチェックする。
                        if (UP) {
                                if (cnt < 64) {
                                        cnt++;
                                }         else         {
                                        cnt = 0;
                                }
                        }
                        if (DOWN) {
                                if (cnt > 0)
                                        cnt--;
                                }         else         {
                                        cnt = 63;
                        }                       
                        if (CLEAR) {
                                        cnt = 0;
                        }
        // データを保存する。
                        Eeprom_Write(0, cnt & 0xFF);
                        Delay_ms(20);
                        Eeprom_Write(1, (cnt >> 8) & 0xFF);
                        Delay_ms(20);
                        //
//                                while (UP | DOWN | CLEAR) {
                                        tmp = PORTA;
                                        Delay_ms(1);
                //}
                        // 表示データをセットする。
                        IntToStr(cnt, buf);
                        flg10000 = (buf[1] == '1') ? 1 : 0;
                        seg3 = ChangeSegData(buf[2]);
                        seg2 = ChangeSegData(buf[3]);
                        seg1 = ChangeSegData(buf[4]);
                        seg0 = ChangeSegData(buf[5]);
                //}
        }
}

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

WS001477.JPG

稲崎さま勝手に使わせて頂いて済みません。 

mikrocPRO(名前が違っていました)
PWMとADCのライブラリーはありますが、
comparatorは有りません。
特に16f1933は C2OUT を RA0とRA5に切り替えが出来、APFCON:C2OUTSEL =0 にして RA5にきり換えます。
CM1CON0:C1ON = 1 CM2CON0:C2ON = 1 にしてコンパレータを許可し、
CM1CON0:C1OE = 1 CM2CON0:C2OE = 1 にしてコンパレータ出力を許可し、
CM1CON0:C1SP = 0 CM2CON0:C2SP = 0 にして
CM1CON0:C1HYS = ? CM2CON0:C1HYS = ?
コンパレータヒステリシスを最小にします、<<1mV
?にはレベルの説明がありません。
またクロックと同期しないように、
CM1CON0:C1SYNC = 0 CM2CON0:C2SYNC = 0
trisa = XXXX1111 にして入力にし、
コンパレータの割り込みは考えていませんが、
これによって、出来ればA、/A、B、/B の遮断も考えています。
ADC モジュールへ供給するリファレンス電圧 は
FVRCON:ADFVR<1:0> = 01 1.024v または 10 2.048v にします。
AD06 の1.024v問題 は
D003 VADFVR Fixed Voltage Reference Voltage
-6 446644 % 1.024V, VDD ? 1.8V, 85°C
Vdd    が1.8v以上でないとという項目と関係するのではないかと思っています。

今後のエラッタ に注目です。

他にも

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

#define            CLEAR1           (RA.5 == 0)
#define            CLEAR             (RA4_bit == 0)
void main() {
     PORTA.F5 = 1;
     RA4_BIT = 1;
}

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

なんてのも有りです。

宣言と実行の形式が違う所には戸惑います。


コメント(0) 

mikroPROC で 16f1933の プログラムを作りました。 [PIC]

 mikroPROC で 16f1933の プログラムを作れまして、エラーは出ませんでしたが、

ちゃんと動作するか自信がありません。

最初の部分はjalv2で書き、後にC言語の部分を繋いで、ダブったりエラーになる所を、

コメントアウトで切り捨てると、何とかここまで漕ぎ着けました。

内容は2bitの信号から64進の可逆カウンタを動作させるもので表示などはまだ付けていません。

日本語コメントはUTF8にしましたが表示は出来ていません 。

//*******************************************************************
//16f11933
//
// (unspecified configuration bits may cause a different frequency!)
//? pragma target clock 38_000_000            // oscillator frequency
// configuration memory settings (fuses)
//? pragma target OSC    INTOSC_NOCLKOUT        // intosc
//? pragma target PLLEN     P4            // PLL on
//? pragma target WDT        disabled    // no watchdog
//? pragma target DEBUG     disabled    // no debugging
//? pragma target LVP        disabled    // no Low Voltage Programming
//? pragma target MCLR        reset externally    // reset externally

//
// Switch analog ports to digital mode (if analog module present).

//? procedure set_digital_io() is
//?        pragma inline
//?        analog_set()
//?        adc_set()
//?        comparator_on()
//? end procedure
//
//? FVRCON = 0b1000_0001 //ADC-9 で1.024vとして使う

//? pin_C12IN0_NEG_direction     =  input
//? pin_C12IN1_NEG_direction     =  input
//? pin_C2IN_POS_direction         =  input
//? pin_C1IN_POS_direction         =  input
//? pin_C1OUT_direction          =  output
//? pin_C2OUT_RA5_direction         =  output
//? pin_B0_direction             =  output
//? pin_B1_direction             =  output
//? pin_B2_direction             =  output
//? pin_AN9_direction             =  input
//? pin_B4_direction             =  output
//? pin_B5_direction             =  output
//? pin_B6_direction             =  output
//? pin_B7_direction             =  output
//? pin_P2A_RC1_direction         =  output
//? pin_CCP1_direction             =  output

// These configuration bit settings are only a selection, sufficient for
// this program, but other programs may need more or different settings.
//
//? set_digital_io()  //not         // make all pins digital I/O
//
// Specify the pin to which the LED is connected.
// A low current (2 mA) led with 2.2K series resistor is recommended
// since not all pins may be able to drive an ordinary 20mA led.
//? alias            led     is pin_C3
//? pin_C3_direction =      output
//

//  PORTB
#define     LED     PORTC.F3
#define     UP        (PORTB.F3 == 0)
#define     DOWN    (PORTB.F4 == 0)
#define     CLEAR    (PORTB.F5 == 0)

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

static     unsigned     char    segIndex, seg0, seg1, seg2, seg3, flg10000;

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

void     main()
{
     static    unsigned     int     cnt;
     static    unsigned     char     buf[10], PORTB, PORTB1, PORTB2;
     //
//?     ADCON0 = 0b0100_1011     // CHS9 = 01001 enable ADC
//?     ADCON1 = 0b0000_0000
     CM1CON0 = 0b00000111;     // コンパレータは使用しない。
     CM1CON1 = 0b00000111;
//?     CM1CON0 = 0b1110_0110  // enable comparator
//?     CM1CON1 = 0b0000_0000
//?     CM2CON0 = 0b1110_0110     // enable 2nd comparator
//?     CM2CON1 = 0b0000_0001
     // コンパレータは使用しない。
     TRISA = 0b00111000;      // PORTAのモードを背呈する。
     TRISB = 0b00000000;      // PORTBのモードを背呈する。
//?         ANSELA = 0b0001_1111     // all analog
//?         ANSELB = 0b0000_0111     // all digital
     //
     INTCON.GIE = 0;         // 割り込みを無効にする。
     INTCON.PEIE = 1;     // Peripheral Interrupt Enable
     // タイマー0を設定する。
     INTCON.T0IE = 1;     // TMR0 Overflow Interrupt Enable
     INTCON.T0IF = 0;     // TMR0 Overflow Interrupt Flag
     OPTION_REG.T0CS = 0;
     OPTION_REG.PSA = 0;
     OPTION_REG.PS0 = 0;
     OPTION_REG.PS1 = 1;
     OPTION_REG.PS2 = 0;
     TMR0 = 0;              
     // タイマー1を設定する。
     PIE1.TMR1IE = 1;     // TMR1 Overflow Interrupt Enable
     PIR1.TMR1IF = 0;     // TMR1 Overflow Interrupt Flag
     T1CON.T1CKPS0 = 1;
     T1CON.T1CKPS1 = 1;
     T1CON.TMR1ON = 1;
     //
     segIndex = 0;
     // 保存されたデータを読み込む
//?     PORTB1 = Eeprom_Read(0);
     Delay_ms(20);
//?     PORTB2 = Eeprom_Read(1);
     Delay_ms(20);
//?     cnt = (PORTB2 << 8) | PORTB1;
     cnt = (cnt > 64) ? 0 : cnt;
     // 表示データをセットする。
     IntToStr(cnt, buf);
     flg10000 = (buf[1] == '1') ? 1 : 0;
//?     seg3 = ChangeSegData(buf[2]);
//?     seg2 = ChangeSegData(buf[3]);
//?     seg1 = ChangeSegData(buf[4]);
//?     seg0 = ChangeSegData(buf[5]);
     //
     INTCON.GIE = 1; // これ以降の処理で割り込みを許可する。
     //
     while(1) {
//?     tmp = PORTB;
     if (UP | DOWN) {     // スイッチの押下をチェックする。
     if (UP) {
     if (cnt < 64)
     cnt++;
     cnt = 0;
     }
     if (DOWN) {
     if (cnt > 0)
     cnt--;
     cnt = 63;
     }
     }
     }
}

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

随分デタラメなソースですがエラーは出ていません。

WS001465.JPG

 


コメント(3) 

pickit2 のバージョンアップが出来ました。 [PIC]

MPLABが最新版になるにつれpickit2が使えなくなり、pickit3がお勧めのようです。

しかしうちではpickit2が2個有るので新たに買い換えるのももったいないので、

調べてみますと、pickit3のダウンロードの近辺に決め手のファイルがありました。

Dvicefile1.62.14(zip) と PK2DFUpdate-1-62-14.zip をダウンロードして

解凍すると PK2DeviceFile.dat と setup.exe (PICkit2Setup.msi)に成ります。

古い分は適当にリネームして 同じホルダに入れておいて setup.exe を実行しますと

デバイスファイルとファームウエアが同時にバージョンアップされ、

helpのaboutバージョンの確認が出来ます。

WS001462.JPG

WS001463.JPG

これで、pickit2単独プログラムから、ミッドレンジ、1.8vまでを選択しますと

サポートされるデバイスも増えて、16f1933の書き込みが出来るようになりました。

WS001464.JPG

PCに入れるpickit2のスタンドアローン、アプリケーションは PK2V023200.zip をインストールします。

 

 

 


コメント(0) 

C言語のコンパイル [PIC]

言語コンパイル 成功したり失敗したりします。

コンパイルモデルを読み込んで、コンパイルしますと成功。

このホルダーコピーを作り、 mcw,mcp,c を残して削除、

プロジェクトウイザードから必要な項目ををセットUP。

WS001425.JPG

こうするとドライバーの最後にxc8.exeが付きます。

(\Program Files\Microchip\xc8\v1.01\bin\xc8.exe を指します)

(Program Files\Microchip\xc8\v1.01\include\ には htc.h や xc.h が含まれています)

_LEGACY_HEADERS を付けておくと 以前のヘッダーからも参照するようです

WS001422.JPG

MOVEUPを押すと上に上がります。(上がって意味があるかは判りません)

これをコンパイルしますと、成功。(しかし.HEXは出来ていません、なにかのSWをチェックしていないようです)

もう一度最初のモデルに戻り、 mcp から起動すると コンパイルは失敗。

((924) missing argument to "-D" option
(908) exit status = 1) の表示が出ます。

この時ドライバーにはXC8がありませんでした。

WS001430.JPG

この後コピーの分をコンパイルすると失敗です。

マジックワードの「_LEGACY_HEADERS」は両方で使っています。

WS001423.JPG

WS001427.JPG

WS001431.JPG

この違いは何なんでしょう?

追加 成功に変える方法を見つけました、次の画像の操作を経ると、

sacs.JPG

別の部分からXC8 が追加されて認識されるようです。

WS001432.JPG

最近見つけたんですが、8bit版だからと、間違ったヘッダー名を指定していました。

WS001447.JPG

こうすると、成功率がぐっと上がりました。

 

この後 「MPLABX」を試してみました、

WS001409.JPG

WS001410.JPG

WS001411.JPG

WS001412.JPG

やっぱりもっと説明書を読まないと・・


コメント(0) 

16f1933に変更するための jalv2とC [PIC]

//chgjal1933counta.c

//**********************************************************************
//16f11933
//
// (unspecified configuration bits may cause a different frequency!)
//? pragma target clock 38_000_000                    // oscillator frequency
// configuration memory settings (fuses)
//? pragma target OSC                    INTOSC_NOCLKOUT                                        // intosc
//? pragma target PLLEN         P4                              // PLL on
//? pragma target WDT                    disabled                   // no watchdog
//? pragma target DEBUG         disabled                     // no debugging
//? pragma target LVP                    disabled                   // no Low Voltage Programming
//? pragma target MCLR                    reset externally               // reset externally

//
// Switch analog ports to digital mode (if analog module present).

//? procedure set_digital_io() is
//?              pragma inline
//?              analog_set()
//?              adc_set()
//?              comparator_on()
//? end procedure
//
//? FVRCON = 0b1000_0001 //ADC-9 で1.024vとして使う

//? pin_C12IN0_NEG_direction              =  input
//? pin_C12IN1_NEG_direction              =  input
//? pin_C2IN_POS_direction              =  input
//? pin_C1IN_POS_direction              =  input
//? pin_C1OUT_direction               =  output
//? pin_C2OUT_RA5_direction              =  output
//? pin_B0_direction                  =  output
//? pin_B1_direction                  =  output
//? pin_B2_direction                  =  output
//? pin_AN9_direction                  =  input
//? pin_B4_direction                  =  output
//? pin_B5_direction                  =  output
//? pin_B6_direction                  =  output
//? pin_B7_direction                  =  output
//? pin_P2A_RC1_direction              =  output
//? pin_CCP1_direction                  =  output

// These configuration bit settings are only a selection, sufficient for
// this program, but other programs may need more or different settings.
//
//? set_digital_io()  //not                                             // make all pins digital I/O
//
// Specify the pin to which the LED is connected.
// A low current (2 mA) led with 2.2K series resistor is recommended
// since not all pins may be able to drive an ordinary 20mA led.
//? alias            led                is pin_C3
//? pin_C3_direction =                    output
//

//  PORTB
#define                          LED                                         PORTC.F3
#define                          UP                                          (PORTB.F3 == 0)
#define                          DOWN                                  (PORTB.F4 == 0)
#define                          CLEAR                                    (PORTB.F5 == 0)

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

static            unsigned                    char                        segIndex, seg0, seg1, seg2, seg3, flg10000;

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

void                              main()
{
            static                    unsigned                int                         cnt;
            static                    unsigned                char                  buf[10], PORTB, PORTB1, PORTB2;
            //
//?              ADCON0 = 0b0100_1011                     // CHS9 = 01001 enable ADC
//?              ADCON1 = 0b0000_0000
            CM1CON0 = 0b00000111;                                                       // コンパレータは使用しない。
            CM1CON1 = 0b00000111;
//?              CM1CON0 = 0b1110_0110                  // enable comparator
//?              CM1CON1 = 0b0000_0000
//?              CM2CON0 = 0b1110_0110                  // enable 2nd comparator
//?              CM2CON1 = 0b0000_0001
                                                                 // コンパレータは使用しない。
            TRISA = 0b00111000;                                                      // PORTAのモードを背呈する。
            TRISB = 0b00000000;                                                      // PORTBのモードを背呈する。
//?              ANSELA = 0b0001_1111                     // all analog
//?              ANSELB = 0b0000_0111                     // all digital
            //
            INTCON.GIE = 0;                                                                             // 割り込みを無効にする。
            INTCON.PEIE = 1;                                                                    // Peripheral Interrupt Enable
            // タイマー0を設定する。
            INTCON.T0IE = 1;                                                                    // TMR0 Overflow Interrupt Enable
            INTCON.T0IF = 0;                                                                    // TMR0 Overflow Interrupt Flag
            OPTION_REG.T0CS = 0;
            OPTION_REG.PSA = 0;
            OPTION_REG.PS0 = 0;
            OPTION_REG.PS1 = 1;
            OPTION_REG.PS2 = 0;
            TMR0 = 0;              
            // タイマー1を設定する。
            PIE1.TMR1IE = 1;                                                                    // TMR1 Overflow Interrupt Enable
            PIR1.TMR1IF = 0;                                                                    // TMR1 Overflow Interrupt Flag           
            T1CON.T1CKPS0 = 1;
            T1CON.T1CKPS1 = 1;
            T1CON.TMR1ON = 1;
            //
            segIndex = 0;
            // 保存されたデータを読み込む
//?              PORTB1 = Eeprom_Read(0);
            Delay_ms(20);
//?              PORTB2 = Eeprom_Read(1);
            Delay_ms(20);
//?              cnt = (PORTB2 << 8) | PORTB1;
            cnt = (cnt > 64) ? 0 : cnt;
            // 表示データをセットする。
            IntToStr(cnt, buf);
            flg10000 = (buf[1] == '1') ? 1 : 0;
//?                 seg3 = ChangeSegData(buf[2]);
//?                 seg2 = ChangeSegData(buf[3]);
//?                 seg1 = ChangeSegData(buf[4]);
//?                 seg0 = ChangeSegData(buf[5]);
            //
            INTCON.GIE = 1;               // これ以降の処理で割り込みを許可する。
            //
            while(1) {
//?                            tmp = PORTB;
                        if (UP | DOWN) {                    // スイッチの押下をチェックする。
                                      if (UP) {
                                                  if (cnt < 64)
                                                            cnt++;
                                                            cnt = 0;
                                      }
                                      if (DOWN) {
                                                  if (cnt > 0)
                                                            cnt--;
                                                            cnt = 63;
                                      }
                        }
            }
}

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

まだjalv2とCが共存していて、jalv2はコメントアウトしています。
コメント(0) 

MPLAB リベンジ [PIC]

こんにちは

先日MPLABをバージョンアップをしてから、上手くコンパイルしなくなりました。

その直前に、バビロン が勝手に出てきて 困っていたので完全に削除、

そのほか名前を忘れたんですがもう一つのも完全削除、

そのほかHDDが空きが少なくなって、チェックが出るようになり、

それらが原因かと思って、HDDの不要なバックUPを削除、これによりHDDのチェックは出なく成るも

やはり、MPLAB はコンパイルエラーを出します。

これらの解決に役立ったURLを先に挙げておきます。

TG6月号は拡張ミッドレンジシリーズpicの内部構成を知るのだけに役立ちました。

マイコミのPマイコンのKは内容が理解できませんでした。

PICで遊ぶ電子工作
http://homepage3.nifty.com/mitt/pic/index.html
作りながら学ぶPICマイコン入門
http://mycomputer.cqpub.co.jp/pic006/2005/04/post_f468.html
PICマイコンをHI- TECH Cで動かす
http://www.eleki-jack.com/mycom2/2011/08/pichi_tech_c1.html
から6まで
エアーバリアブル
http://airvariable.asablo.jp/blog/2012/05/15/6446451
パレットソフト
http://www.palettesoft.co.jp/technology/pic/etc/pic16f1823/pic_16f1823.htm

MPLAB IDE V8.63 と HI-TECH C V9.81
MPLAB IDE v8.86 ?
http://www.microchip.com/Microchip.WWW.SecureSoftwareList/secsoftwaredownload.aspx?device=en019469&lang=en&ReturnURL=http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part=SW007002#
MPLAB XC8 C Compiler ?
http://www.microchip.com/mplabxc8windows
MPLAB[レジスタードトレードマーク] X IDE v1.30
http://www.microchip.com/mplabx-ide-windows-installer
HI-TECH C Archive
ftp://ftp.microchip.com/
HI-TECH C for PIC10-12-16 (Standard v7.76-9.60)
ftp://ftp.microchip.com/HI-TECH%20C%20for%20PIC10-12-16%20%28Standard%20v7.76-9.60%29/
HI-TECH C for PIC10-12-16 (PRO and Standard)
ftp://ftp.microchip.com/HI-TECH%20C%20for%20PIC10-12-16%20%28PRO%20and%20Standard%29/

WS001408.JPG

ソース
ステッピングモータの制御
http://homepage3.nifty.com/mitt/pic/xc8/xc8_887_02.html

プロジェクトウイザードで「pic16f887」を選び
コンパイラを「MPLAB XC8 C Compiler」として
「C:\Program Files\Microchip\xc8\v1.01\bin\xc8.exe」を確認して、

決めたホルダ「motoru」に
プロジェクト「stepper.mcp」を作り、
ソースファイルに「motor_RL.c」を指定
コンフィギュアーセッティングでエディターにhidemaruを選び、
文字コードをシフトJISを選びます(hidemaru、ファイルで設定)

WS001424.JPG

バージョンの違いを避ける工夫
http://www.eleki-jack.com/mycom2/2011/08/pichi_tech_c1.html
プロジェクト、ビルドオプション、プロジェクト、ADD
_LEGACY_HEADERSのマクロ定義をして「適用」「OK」として、
以前のヘッダ・ファイルも参照され、エラーが避けられます。

これをしてからコンパイルしますと、
無事コンパイルエラーが無くなりました。

WS001422.JPG

WS001423.JPG

不思議なものも存在する。

WS001413.JPG

WS001414.JPG

次は16f1XXXで試してみます。 

 


コメント(0) 
メッセージを送る

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。