JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

アマガエルとムラサキツユクサ

2023-05-30 12:11:16 | 自然観察
 昨日から今日にかけて西日本が梅雨に入ったと思われると気象庁が発表しました。
 こちら東北南部も昨日は一日中雨ふりでした。今年は梅雨入りが早いかもしれません。

 今日は、雨が上がったので午前中農作業をしました。コマツナとハツカダイコンの間引き。そしてナスの支柱を仮のものからしっかりとしたものに立て直しました。


 畑もまわりも全体にじめっとしています。

 カエルを一匹発見。


 「ニホンアマガエル」です。畑や花の鉢で普通に見かけます。

 「落ちこぼれ花壇」では、「ムラサキツユクサ」が咲き始めました。


 昨年までは見かけませんでしたので、お隣さんの花壇からこぼれてきたのでしょう。

PIC16F1827 8桁7セグメントLED表示周波数カウンタ

2023-05-29 19:24:37 | PIC16F1827
 PIC16F1827を使った周波数カウンタは2019年に試作し、JH7UBCホームページのここに掲載しています。周波数カウンタの仕組みも解説していますので、ご一読ください。

 この時は、LCD1602を周波数の表示器として使いました。今回は、MAX7219使用の8桁7セグメントLEDを表示器として使用した周波数カウンタを試作してみます。プログラムは、LCD版周波数カウンタのプログラムの表示部分を8×7セグメントLEDに差し替えました。

 回路図です。入力を増幅するため簡単なアンプをつけました。
 カウンタのゲートが開いている時LEDが点灯します。


プログラムです。
----------------------------------------------------------
/* 
 * PIC16F1827 Frequency Counter
 * Author: JH7UBC
 * Keiji Hata
 * 2023/05/29
 */

#include <stdio.h>
#include <stdlib.h>
#include <xc.h>

// CONFIG1
#pragma config FOSC = ECH //外部クロック
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = OFF
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = ON
#pragma config CLKOUTEN = OFF
#pragma config IESO = OFF
#pragma config FCMEN = OFF

// CONFIG2
#pragma config WRT = OFF
#pragma config PLLEN = OFF
#pragma config STVREN = ON
#pragma config BORV = HI
#pragma config LVP = OFF

#define _XTAL_FREQ 20000000 //クロック20MHz
#define LED LATAbits.LATA4

// MAX7219 Register Address
#define MAX7219_DECODE_MODE 0x09
#define MAX7219_INTENSITY 0x0a
#define MAX7219_SCAN_LIMIT 0x0b
#define MAX7219_SHUTDOWN 0x0C
#define MAX7219_DISPLAY_TEST 0x0f

#define CS LATBbits.LATB3

void SPI_init(){
      SSP1CON1 = 0b00100000; //SSP1EN=1:SSP1 Enable,CKP=0:Idle Low,Clock=FOSC/4
      SSP1STAT = 0b01000000; //SMP=0:middle,CKE=1:Active to Idle
}

void maxTransfer(uint8_t address,uint8_t data){
      CS = 0;
      uint8_t dammy;
      //send address
      dammy = SSP1BUF;
      SSP1BUF = address;
      while(!SSP1STATbits.BF);
      //send data
      dammy = SSP1BUF;
      SSP1BUF = data;
      while(!SSP1STATbits.BF);
      CS =1;
}

void MAX7219_init(){
      maxTransfer(MAX7219_DECODE_MODE, 0xff);// Code B decode for digits 7-0
      maxTransfer(MAX7219_INTENSITY, 0x03); // Intensity
      maxTransfer(MAX7219_SCAN_LIMIT, 0x07);// Display digits 01234567
      maxTransfer(MAX7219_SHUTDOWN, 0x01);// Normal Operation
      maxTransfer(MAX7219_DISPLAY_TEST, 0x00);// Normal Operation
}

void Clear_Display(){
      for(uint8_t i=1;i<=8;i++){
         maxTransfer(i,0x0f);
    }
}

//数値を表示する
void Num_Display(uint32_t n){
      uint32_t josu = 10000000;
      uint8_t sho;
      uint32_t joyo;
      uint8_t i=8;
      uint8_t zflag = 1;
      while(i){
          sho = n / josu;
          joyo = n % josu;
         if(zflag==1 && sho==0 && i!=1){
              sho = 0x0f; //空白
          }
          else{
              zflag = 0;
          }
           maxTransfer(i,sho);
          n = joyo;
          josu = josu / 10;
          i--;
    }
}

static uint16_t MeassuremmentCnt;

/*TMR2のオーバーフロー割り込み*/
void __interrupt(high_priority) isr(){
     TMR2IF = 0;//TMR2割り込みフラッグクリア
     MeassuremmentCnt--;
     if (MeassuremmentCnt == 0){
         TMR1ON = 0;//ゲートを閉める。
         TMR2ON = 0;//TMR2を停止する。
    }
}

/*周波数測定*/
uint32_t FreqMeassurement(){
     static uint32_t freq;
     /*TIMERの初期化*/
     TMR1IF = 0; //TMR1割り込みフラッグクリア
     TMR1L = 0; //TMR1クリア
     TMR1H = 0;
     /*TMR2の初期化*/
     TMR2IF = 0; //TMR2割り込みフラッグクリア
     MeassuremmentCnt = 1221;
     TMR2 = 0x4C;
     /*counter 初期化*/
     freq = 0;
     /*割り込み許可*/
     PEIE = 1;
     GIE = 1;
     //count start
     TMR2ON = 1;
     /* gate time調整 NOP 25 */
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     NOP();
     /*ゲートを開ける*/
     TMR1ON = 1;
     while(TMR2ON){
         if(TMR1IF == 1){
             TMR1IF = 0;
             freq ++;
         }
    }
     if(TMR1IF == 1){
         TMR1IF = 0;
         freq ++;
    }
     /*換算*/
     freq = freq * 65536;
     freq = freq + ((unsigned)TMR1H * 256) + (unsigned)TMR1L;

     return(freq);
}


int main() {
     ANSELA = 0b00000000 ; // AN0-AN4は使用しない
     ANSELB = 0b00000000 ; // AN5-AN11は使用しない
     TRISA = 0b10000000 ; // RA7は入力 他は出力(RA5は入力)
     TRISB = 0b01000000 ; // RB6は入力他は出力
     PORTA = 0b00000000 ; // PORTA初期化
     PORTB = 0b00000000 ; // PORTB初期化
     CS = 1; //CS初期値
     SPI_init();      //SPI初期化
     MAX7219_init();  //MAX7219初期化
     Clear_Display(); //ディスプレイクリア
     LED = 0;
     /*TMR2の設定*/
     TMR2IE = 1; //TMR2割り込み許可
     TMR2IF = 0; //TMR2割り込みフラッグクリア
     T2OUTPS0 = 0; //TMR2 output poststscaler 1:1
     T2OUTPS1 = 0;
     T2OUTPS2 = 0;
     T2OUTPS3 = 0;
     TMR2ON = 0; //TMR2 off
     T2CKPS0 = 0; //TMR2 prescaler 1:16
     T2CKPS1 = 1;
     TMR2 = 0; //TMR2 clear

     /*TMR1の設定*/
     TMR1IE = 0; //TMR1割り込み禁止
     TMR1IF = 0; //TMR1割り込みフラッグクリア
    T1CKPS0 = 0; //TMR1 prescaler 1:1
     T1CKPS1 = 0;
     T1OSCEN = 0; //TMR1 Clock source = T1CKI
     TMR1CS1 = 1;
     TMR1CS0 = 0;
     nT1SYNC = 1;
     TMR1ON = 0; //TMR1 stop
     TMR1L = 0; //TMR1 clear
     TMR1H = 0;

     while(1){
         /*周波数の測定*/
         LED = 1;//RA4 LED ON
         uint32_t frequency = FreqMeassurement();
         LED = 0;//RA4 LED OFF
         Num_Display(frequency);
         __delay_ms(500); 
    }
}
----------------------------------------------------------
 MPLAB X IDEは、v6.00をXC8はv2.40を使っています。
 ゲートタイム(1秒)は、プログラム中のNOP();の数で調整します。
 今のところ、NOP 25個でちょうど良いようです。
 MAX7219使用8X7セグメントLEDテストのままの表示プログラムですと、入力がない時に何も表示されませんので、ちょっと不安になります。そこでカウントが0の時は、0が表示されるように変更しました。

 1MHzを入力した時の表示の様子です。


 10MHzの時です。


 周波数の測定範囲は10Hz~約50MHzです。
 誤差は、数ppm程度だと思います。
 自作SGからの信号ですから、どちらがずれているかの判断は難しいです。

 この後、簡単な筐体に入れて、周波数カウンタとして仕上げてみたいと思います。

ツマグロヒョウモン

2023-05-29 09:38:42 | 自然観察
 ぼーっと畑を眺めていたら、蝶々がひらひらと飛んできました。

 あまり見たことのない蝶だったので、撮影しました。


 近寄ってシャッターを押そうとするとひらりと別な場所に移動します。

 蝶の撮影は難しい。なんとか羽を広げたところを撮影することができました。

 なんという名前の蝶なんだろう。図鑑でしらべると、「ツマグロヒョウモン」でした。(メスです)ヒョウ柄でヘリが黒いのでこの名前がついたのでしょう。

 日本の南部に生息していた蝶のようですが、近年生息域がどんどん北の方に上がってきて、私が住む福島県でも普通に見られるようになったようです。温暖化のせいでしょうかね。

 そういえば、関西地方に繁茂していたセイタカアワダチソウが、こちらでも大規模に生育しています。確かに温暖化が進行していることを感じます。


今日はトウモロコシの種まき

2023-05-26 14:06:37 | 家庭菜園と花
 今日はトウモロコシの種まきをしました。品種は「ゴールドラッシュ」。

 5mの畝を2本立て、30cm間隔で種をまきました。1カ所に3粒ずつ蒔き、最終的に1本にします。



 最近のトウモロコシの種は、写真のように薬でコーティングされています。

 以前は種を蒔いた畝に不織布をかけていたのですが、これなら鳥の食害もないと思い、畝はそのままにしました。


 今日時点での畑の様子です。ハツカダイコン、コマツナ、チンゲンサイが発芽しました。ナス、トマト、ピーマン、ズッキーニなどの苗も順調に成長しています。


 今日はこのほか、最初に蒔いたハツカダイコンの間引きをしました。
 6月中旬には収穫できそうです。

クマバチ

2023-05-25 21:16:54 | 自然観察
 今年の家庭菜園も着々と苗の定植や種まきが進んでいます。

 今日は、「湯上り娘」というエダマメの種を蒔きました。なんだかうまそうでしょ。残すところは、トウモロコシとオクラとバジルといったところです。

 先日種まきをしたハツカダイコンは双葉が開き、間もなく間引きをします。ふとハツカダイコンにかけたネットを見るとクマバチが一匹。体長2cmくらいの大型のハチです。


 正確にはキムネクマバチです。

 当局のアンテナタワーの近くで、よくホバーリングをしているのを見かけるのですが、今日はネットの上で一休みしてるのでしょうか。

 ひょっとして死んでいるのではと思って指でつついてみるとモソモソと動きました。生きています。昨日は寒かったので、日向ぼっこでもしていたのでしょう。

 今年は、畑にくる昆虫も写真に撮ってみようと思います。