goo blog サービス終了のお知らせ 

JH7UBCブログ

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

Google 画像検索

2023-07-22 10:10:04 | 家庭菜園と花
 お隣の花壇に咲いている花です。


 この花の名前は? とお隣さんに聞くと・・・・
 「盆花」って呼んでいるんだけど・・・
 昔からお盆の頃に咲くので、お墓に持っていくんだよとのこと。

 盆花で検索しても分かりません。
 そこで、写真を撮って「Google 画像検索」で調べてみると



 一発で、クサキョウチクトウ(草夾竹桃)であることが分かりました。
 便利な時代ですね。

 もし、牧野富太郎が生きていたら、さぞびっくりすることでしょう。

ATtiny402 ArduinoでLチカまで

2023-07-18 22:33:55 | ATtiny
 ATtinyにプログラムを書き込む方法は、Arduinoを使う方法とUSBシリアル変換器を使う方法があるようです。まず、Arduinoを使う方法を試します。

 Arduino IDEからATtinyへの書き込みは、下の図のようにUSBシリアル変換を通してUPDI(Unified Program and Debug Interface)で行います。
 今回は、ArduinoをUSBシリアル変換器として使うわけです。



 Arduino IDEは1.8.15を使いました。(最新バージョン2.1.1では、最終段階でエラーが出てしまいました。原因はわかりません)

 まず、Arduino IDEでATtinyを使えるようにするためにGitHubのSpenceKonde/megaTinyCore というページを開きます。下の方にスクロールしていき、Installationをクリックします。ここに記載してあるmegaTinyCoreのboaed managerがある場所のURL
http://drazzy.com/package_drazzy.com_index.json 
をコピーします。(GitHubに行かなくても、上のURLをコピーして使えばOKです)

 これをArduino IDEで「ファイル」→「環境設定」で基本設定のダイアログを開き、「追加のボードマネージャーのURL」に貼り付け、「OK」をクリックします。



 次に、「ツール」→「ボードマネージャー」でボードマネージャーを開きます。下にスクロールすると「megaTinyCore」が見えますのでインストールします。(少し時間がかかります)



 これで一旦IDEを閉じ、再び立ち上げます。「ツール」→「ボード」を見ると「megaTinyCore」というボードが追加されていて、「ATtiny412/402/212/202」が選べるようになりました。

 続いて、ArduinoをUPDIの書き込み器にするためのファームウェアを準備します。
 GitHubのSpenceKonde/jtag2updi というページを開き、jtag2updi-master.zipをダウンロードします。(緑色のCodeをクリックし、次にDownload ZIPをクリックします。)
 ダウンロードしたファイルを解凍し出来た「jtag2updi-masuterr」というフォルダーの名前を「jtag2updi」にリネームしてドキュメントArduinoフォルダに保存します。

 ここで、Arduino IDEでArduino UNOに書き込む準備をして(ボードをArduino UNOに設定し、)jtag2updiフォルダ内のjtag2updi.inoというスケッチを開き、Arduino UNOに書き込みます。(jtag2updi,inoには何も書かれていませんが、他の部分に書かれているので大丈夫です)



 Arduino UNOに書き込みが終わるとArduino UNOがUPDIの書き込み器になりました。

 次に、ATtiny402にブートローダを書き込みます。Arduino UNOとATtiny402の間はUPDIインターフェースで次のように配線します。
 Arduino UNO         ATtiny402
   5V                   VCC(1pin)
   GND               GND(8pin)
   D6  -- 4.7kΩ--  UPDI(6pin)
 回路図です。(LチカのためのLEDがついています)



 「ツール」をクリックし、開いた下のダイアログで、ChipsでATtiny402を選び、書き込み装置はjtag2updiを指定して、「ブートローダーを書き込む」をクリックします。


 ブートローダの書き込みが終われば、Arduino IDEからATtinyボードのにスケッチを書き込むことができます。

 LチカのスケッチをArduino IDEからATtiny402に書き込んでみます。
 下の図は、ATtinyの各ピンの機能の説明です。
 デジタルIO(GPIO) 2につけたLEDを点滅させてみます。


 スケッチです。


 書き込みが終わると赤い文字でエラーメッセージがでますが、これは無視してよいようです。
 ブレッドボードです。無事LEDが1秒ごとに点滅しました。


 これまでの手順は、こちらのサイトを参考にさせていただきました。ありがとうございました。

 次は、USBシリアル変換器を使った書き込みをやってみようと思います。

ATtiny402

2023-07-13 20:21:25 | ATtiny
 先日、無線の友人からATtiny402を10個いただきました。

 誤発注したけれど、使う予定がないので、いかがですか、とのことでしたので、いただくことにしました。ありがとうございました。

 ATtiny402は、ハードウェア乗算器を備えた8ビットAVRマイコンです。
 スペックは
 クロック最大 20MHz
 フラッシュメモリ 4KB
 スタティックRAM 256B
 EEPROM 128B
 Timer 16bit 2
 PWM 4ch
 ADC 1 (6ch)
 Comparators 1
 I2C 1
 USART 1
 などです。

 パッケージは、SOPなので、このままでは実験に使えません。そこで、SOP DIP変換基板を使ってブレッドボードにセットできるようにしました。


 プログラミングにはArduino IDEが使えます。ネット上にはあまり情報が多くないようですが、少しずつ勉強していこうと思います。

今年のナス

2023-07-11 20:29:23 | 家庭菜園と花
 今年もナスの収穫時期になりました。今年は超やわらかナス6株、長ナス2株、米ナス1株、白ナス1株を植えつけました。

 本日のナスの収穫です。長ナス2個、米ナス2個、超やわらかナス8個です。
 

 長ナスは30cmほどの長さです。米ナスもかなり大きくなりました。超やわらかナスは漬物用に小さめで収穫しました。今日は白ナスは収穫しませんでした。

 今年の梅雨は雨が多く水やりの心配はありませんが、やや日照不足で成長が遅いです。

 これからしばらくの間、毎日ナスが収穫できます。

7月13日追記

 本日、白ナスを6個収穫しました。


 他のナスは食べられないのですが、白ナスは何者かに食べられています。

 そして、へたにはトゲがたくさんあります。

PIC16F1455 MCC I2C LCD1602 テスト

2023-07-07 20:48:36 | PIC16F1455
 MPLAB X XC8 MCC環境で、PIC16F1455におけるI2C接続LCD1602の表示テストをします。

 PIC16F1455開発ボードにI2C接続のピンを増設し、ここにLCD1602を接続します。(プルアップ抵抗はLCD1602側についていますので、ボード上には付けていません。)


 projectを作成し、MCCの設定をします。

 まず、System Moduleの設定です。
 クロックは、16MHzとしました。PLLは使いません。Clock Deviderも使いません。MSSPモジュールを導入し、I2Cに設定すると自動的にI2CのSCLがRC0に、SDAがRC1にセットされます。


 Pin Moduleです。


 MSSP Moduleの設定です。
 I2C Masterに設定し、I2C Clockは100KHzとしました。


 I2Cで割込みを使いますので、Interrupt Moduleで割込みにチェックを入れます。

 この設定でGenerateします。

 テストしたプログラムです。
 プログラム自体はこれまで何度も使ったものですが、若干注意点があります。
 まず、printf()関数を使うために、stdio.hをincludeします。
 このままだとコンパイル時にエラーが出ますので、project propertiesを開き、XC8 Global OptionsでC standardをC90に設定します
-----------------------------------------------------
/*
 * PIC16F1455 MCC I2C LCD1602 TEST
 * 2023.07.07
 * JH7UBC Keiji Hata
*/

#include "mcc_generated_files/mcc.h"
#include "mcc_generated_files/examples/i2c_master_example.h"
#include <stdio.h>

#define I2C_LCD_addr 0x27
#define LCD_EN 0b00000100//Enable
#define LCD_BL 0b00001000//Back Light
#define LCD_CMD 0x00
#define LCD_CHR 0x01
#define LCD_LINE1 0x80
#define LCD_LINE2 0xC0

//I2C LCDに1byteのdataを書き込む
void I2C_write_data(uint8_t data){
     I2C_Write1ByteRegister(I2C_LCD_addr, (data | LCD_EN | LCD_BL),(data | LCD_BL));
     __delay_us(100);
}

//I2C LCDにコマンドまたは文字を送る
void LCD_write(uint8_t data, uint8_t mode){
     //上位4bitを送る
     I2C_write_data((data & 0xF0) | mode);
     //下位4bitを送る
     I2C_write_data(((data << 4) & 0xF0) | mode);
}

//I2C LCD 初期化
void LCD_init(){
     __delay_ms(40);
     LCD_write(0x33,LCD_CMD);//8bit mode set 2?
     LCD_write(0x32,LCD_CMD);//8bit mode set 1?,4bit mode set
     LCD_write(0x06,LCD_CMD);//Entry mode set
     LCD_write(0x0C,LCD_CMD);//display ON,cursor OFF,blink OFF
     LCD_write(0x28,LCD_CMD);//Function set 4bit mode,2line
     LCD_write(0x01,LCD_CMD);//Clear display
     __delay_ms(1);
}

void LCD_clear(){
     LCD_write(0x01,LCD_CMD);
     __delay_ms(1);
}

void LCD_home(){
     LCD_write(0x02,LCD_CMD);
     __delay_ms(1);
}

void LCD_cursor(uint8_t x,uint8_t y){
     if(y == 0){
     LCD_write(LCD_LINE1 + x,LCD_CMD);
    }
     if(y == 1){
     LCD_write(LCD_LINE2 + x,LCD_CMD);
    }
}

//1文字表示
void putch(char ch){
     LCD_write(ch,LCD_CHR);
}

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

     // Enable the Global Interrupts
     INTERRUPT_GlobalInterruptEnable();

     // Enable the Peripheral Interrupts
     INTERRUPT_PeripheralInterruptEnable();
     LCD_init();
     LCD_home();
     printf("PIC16F1455");
     uint8_t count = 0;

     while (1)
    {
         LCD_cursor(1,1);
         printf("%3d",count);
         count ++;
         __delay_ms(1000);
    }
}
-----------------------------------------------------

 PIX16D1455への書き込みが終わったらPICKit3を外し、LCD1602を接続して、電源を入れます。1行目にPIC16F1455と表示され、2行目にcountの値が1秒ごとにカウントアップされます。