JH7UBCブログ

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

落ちこぼれ花壇

2021-05-31 13:12:53 | 家庭菜園と花
 一昨年、タワーの北側に小さな花壇を作りました。

 鉢の土の余ったものを入れ、鉢植えの植物のいくつかをこの花壇に植え替えたりしていました。

 昨年は、隣さんからホウセンカの種がこぼれてきて発芽して、花壇一面にたくさんの花を咲かせました。

 今年は、一面にビオラが咲きました。これは昨年畑に咲いたビオラを移植したので、その種が花壇にこぼれたためです。


 他には、やはりお隣さんから種がこぼれてきた、オルレア、キバナコスモスなどが芽を出し花を咲かせ始めました。これからどんな植物が生えてくるか楽しみです。

 今日、この花壇の名前をつけました。

 「落ちこぼれ花壇」です。
 落ちこぼれだって、きれいな花を咲かせるんだよね。


 今日は、5月最後の日。朝から晴れて気持が良いです。

 上の方で「ツッピー ツッピー」と鳥が鳴いています。ちょうどデジカメを持っていたので、電線に止まっていた鳥をパチリ。


 口に青虫をくわえています。「虫取ったぞー」って言っているのかな。
 何ていう鳥かな?
 胸から腹にかけて黒い帯があります。シジュウカラです。
 今は流行らくなったコンパクトデジカメをズーム最大で撮影しました。
 けっこうよく撮れるものですね。

PIC12F1822 MCC IOC テスト

2021-05-25 19:18:18 | MPLAB X MCC
 PIC12F1822を使って、MCCでIOC(Interrupt on Change 状態変化割込み)の設定とテストをします。

 テストする回路です。RA5をプルアップしておき、SWが押すとピンの入力の状態が1から0に変化します。この時発生するIOC割込みで、RA0に接続したLEDを点滅させます。(SWを押すたびにLEDは点灯と消灯を繰り返します。)


 projectを作成して、MCCを開きます。
 System Moduleの設定です。
 INTOSC,FOSC,Clock 8MHzとしました。Low-voltage Programingのチェックを外します。
 RA0はoutput、RA5はinputとし、WPU(ウィークプルアップ)します。

 Pin Moduleです。


Pin ModuleのRegisterを開きます。IOC割込みのため、IOCAN5をenableにします。これによって、RA5の入力が1から0に変化する(立下り)時に割込みが発生します。



 Interrupt Moduleの設定です。
 Pin ModuleのIOCOをEnableにします。

 設定を終了して、Generateして、MCCを終了し、プログラミングに入ります。
main.cです。
--------------------------------------------------------
/*
* PIC12F1822 MCC IOC test
* 2021.05.25
* JH7UBC Keiji Hata
*/
#include "mcc_generated_files/mcc.h"

void main(void)
{
SYSTEM_Initialize();// initialize the device

INTERRUPT_GlobalInterruptEnable();// Enable the Global Interrupts

INTERRUPT_PeripheralInterruptEnable();// Enable the Peripheral Interrupts

LATA0 = 0;
while (1)
{
}
}
--------------------------------------------------------

普通は、このmain()の中に__interrupt() ISR();という記載をして、割込み時に実行する関数(この場合は、ISR())指定するのですが、ありません。

では、どこにあるのでしょうか。interrupt_manager.cの中にあります。
そして、割込みがあった時に、PIN_MANAGER_IOC();が実行されます。

では、PIN_MANAGER_IOC()は、どこにあるのでしょうか。pin_manager.cの中にあります。
更に、IOCAF5のフラッグが立った時に、IOCAF5_ISR();が実行されます。
従って、IOCAF5_ISR()の中に、割込み時に実行する処理を記入します。
今回は、LEDを点滅させる処理を書きました。(赤い四角の部分
ここで使う変数(この場合は、val)は、pin_manager.cの最初の方で定義します。今回は、volatile unsigned char val = 0;としています。


 これで、build,書き込みをしました。
 ブレッドボードです。

 タクトスイッチを押すたびに点灯と消灯を繰り返します。
 ただ、タクトスイッチのチャタリングのため、押し方によっては誤動作します。
 今回のプログラムでは、チャタリング対策はしていません。

 MPLAB X MCCを使っての感想です。
 設定を画面上でできるので、簡単なのですが、一旦設定してから後で変更しても変更内容が反映されないことがあります。

 それから、前の設定やhファイルの記憶が残っていて、エラーがでたりします。

 これらを回避するには、結局プロジェクトを作り直すしかありません。ですから、迷路に入ってしまった時は、問題のプロジェクトを削除して、作り直した方が良いようです。それから、MCC設定に入る前にしっかりと設計を行うことが肝心だと思いました。

今日の畑

2021-05-24 20:24:22 | 家庭菜園と花
 今年の5月はもう梅雨に入ったかのように雨が多く、農作業が思うように進みません。

 今日は、1週間ぶりに晴れ。晴れれば、風が爽やかな良い季節です。

 周りの田んぼでは、田植えがそろそろ終わろうとしています。

 さて、我が家の畑の様子です。

 これまで、ナス、トマト、ピーマン、シシトウの苗の定植が終わり、ハツカダイコン、コマツナ、トウモロコシ、オクラ、インゲン、ミズナの種蒔きが終わりました。

 空いているスペースには、ケールとバジルを植える予定で、今苗を作っています。

 6月に入れば、最初の収穫として、ハツカダイコンができます。これから11月まで、のんびりと家庭菜園を楽しみます。

PIC12F1822 MCC Timer Interrupt

2021-05-23 14:24:19 | MPLAB X MCC
 PIC12F1822を使って、MPLAB X MCCを利用して割込み設定のテストをします。
 まず、タイマー割込みのテストで、16bitタイマーTMR1を使ったLED点滅(Lチカ)をやってみます。

 RA0に接続したLEDをTMR1から500msごとに割込みをかけ、割込みのたびに点灯、消灯を交互に行い点滅させます。


まず、System Moduleの設定です。
INTOSC,FOSC,Clock 500KHzのデフォルトのままです。
Low-voltage Programingだけチェックを外しました。

TMR1モジュールを組み込み、Timer Periodを500msに設定します。
Enable Timer Interruptにチェックを入れます。

MCCのGenerateをクリックして、各ファイルを生成し、MCCを終了します。

プログラムです。
--------------------------------------------------------
/*
PIC12F1822 Timer Interrupt test
* 2021.5.22
* JH7UBC Keiji Hata
*/
#include "mcc_generated_files/mcc.h"

#define LED LATA0
volatile unsigned char val = 0;

// Interrupt Service Routine
void ISR(){
val = !val;
LED = val;
}

void main(void)
{
SYSTEM_Initialize(); // initialize the device

TMR1_SetInterruptHandler(ISR);

INTERRUPT_GlobalInterruptEnable();

INTERRUPT_PeripheralInterruptEnable();

LED = 0;
while (1)
{
}
}
-------------------------------------------------------------------

ブレッドボードです。

 500ms(0.5s)ごとに点滅しました。

PIC12F1822 MCC PWM テストその3

2021-05-22 20:27:34 | MPLAB X MCC
 PWMの応用例として、モールス符号練習機を作ってみます。
 
 RA0にKEY(電鍵)をつけ、KEY downの時にPWM信号(800Hz)をRA2(P1A)に出力し、接続した圧電スピーカーから音を出します。音と同時にモニター用のLEDを点灯させます。電源は電池(3V)とします。


MCCで各ピンの入出力を設定します。
RA0は入力とし、WPU(ウィークプルアップ)します。、RA2は出力(PWM用P1A)、RA4も出力(LED用)とします。



 PWM関係のMCC設定は、前の記事と同じです。

プログラムです。
PWM信号をスタートさせるには、TMR2_StartTimer()を
ストップさせるには、TMR2_StopTimer()を使います。
------------------------------------------------------------------------------
/*
* PIC12F1822 Morse Trainer
* 2021.05.22
* JH7UBC Keiji Hata
*/
#include "mcc_generated_files/mcc.h"

#define LED LATA4
void main()
{
SYSTEM_Initialize(); // initialize the device


LED = 0;
TMR2_StopTimer();
unsigned char val = 1;
unsigned char old_val =0;

while (1)
{
val = RA0;
if(val != old_val){
if(val == 0){
LED = 1;
TMR2_StartTimer();
}else{
LED = 0;
TMR2_StopTimer();
}
old_val = val;
__delay_ms(10);
}
}
}
---------------------------------------------------------------------------
 ブレッドボードです。
 KEYの代わりにタクトスイッチがつけてあります。



 タクトスイッチを押すとLEDが点灯し、800Hzの音が圧電スピーカーから出ます。圧電スピーカーの音はあまりよくありませんが、モールス符号の練習用に使えると思います。

 PWM信号にローパスフィルタをつけ、アンプとスピーカーをつければ、もっと良い音になると思います。