2015年11月29日日曜日

ER34 ドアロックアクチュエータ修理

いよいよドアロックがうまくかからなくなってきた。
キーレスでロックしても鍵が閉まっていない!
最初は運転席のみかと思いきや4枚とも挙動が怪しい。
連続でLock/unLockを繰り返していると鍵が閉まらないことが。
調べてみると,10年を過ぎたあたりからアクチュエータのモータがお亡くなりに
なるようで,この際,4枚とも交換することに。

FC-280PC というモータが使用されているようで,ネット上で販売されている。
注意点は,軸の形状の選択。
よく見ると種類があるので,自分の車にあったタイプを選択しないと
幸せにはなれない。と過去の自分に言ってあげたい。

ピニオンやブラスカラーを付け替えればよいだけかと思いきや,
軸径とかも微妙に異なるので購入の際には注意が必要!

で。自分はミスって買ってしまい余計な作業が増えてしまった。
結論としては買いなおす羽目に。

作業自体は車からアクチュエータを取り外してモータを交換するだけなので
難しい作業ではない。ただし,すごく面倒。それなりに時間がかかる。
リアに限ってはアクチュエータを外すとドアすら閉まらなくなるので
日を越えての作業はセキュリティとかの心配も。
アクチュエータは接着剤で止めてあるため,モータ交換後は再接着が必要。
硬化の時間も考えると意外と時間が必要。

まぁ,最終的には「バチッ」と元気な音でLockがかかるように・・・ 長かった。
これでドアロック問題は解決。

以降,注意点とかハマった点を載せておく。


運転席の内貼りはがし。ねじ+ドアノブ+肘部分取っ手をはずす。
取っ手部分
ドアノブはねじ止めされている。
ドアロックをアッシーで外す。T30 トルクスビットが必要。 
アッシーで外した様子。
ブラシも結構減っているし,交換を決意。
ドアロックアクチュエータ
ちなみに写真の場所からこじって開けると簡単。
再接着はG17を使用。
無駄な作業。ブラスカラーを外している様子。
新モータの軸径が異なり,金属パテ等で粘るも断念。モータを買い直し。 

2015年10月30日金曜日

PIC32MX Timer

PIC32MXには5個の16bitTimerが実装されている。
Timer2/3,4/5はペアで使用して32bitTimerとしても使用可能。

Timerに関しては準備されているライブラリを活用した方が
手っ取り早いので,関数群について記載しておく。
マクロが定義されているtimer.hの内容を読めばそれが間違いない。
以下はtimer.hからの抜粋。



  • Timer1

OpenTimer1,ConfigIntTimer1
で制御

<Example>
OpenTimer1(T1_ON|T1_SOURCE_INT|T1_PS_1_256, 1000);
ConfigIntTimer1(T1_INT_ON|T1_INT_PRIOR_2);  // 割り込み許可|優先順位

INTEnableSystemMultiVectoredInt(); // 全割り込み許可

void __ISR(_TIMER_1_VECTOR,ipl2) T1Handler(void) {
    mT1ClearIntFlag();
    return;
}

#define OpenTimer1(config, period)
/******************************************************************************
* Available options for config parameter
*****************************************************************************/
// On/off control - values are mutually exclusive
#define T1_ON /* Timer1 ON */
#define T1_OFF

// Stop-in-idle control - values are mutually exclusive
#define T1_IDLE_STOP /* stop during idle */
#define T1_IDLE_CON /* operate during idle */

// Asynchronous write control - values are mutually exclusive
#define T1_TMWDIS_ON /* Asynchronous Write Disable */
#define T1_TMWDIS_OFF

// Timer gate control - values are mutually exclusive
#define T1_GATE_ON /* Timer Gate accumulation mode ON */
#define T1_GATE_OFF

// Timer prescaler control - values are mutually exclusive
#define T1_PS_1_256 /* Prescaler 1:256 */
#define T1_PS_1_64 /*           1:64 */
#define T1_PS_1_8 /*           1:8 */
#define T1_PS_1_1 /*           1:1 */

// Sync option - values are mutually exclusive
#define T1_SYNC_EXT_ON /* Synch external clk input */
#define T1_SYNC_EXT_OFF

// Source selection - values are mutually exclusive
#define T1_SOURCE_EXT /* External clock source */
#define T1_SOURCE_INT /* Internal clock source */
/***********************************
* End config parameter values
************************************/

#define ConfigIntTimer1(config)
/******************************************************************************
* Available options for config parameter
*****************************************************************************/
// Interrupt on/off - values are mutually exclusive
#define T1_INT_ON
#define T1_INT_OFF

// Interrupt priority - values are mutually exclusive
#define T1_INT_PRIOR_7
#define T1_INT_PRIOR_6
#define T1_INT_PRIOR_5
#define T1_INT_PRIOR_4
#define T1_INT_PRIOR_3
#define T1_INT_PRIOR_2
#define T1_INT_PRIOR_1
#define T1_INT_PRIOR_0

// Interrupt sub-priority - values are mutually exclusive
#define T1_INT_SUB_PRIOR_3
#define T1_INT_SUB_PRIOR_2
#define T1_INT_SUB_PRIOR_1
#define T1_INT_SUB_PRIOR_0
/***********************************
* End config parameter values
************************************/


  • Timer2,3,4,5

OpenTimer2,ConfigIntTimer2
OpenTimer3,ConfigIntTimer3
OpenTimer4,ConfigIntTimer4
OpenTimer5,ConfigIntTimer5
で制御

<Example>
 OpenTimer2(T2_ON | T2_IDLE_ON | T2_PS_1_4, 123);
 ConfigIntTimer2(T2_INT_ON | T2_INT_PRIOR_3 | T2_INT_SUB_PRIOR1);


定義はTimer2のもの。Timer3,4,5は2を読みかえればOK。

#define OpenTimer2(config, period)
/******************************************************************************
* Available options for config parameter
*****************************************************************************/
// On/off control - values are mutually exclusive
#define T2_ON /* Timer2 ON */
#define T2_OFF

// Stop-in-idle control - values are mutually exclusive
#define T2_IDLE_STOP /* stop during idle */
#define T2_IDLE_CON /* operate during idle */

// Timer gate control - values are mutually exclusive
#define T2_GATE_ON /* Timer Gate accumulation mode ON */
#define T2_GATE_OFF

// Prescale values - values are mutually exclusive
#define T2_PS_1_256 /* Prescaler 1:256 */
#define T2_PS_1_64 /*           1:64 */
#define T2_PS_1_32 /*           1:32 */
#define T2_PS_1_16 /*           1:16 */
#define T2_PS_1_8 /*           1:8 */
#define T2_PS_1_4 /*           1:4 */
#define T2_PS_1_2 /*           1:2 */
#define T2_PS_1_1 /*           1:1 */

// 32-bit or 16-bit - values are mutually exclusive
#define T2_32BIT_MODE_ON /* Enable 32-bit mode */
#define T2_32BIT_MODE_OFF

// Sync external clock option - values are mutually exclusive
#define T2_SOURCE_EXT /* External clock source */
#define T2_SOURCE_INT /* Internal clock source */
/***********************************
* End config parameter values
************************************/

#define ConfigIntTimer2(config)
/******************************************************************************
* Available options for config parameter
*****************************************************************************/
// Interrupt on/off - values are mutually exclusive
#define T2_INT_ON /* T2 Interrupt Enable */
#define T2_INT_OFF

// Interrupt priority - values are mutually exclusive
#define T2_INT_PRIOR_7
#define T2_INT_PRIOR_6
#define T2_INT_PRIOR_5
#define T2_INT_PRIOR_4
#define T2_INT_PRIOR_3
#define T2_INT_PRIOR_2
#define T2_INT_PRIOR_1
#define T2_INT_PRIOR_0

// Interrupt sub-priority - values are mutually exclusive
#define T2_INT_SUB_PRIOR_3
#define T2_INT_SUB_PRIOR_2
#define T2_INT_SUB_PRIOR_1
#define T2_INT_SUB_PRIOR_0
/***********************************
* End config parameter values
************************************/


  • Timer2/3,4/5
OpenTimer23,ConfigIntTimer23
OpenTimer45,ConfigIntTimer45
で制御

<Example>
OpenTimer23(T23_ON|T23_SOURCE_INT|T23_PS_1_16|T23_32BIT_MODE_ON, 3579545);
ConfigIntTimer23(T23_INT_ON|T23_INT_PRIOR_2);  // 割り込み許可|優先順位

INTEnableSystemMultiVectoredInt(); // 全割り込み許可

void __ISR(_TIMER_23_VECTOR,ipl2) T23Handler(void) {
    mT23ClearIntFlag();
    return;
}

定義はTimer23のもの。Timer45は23を読みかえればOK。


#define OpenTimer23(config, period)
/******************************************************************************
* Available options for config parameter
*****************************************************************************/
// On/off control - values are mutually exclusive
#define T23_ON /* Timer2 ON */
#define T23_OFF

// Stop-in-idle control - values are mutually exclusive
#define T23_IDLE_STOP /* stop during idle */
#define T23_IDLE_CON /* operate during idle */

// Timer gate control - values are mutually exclusive
#define T23_GATE_ON /* Timer Gate accumulation mode ON */
#define T23_GATE_OFF

// Prescale values - values are mutually exclusive
#define T23_PS_1_256 /* Prescaler 1:256 */
#define T23_PS_1_64 /*           1:64 */
#define T23_PS_1_32 /*           1:32 */
#define T23_PS_1_16 /*           1:16 */
#define T23_PS_1_8 /*           1:8 */
#define T23_PS_1_4 /*           1:4 */
#define T23_PS_1_2 /*           1:2 */
#define T23_PS_1_1 /*           1:1 */

// 32-bit or 16-bit - values are mutually exclusive
#define T23_32BIT_MODE_ON /* Enable 32-bit mode */
#define T23_32BIT_MODE_OFF

// Sync external clock option - values are mutually exclusive
#define T23_SOURCE_EXT /* External clock source */
#define T23_SOURCE_INT /* Internal clock source */
/***********************************
* End config parameter values
************************************/

#define ConfigIntTimer23(config)
/******************************************************************************
* Available options for config parameter
*****************************************************************************/
// Interrupt on/off - values are mutually exclusive
#define T23_INT_ON /* Interrupt Enable */
#define T23_INT_OFF

// Interrupt priority - values are mutually exclusive
#define T23_INT_PRIOR_7
#define T23_INT_PRIOR_6
#define T23_INT_PRIOR_5
#define T23_INT_PRIOR_4
#define T23_INT_PRIOR_3
#define T23_INT_PRIOR_2
#define T23_INT_PRIOR_1
#define T23_INT_PRIOR_0

// Interrupt sub-priority - values are mutually exclusive
#define T23_INT_SUB_PRIOR_3
#define T23_INT_SUB_PRIOR_2
#define T23_INT_SUB_PRIOR_1
#define T23_INT_SUB_PRIOR_0
/***********************************
* End config parameter values
************************************/



PIC32MX Clock

Oscillator Diagramについて。
ConfigSet クロック関係はこの図を見ながら設定していく。
関係も至ってシンプル。のように見える。
使い込んでいくとわからない部分も出てくるのかもしれないが・・・

Oscillator Diagram

// PLL Input Divider:
#pragma config  FPLLIDIV = DIV_1// 1x Divider
#pragma config  FPLLIDIV = DIV_2// 2x Divider
#pragma config  FPLLIDIV = DIV_3// 3x Divider
#pragma config  FPLLIDIV = DIV_4// 4x Divider
#pragma config  FPLLIDIV = DIV_5// 5x Divider
#pragma config  FPLLIDIV = DIV_6// 6x Divider
#pragma config  FPLLIDIV = DIV_10// 10x Divider
#pragma config  FPLLIDIV = DIV_12// 12x Divider
// PLL Multiplier:
#pragma config  FPLLMUL = MUL_15// 15x Multiplier
#pragma config  FPLLMUL = MUL_16// 16x Multiplier
#pragma config  FPLLMUL = MUL_17// 17x Multiplier
#pragma config  FPLLMUL = MUL_18// 18x Multiplier
#pragma config  FPLLMUL = MUL_19// 19x Multiplier
#pragma config  FPLLMUL = MUL_20// 20x Multiplier
#pragma config  FPLLMUL = MUL_21// 21x Multiplier
#pragma config  FPLLMUL = MUL_24// 24x Multiplier
// USB PLL Input Divider:
#pragma config  UPLLIDIV = DIV_1// 1x Divider
#pragma config  UPLLIDIV = DIV_2// 2x Divider
#pragma config  UPLLIDIV = DIV_3// 3x Divider
#pragma config  UPLLIDIV = DIV_4// 4x Divider
#pragma config  UPLLIDIV = DIV_5// 5x Divider
#pragma config  UPLLIDIV = DIV_6// 6x Divider
#pragma config  UPLLIDIV = DIV_10// 10x Divider
#pragma config  UPLLIDIV = DIV_12// 12x Divider
// USB PLL Enable:
#pragma config  UPLLEN = ON// Enabled
#pragma config  UPLLEN = OFF// Disabled and Bypassed
// System PLL Output Clock Divider:
#pragma config  FPLLODIV = DIV_1// PLL Divide by 1
#pragma config  FPLLODIV = DIV_2// PLL Divide by 2
#pragma config  FPLLODIV = DIV_4// PLL Divide by 4
#pragma config  FPLLODIV = DIV_8// PLL Divide by 8
#pragma config  FPLLODIV = DIV_16// PLL Divide by 16
#pragma config  FPLLODIV = DIV_32// PLL Divide by 32
#pragma config  FPLLODIV = DIV_64// PLL Divide by 64
#pragma config  FPLLODIV = DIV_256// PLL Divide by 256
// Oscillator Selection Bits:
#pragma config  FNOSC = FRC// Fast RC Osc (FRC)
#pragma config  FNOSC = FRCPLL// Fast RC Osc with PLL
#pragma config  FNOSC = PRI// Primary Osc (XT,HS,EC)
#pragma config  FNOSC = PRIPLL// Primary Osc w/PLL (XT+,HS+,EC+PLL)
#pragma config  FNOSC = SOSC// Low Power Secondary Osc (SOSC)
#pragma config  FNOSC = LPRC// Low Power RC Osc (LPRC)
#pragma config  FNOSC = FRCDIV16// Fast RC Osc w/Div-by-16 (FRC/16)
#pragma config  FNOSC = FRCDIV// Fast RC Osc w/Div-by-N (FRCDIV)
// Secondary Oscillator Enable:
#pragma config  FSOSCEN = OFF// Disabled
#pragma config  FSOSCEN = ON// Enabled
// Internal/External Switch Over:
#pragma config  IESO = OFF// Disabled
#pragma config  IESO = ON// Enabled
// Primary Oscillator Configuration:
#pragma config  POSCMOD = EC// External clock mode
#pragma config  POSCMOD = XT// XT osc mode
#pragma config  POSCMOD = HS// HS osc mode
#pragma config  POSCMOD = OFF// Primary osc disabled
// CLKO Output Signal Active on the// OSCO Pin:
#pragma config  OSCIOFNC = ON// Enabled
#pragma config  OSCIOFNC = OFF// Disabled
// Peripheral Clock Divisor:
#pragma config  FPBDIV = DIV_1// Pb_Clk is Sys_Clk/1
#pragma config  FPBDIV = DIV_2// Pb_Clk is Sys_Clk/2
#pragma config  FPBDIV = DIV_4// Pb_Clk is Sys_Clk/4
#pragma config  FPBDIV = DIV_8// Pb_Clk is Sys_Clk/8
// Clock Switching and Monitor Selection:
#pragma config  FCKSM = CSECME// Clock Switch Enable, FSCM Enabled
#pragma config  FCKSM = CSECMD// Clock Switch Enable, FSCM Disabled
#pragma config  FCKSM = CSDCMD// Clock Switch Disable, FSCM Disabled

PIC32MX Port

XC32コンパイラのライブラリを見てみると各ペリフェラルに対し
便利?なマクロが準備されている。
Port関係にも当然手厚く準備されている。ports.h参照。
ただ,レジスタで制御した方が明示的で分かりやす。気がするので,
ここではレジスタ制御での設定方法を記載しておく。

PIC32MX2xx 28-pin SPDIPに存在するI/Oは以下。
RAとRB系のPortが存在するが,途中歯抜けもあるので注意。
8bit連続して取れるI/Oがないのか・・・
ちなみに,パッケージ違いや,PIC32MX1xxでもアサインが異なるので注意。

RA0 2
RA1 3
RA2 9
RA3 10
RA4 12
RA7 -
RA8 -
RA9 -
RA10 -
RB0 4
RB1 5
RB2 6
RB3 7
RB4 11
RB5 14
RB6 -
RB7 16
RB8 17
RB9 18
RB10 21
RB11 22
RB12 -
RB13 24
RB14 25
RB15 26



Port Diagramは以下の構成。


Port Diagram
関係するレジスタは以下の通り。

TRISx ピンの入出力モード設定 1:Input 0:Output
LATx
ピンの出力用 1:High 0:Low
PORTx
ピンの入出力用 1:High 0:Low
ODCx
オープンドレイン設定 1:OpenDrain 1:CMOS
ANSELx Analog,Digital設定 1:Analog, 0:Digital
CNPUx プルアップ設定 1:ON 1:OFF
CNPDx プルダウン設定 1:ON 1:OFF

ex)
レジスタ制御と言いながら,bitアクセスのマクロは使っていますが・・・
PB14のPort情報でPB13を1/0切り替えを行う例。
PB14とPB15をショートするとPB13のLEDが点灯します。

    ANSELBbits.ANSB13 = 0;  // digital
    ANSELBbits.ANSB14 = 0;  // digital
    ANSELBbits.ANSB15 = 0;  // digital

    TRISBbits.TRISB13 = 0;  // output
    TRISBbits.TRISB14 = 1;  // input
    TRISBbits.TRISB15 = 0;  // output

    LATBbits.LATB15 = 1;    // high output
    CNPDBbits.CNPDB14 = 1;  // pull-down

    for(;;)
    {
        if(PORTBbits.RB14)
            LATBbits.LATB13 = 1;    // high output
        else
            LATBbits.LATB13 = 0;    // low output
    }


PIC32MXではペリフェラルのピンアサインを下記表に従って選択することができる。
ある程度自由にピンアサインを弄ることが可能。

ex) UARTのPinをRx=PORTB13,Tx=PORTB15に割り当ててみる。
U1RXR = 3; // uart rx = RPB13に割り当て
RPB15R = 1; // uart tx = RPB15に割り当て






PIC32MX ConfigSet

まずはConfig設定。PIC32ConfigSet.pdfから情報を抜粋。
このまま sourceに貼れるようにモディファイ。

MPLABで設定していく方法もあるようだが,
#pragmaとして明示的に記入する方が管理いやすいような気がする。



// Peripheral Module Disable Configuration:
#pragma config  PMDL1WAY = OFF// Allow multiple reconfigurations
#pragma config  PMDL1WAY = ON// Allow only one reconfiguration
// Peripheral Pin Select Configuration:
#pragma config  IOL1WAY = OFF// Allow multiple reconfigurations
#pragma config  IOL1WAY = ON// Allow only one reconfiguration
// USB USID Selection:
#pragma config  FUSBIDIO = OFF// Controlled by Port Function
#pragma config  FUSBIDIO = ON// Controlled by the USB Module
// USB VBUS ON Selection:
#pragma config  FVBUSONIO = OFF// Controlled by Port Function
#pragma config  FVBUSONIO = ON// Controlled by USB Module
// PLL Input Divider:
#pragma config  FPLLIDIV = DIV_1// 1x Divider
#pragma config  FPLLIDIV = DIV_2// 2x Divider
#pragma config  FPLLIDIV = DIV_3// 3x Divider
#pragma config  FPLLIDIV = DIV_4// 4x Divider
#pragma config  FPLLIDIV = DIV_5// 5x Divider
#pragma config  FPLLIDIV = DIV_6// 6x Divider
#pragma config  FPLLIDIV = DIV_10// 10x Divider
#pragma config  FPLLIDIV = DIV_12// 12x Divider
// PLL Multiplier:
#pragma config  FPLLMUL = MUL_15// 15x Multiplier
#pragma config  FPLLMUL = MUL_16// 16x Multiplier
#pragma config  FPLLMUL = MUL_17// 17x Multiplier
#pragma config  FPLLMUL = MUL_18// 18x Multiplier
#pragma config  FPLLMUL = MUL_19// 19x Multiplier
#pragma config  FPLLMUL = MUL_20// 20x Multiplier
#pragma config  FPLLMUL = MUL_21// 21x Multiplier
#pragma config  FPLLMUL = MUL_24// 24x Multiplier
// USB PLL Input Divider:
#pragma config  UPLLIDIV = DIV_1// 1x Divider
#pragma config  UPLLIDIV = DIV_2// 2x Divider
#pragma config  UPLLIDIV = DIV_3// 3x Divider
#pragma config  UPLLIDIV = DIV_4// 4x Divider
#pragma config  UPLLIDIV = DIV_5// 5x Divider
#pragma config  UPLLIDIV = DIV_6// 6x Divider
#pragma config  UPLLIDIV = DIV_10// 10x Divider
#pragma config  UPLLIDIV = DIV_12// 12x Divider
// USB PLL Enable:
#pragma config  UPLLEN = ON// Enabled
#pragma config  UPLLEN = OFF// Disabled and Bypassed
// System PLL Output Clock Divider:
#pragma config  FPLLODIV = DIV_1// PLL Divide by 1
#pragma config  FPLLODIV = DIV_2// PLL Divide by 2
#pragma config  FPLLODIV = DIV_4// PLL Divide by 4
#pragma config  FPLLODIV = DIV_8// PLL Divide by 8
#pragma config  FPLLODIV = DIV_16// PLL Divide by 16
#pragma config  FPLLODIV = DIV_32// PLL Divide by 32
#pragma config  FPLLODIV = DIV_64// PLL Divide by 64
#pragma config  FPLLODIV = DIV_256// PLL Divide by 256
// Oscillator Selection Bits:
#pragma config  FNOSC = FRC// Fast RC Osc (FRC)
#pragma config  FNOSC = FRCPLL// Fast RC Osc with PLL
#pragma config  FNOSC = PRI// Primary Osc (XT,HS,EC)
#pragma config  FNOSC = PRIPLL// Primary Osc w/PLL (XT+,HS+,EC+PLL)
#pragma config  FNOSC = SOSC// Low Power Secondary Osc (SOSC)
#pragma config  FNOSC = LPRC// Low Power RC Osc (LPRC)
#pragma config  FNOSC = FRCDIV16// Fast RC Osc w/Div-by-16 (FRC/16)
#pragma config  FNOSC = FRCDIV// Fast RC Osc w/Div-by-N (FRCDIV)
// Secondary Oscillator Enable:
#pragma config  FSOSCEN = OFF// Disabled
#pragma config  FSOSCEN = ON// Enabled
// Internal/External Switch Over:
#pragma config  IESO = OFF// Disabled
#pragma config  IESO = ON// Enabled
// Primary Oscillator Configuration:
#pragma config  POSCMOD = EC// External clock mode
#pragma config  POSCMOD = XT// XT osc mode
#pragma config  POSCMOD = HS// HS osc mode
#pragma config  POSCMOD = OFF// Primary osc disabled
// CLKO Output Signal Active on the// OSCO Pin:
#pragma config  OSCIOFNC = ON// Enabled
#pragma config  OSCIOFNC = OFF// Disabled
// Peripheral Clock Divisor:
#pragma config  FPBDIV = DIV_1// Pb_Clk is Sys_Clk/1
#pragma config  FPBDIV = DIV_2// Pb_Clk is Sys_Clk/2
#pragma config  FPBDIV = DIV_4// Pb_Clk is Sys_Clk/4
#pragma config  FPBDIV = DIV_8// Pb_Clk is Sys_Clk/8
// Clock Switching and Monitor Selection:
#pragma config  FCKSM = CSECME// Clock Switch Enable, FSCM Enabled
#pragma config  FCKSM = CSECMD// Clock Switch Enable, FSCM Disabled
#pragma config  FCKSM = CSDCMD// Clock Switch Disable, FSCM Disabled
// Watchdog Timer Postscaler:
#pragma config  WDTPS = PS1// 0.0423611111111111
#pragma config  WDTPS = PS2// 0.0430555555555556
#pragma config  WDTPS = PS4// 0.0444444444444444
#pragma config  WDTPS = PS8// 0.0472222222222222
#pragma config  WDTPS = PS16// 0.0527777777777778
#pragma config  WDTPS = PS32// 0.0638888888888889
#pragma config  WDTPS = PS64// 0.0861111111111111
#pragma config  WDTPS = PS128// 0.130555555555556
#pragma config  WDTPS = PS256// 0.219444444444444
#pragma config  WDTPS = PS512// 0.397222222222222
#pragma config  WDTPS = PS1024// 0.752777777777778
#pragma config  WDTPS = PS2048// 1.46388888888889
#pragma config  WDTPS = PS4096// 2.88611111111111
#pragma config  WDTPS = PS8192// 5.73055555555556
#pragma config  WDTPS = PS16384// 1:16384
#pragma config  WDTPS = PS32768// 1:32768
#pragma config  WDTPS = PS65536// 1:65536
#pragma config  WDTPS = PS131072// 1:131072
#pragma config  WDTPS = PS262144// 1:262144
#pragma config  WDTPS = PS524288// 1:524288
#pragma config  WDTPS = PS1048576// 1:1048576
// Watchdog Timer Window Enable:
// Windowモード有効/無効
// 有効の場合,FWDTWINSZで決められた
// 期間にCLRWDT命令が
// 実行される必要がある。
#pragma config  WINDIS = ON// Watchdog Timer is in Window Mode
#pragma config  WINDIS = OFF// Watchdog Timer is in Non-Window Mode
// Watchdog Timer Enable:
#pragma config  FWDTEN = OFF// WDT Disabled (SWDTEN Bit Controls)
#pragma config  FWDTEN = ON// WDT Enabled
// Watchdog Timer Window Size:
#pragma config  FWDTWINSZ = WINSZ_75// Window Size is 75%
#pragma config  FWDTWINSZ = WINSZ_50// Window Size is 50%
#pragma config  FWDTWINSZ = WINSZ_37// Window Size is 37.5%
#pragma config  FWDTWINSZ = WISZ_25// Window Size is 25%
// Background Debugger Enable:
#pragma config  DEBUG = ON// Debugger is Enabled
#pragma config  DEBUG = OFF// Debugger is Disabled
// JTAG Enable:
#pragma config  JTAGEN = OFF// JTAG Disabled
#pragma config  JTAGEN = ON// JTAG Port Enabled
// ICE/ICD Comm Channel Select:
// デバッグポート端子を選択。
#pragma config  ICESEL = RESERVED// Reserved
#pragma config  ICESEL = ICS_PGx3// Communicate on PGEC3/PGED3
#pragma config  ICESEL = ICS_PGx2// Communicate on PGEC2/PGED2
#pragma config  ICESEL = ICS_PGx1// Communicate on PGEC1/PGED1
// Program Flash Write Protect:
#pragma config  PWP = PWP32K// First 32K
#pragma config  PWP = PWP31K// First 31K
#pragma config  PWP = PWP30K// First 30K
#pragma config  PWP = PWP29K// First 29K
#pragma config  PWP = PWP28K// First 28K
#pragma config  PWP = PWP27K// First 27K
#pragma config  PWP = PWP26K// First 26K
#pragma config  PWP = PWP25K// First 25K
#pragma config  PWP = PWP24K// First 24K
#pragma config  PWP = PWP23K// First 23K
#pragma config  PWP = PWP22K// First 22K
#pragma config  PWP = PWP21K// First 21K
#pragma config  PWP = PWP20K// First 20K
#pragma config  PWP = PWP19K// First 19K
#pragma config  PWP = PWP18K// First 18K
#pragma config  PWP = PWP17K// First 17K
#pragma config  PWP = PWP16K// First 16K
#pragma config  PWP = PWP15K// First 15K
#pragma config  PWP = PWP14K// First 14K
#pragma config  PWP = PWP13K// First 13K
#pragma config  PWP = PWP12K// First 12K
#pragma config  PWP = PWP11K// First 11K
#pragma config  PWP = PWP10K// First 10K
#pragma config  PWP = PWP9K// First 9K
#pragma config  PWP = PWP8K// First 8K
#pragma config  PWP = PWP7K// First 7K
#pragma config  PWP = PWP6K// First 6K
#pragma config  PWP = PWP5K// First 5K
#pragma config  PWP = PWP4K// First 4K
#pragma config  PWP = PWP3K// First 3K
#pragma config  PWP = PWP2K// First 2K
#pragma config  PWP = PWP1K// First 1K
#pragma config  PWP = OFF// Disable
// Boot Flash Write Protect bit:
#pragma config  BWP = ON// Protection Enabled
#pragma config  BWP = OFF// Protection Disabled
// Code Protect:
#pragma config  CP = ON// Protection Enabled
#pragma config  CP = OFF// Protection Disabled

PIC32MX 始めました。

長らくPICから離れていたが,MIPS 32bit Coreを採用したPICが
なかなか使いやすそうだったので,弄ってみる事に。

手始めに使用してみたデバイスは,PIC32MX250F128B。
秋月で360円 ほどで購入可能。

DIP 28Pin,50MHz(2.3~3.6V,-40~85degC),GPIOx21,
ROM 128KB,BootROM 3KB,RAM 32KB,
UARTx2,SPI/I2Sx2,USB2.0(OTG),ISCx2,DMA,10bit ADCx9,JTAG





と,至れり尽くせり。
AVRでこのコスパは無いような気がする。

データシートを見てみると
聞きなれないCTMU(Charge Time Measurement Unit)という機能が搭載されている。
その名の通り充電時間測定ができるらしい。
内蔵の定電流源を組み合わせられるようで,妄想は膨らむ。
これも弄ってみるか。

準備した環境は以下の通り。
 Product Version: MPLAB X IDE v2.35
 Compiler Version: XC32 v1.40+PIC32 Peripheral Library
 Java: 1.7.0_67
 System: Windows10 64bit
 Debug Tool: PICkit 3
ちなみに,XC32 v1.40ではHarmony環境を推奨しているらしく
そのままではペリフェラルにアクセスできない。
別途Peripheral Libraryをインストする必要がある。


弄ってみたいペリフェラル系は以下の通り。

2015年10月21日水曜日

Windows10 スタートメニューが若干もたつく件

Windows10を導入してしばらくになるが,基本的に不満もなく使用してのだが,
スタートメニューが若干もたつく現象に悩まされていた。
(ヌルっと出てくるはずのスタートメニューがカクカクとアニメーションする現象)

ようやく解決したので備忘録を書いておく。

原因はStrokesPlusというマウスジェスチャソフト。
Preferences→Keep Gesture Draw Window On Topのチェックを外すとOK。以上。



Keep Gesture Draw Window On Top - always keep the transparent window to which StrokesPlus draws the gesture line on top. This can be helpful for low-power systems and prevent flickering UI elements for Windows XP users. However, there may be issues with other programs if they react to StrokesPlus' gesture window being above them. Therefore, this is an experimental feature.

2015年8月5日水曜日

Windows10 CG-FPSU2BD を使う方法

Windows10環境を整備していく中で問題が発生。

プリントサーバとしてCorega CG-FPSU2BD を使用している。
サポートOSから外れているもののWindows7まではつかえていた。

Windows10にPS Admin Ⅳをインストールしたところ,
PS Admin Ⅳ自体は起動したものの,SXUPTP Driverがエラーとなってしまう。
Coregaのドライバは古いらしく,Windows8以降対応ができていないらしい。

調べたところ,PS Admin ⅣはSilex社のOEM品らしい。
本家のツール(SX Virtual Link)をインストールすればいけるっぽい。

ただし,本家もまだWindows8までの対応でWindows10には対応していない。
ダメ元でインストールしてみたところ,動きましたとさ。という備忘録。

プリントサーバなんて買い替えるのももったいないし,
次買うプリンタはWLAN内蔵だろうし,延命できてほっと一安心。


Windows10 クリーンインストール備忘録

Windows10 Insider Preview版を使用してみて
なんとなく気分はWindows10モードになってしまっていたので,
この際,発売と同時にWindows10にアップグレードすることにした。

ライセンス的にはWindows7からのアップデートになるが,
やはりクリーンインストールをしたい。

ちなみに,この日のためにSSDも新調。
価格.com人気No1 SSDをとりあえずポチッと。
Toshiba製SSDが採用されている信頼性とコスパ抜群の一品。

で,インストール。
まずISOをDLしてDVDに焼き,何も考えずにクリーンインストールに突き進んでいく。
プロダクトキーの入力。
Windows7のキーを入力したがエラー。え?
結論から言うとWindows7のキーではNG。当然か。

Google先生に聞いてみた結果,手順が判明。

Windows7上でWindows10にアップデートしライセンス認証まで行う。
そうするとMSのデータベースにHardとライセンスが紐づけされた形で登録される。
以降,登録されたHardでWindows10を再インストールした場合,
ネットに接続すれば自動的にライセンス認証が行われるという仕組みらしい。

クリーンインストールの手順は以下。

1.Windows7→Windows10にアップデート
2.ネットに接続し,Windows10でライセンス認証を完了する。
3.Windows10をクリーンインストール
4.クリーンインストール中に2回ほどプロダクトキーの入力を促されるが,スキップ。
5.ネットに接続すると自動的にWindows10のライセンス認証が完了する。

プロダクトキーを知っておきたい場合は
KeyFinderInstaller等のツールで抜けばOK。




2015年7月4日土曜日

Windows 10 Insider Preview デュアルブート お試し

Windows10の発売が2015/7/29と決定した模様。
SSDの容量不足で悩ましい今日この頃,
SSD入れ替えついでに再セットアップでもしようかと企んでた。

丁度良いタイミングなのでWindows10移行も
やってしまおうかと。
いきなりWindows10運用をスタートするといろいろと
問題も発生しそうなので,正式版の前に
InsiderPreview版をDualbootインストールしてお試ししてみようかと。

アップデートではなくデュアルブートでインストール。
大変参考になるサイト。


ちなみに,あるページによると

 この正式版はInsider Preview版と同じ手法で配信されるが、
 そのためにはInsider Programへの登録に使用したMicrosoftアカウントに
 ログインしておく必要がある。この方法でインストールしておけば、
 後に正式版のメディアからWindows 10をクリーンインストールすることもできる。

との事。新しいSSD購入の際にはクリーンインストールをしたい気分なので
これはよい情報。


で。・・・ 2時間後。
ここからはWindows10環境でBlogを更新してみる。




トラブルなくここまで来た・・ と書きたいところだったが,トラブル発生。
Windows10のインストールまでは完了したものの,
ネットワークアダプタが認識されない。
元のWindows7環境でも認識されなくなってしまった。
以下手順でなぜか復活。Windows10でも正常に認識。

1.Windows10 Boot画面で通常使用するOSとしてWindows7を選択。
2.Windows7セーフモード+ネットワークで起動。認識することを確認。
3.Windows7通常モードで起動。認識することを確認。
4.Windows10通常モードで起動。なぜか認識。

システム環境
 mother: Gigabyte GA-H55-USB3 rev2.0
 cpu: Core i3 530 @ 2.93G
 ram: 6GB
 graphic: on-board

2010年くらいに組んだご老体のマシンなわけで,
お世辞にも速いとは言えない。
しかしながら,ゲームをまったくやらない自分としては必要十分。
PIC,AVR,VisualStudio等の開発環境の動作も不満なレベルではない。
気になる点としては,graphicがon-boardでこの世代なので,
デスクトップのエアロ程度でも若干モタつく感じがある。

そんなマシンにWindows10をインストールしてみたわけだが,
Windows7と体感は変わらない。不満は無く快適。
ただ,やはりgraphicは少し引っかかる感じがある。

Windows10の感想としては,なんとなく荒削り感が否めない。
ブラウザが突然フリーズしたり,スタートメニューの挙動が怪しかったり
若干安定感に欠ける動きをしている。
まぁ そこらへんはInsiderPreview版なので,深追いはしない。
しばらく使ってみて,必要なツール類の動作確認を進めていく予定。





20150710 追加>
その後,Windows10をDynabook UX23にもインストールしてみた。
めっちゃ遅い。
Mem:1G, CPU:Atom N280 では重荷過ぎるみたい。
SSDとMem 2Gにしたらイケてるんだろうか…

2015年6月13日土曜日

Logicool M500 メンテナンス

かなり長く使っているLogicool M500。
最近,動きが怪しいご様子。
レーザの調子が悪くなってきたのか?
延命はもう無理か?
一眼に使うレンズクリーナを綿棒につけてレンズ部分をクリーニング。
意外に効果あり。復活。
破壊覚悟の最後の延命手段としてはよいかも。自己責任で。



2015年1月2日金曜日

アイドリングストップ時 ナビが落ちないように改造

街乗りでは,のほほんと燃費重視運転をしている自分。
信号待ちでは手動のアイドリングストップも実施中。
手動アイドリングストップの一番のデメリットは
いちいちナビがストップしてしまうところ。
出先の交差点とかでナビを使っている時に
ナビが落ちてしまうと・・・ 何のためのナビだったのかと。

というわけで,ACC⇒エンジンスタート時にACC電源が落ちないように改造。
これでアイドリングストップしてもナビが落ちない!

やることはIGN電源からACC電源に向けて整流ダイオードを挟むだけ。
ダイオードにはACC電源が復活するまでの間電流が流れることになる。
ナビの動作電流自体は常時電源から流れるため,
ACC電源から大電流を引くことはないはずだが,
念のため,15A品のダイオードをチョイス。(ナビ以外の電装品もあるし)


整流ダイオード
IGN電源とACC電源へ配線
いつでもダイオードを切り離せるようにSWを追加

とまぁ これだけでアイドリングストップでナビが起動したままに。
手動アイドリングストップする人には何気に便利な機能。

※注意点※
ただし,ACC電源がダイオードのVF分だけ電圧降下するため,
ナビによっては正常動作しない可能性も。バッテリがヘタっている場合もNG。
もちろん,改造は自己責任で。

ハイキャスボールジョイント ブーツ修理

ハイキャスのボールジョイント部のブーツが車検に通らないレベルで劣化していた件。
そのうちリア周りのブッシュを全打ち変えする予定なので
このタイミングでボールジョイントだけ打ちかえるのは・・・
幸いボールジョイント自体のガタはなく延命は可能な様子。
というわけで,ブーツのみ交換することに。

とは言え,ブーツだけは純正部品として出ないので,
サードパーティ製のブーツを某オークションで入手。
500円程度。助かります。

以下作業備忘録。

ボールジョイントリムーバでタイロッドエンドを取り外し。
左側。ブーツがパックリで車検は無理な状況。
右側。左に同じ。

新品ブーツとモリブデングリスとシール剤
ブーツ内にモリブデングリスを充填し,シール剤を塗布して接着。
周りの部分にシール剤をこんもり塗って固めた様子。
アライメント調整。右。ほぼToe0。
アライメント調整。左。こちらもほぼ0。
もともとボールジョイントにガタがあったわけではないので,
走行フィールは特に変化なし。
アライメントは上記のとおりほぼ0にセット。
(よーーーーーーく見ると若干Toe Inにしてます)

純正アライメント値は以下。