積みボード消化中です
・1年ほど前に買ったAliexpressで買った格安LCDとArduinoNANOの動作確認を行いました。
・Aruduinoは書き込み失敗が続き、①ドライバや②IDEバージョン、③ブートローダを変更しました。
・最終的に①と③を変更することで、書き込めるようになりました。
・以下、備忘録として残します。
250925 追記
・ch340ですが、PC起動のたびに勝手に最新にアップデートされてしまい、再度3.14をダウングレードしないと書き込めないことがわかりました。かなり面倒です。
・MicrochipStdioでHEXを書き込む運用にするか、正規版を買ったほうが良さそうです
・I2Cモジュールなし(HD44780直接操作)も動作できました。最後に記載しています。
Aliexpressで購入したNANO互換品とLCD
液晶はIC:HD44780 I/Oエキスパンダ:PCF8574T
・定番の液晶モジュールのHD44780を、I/Oエキスパンダで制御する構成です。
・I2Cでマイコンとやり取りして、さすが線2本で通信できるのはお手頃でいいです。
・2本のバス(SDA,SCL)はプルアップ抵抗が必要です。速度にもよりますが10Kで問題なし。
・以下にモジュールの詳しいデータシートがありました。
https://mm.digikey.com/Volume0/opasdata/d220001/medias/docus/5773/CN0295D%20DATASHEET.pdf
・ドライバIDは「0x27」でした。上記リンク記載のサンプルコードをそのまま使いました。
#include <LiquidCrystal.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
/**********************************************************/
LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
/*********************************************************/
void setup() {
lcd.init(); //initialize the lcd
lcd.backlight(); //open the backlight
}
/*********************************************************/
void loop() {
lcd.setCursor(2, 0); // set the cursor to column 3, line 0
lcd.print("YAKUN DEBUGS"); // Print a message to the LCD
lcd.setCursor(2, 1); // set the cursor to column 2, line 1
lcd.print("Hello! WORLD!"); // Print a message to the LCD.
}
/************************************************************/
・ライブラリ(wire.h)にI2Cのポート設定が入っています。
・そのためA4をSDA,A5をSCLに接続する必要があります。
・使い方は、以下のノートもわかりやすくまとめておられます。
https://note.com/imashroom/n/n85011afb6f26
書き込み失敗が続く
・書き込もうとすると、シリアルポートが認識されていないとエラーが出ました。
・CH340のドライバは入れており、認識しています
・CH340の最新バージョンだと、互換NANOには認識されないようです。
・同じ症状について、以下のサイトに詳しく記載がありました
https://www.ja2ptq.jp/maintenance/2024/08/arduino14arduino_nano.html
・CH340のV3.14は以下からダウンロードできます
https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers/all
CH340のデバイスドライバのダウングレードをしても変わらず...
・3.14(2017年)を入れ直しても、自分の環境では書きこめませんでした。。。
・しかしエラー文言は変わり、シリアルは認識されました。
・今度はマイコン(ATMEGA328P)と通信できないようです
IDEを変えてみる
・続いて最新の2.3.xのIDEをLEGACYの1.8.xに変更しました
・公式ホームページからLegacy IDE (1.8.x)を選択し、zipを落とします。
・任意のフォルダに環境を設定します。

・しかし、結局同じエラーで書き込めませんでした。
BOOTLOADER を変更する
・次にブートを書き換えてみました
・ブートは先ほどダウンロード1.8.xのフォルダの「optiboot/optiboot_atmega328.hex」を使います。
・AVRISP mkⅡをNANOと接続します。
・コネクタは逆でもささるので、向きに注意必要です。
・MicrochipStdioをインストールします。
Microchip Studio を使う
・Tools⇒Device programmingを選択します。
・interface settingsを選択します
・Interface「ISP」にて「apply」を押すと、デバイスが認識されれば、デバイス識別や電源電圧が表示されます。
・memoriesタブにて、「optiboot_atmega328.hex」を選択して書き込みます。
・Fusesでレジスターを確認します。
・EXTENDEDが「0xFD」HIGHが「0xDA」LOWが「0xFF」になっていたらOK。
長い道のりだった...
・BOOTを変更することで、正常に書き込むことができました。
・以下は詳細ログを出しています。

まとめ
・Aliexpressで買った格安LCDとArduinoNANOの動作確認を行いました。
・案の定書き込み失敗が続き、以下を実施しました。
-
CH340ドライバのダウングレード(3.14に戻す)
-
IDEバージョンの変更(少し古い1.8.xに戻す)
-
ブートローダの変更(optiboot_atmega328.hexを使用)
・2番は不要かもしれませんが、1と3は必要だと思います。
・Aliexpressの安い互換品は、安いだけの理由があります。
・回り道することで、色々知識は増えてくるので、そこが電子工作の面白みの一つかなとも思いました。
250925 追記
HD44780を直接操作することもできました。ピンアサインは以下の通りにしています。
ピンアサイン
LCD 機能 Nano(ピン名)
1 VSS GND
2 VDD 5V
3 VO 20kΩトリマ中央(0.6Vくらい)
4 RS D12
5 RW GND(固定)
6 E D11
11 D4 D5
12 D5 D4
13 D6 D3
14 D7 D2
15 A(LED+) 5V(100Ω制限)
16 K(LED−) GND
サンプルコード
・用意されているLiquidCrystal lcd関数を使うだけです。
#include <LiquidCrystal.h>
// LiquidCrystal(rs, enable, d4, d5, d6, d7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2); // 16x2
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Yakun Debug");
lcd.setCursor(0, 1);
lcd.print("HELLO WORLD!");
}
void loop() {
// 何もしない(表示維持)
}
以上







