ラジオ少年の楽しい電子工作、その他

AVRを使った簡単な回路の実験、そして日々のちょっとした出来事を書きます。

さらば運転免許証

2016年04月26日 | 日記

運転免許証の更新がやって来ました。高齢者は今までの様に免許の更新が出来ません。教習所へ行き教習を受け高齢者講習終了証明書を貰う必要があります。勿論、それなりの費用が掛かります(¥6,000位かかります)。私はゴールドですので若ければもし更新すれば5年間有効ですが、高齢者の場合は3年になります。

確かに、高齢者の車運転時の事故は増えて居るようです。以前は車を持っていましたが、現在は手放して持っていません。車を持ちそれを維持していくだけの経済力がないのです。また将来車を持てるようにはなりそうもありません。

この際、車は私には縁のないものと、運転免許証は返納しました。身分を証明するのに役立った免許証ですが、返納すると代わりに申請をすれば「運転経歴証明書」の交付が可能です。(写真と¥1,000が必要)

その申請を行い、今日、「運転経歴証明書」を受け取りました。運転免許証とほぼ同じ大きさですが、赤い字で自動車等の運転は出来ませんと記載されています。

やはり、お役所です、郵送はせず取りに来い、、、です。また、写真は自前のデジカメで撮ったものを持っていったのですが、これにいちゃもんが付きました。顔はちゃんと写っているのですが、肩の上に影が少しあったのです。写真の条件は無背景と有ります。私としては無背景の心算だったのですが、この影がアウトです。

仕方がないので、よく見かける写真BOXへ行き撮りなおしました。これが¥800。でもメニューの免許証を選び指示通りに撮影すれば文句の付け所のない写真が出てきます。最初から、これを使えば良かったのですが、後の祭りですね。

そんな訳で、車とは縁が切れました。幸い、自転車で買い物等は今のところ大丈夫ですが、ちょっと遠い所へはタクシーを利用するしかないようです。

その内、この世とも縁が切れますがね。其れまでの辛抱です。何だか、高齢者にとっては肩身の狭い世の中になって来ました。

 

コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

再びR8C/M12A

2016年04月24日 | 日記

大分ご無沙汰のR8C/M12A、今回は音の再生です。PCM(wave)データをSDカードから読み込み音を出す。

と云ってもプログラムは自分では作れません。(長い間ペンデインング状態でしたが)

https://www.youtube.com/watch?v=mPU_wOXIxTMにあるk346さんの動画がその発端です。senshuさんも興味を持たれている様子ですし、ぜひ、やって見たいと思います。

k346さんのご好意でソースをご提供いただけると云うことですので、ご好意に甘えさせて戴くことにしました。

ソースの転送方法はどの様にしたらいいのかですね。

2016/4/27(木)

k346さん、お尋ねします。私のメールアドレスをここに表示すれば、テンプでソースを転送していただけますか?

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

2ch電子ボリウム(NJW1159D)(赤外線受光センサ追加ーその3)

2016年04月24日 | 日記

2ch電子VRの回路図を書きました。急いで書いたので間違いが有るかも。作ると時に書いたノートのメモ書きを纏めただけですので、いと怪しい。

取り合えず、リモコンを除けば期待通りに動作していますのでこれはこの辺で良しとして終わりにします。

次はR8C/M12Aに戻りwav ファイルの音楽再生に移行する予定です。真空管アンプも興味があるのですが、、、、

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

2ch電子ボリウム(NJW1159D)(赤外線受光センサ追加ーその2)

2016年04月22日 | 日記

 

プログラム続き。

void setup() {
/* PORTB = 0x00;
 DDRB = 0xff;
 PORTC = 0x00;
 DDRC = 0xff;
 PORTD = 0xff; //pullup
 DDRD = 0x00; */
pinMode(A0, OUTPUT);
digitalWrite(A0, HIGH);
pinMode(A1, OUTPUT);
digitalWrite(A1, HIGH);
pinMode(A2, OUTPUT);
digitalWrite(A2, HIGH);
pinMode(A3, OUTPUT);
digitalWrite(A3, HIGH);
pinMode(A4, OUTPUT);
digitalWrite(A4, HIGH);
pinMode(A5, OUTPUT);
digitalWrite(A5, HIGH);
pinMode(SS, INPUT);
pinMode(SCK, INPUT);
pinMode(MOSI, INPUT);
pinMode(MISO, OUTPUT);
pinMode(ROT_A_PHA, INPUT_PULLUP);
pinMode(ROT_B_PHA, INPUT_PULLUP);
pinMode(VOL_DATA, OUTPUT);
pinMode(VOL_CLOCK, OUTPUT);
pinMode(VOL_LATCH, OUTPUT);
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE1);
SPI.setClockDivider(SPI_CLOCK_DIV16);
SPI.begin();
irrecv.enableIRIn(); // Start the receiver
 
lcd.begin(16, 2);
lcd.clear();
lcd.noCursor();
delay(10);
send_att_mute_value_lch();
send_att_mute_value_rch();
lcd.setCursor(0,0) ;
lcd.print("ATTENATION LEVEL");
lcd.setCursor(6,1) ;
lcd.print(" MUTE");
 PCICR |= (1 << PCIE2);
 PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
sei();
}
void loop() {
#if 0
 if (irrecv.decode(&results)) {
       switch (results.value) {
     // case  0xFDA05F:
      case 0xC19046B9:  //MUTE
       send_att_mute_value_lch();
       send_att_mute_value_rch();
       mute = 1;
       vol_p = 0;
       vol_n = 0;
         break;
          
      case 0xC1908679:  // Vol +
         // code = 0xC1908679;
          delay(250);
         data_inc();
         vol_p = 1;
         vol_n = 0;
         mute = 0;
         break;
      
      case 0xC19006F9: // Vol -
          //code = 0xC19006F9;
          delay(250);
         data_dec();
         vol_n = 1;
         vol_p = 0;
          mute = 0;
        break;

        case 0xC1908976:
         vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;

        case 0xC19049B6:
         vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
        case 0XC19021DE:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
        case 0xC190817E:

        break;
        case 0xC19009F6:
        vol_n = 0;
         vol_p = 0;
          mute = 0;  
        break;
        case 0xC19008F7:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
        case 0xC19041BE:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
        case 0xC190A15E:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
        case 0xC190C13E:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
        case 0xC19001FE:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
      
     case 0xFFFFFFFF :
           if( vol_p != 1 /*&& code != 0xC19006F9 */ && mute != 1){
           data_dec();
           delay(180);
          }
           if( vol_n != 1 /*&& code != 0xC1908679 */ && mute !=1 ){
           data_inc();
           delay(180);
           }
           break;
           }
           delay(250);
           irrecv.resume();
            code = 0;
                  
       }
#endif
//以下、秋月リモコン用


 if (irrecv.decode(&results)) {
       switch (results.value) {
      case  0xFDA05F: //MUTE
      //case 0xC19046B9:  //MUTE
       send_att_mute_value_lch();
       send_att_mute_value_rch();
       mute = 1;
       vol_p = 0;
       vol_n = 0;
         break;
          
      case 0xFD906F:  // Vol +
          code = 0xFD906F;
          delay(250);
         data_inc();
         vol_p = 1;
         vol_n = 0;
         mute = 0;
         break;
      
      case 0xFD807F: // Vol -
          code = 0xFD807F;
          delay(250);
         data_dec();
         vol_n = 1;
         vol_p = 0;
          mute = 0;
        break;

        case 0xFD00FF:
         vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;

        case 0xFD40BF:
         vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
        case 0XFD20DF:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
        case 0xFD609F:

        break;
        case 0xFD10EF:
        vol_n = 0;
         vol_p = 0;
          mute = 0;  
        break;
        case 0xFD50AF:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
        case 0xFD30CF:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
        case 0xFDB04F:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
        case 0xFD708F:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
        case 0xC19001FE:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
         case 0xFD08F7:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
         case 0xFD8877:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
         case 0xFD48B7:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
         case 0xFD28D7:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
         case 0xFDA857:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
         case 0xFD6897:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
         case 0xFD18E7:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
         case 0xFD9867:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
         case 0xFD58A7:
        vol_n = 0;
         vol_p = 0;
          mute = 0;
        break;
        
     case 0xFFFFFFFF :
           if( vol_p != 1 && code != 0xFD807F  && mute != 1){
          // if( vol_p != 1 && code == 0xFD906F  && mute != 1){
           data_dec();
           delay(150);
          }
           if( vol_n != 1 && code != 0xFD906F  && mute !=1 ){
          //if( vol_p != 1 && code == 0xFD807F  && mute != 1){
           data_inc();
           delay(150);
           }
           break;
           }
           delay(220);
           irrecv.resume();
            code = 0;
                  
       }                 
}

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

2ch電子ボリウム(NJW1159D)(赤外線受光センサ追加ーその1)

2016年04月22日 | 日記

秋月で売られているリモコンでとりあえず動作する(完璧では有りませんが)プログラムをでっち上げました。

ゴミが含まれて居ますが取り合えず使えそうです。

リモコンのVOL+を押すとゲインが1dB上がり、押し続けると連続してゲインが最大0dBまで上がります。VOL-を押すとこの逆の動作をします。VOL+とVOL-の間にある>||を押すとMUTEになります。

それ以外のボタンを押す(押し続けると)と一桁目が変化します。例えば 表示が-72dBなら-71dB、-72dBを繰り返します。関係ないボタンをしても何の影響も受けないようにしたいと思いいろいろ考えてみましたが、どうもうまく行かず私にはこの辺が限界です。

回路図も作るつもりですが、さっぱり先へ進みません。リモコン制御が完全でない為、モチベーションが上がりません。

ロータリエンコーダの「rotary.h」はhttp://www.buxtronix.net/2011/10/rotary-encoders-done-properly.htmlを参照しました。

最初はタイマー割り込み、や普通のポートの割り込みを使ったのですが、期待はずれで、Loop()に入れたりしていましたが、今一動きが悪く上記のライブラリを利用しました。

Arduino Sketch

#include   //<----これは要らない
#include
#include
#include
#include
//-------------     RS E  D4 D5 D6 D7 --------------
LiquidCrystal lcd(19,18,17,16,15,14);
volatile int enc_data = 96;
volatile unsigned data_l;
volatile unsigned data_r;
volatile unsigned char vol_p;
volatile unsigned char vol_n;
volatile unsigned char mute;
volatile unsigned long code;

#define ROT_A_PHA   2
#define ROT_B_PHA   3
Rotary r = Rotary(ROT_A_PHA,ROT_B_PHA);      

#define VOL_DATA       11
#define VOL_CLOCK      13
#define VOL_LATCH      10
int RECV_PIN = 7;
IRrecv irrecv(RECV_PIN);
decode_results results;

void send_att_mute_value_lch(void)
{
  digitalWrite(VOL_LATCH ,LOW);    
  int data_mute_l;
  data_mute_l = 0xff00; //Lch Mute
  data_l = data_mute_l;
    enc_data = 96;
  SPI.transfer16(data_l);
   digitalWrite(VOL_LATCH ,HIGH);
}

void send_att_mute_value_rch(void)
{
  digitalWrite(VOL_LATCH ,LOW);    
  int data_mute_r;
   data_mute_r = 0xff10;//Rch Mute
   data_r = data_mute_r;
   enc_data = 96;
   SPI.transfer16(data_r);
   digitalWrite(VOL_LATCH ,HIGH);    
   lcd.setCursor(6,1);
    lcd.print(" MUTE ");   
 }
 
void send_att_0_value_lch(void)
{
  digitalWrite(VOL_LATCH ,LOW);    
  int data_0_l;
  data_0_l = 0x0000; //Lch Mute
  data_l = data_0_l;
  SPI.transfer16(data_l);
   digitalWrite(VOL_LATCH ,HIGH);    
   
 }

void send_att_0_value_rch(void)
{
  digitalWrite(VOL_LATCH ,LOW);    
  int data_0_r;
 
  data_0_r = 0x0010;//Rch Mute
  data_r = data_0_r;
  SPI.transfer16(data_r);
  digitalWrite(VOL_LATCH ,HIGH);    
  disp_lcd_0db(enc_data);
 }

int load_att_value_lch(int data_l)
{
  digitalWrite(VOL_LATCH ,LOW);     
  SPI.transfer16(data_l);
  digitalWrite(VOL_LATCH ,HIGH);    
}
   
int load_att_value_rch(int data_r)
{
  digitalWrite(VOL_LATCH ,LOW);    
  SPI.transfer16(data_r);
  digitalWrite(VOL_LATCH ,HIGH);    
 }

int disp_lcd_0db(int enc_data)
{
  lcd.setCursor(5,1) ;
    lcd.print("    dB");
    lcd.setCursor(8,1) ;
    lcd.print(enc_data);
   
}     

int disp_lcd_1_9db(int enc_data)
{
     lcd.setCursor(5,1) ;
     lcd.print("  - dB");
     lcd.setCursor(8,1) ;
     lcd.print(enc_data);
}

int disp_lcd_10_94db(int enc_data)
{
     lcd.setCursor(5,1) ;
     lcd.print(" -  dB");
     lcd.setCursor(7,1) ;
     lcd.print(enc_data);
}

int disp_lcd_10_95db(int enc_data)
{
     lcd.setCursor(5,1) ;
     lcd.print(" -  dB");
     lcd.setCursor(7,1) ;
     lcd.print(enc_data);
}     

int disp_lcd_95db(int enc_data)
{
    lcd.setCursor(5,1) ;
    lcd.print(" -  dB");
    lcd.setCursor(7,1) ;
    lcd.print(enc_data);
}

void data_inc(void){
  enc_data ++;   // データーをインクリメント
  enc_data = constrain(enc_data, 0, 96);
  if(enc_data >=10 & enc_data
   data_l +=  0x0200;
   data_r +=  0x0200;
     load_att_value_lch(data_l);
     load_att_value_rch(data_r);
     disp_lcd_10_95db(enc_data);
     }
    
    if(enc_data == 96){ //MUTE
    send_att_mute_value_lch();
    send_att_mute_value_rch();
    }
   
  if(enc_data == 0){
    data_l +=  0x0200;
    data_r +=  0x0200;
    load_att_value_lch(data_l);
    load_att_value_rch(data_r);
     disp_lcd_0db(enc_data);
    }
 
  if (enc_data 0) {
    data_l +=  0x0200;
    data_r +=  0x0200;
    load_att_value_lch(data_l);
    load_att_value_rch(data_r);
    disp_lcd_1_9db(enc_data);
      }
   }
 

void data_dec(void){
     enc_data --;     // データーをデクリメント
     enc_data = constrain(enc_data, 0, 95);
   
     if(enc_data == 95){
     data_l -= 0x4000;
     data_r -= 0x4000;
    load_att_value_lch(data_l);
    load_att_value_rch(data_r);
    disp_lcd_95db(enc_data);
     }
    
    if(enc_data >=10 & enc_data
      data_l -= 0x0200;
     data_r -= 0x0200;
    load_att_value_lch(data_l);
    load_att_value_rch(data_r);
    disp_lcd_10_94db(enc_data);
    }
    
  if (enc_data 0) {   
     data_l -= 0x0200;
     data_r -= 0x0200;
    load_att_value_lch(data_l);
    load_att_value_rch(data_r);
     disp_lcd_1_9db(enc_data);
   }
     
if(enc_data == 0){
    send_att_0_value_lch();
    send_att_0_value_rch();
    }
 }


ISR(PCINT2_vect) {
unsigned char result = r.process();
    if(result) {  
      if(result == DIR_CW)
        data_inc();
        else
         data_dec();
          }
 
}
         
文字数が規定をオーバーするのでsetup()とloop()はその2へ書きます。

リモコンと赤外線受光器の角度に拠っては誤動作をする場合があります。この辺が面白くない所ですが、、、、。

何しろド素人が作ったプログラムですので動作は保証の限りではありません。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする