2010年09月21日

16f690 構文ミス?

#include <pic.h>
#include "delay.h"

/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//
//
// 別途必要な関数ファイル:
//  delay.c (注意:使用するクロック周波数を設定すること PICC-LITE用にチューン済
//  pic.h
//  delay.h
//
// [I/O情報] ピン番号 (先頭ビット DO:出力 DI:Digital入力 AI:Analog入力 .K:外部正論理 .N:外部不論理)
//  19.RA0:DO.K ,RA0 /ICSPDAT専用 (通常時出力)
//  18.RA1:DO.K ,RA1 /ICSPCLK専用 (通常時出力)
//  17.RA2:DO.K ,RA2 /リレー出力R1
//   4.RA3:DI.K ,RA3 /ICSPMCLR専用 VPPtarget (通常時入力専用 //未使用)
//   3.RA4:AI.K ,AN3 /トリマVol (スイッチの照光ランプから変更)
//   2.RA5:DI.K ,RA5 /押しボタンスイッチ(自動-手動)
//  13.RB4:DI.K ,RB4 /DIP-SW3入力
//  12.RB5:DI.K ,RB5 /DIP-SW2入力
//  11.RB6:DI.K ,RB6 /DIP-SW1入力
//  10.RB7:DO.K ,RB7 /未接続 (通常時出力)
//  16.RC0:DO.K ,RC0 /リレー出力R2
//  15.RC1:DO.K ,RC1 /ブザー出力
//  14.RC2:DI.K ,RC2 /DIP-SW4入力
//   7.RC3:AI.K ,AN7 /ポテンショメータ左入力
//   6.RC4:DO.K ,RC4 /スイッチ照光ランプ
//   5.RC5:DO.K ,RC5 /未接続 (通常時出力)
//   8.RC6:AI.K ,AN8 /ポテンショメータ右入力
//   9.RC7:AI.K ,AN9 /操作ボリューム入力
//
// [システム情報]  //別プログラムのコピペにつき未編集
//  動作クロック  :たぶん4MHz
//  timer0   :未使用
//  timer1   :未使用
//  コンパレータ   :未使用
//  A/Dコン   :未使用
//  EEPROM   :未使用
//  ウォッチドッグタイマ :未使用
//  スリープモード  :未使用
//  ウィークプルアップ  :未使用
//  割り込み動作  :未使用
//  プリ・ポストスケーラ :未使用
//  USART   :未使用
//  CCP    :未使用
//
//
// [機能情報]
//
//
// [メモ書き]
// ・16F690には内部クロック微調整のビットが無い(自動調整)
//
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////

__CONFIG(
 INTIO  //内部クロック生成器 外部出力無し
 & WDTDIS  //ウォッチドッグタイマOFF
 & PWRTDIS  //パワーアップタイマOFF
 & MCLRDIS  //リセット回路使用しない
 & UNPROTECT //プログラムのプロテクト プログラムの読み出し禁止OFF
 & BORDIS  //ブラウンアウトリセット 電源オフ時リセットOFF
 & IESODIS  //内部・外部スイッチオーバー 動的なクロック周波数切替OFF
 & FCMDIS  //フェイルセーフクロックモニタ クロック生成器の故障対応OFF
 );

//代替変数//


//プロトタイプ宣言//
unsigned char get_dipsw(unsigned char resive);
void get_ad();
void white_cyl(unsigned char cyl_moved_direction);

//グローバル変数設定//
unsigned char tmp_a = 0;
unsigned char adcon_port;   //現在変換中のAnalogPortを記憶
unsigned char tmp_ad_AN9_back;  // AN9のデータコピー用 mode4動作中に操作ボリュームの変更があったことを調べる変数
unsigned char tmp_ad_AN9;   // A/D変換後の AN9のデータを記憶 操作ボリューム入力
unsigned char tmp_ad_AN7;   // A/D変換後の AN7のデータを記憶 ポテンショメータ左入力
unsigned char tmp_ad_AN8;   // A/D変換後の AN8のデータを記憶 ポテンショメータ右入力
//unsigned char tmp_ad_AN3;   // A/D変換後の AN3のデータを記憶 トリマVol入力
unsigned char tmp_sum_potentiometer;// ポテンショメータ右・左の内、角度の高い(深い)ものを記録
unsigned char tmp_tmr1;    //timer1の10mSec-1Sec変換用バッファ
unsigned char mode_sw = 0;   //処理モード分岐用フラグ 0:初回処理 1:手動モード 2:自動待機(自動ボタン点滅) 3:自動モード_刈り取り機動作_目標値設定
//                4:自動モード_目標値へ動作 5:自動モード_時間待ち 6:自動->手動切り替え(異常)時のブザー生成
unsigned char tmp_a;    //汎用変数 主にLED点滅用
unsigned char tmp_b;    //汎用変数
unsigned char mode2_couter;   //mode2からmode3に移行する際に、RA5を2秒間カウントする変数
unsigned char mode5_couter;   //mode5で時間計測を行うカウンタ
unsigned char cuttingmachine_position; //刈り取り機の目標値を入れる変数
unsigned int movement_time = 0;   //I/Oの出力時間を計測する変数
unsigned char mode5_delay_time;  //リレー出力操作周期を指定(0.5-3.5秒)

//メイン関数//
main(void){

PORTA=0b00000000; //全ポート 値リセット
PORTB=0b00000000;
PORTC=0b00000000;

TRISA=0b00111000; //[I/O情報]の通りに設定
TRISB=0b01110000;
TRISC=0b11001100;

     //AN7,AN8,AN9をアナログ入力ポートに指定
ANSEL =0b10001000; //[ANS7,ANS6,ANS5,ANS4,ANS3,ANS2,ANS1,ANS0]
ANSELH=0b00000011; //[null,null,null,null,ANS11,ANS10,ANS9,ANS8]

T0CS=0;    //タイマ0のクロックを命令クロックにする
TMR0=0;    //タイマ0に0を書く
T0IF=0;    //タイマ0割り込みフラグビットを0にする
T0IE=0;    //タイマ0オーバーフロー割り込みを使用しない

TMR1L=0;   //タイマ1に0を書く
TMR1H=0;
T1CKPS0=0;   //タイマ1のプリスケーラを1:1にする 01(1:2) 10(1:4) 11(1/8)
T1CKPS1=0;
TMR1CS=0;   //タイマ1の動作クロックを命令クロックと同期させる
TMR1ON=1;   //タイマ1を動作させる
TMR1IF=0;   //タイマ1割り込みフラグビットを0にする
TMR1IE=1;   //タイマ1オーバーフロー割り込みを使用する


ADCS0=1;   // A/D変換クロックをFosc/8にする
ADCS1=0;
ADCS2=0;

ADFM=0;    //変換結果データは左詰にしてADRESHのみ(8bit)使用
ADON=1;    //A/Dコンバータ電源on
ADIF=0;    //割り込みフラグビットをリセット

ADIE=1;    // A/D変換終了割り込みを使用
PEIE=1;    //深度割り込みビットを使用できるようにする
GIE=1;    //全割り込みフラグビットが立つようにする

IOCA5 = 1;   //入力レベル変化割込検出 RA5を検出
//IOCA5 = 1;
//IOCA3 = 1;

tmp_b = PORTA;  //portaのデータを読み込み、I/Oバッファを更新する tmp_bデータは特別使用しない
RABIF=0;   //フラグビットリセット
RABIE=1;   //入力レベル変化割込を使う


white_cyl(0);  //シリンダーはブレーキモード

//メイン処理開始//

while(1){
 // //周期更新エリア//
 get_ad();  //4つのアナログ入力値を更新
 if(tmp_tmr1 >= 10){  //タイマ1 0.1Sec生成 (プログラム修正ごとにここの値の微調が必要)
  tmp_tmr1 = 0;
  //0.1Secごとにインクリメントが必要な変数をここに記入 時刻精度は最低
  if(tmp_a <=254) tmp_a++;
  if((mode2_couter != 0) & (mode2_couter <= 254)) mode2_couter++;
  if((mode5_couter != 0) & (mode5_couter <= 254)) mode5_couter++;
  if((movement_time != 0) & (movement_time <= 1000)) movement_time++;
 }
 if(tmp_ad_AN7 <= tmp_ad_AN8) tmp_sum_potentiometer = tmp_ad_AN7; //2つのポテンショの内、角度の低い(浅い)ものを抽出
 else tmp_sum_potentiometer = tmp_ad_AN8;
 
 mode5_delay_time = 0;     //DIPスイッチ(上位桁RB5(2),RB4(3),RC2(4)下位桁)の値を取得し、リレー出力周期をセットする
 if(RB5 == 0)mode5_delay_time += 20;
 if(RB4 == 0)mode5_delay_time += 10;
 if(RC2 == 0)mode5_delay_time += 5;


// @@ 初回起動エリア @@
 if(mode_sw == 0){
   movement_time = 0; //mode4にて使用 それ以外では0(動作停止)とする
   mode_sw = 2;  //手動待機モードへ
 }


// @@ 手動モードエリア @@
 if(mode_sw == 1){  //手動エリア
  /*
   movement_time = 0; //mode4にて使用 それ以外では0(動作停止)とする
   if(tmp_sum_potentiometer <= 76){ //もし、双方のシリンダが40度(76は実測値)以下ならモード2に移行
    mode_sw = 2;
    mode2_couter = 0; //押しボタンスイッチ用遅延カウンタ停止
   }
   RC0 = 0; //リレー出力停止
   RA2 = 0; //リレー出力停止
   RC4 = 0; //自動モード移行できないことを示すため、照光スイッチを消灯
  */
   mode_sw = 2; //強制的にモード2へ
 }

 

// @@ 自動待機(自動ボタン点滅)モードエリア @@
 if(mode_sw == 2){  //自動待機(自動ボタン点滅)エリア
   movement_time = 0; //mode4にて使用 それ以外では0(動作停止)とする
//   if(tmp_sum_potentiometer > 76){ //もし、双方のシリンダが40度(76は実測値)以上ならモード1に戻る
//    mode_sw = 1;
//   }
   if(tmp_a >= 3){
    tmp_a = 0;
    RC4 = !RC4;
   }
   if(RA5) mode2_couter = 0; //もし押しボタンスイッチ用遅延カウンタ動作中にボタンが離された場合はカウンタをリセット停止
   if(mode2_couter >= 1){  //もし0.1秒以上自動ボタンを押していたら
     mode_sw = 3;
     mode2_couter = 0; //押しボタンスイッチ用遅延カウンタ動作停止
     RC4 = 1;   //照光スイッチ 点滅から点灯へ
     RC1 = 1;   //ブザーON

     do DelayMs(100); //押しボタンスイッチを放すまでループ(チャタリングを考慮し、先に時間を稼ぐ)
     while(!RA5);

     DelayMs(200);  //0.2秒間ブザーを鳴らす
//     DelayMs(250);
//     DelayMs(250);
//     DelayMs(250);
     RC1 = 0;   //ブザーOFF
   }
 }


// @@ 自動モード_刈り取り機動作_目標値設定モードエリア @@
 if(mode_sw == 3){  //自動モード_刈り取り機動作_目標値設定エリア
   movement_time = 0; //mode4にて使用 それ以外では0(動作停止)とする
   RC4 = 1;  //照光スイッチが点灯しているか再投入

//   cuttingmachine_position = 42;
   tmp_ad_AN9_back = tmp_ad_AN9;   //この時点での操作ボリュームの値を記憶

   if(tmp_ad_AN9 > 25)cuttingmachine_position = 25 + (tmp_ad_AN9 - 25); //目標値設定 tmp_ad_AN9は10基準(0-38変動)とし (コメント化)
   else if(tmp_ad_AN9 < 25)cuttingmachine_position = tmp_ad_AN9;  //それ以上なら-10底下げ、以下ならそのまま引き算とする
   mode_sw = 4;
   cuttingmachine_position -= 5;  //目標値を無理やり下げる 201008261435追記
 }


// @@ 自動モード_目標値へ動作モードエリア @@
 if(mode_sw == 4){  //自動モード_目標値へ動作エリア
   RC4 = 1;  //照光スイッチが点灯しているか再投入
   /*        //(コメント化)
   if(tmp_sum_potentiometer > 76){ //もし、双方のシリンダが40度(76は実測値)以上ならモード1に戻る
    mode_sw = 6;
    break;
   }
   */

   if((tmp_sum_potentiometer - 1) > cuttingmachine_position){
   RC0 = 0;
   RA2 = 1;
   }else if((tmp_sum_potentiometer + 1) < cuttingmachine_position){
   RC0 = 1;
   RA2 = 0;
   }else{
   RC0 = 0;
   RA2 = 0;
   mode_sw = 5;
   movement_time = 0; //mode4にて使用 それ以外では0(動作停止)とする
   }

   if((tmp_ad_AN9_back > (tmp_ad_AN9 + 2)) | (tmp_ad_AN9_back < (tmp_ad_AN9 - 2))) mode_sw = 3; //もし動作中に操作ボリュームの操作があった場合、強制的にmode3へ戻す

   if(!RA5){   //自動 -> 手動切り替えフェーズ
    DelayMs(1);  //チャタリング読み飛ばし用
    RC0 = 0;  //リレー出力停止
    RA2 = 0;  //リレー出力停止
    RC4 = 0;  //照光スイッチ消灯
    RC1 = 1;  //ブザーON
    while(!RA5); //自動ボタンを放すまで待つ
    DelayMs(250);
    DelayMs(250);
    DelayMs(250);
    DelayMs(250);
    RC1 = 0;  //ブザーOFF
    mode_sw = 1;
   }
  
   if((movement_time == 0) & (RB6 == 0)) movement_time = 1 ; //I/O出力時間計測カウンタ(アップタイマ)
   else if(movement_time >= 51){
    mode_sw = 6; //もしリレー出力状態が5秒以上続いた場合はエラーとみなし、エラー処理モードへ強制転送
    movement_time = 0;
   }
 }


// @@ 自動モード_時間待ちモードエリア @@
 if(mode_sw == 5){  //自動モード_時間待ちエリア
   movement_time = 0; //mode4にて使用 それ以外では0(動作停止)とする
   RC4 = 1;  //照光スイッチが点灯しているか再投入
   /*        //(コメント化)
   if(tmp_sum_potentiometer > 76){ //もし、双方のシリンダが40度(76は実測値)以上ならモード1に戻る
    mode_sw = 6;
    break;
   }
   */

   if(mode5_couter == 0) mode5_couter = 1; //遅延カウンタ動作開始
   if(mode5_couter >= mode5_delay_time){
    mode_sw = 3;
    mode5_couter = 0;
   }

   if(!RA5){   //自動 -> 手動切り替えフェーズ
    DelayMs(1);  //チャタリング読み飛ばし用
    RC0 = 0;  //リレー出力停止
    RA2 = 0;  //リレー出力停止
    RC4 = 0;  //照光スイッチ消灯
    RC1 = 1;  //ブザーON
    while(!RA5); //自動ボタンを放すまで待つ
    DelayMs(250);
    DelayMs(250);
    DelayMs(250);
    DelayMs(250);
    RC1 = 0;  //ブザーOFF
    mode_sw = 1;
   }


 }

  // @@ 自動->手動切り替え(異常)時のブザー生成モードエリア @@
 if(mode_sw == 6){  //自動->手動切り替え(異常)時のブザー生成エリア
   RC4 = 0;  //照光スイッチを消灯
   RC0 = 0; //リレー出力停止
   RA2 = 0; //リレー出力停止
   RC1=1;   //ブザーON
   DelayMs(160); 
   RC1=0;   //ブザーOFF
   DelayMs(160);    
   RC1=1;   //ブザーON
   DelayMs(160); 
   RC1=0;   //ブザーOFF
   DelayMs(160);
   RC1=1;   //ブザーON
   DelayMs(250);
   DelayMs(250);
   DelayMs(250);
   RC1=0;   //ブザーOFF

   mode_sw = 1;
 }

}}

//割込関数//
interrupt warikomi(){
 if(ADIF & ADIE){
  ADIF=0;
  // A/D変換完了記述エリア 
//  if(adcon_port==3) tmp_ad_AN3=ADRESH; //AN3の値の更新中ならばAN3のG変数に値を代入
  if(adcon_port==7) tmp_ad_AN7=ADRESH; //AN7の値の更新中ならばAN7のG変数に値を代入
  if(adcon_port==8) tmp_ad_AN8=ADRESH; //AN8の値の更新中ならばAN8のG変数に値を代入
  if(adcon_port==9) tmp_ad_AN9=ADRESH * 0.19 ; //AN4の値の更新中ならばAN9のG変数に値を代入 スケールダウン(256 -> 50) (訂正前0.16-42)
  if(tmp_ad_AN9 > 50) tmp_ad_AN9 =50;  //スケールダウン失敗時の保護用  //誤作動時にはここが原因となる可能性あり (元が38)
 }
 
 if(T0IF & T0IE){
  T0IF=0;
  //タイマ0オーバーフロー記述エリア
//  get_ad();       //256mSec間隔で約5mSec程かけて3つのアナログ入力値を更新
 }
 
 if(TMR1IF & TMR1IE){
  //タイマ1オーバーフロー記述エリア
  TMR1IF=0;
  TMR1H = 55535/256;  //タイマ1は10mSecタイマ (1uSecごとにインクリメント)
  TMR1L = 55535%256;
  tmp_tmr1++;
 }

 if(RABIF & RABIE){
  //I/O入力レベル変化割込検出エリア
  tmp_b = PORTA;  //portaのデータを読み込み、I/Oバッファを更新する tmp_aデータは特別使用しない
  RABIF = 0;
  if((mode2_couter == 0) & (!RA5)) mode2_couter = 1; //押しボタンスイッチ用遅延カウンタ動作開始
 }

/*
//DIP SW 処理関数 //
// get_dipsw(DipSwNo.)
// DipSwNo.:1-4のSw番号
// 返送値   :指定Swの論理値(0-1)
unsigned char get_dipsw(unsigned char resive){
  unsigned char tmp_dipsw;
  
  switch (resive){
   case 1: tmp_dipsw = RB6;
     break;
     
   case 2: tmp_dipsw = RB5;
     break;
     
   case 3: tmp_dipsw = RB4;
     break;
     
   case 4: tmp_dipsw = RC2;
     break;
     
   default:tmp_dipsw = 1;
 }
 
 return(~tmp_dipsw);
}
*/

//各Portアナログ値更新処理関数 //
// 呼んだ時に tmp_ad_AN7 ,tmp_ad_AN2 ,tmp_ad_AN4の値を更新
// 返送値:無し
void get_ad(){

// adcon_port=3; //AN3の値の更新開始
// CHS0=1;    // A/D変換portを指定
// CHS1=1;    // 0000:AN0 ,0001:AN1 ,0010:AN2 ,0011:AN3 ,0100:AN4 ,0101:AN5 ,0110:AN6
// CHS2=0;    // 0111:AN7 ,1000:AN8 ,1001:AN9 ,1010:AN10 ,1011:AN11
// CHS3=0;    // 1100:CVref ,1101:0.6vFixedVoltageReference
// DelayUs(20);  //変換ポート移動後は20us以上ホールドコンデンサのチャージ時間を取る
// GODONE=1;   // A/D変換開始
// DelayMs(1);  // A/D変換割り込みの終了を予想し待つ

 adcon_port=7; //AN7の値の更新開始
 CHS0=1;    // A/D変換portを指定
 CHS1=1;    // 0000:AN0 ,0001:AN1 ,0010:AN2 ,0011:AN3 ,0100:AN4 ,0101:AN5 ,0110:AN6
 CHS2=1;    // 0111:AN7 ,1000:AN8 ,1001:AN9 ,1010:AN10 ,1011:AN11
 CHS3=0;    // 1100:CVref ,1101:0.6vFixedVoltageReference
 DelayUs(20);  //変換ポート移動後は20us以上ホールドコンデンサのチャージ時間を取る
 GODONE=1;   // A/D変換開始
 DelayMs(1);  // A/D変換割り込みの終了を予想し待つ
 
 adcon_port=8; //AN8の値の更新開始
 CHS0=0;    // A/D変換portを指定
 CHS1=0;    // 0000:AN0 ,0001:AN1 ,0010:AN2 ,0011:AN3 ,0100:AN4 ,0101:AN5 ,0110:AN6
 CHS2=0;    // 0111:AN7 ,1000:AN8 ,1001:AN9 ,1010:AN10 ,1011:AN11
 CHS3=1;    // 1100:CVref ,1101:0.6vFixedVoltageReference
 DelayUs(20);  //変換ポート移動後は20us以上ホールドコンデンサのチャージ時間を取る
 GODONE=1;   // A/D変換開始
 DelayMs(1);  // A/D変換割り込みの終了を予想し待つ
  
 adcon_port=9; //AN9の値の更新開始
 CHS0=1;    // A/D変換portを指定
 CHS1=0;    // 0000:AN0 ,0001:AN1 ,0010:AN2 ,0011:AN3 ,0100:AN4 ,0101:AN5 ,0110:AN6
 CHS2=0;    // 0111:AN7 ,1000:AN8 ,1001:AN9 ,1010:AN10 ,1011:AN11
 CHS3=1;    // 1100:CVref ,1101:0.6vFixedVoltageReference
 DelayUs(20);  //変換ポート移動後は20us以上ホールドコンデンサのチャージ時間を取る傾斜
 GODONE=1;   // A/D変換開始
 DelayMs(1);  // A/D変換割り込みの終了を予想し待つ

}


//シリンダー出力処理関数 //
// white_cyl(cylinder_direction)
// 0:ブレーキ 1:A回転 2:B回転
void white_cyl(unsigned char cyl_moved_direction){
  
 switch (cyl_moved_direction){
  case 0: RC0=0;  //シリンダーブレーキモード
    RA2=0;
    break;
    
  case 1: RC0=1;  //A方向回転モード
    RA2=0;
    break;

  case 2: RC0=0;  //B方向回転モード
    RA2=1;
    break;

  default: break;
  
 }
 
}  
  



どうも動作がおかしい。
外部LEDにてデバッグ作業を半日続けているが、
mode_sw変数に、0〜6以外の変数が代入されている様子。
メインのループ処理の分岐変数のため、まったく動作しなくなる。
例外処理(外部LED点滅)を追記しては消してを繰り返していくうち、mode_swで分岐する処理のif文のどれにも入れていないことがわかった。
この症状が出たのはアナログ入力を追加したときなのだが、mode_sw変数とはなにも係わり合いが無い。
メモリマップレベルでの異常が発生しているような気がするが、当方ではそちらの実験は出来ない。

なんだろう。



posted by Gouranga at 01:47| 北海道 ☔| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2010年09月10日

くるまるく

クリップボード01.jpg若者の車離れもよくわかります。
維持できないもの。

この中だと、カブくらいか?
計算は曖昧なんであまり当てにならないけど。

並みの車の維持費、月7〜10万(燃料・車体・保険・車検 込)これ払ってたら、手元に何も残らないじゃん。
それでいて通勤に使えないので休日のみ。

月間平均休日日数は10日(大雑把に)

維持費8万として、休日1日あたり、8000円の価値を生まなくてはいけないことになる。
むしろノルマ。

貧乏性の私には無理です。見出せません。

レンタカーでいいよ......乗らないし。

政府はエコカー減税してる場合じゃないと思うよ。正直。
posted by Gouranga at 01:44| 北海道 ☁| Comment(3) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2010年08月24日

マッカッか

やばいよまずいよ。
rad_dou.jpg
降水予報マッカッカ

それよりなにより、今日仕事なのがまずいですよ
posted by Gouranga at 04:33| 北海道 ☔| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

1815ちゃん



電気工作業界でお世話になったことの無い者はいないと思われるほど
現在ポピュラーになっている、2SC1815に末期ガンが宣告されたようです。

インターネットではすでに大騒ぎです。
http://www.google.co.jp/search?hl=ja&rlz=1T4GGLL_jaJP393JP393&q=2sc1815+%E7%94%9F%E7%94%A3%E4%B8%AD%E6%AD%A2&lr=&aq=f&aqi=&aql=&oq=&gs_rfai=



まぁ、普通の人なら「代品いくらでもあるじゃん」
って終わるかと思いますが、問題なのはTO-92?パッケージ全般が対象という事。




知らない人はいないと思いますが、現在家電メーカー等から出されている製品の基板上には表面実装部品のみが鎮座し、リードパッケージ品はほぼ壊滅状態です。



ここで問題になるのが....
「電子工作好きな後任が育たない」
可能性があるという事。



電子工作を歩んできた人は、大抵半田ごて片手にリードパッケージの電子部品と格闘してきたはずです。
しかし、現在は表面実装パッケージ品のオンパレード。


世の中のニーズが小型薄型化へと急激にシフトした結果です。



はんだ槽を使用しなければ、実質的に実装が不可能なパッケージも乱立し始め、
(高クロックやバス線の多いパッケージを中心に)
もはや、ハードでの”電子工作”は壊滅しかけています。



これから先、電子工作好きはソフト屋へ強制シフトするしかないのでしょうか。

非常に危惧してます。






ちなみに、我が在庫は潤沢でした。
DSC00615.JPG

2sc1815 2sa1015


近日、大規模なカレントミラー回路を組む予定(また口だけで作らないかも)なので、
秋月で買い溜めしておこうかな....






皆さんもご注意を。






DSC00613.JPG

作業机がただの物置化してしまっている。
クッションの上で半田付けする違和感。
posted by Gouranga at 03:51| 北海道 ☔| Comment(1) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2010年08月23日

詰んだ

ip3100.jpg

我が家にはcanon ip3100が2台ある。
私が一人暮らししていた頃に使用していた物と、実家で使用していた物。

ある日、実家で使用していた側のプリンタに支障が発生した。


なぜこれほどcanonなのかというと、ヘッドのみの交換が可能だからだ。
ヘッドが詰まったり故障したりしても交換が容易。



以下はキャノンお客様サポートに私が送信したメールだ


----------------------------------------------
長年愛用していたip3100がある日から下記症状に見舞われております。

症状:緑1橙5の本体エラーランプ表示(ヘッドエラー?)
発症のきっかけ:ある日突然

インターネットを調べると、ヘッド端子の接触不良の可能性があるとのことで、ヘッドを一度脱着しましたが改善しません。

代々我が家はcanon一族でして、もう一台正常なip3100があります。こちらにエラーを出したヘッドを装着すると、こちらでも緑1橙5のエラーが出ました。
逆に、こちらの正常なヘッドを故障したip3100に装着すると、通常通りに印刷可能でした。

上記から、ヘッドの不良と判断することまでは出来たのですが、インターネットを調べていると、すでにヘッドのみの単品販売はされていない....との旨記載されたページが何件か見当たりました。
本当にヘッド単品での販売は現在されていないのでしょうか。もし購入可能であれば購入希望です。

今回のようなヘッド故障が、現在正常に動作しております側でも発生することを考えると....
とても恐ろしいです。修理対応のみですと、ヘッドが故障しただけで1万円近い金額となるため、新品のプリンタが買えてしまいます。(ヘッド新品、インク満タン、保障付)
環境保護が叫ばれている世の中であってこの無駄は許せるものでしょうか..
----------------------------------------------


なんとも愛情たっぷりのメールだ。




で、帰ってきたメール(相手の掲載了承得てないため、手打ちにて一部抜粋)





----------------------------------------------
オレンジ色のエラーランプが5回連続で点滅するエラーは、
プリントヘッド部分のトラブルもしくは、プリンタ本体のハードトラブルが生じている状態

部品であるプリントヘッドの提供は、行ってない。
http://store.canon.jp/user/UserMain/jsp/top/printhead


指摘のエラーについては、
修理が必要なエラーだが、iP3100につきましては、
部品保有期限を過ぎており、修理が出来ない。

----------------------------------------------




文章表現こそ違うものの、まさにこのような内容であった。





詰んだ \(^o^)/ 詰んだ




canonの現行品って、どれも価格.comでの評価がよくない。


何を買えばいいんだ.............
posted by Gouranga at 21:55| 北海道 ☔| Comment(2) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2010年08月22日

ICH9R


先日の電源死亡の件、現在も順調です。


と言いたい所ですが、



「今度はHDDがご臨終しました」


DSC00612.JPG


なんですとーーーーーーーー


いや、やはり何度もオート再起動を繰り返した電源死亡事件の時に相当負担が掛かったようです。


Asus P5k-EのICH9RでRAID0を組んで快調に使えていたのですが、
先日の電源事件以後不安定で、飛びました。


具体的にはRAID0の勝手な解消。
両方のHDD自体には正常なデータが残っている気がするのですが、
intelのraid構成だと、一旦解消されたraidを復元する方法がわかりません。



あーぁ、終わった。



デスクトップの復元作業で折角の土曜日が丸々無くなりました。







なんだかなぁ。
posted by Gouranga at 00:22| 北海道 🌁| Comment(2) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2010年08月17日

熱中症 あびびびびー

PCにも熱中症があるようだ。
しかも、どうやら不治の病のようだ。

DSC00587.JPG



「最初は単なるブルーバック(メモリかハードディスクのエラー)だと思ってたんだ....」



-- 盆休み2日目 --


夜、ブルーバックが頻発するようになる。



「作業なんかできねぇじゃねぇか」



思わず愚痴を漏らす自身。



「糞ったれが」


プログラミング中にブルーバックが発生し、もはや正気ではない。




-- 盆休み3日目 --

親戚宅訪問中 PCはコンセントを抜いて放置


-- 盆休み4日目 --

親戚宅から午後10時に帰宅


すかさず、もはや嫁同然であるPCに火入れする


「ピッ」



いつものようにBIOS起動音がした





次の瞬間、予期せぬ事態が発生した。




「ピチッ」



...突然PCの電源が落ちる






.......
...................
.................................
...................
.......




また、何事も無かったかのように突然勝手に電源が入る。



...次の瞬間


「カコン...カコン....  ピチッ」 (カコンはROMドライブの空転音)



「あれま、ビープ音すらしなかったぞ」


やけに耳障りなBIOSの立ち上がり音も、このときだけは沈黙





その後、何度もオート最短再起動機能が働き





「やっややべぇ、こんなに電源断繰り返してたらハードが壊れる」


と、とっさに動揺し、動揺した。




次の瞬間、コンセントを引っこ抜いていたのは言うまでも無い。






「BEEP音すらしないという事は....電源か」




PC中毒な私は、早速ヨボバシガメラに行った。





DSC00600.JPG

Owltech Seasonic SS-620GB 620W S12U





迷うことも無く購入。


購入の決め手は日本製コンデンサ使用と3年間新品保障




.....なんて太っ腹なんだ、私の勤めている会社の製品じゃこん(以下割愛






いま、まさに、この電源に入れ替えたPCからblogを書いている。


特に問題は無いだろう。
電源投入後、blogを書いたのみだが.......

ちなみに余談。
2万円の電源が衝動的に欲しくなったが、その差額で焼肉が食べられると自分に暗示をかけることにより抑制に成功している。
自分に甘い方は試されてみよ。







さて、ここからが電気屋。
コメントは面倒なので、画像にて。

DSC00588.JPG

今回ご臨終したのはこの電源。

Abee AS Power ER-2520A 520W

購入後、約2年頑張った。というか、短命すぎる。
当時購入価格12,000円前後

DSC00591.JPG

見た目がかっこよく、当時としては珍しいプラグイン方式を使用したモデル


下記に分解した内部写真を貼るが、見事に電解液漏れ祭りである。


DSC00592.JPG 

DSC00594.JPG 
 
 DSC00595.JPG 
 
DSC00596.JPG
 
DSC00597.JPG 
 
DSC00598.JPG 
 
DSC00599.JPG

電解液が回転中のファンに垂れたのか、ケース裏面は飛び散った電解液が付着し、パラダイスになっていた。(写真無)









と、Abeeから苦情が来ると精神的に良くないので、一応弁明。
当方の使用法にも若干の非は否めない。

DSC00605.JPG

ケース排気温度55度。(アイドル状態にて)







だって....




「ビデオカードが発熱しすぎなんだもん」





105度電解コンでも、この温度が常だと日本製でも大差ないかもな......


でも、よくこんなリップル垂れ流してそうな電源でCore2Duoはオーバークロック頑張れたな...





「1年に1回、年末の大掃除の時には電源も分解清掃しましょう。保障?なにそれ」
posted by Gouranga at 22:59| 北海道 ☁| Comment(5) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2010年07月31日

アブラコ油子の刺身

アブラコが某所より手に入ったため、刺身にて頂きました。
DSC00541.JPGアブラコちゃんを刺身で食べてることを記載したhpが見当たりませんでしたが、
所詮は同じ魚だから大丈夫でしょう。

少し独特の臭いがしましたが、食べれなくは無い。
小骨が多く、誤って食べてしまわないように注意が必要ですね。
味は、良く言えば淡白な〜、本音を言えば「味が無い」
食感を楽しむ感じですね。

35cmクラス級のアブだったので、結構たくさん食べれました。
おいしかったです。






「かめ〜」


DSC00545.JPG
↑しろくまパンのカメ

posted by Gouranga at 18:37| 北海道 🌁| Comment(2) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2010年07月13日

オーディオの総合誌 ステレオ(Stereo)7月号

まいど。

先週末はスピーカを作っとりました。

オーディオの総合誌 Stereo 2010.7月号は、なななんとスピーカーを作ってしまう企画です。
普通、他人との会話で

「スピーカー作ったんだぜヘッヘッヘ」
って言う場合は、スピーカーボックスにスピーカーを入れるだけの作業のことを指しますが、このキットは違います。
振動版やフレーム、ボイスコイル等の部品レベルからの組み立てなんだ!

これなら「俺、スピーカ作ったぜ ヘッヘッヘ」なんて、オタク笑いしても周囲がドン引きすること無いっ!(きっと!)




DSC00473.JPGDSC00472.JPG右が問題のキット。
・磁気回路
・エッジ(サラウンド)
・コーン紙(振動板)
・センターキャップ
・フレーム
・ダンパー
・ボイスコイルボビン
・引き出し線(錦糸線)
などから構成されているんだ。




ここからは作り方を紹介しちゃうよ。

@
磁気回路のシールを剥がしちゃいます。DSC00474.jpgDSC00475.jpg
















ADSC00477.jpg
付属のボンドを磁気回路の中心に「ニュルニュルリ」と塗りつけていきます。
多すぎると、フレームを取り付けたときに磁気回路の心臓部である中心の溝に進入してしまい、一発でゴミになってしまうので注意。
ネジ穴が2箇所あるので、分解する予定の無い人(分解する人はたぶん居ないと思います)は
その中にも”にゅにゅにゅー”っと接着剤を流し込んだほうが良いでしょう。









ちなみに、DSC00476.jpg使用する接着剤はブチル合成ゴム、石油系樹脂、トルエン、酢酸エチルの合成接着剤。
出した直後は粘性も無く、黒のペンテル絵の具を出した感じ。
1分もしたら固まり始め、2−3分後には結構固まっちゃいます。
臭いは、昔なつかしのビニール風船(半固体の液体をストローの先につけて遊ぶあの臭い)











B
接着剤を磁気回路に付けたら、乾燥する前に間髪入れずにフレームを取り付けます。
DSC00478.jpg凸部と溝を合わせます。向き等は写真を参考に。



「ガポッと」



磁気回路にフレームが吸い付けられるので、正常位置に持ってくるのに少し苦労するかもしれませんが、DSC00479.jpg
一度合ってしまえば簡単にはズレないでしょう。

ここまできたら、裏面はすでになにやら見慣れた感じに。
市販品と変わりませんね。


振動板ありませんけど。






C
磁気回路とフレームをより強く固定とするため、ネジ止めをします。DSC00480.jpg
2種類ネジが付属しますが、今回使うのは、写真の小さいネジです。
ちなみに、大きいネジとワッシャは、スピーカをボックスに打ち付ける際に使用します。










「皆さん大好きネジ止めのお時間です」DSC00481.jpg

「さぁ、ネーッジネジ」
「それ、ネーッジネジ」
「さぁ、ネーッジネジ」
「それ、ネーッジネジ」

「さぁ、ネーッジネジ」
「それ、ネーッジネジ」
「さぁ、ネーッジネジ」
「それ、ネーッジネジ」



....たぶんもう十分でしょう。
締めすぎて頭をネジ切りしないように注意してください。(たぶんその前にネジ山が負ける)



D
次に、ガムの包み紙みたいなシート(ギャップ調整シート)の両端を、軽くバンザイする程度に3mmづつ曲げます。DSC00482.jpg












曲げ目安はDSC00483.jpgこんな感じでしょうか。
写真なので、どてもとてもわかりにくいですね。
円の一箇所が少しへこんでいる様な感じになればokです。
たぶん、テンションをかけるためにするのでしょうか。
よくわかりません。
雑誌説明書に従います。
逆らうと何されるかわからないし...
ダンパーへの押し込み量は、この時点ではテケトーです。







E
DSC00484.jpgダンパーの外周側をフレームに固定します。
写真の位置に少しある段差部分に円を描くように”多めに”塗っていきます。
古いスピーカとかで大音量を流したときに「ガサガサッ」「ガタガタ」と、異音がする場合、
ここの接着が経年劣化で剥がれている場合が多いです。
スピーカーの寿命って、ここの接着剤の劣化か、振動板のエッジ(ゴムの部分)の乾燥割れであることが多いです。






接着剤が塗り終わったら、また間髪入れずにDSC00485.jpgギャップ紙を突っ込んだ状態のダンパーを押し付けます。
この時、引き出し線(電線)が、フレームの端子台に対して写真の向きになるようにします。
(普通のスピーカーは逆のような気もしますが、説明書にそう書いてるんだもん....)

写真が無いですが、ダンパーの外周部(接着剤と接している部分)を爪楊枝等でツンツン(デレデレ)してあげてください。より強固に接着できます。






F
次はいよいよ発音部(拡散部の方が正しいか?)であるコーン紙の接着です。DSC00486.jpg
先程までは完成してしまうと見えない部分でしたが、ここからは完成後も目に見える部分なので、つぶしたりしないように慎重に作業しましょう。

皆さん、振動板の裏側って見たことありますか?
こんな感じになってるんですよ!

全然普通でしたね。






フレームのコーン紙DSC00487.jpg(エッジ部分)があたる部分に接着剤を塗っていきます。
前もって一度コーン紙を取り付けて、位置決めを行ってからのほうがきれいに塗れると思います。









きれいに塗れたら、またまた間髪入れずにコーン紙を「うぉりゃ」っとはめ込みます。DSC00488.jpg
言葉での説明は難しいので写真を参考にしてください。


この時大事なのは
「躊躇しないこと」

度胸が必要です。目に見える部分ですし、どうしても慎重になってしまいます。
仕方が無いことです。

うまく接着剤の上にエッジを載せることが出来たら、またツンツンやっておいてください。
※この時、あまりエッジを横移動させようとしてグリグリすると、エッジの横から汚らしい物体がハミ出てきてしまいます。
 ティッシュ等でふき取ろうとすると被害が拡大するので、もしハミ出したとしても何もせず放置するのが賢明かと思います。




G
今回の工作の難所。DSC00489.jpg
ボイスコイルボビンとコーン紙(振動板)の接着です。
別に振動板に接着しなくても音はするのですが、振動板とボイスコイルがこすれて
「ガサガサ」
「ガサガサ」
「ガサガサ」
「ガサガサ」

「ガサガサ」
と、素敵な音色になるため、ぜひとも接着したいところです。

写真を見ていただければわかると思いますが、かなり接着スペースが限られます。
茶色のギャップ紙に接着剤が付着すると、ギャップ紙を後で取り外す段階で悲惨なことになるという他の方の書き込みがありましたので、命がけでもギャップ紙には接着剤が付かないようにしましょう。
実際に作業すればわかるのですが、ボイスコイルボビンとコーン紙の間にはそれなりの隙間があります。
ボイスコイルボビンとコーン紙は接続されてないといけないので、振動ロスを発生させないためにも、
ボイスコイルボビンとコーン紙の間を接着剤で橋渡しするイメージで結構コンモリ塗ったくりましょう。
でも、多く塗りすぎると今度は完成時にセンターキャップから大量に接着剤がはみ出て見た目が.....と、結構ジレンマな場所でもあります。


H
ここまできたら、内外部に塗りたくった接着剤を完全に乾かすため、1時間(説明書推奨時間)ほど放置プレイします。DSC00490.jpg
このときに、もう方ch分も作っておくとgoodでしょう。














酵母菌の発酵を待つパン生地達DSC00491.jpg






















〜〜そして1年が経過した〜〜










H
パン生地に程よくカビが付いたところで次へ行きます。DSC00493.jpg
磁気回路のミゾとボイスコイルボビンが接触しないように位置固定させていたギャップ紙を取り外します。

※写真は悪い例です。ギャップ紙は両手で丸い形を保ったまま真上へ引き抜きましょう。
(片手でカメラ持っていたので斜めに引き抜いてしまった)






I
実は、この時点ですでにスピーカーとしては完成なのです。DSC00494.jpg
一応、ボイスコイルを軽く押し込んでみてください。
※写真は悪い例です。両手で”真下”に”軽く” ”やさしく”押し込んでください。
もしこの時、ガリガリ感(どこかと接触してる感じ)があれば磁気回路とボイスコイルボビンが内部で接触している可能性があります。 ...諦めて下さい。(駄目でも使ってれば良くなるかも?)







J
よく家電店とかに行くと、オーディオコーナーのスピーカーなんかは潰されていることが多いですが、それでも彼(センターキャップ)は重要な仕事を担っています。Iの写真を見て気がついた人もいるかもしれませんが、この状態だとセンターの大穴からボイスコイルと磁気回路の溝の間に異物が入ってしまう可能性があるのです。
みなさんの汚宅(こらっ!)では、色々ないやらしい浮遊物が年中飛んでいるでしょうから、センターギャップ内の保護は必須です。DSC00495.jpg
先程の作業と同じ場所にまた接着剤を今度は薄めに塗ります。

神経使います。
多く塗りすぎると確実に見た目が悪くなるけど、薄すぎて後でポロッっと取れてくるのも嫌だし...
ビリビリ鳴られても嫌なので、結局厚化粧してしまいました。







DSC00496.jpgこれがセンターキャップ。
子供が居る家庭では、このきれいで美しい球形も1日持つかどうか。











DSC00497.jpg「カポッと」

すこし(軽く)上からグリグリしてあげてください。

潰さないでね。






K
引き出し線の処理をします。DSC00498.jpg
言葉で説明するの大変なので、写真を参考にしてください。
芯線は、グイグイ引っ張ると簡単にボイスコイルと切り離れてしまうそうなので慎重に慎重に。
スピーカ内部の引き出し線はピンと張らないようにしてください。









DSC00499.jpgこんな感じ。
写真ではしていないですが、半田付けしたほうがいいと思います。









L
2つとも作れば完成です。DSC00500.jpg
写真を見ていただければわかるかと思いますが、センターキャップ周囲の接着剤が汚すぎる。
ここはもし次回製作する機会があればぜひとも改善したいですね。
接着剤が多すぎると、微細な振動が抑制され、表現力が落ちる可能性が高い。








M
キットが入っていた箱は、スピーカーBOX(バッフル)になる。DSC00501.jpg
音は悪くない。スピーカー径の関係もあるが、やはりミドルレンジユニットに近い。
まともな筐体を用意してあげればいい音が出そう。5Wユニットだけど、よくがんばってる。


近々、まともなバッフルを作ってあげたい。
(アンプと。)



みんなもつくろうよ。
(もう雑誌手に入らないかもだけど)



P650仕様
型式:6.5cmコーン型フルレンジ
インピーダンス:8Ω
最低共振周波数:150Hz
再生周波数帯域:fo〜20kHz
出力音圧レベル:85dB/w(1m)
入力(NOM):5w
m0:1.7g
Q0:0.75
実効振動半径:2.6cm
マグネット質量:74g
総重量:249g
バッフル穴寸法:φ58mm
標準エンクロージャ方式:位相反転形
標準エンクロージャ内容積:1.2L(1〜3L程度まで)
posted by Gouranga at 00:00| 北海道 ☔| Comment(2) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2010年07月06日

某曲

プロカリテ2試してみたけど
縮れ毛相手じゃ意味がなーぃ♪
posted by Gouranga at 23:16| 北海道 ☁| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする
×

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