エントリー

2016年11月の記事は以下のとおりです。

ページ移動

  • ページ
  • 1
  • 2
  • 3

電子負荷に表示部を追加中

消費中の電流と起電力の電圧を表示するために表示部を追加しようとしている

まずはブレッドボードで確認(左が5Ω負荷,右が0.5Ω負荷)

LモードHモード

電流と電圧以外にボタンを押して覚えさせ表示されておく初期電圧と充電池用に元切りやブザーを鳴らす終了電圧を設定表示も行いたいと考えている

今回,電圧換算で詳細な電圧を得るため電圧に合わせてレンジ切換えしてみようと考えて,A1~A3を以下のように接続してみた

    P1-------------------------+       -> A1
    R1=45kΩ                   | 5.00V
    P2----------------+->      | -> A2
    R2=15kΩ          | 12.50V |
    P3-------+->      |        | -> A3
    R3=15kΩ | 25.00V |        |
    Grd------+--------+--------+ -> Grd

プログラムは,

//電圧読込:電圧によりレンジ切換え
//    A1:電圧(0~5V)
//    A2:電圧(0~12.5V)
//    A3:電圧(0~25V)
//
static int readVolt() {
    int e, val = (-1);
    if((e = analogRead(PIN_VOLTM05)) < 1023) {
        val = map(e, 0, 1023, 0, 4999);
    } else if((e = analogRead(PIN_VOLTM13)) < 1023) {
        val = map(e, 0, 1023, 0, 12499);
    } else if((e = analogRead(PIN_VOLTM25)) < 1023) {
        val = map(e, 0, 1023, 0, 24999);
    }
    return(val);
}

だが,上記のようなことはできないようで,例えばA1がオーバーフロー状態だとA2,A3に影響する

具体的にはA1がオーバーフロー状態だと全体の抵抗値に影響を与えA2,P3が期待通りの分圧された電圧にならない

アナログポートをOFFできれば可能な感じだが調査はまたにすることにしてA1,A2を外しA3でのみ取得にした(またMax.20Vに変更)

キャラクタLCD表示用ライブラリ

秋月電子のI2C接続小型キャラクタLCD(AQM1602XA)を利用するための表示用ライブラリを作ることにした

電子負荷の消費電流および電源電圧の表示部を作製しようとしたところ今後も良く使いそう(毎日でないので使い方を忘れてしまうから)なのでライブラリにしておこうと考えた訳である

ライブラリ化する方法と注意点

  • ライブラリはIDEの環境設定で指定したフォルダに新規のライブラリフォルダを作ってファイルを置く
  • 必要ファイルは,XXX.hとXXX.cppとなる(その他は無くても問題なし,.cではダメだった)
  • XXXは同じでなくてはならない
  • 新規のライブラリフォルダ名はXXXでなくても良い

 

AQM1602LCD.h

#define _AQM1602_H_
#if ARDUINO >= 100
 #include "Arduino.h"
#else
 #include "WProgram.h"
#endif

#define LCD_ADDR 0x3E

void LCD_clearScreen(void);
void LCD_setLocate(int col, int row);
void LCD_putChar(byte c);
void LCD_putString(byte *str);
void LCD_init3();
void LCD_init5();
#endif /* AQM1602LIB_H */

AQM1602LCD.cpp

// LCD_init3        - LCDの初期化(3.3V)
// LCD_init5        - LCDの初期化(5V)
//
// LCD_clearScreen  - LCDモジュールの画面をクリア
// LCD_setLocate    - LCDモジュール画面内のカーソル位置を移動
// LCD_putChar      - LCDにデータを1バイト出力
// LCD_putString    - LCDに文字列データを出力
//

#include <Wire.h>
#include "AQM1602LCD.h"

// LCDにコマンドを送信
//
static void LCD_writeCommand(byte command) {
    Wire.beginTransmission(LCD_ADDR);    // スタートコンディション
    Wire.write(0x00);                    // control byte の送信(コマンドを指定)
    Wire.write(command);                // command byte の送信
    Wire.endTransmission();                // ストップコンディション
    delay(10);
}

// LCDにデータを送信
//
static void LCD_writeData(byte data) {
    Wire.beginTransmission(LCD_ADDR);    // スタートコンディション
    Wire.write(0x40);                    // control byte の送信(データを指定)
    Wire.write(data);                    // data byte の送信
    Wire.endTransmission();                // ストップコンディション
    delay(1);
}

// LCDの初期化
//
static void LCD_init(int volt) {
    Wire.begin();

    delay(100);
    LCD_writeCommand(0x38); delay(20);        // Function set
    LCD_writeCommand(0x39); delay(20);        // IS=1
    LCD_writeCommand(0x14); delay(20);        // Internal OSC frequency

    if(volt == 3) {
        // 3.3V
        LCD_writeCommand(0x73); delay(20);    // Contrast set
        LCD_writeCommand(0x56); delay(20);    // POWER/ICON/Contrast control
    } else /* if(volt == 5) */ {
        // 5V
        LCD_writeCommand(0x7A); delay(20);    // Contrast set
        LCD_writeCommand(0x52); delay(20);    // POWER/ICON/Contrast control
    }
    LCD_writeCommand(0x6C); delay(20);        // Follower control
    LCD_writeCommand(0x38); delay(20);        // Function set
    LCD_writeCommand(0x01); delay(20);        // Clear Display
    LCD_writeCommand(0x0C); delay(20);        // Display ON
    LCD_writeCommand(0x06); delay(20);        // Entry Mode
}

// LCDの初期化(3.3V)
//
void LCD_init3() {
    LCD_init(3);
}

// LCDの初期化(5V)
//
void LCD_init5() {
    LCD_init(5);
}

// LCDモジュールの画面をクリア
//
void LCD_clearScreen(void) {
    LCD_writeCommand(0x01);                // Clear Display
}

// LCDモジュール画面内のカーソル位置を移動
//    col : 横(列)方向のカーソル位置(0-15)
//    row : 縦(行)方向のカーソル位置(0-1)
//
void LCD_setLocate(int col, int row) {
    static int row_offsets[] = { 0x00, 0x40 } ;
    // Set DDRAM Adddress : 00H-0FH,40H-4FH
    LCD_writeCommand(0x80 | (col + row_offsets[row]));
}

// LCDにデータを1バイト出力
//      c :  出力する文字データを指定
//
void LCD_putChar(byte c) {
    LCD_writeData(c);
}

// LCDに文字列データを出力
//    str :  出力する文字列
//
void LCD_putString(byte *str) {
    while(*str) LCD_writeData(*str++);
}

ライブラリインタフェースはコメントのとおり

ヘッダーファイルの

#include "Arduino.h"

を,忘れがちなので忘れないようにする事

(追加:2017.01.22)

C++に書き換えた

注意点
  • コンストラクタで電圧の指定とかやってみたが上手く動作しないので保留(現状はsetup()を呼び出す仕様)
  • 割込み禁止で使うとハングアップするようだ
  • C版も使用しているので名称を変更

AQMI2CLCD.h

//秋月電子通商 I2C接続小型キャラクタLCDモジュール
//    AQM0802A-RN-GBW(8x2行)
//    AQM0802A-FLW-GBW(8x2行,バックライト付)
//    AQM1602XA-RN-GBW(16x2行)
//
//Sitronix ST7032 CONTROLED
//    電源電圧:2.7~5.5V
//    インターフェース:I2C
//    I2Cアドレス:0x3E
//    I2Cスピード: 最大400kHz
//    使用可能温度:-30~+85℃
//
#ifndef _AQMI2CLCD_H_
#define _AQMI2CLCD_H_
#if ARDUINO >= 100
 #include <Arduino.h>
#else
 #include <WProgram.h>
#endif

#define AQMI2CLCD_ADDR 0x3E

class AQMI2CLCD {
    public:
//        AQMI2CLCD();
        void setup();
        void setup(int);
        void clearScreen(void);
        void setLocate(int, int);
        void putChar(char);
        void putString(char *);
        void putString(int);
};

#endif /* AQMI2CLCD_H */

AQMI2CLCD.cpp

//秋月電子通商 I2C接続小型キャラクタLCDモジュール
//
// コンストラクタ
// void AQMI2CLCD()
//
// void setup
// void setup(int)
//        3        - LCDの初期化(3.3V)
//        5        - LCDの初期化(5V)
// void clearScreen    - LCDモジュールの画面をクリア
// void setLocate    - LCDモジュール画面内のカーソル位置を移動
// void putChar        - LCDにデータを1バイト出力
// void putString    - LCDに文字列データを出力
//
#include <AQMI2CLCD.h>
#include <Wire.h>

//AQMI2CLCD::AQMI2CLCD() {}

// LCDにコマンドを送信
//
static void LCD_writeCommand(byte command) {
    Wire.beginTransmission(AQMI2CLCD_ADDR);    // スタートコンディション
    Wire.write(0x00);                        // control byte の送信(コマンドを指定)
    Wire.write(command);                    // command byte の送信
    Wire.endTransmission();                    // ストップコンディション
    delay(10);
}

// LCDにデータを送信
//
static void LCD_writeData(byte data) {
    Wire.beginTransmission(AQMI2CLCD_ADDR);    // スタートコンディション
    Wire.write(0x40);                        // control byte の送信(データを指定)
    Wire.write(data);                        // data byte の送信
    Wire.endTransmission();                    // ストップコンディション
    delay(1);
}

// LCDの初期化
//
static void LCD_init(int volt) {
    Wire.begin();

    delay(100);
    LCD_writeCommand(0x38); delay(20);        // Function set
    LCD_writeCommand(0x39); delay(20);        // IS=1
    LCD_writeCommand(0x14); delay(20);        // Internal OSC frequency

    if(volt == 3) {
        // 3.3V
        LCD_writeCommand(0x73); delay(20);    // Contrast set
        LCD_writeCommand(0x56); delay(20);    // POWER/ICON/Contrast control
    } else /* if(volt == 5) */ {
        // 5V
        LCD_writeCommand(0x7A); delay(20);    // Contrast set
        LCD_writeCommand(0x52); delay(20);    // POWER/ICON/Contrast control
    }
    LCD_writeCommand(0x6C); delay(20);        // Follower control
    LCD_writeCommand(0x38); delay(20);        // Function set
    LCD_writeCommand(0x01); delay(20);        // Clear Display
    LCD_writeCommand(0x0C); delay(20);        // Display ON
    LCD_writeCommand(0x06); delay(20);        // Entry Mode
}

// LCDセットアップ
//
void AQMI2CLCD::setup() {
    LCD_init(5);
}
void AQMI2CLCD::setup(int volt) {
    LCD_init(volt);
}

// LCDモジュールの画面をクリア
//
void AQMI2CLCD::clearScreen(void) {
    LCD_writeCommand(0x01);                // Clear Display
}

// LCDモジュール画面内のカーソル位置を移動
//    col : 横(列)方向のカーソル位置(0-15)
//    row : 縦(行)方向のカーソル位置(0-1)
//
void AQMI2CLCD::setLocate(int col, int row) {
    static int row_offsets[] = { 0x00, 0x40 } ;
    // Set DDRAM Adddress : 00H-0FH,40H-4FH
    LCD_writeCommand(0x80 | (col + row_offsets[row]));
}

// LCDにデータを1バイト出力
//      c :  出力する文字データを指定
//
void AQMI2CLCD::putChar(char c) {
    LCD_writeData(c);
}

// LCDに文字列データを出力
//    str :  出力する文字列
//
void AQMI2CLCD::putString(char *str) {
    while(*str) LCD_writeData(*str++);
}
void AQMI2CLCD::putString(int n) {
    char bf[16];
    sprintf(bf, "%d\0", n);
    char *str = bf;
    while(*str) LCD_writeData(*str++);
}

予告なく改良

ジブン専用PC&タブレット(ドン・キホーテ)

インプレスで「ジブン専用PC&タブレット」という記事を観て良さそうなので購入

ジブン専用

ディスプレイは10.1インチということもあって大きい(左8インチ,右7インチと比べたところ)

8インチ7インチ

キーボードはマジックキーとかないので使いやすい(最近は酷いKBが多いからね,結構これはまとも)

KB

ディスプレイとの接続部もぶれもなく丈夫そうに思える(使い込むとどうなるか判らないけどね)

合体部

裏表とも何の刻印もなく(無くて良いのだけど)寂しい感じ

背面のカメラがデザインのためかノート用の位置に付いているのでタブレットとして使うと使い難い

表裏

バッテリーが少ないだろうと充電しながら電源を入れて状態を見ると96%だったので自己放電が少ないのか充電されてから期間が経過してないのか・・・

バッテリー

ディスプレイには出荷用の保護シートが付いていて,これが悪くないのでしばらくはこのままにしておこう

保護シート

尚,その他の付属品は充電用ACアダプターと説明書,保証書のみだった

AC

それで,どこのメーカーなのかマニュアルとか参照して,どうやら「恵安」だと思われる

また恵安に「KBM100K」という製品があって酷似しているので仕様を比べてみると

仕様

異なるところは(後の方が本製品)

  • microSD最大:64GB ⇒ 32GB
  • キーボードのUSB数:1個 ⇒ 2個
  • バッテリー容量:5,500mAh ⇒ 6,400mAh
  • 駆動時間:約8時間 ⇒ 約6.1時間
  • サイズ:若干異なるようだ
  • 重量:546g(本体)+530g(KB) ⇒ 580g(本体)+600g(KB)
  • 付属品:USBケーブル ⇒ なし

さほど変わらなそうだが,microSDが32GBまでなのが残念

少しであるが使用してみてタブレットでも使えないことはないが重いので手が疲れる

基本的にはノートの形で使うことになりそう

(追加購入として)

ストレージが32GBなのでmicroSDカードを追加しておこうとドン・キホーテで32GBの価格をみたら

32GB

アマゾンとかで安値が¥1,000位なので驚かないが¥998だった(この辺りの店売りでは最安値)

で,隣を見ると

64GB

なんと,64GBが奉仕価格として¥1,580だった

これは驚きでおそらく本日の価格では日本最安値かもしれない

とりあえず1枚づつ購入した

マウスを交換(新調)

安物のマウス(といって良いかどうかは不明だが)を使い始めて予想および覚悟はしていたが,だいたい半年から1年で交換することがあたりまえになってきた

前回交換したのがWindows10にした時(2016.02)なので今回は9ヵ月となる

実際は3カ月ほど前からホイールが不良になっていたので交換したかったが我慢して使っていた

金かかるねって思われそうだが,マウスの(販売)方も新製品(?)への回転が速いのか在庫処分で販売してる物も多く安価に購入することが出来る

マウス

今回は2つ購入(販売価格は,左が1.5K,右が1.2K)

左のマウスは,昔購入したレーザータイプが速攻で不良(3日しか使用しなかった)になった形状のマウスだったので少し悩んだ

一応ブルーLEDになっているし,なにしろ手にフィットするのが良かったため再挑戦的に購入(実は信用できないから右を追加購入してる)

交換前のマウスは以下で現在のとこと不良になったのは左だけ

前マウス

本件は交換した新しいマウスを使用操作して入力している

新マウス

尚,静音クリックを名乗っているが単にボタンが重いだけで疲れるしクリックでマウスが傾く感じがあり安定性が悪い

実状ではクリックでマウスが傾いて位置がずれるためかクリックと判定されない事がある

ページ移動

  • ページ
  • 1
  • 2
  • 3

ユーティリティ

検索

エントリー検索フォーム
キーワード

新着コメント

Re:ATS-25を作製する
2025/03/23 from kazu
Re:ATS-25を作製する
2025/03/22 from admin
Re:ATS-25を作製する
2025/03/22 from kazu
Re:NOAA受信システム復旧
2025/03/20 from admin
Re:NOAA受信システム復旧
2025/03/16 from とおりすがり

過去ログ

Feed