電子ガジェットいろいろ

電子系のガジェットやアプリ開発等の話題を書いてます

低価格FPGA開発ボード ALTERA Cyclone IV

型番不明。
複数のショップやブランドで同じボードが売られています。
Aliexpressで低価格なFPGA開発ボードを見つけたので買ってみました。

ダウンロードケーブルも付属して、送料込みで3,300円くらいです。

6272LEのCyclone IV (EP4CE6E22C8N)搭載で、8MBのSDRAMVGAPS/2他色々ありLE数の関係でMSXは無理ですが、簡単な実験や遊びはできそうです。
ダウンロードケーブルはUSBブラスター互換なので、色々使えそうです。

ネットで仕様書が見つからなく、売り主に連絡したら送ってくれました。

自分のメモも兼ねてピン番号を書いておきます。

RESET button 25
FPGA_CLK 23

Keys

KEY1 88
KEY2 89
KEY3 90
KEY4 91

Buzzer

beep 110

Dial switch

ckey1 88
ckey2 89
ckey3 90
ckey4 91

LED

led1 84
led2 85
led3 86
led4 87

UART

UART_TXD 114
UART_RXD 115

IIC

SCL 112
SDA 113
I2C_SCL 99
I2C_SDA 98

PS2

PS_CLOCK 119
PS_DATA 120

IR

IR 100

VGA

VGA_HSYNC 101
VGA_VSYNC 103
VGA_B 104
VGA_G 105
VGA_R 106

LCD 1602 12864

LCD1 RS 141
LCD2 RW 138
LCD3 E 143
LCD4 D0 142
LCD5 D1 1
LCD6 D2 144
LCD7 D3 3
LCD8 D4 2
LCD9 D5 10
LCD10 D6 7
LCD11 D7 11

Digital tube

DIG1 133
DIG2 135
DIG3 136
DIG4 137
SEG0 128
SEG1 121
SEG2 125
SEG3 129
SEG4 132
SEG5 126
SEG6 124
SEG7 127

SDRAM

S DQ0 28
S DQ1 30
S DQ2 31
S DQ3 32
S DQ4 33
S DQ5 34
S DQ6 38
S DQ7 39
S DQ8 54
S DQ9 53
S DQ10 52
S DQ11 51
S DQ12 50
S DQ13 49
S DQ14 46
S DQ15 44
S A0 76
S A1 77
S A2 80
S A3 83
S A4 68
S A5 67
S A6 66
S A7 65
S A8 64
S A9 60
S A10 75
S A11 59
SD BS0 73
SD BS1 74
SD LDQM 42
SD UDQM 55
SD CKE 58
SD CLK 43
SD CS 72
SD RAS 71
SD CAS 70
SD WE 69

MSX パーフェクトカタログ買いました

パーフェクトカタログシリーズは全て持ってるのですが、一番待ち望んだものが発売されました。
MSXパーフェクトカタログです。

ゲーム機のゲームは他にもカタログ的な書籍はあったのですが、MSXは初めてではないでしょうか?

ハードとソフト両方が全部掲載しており、非常に満足できる内容です。

MSXパーフェクトカタログ (G-MOOK)

MSXパーフェクトカタログ (G-MOOK)

  • 発売日: 2020/05/28
  • メディア: ムック

Wio Terminalで軽く遊んでみました Wi-fi編

発売されて人気のあるWio Terminalで遊んでみました。
M5Stackがあれば良いと思ってたのですが、結構話題になっているようでつい買ってしまいました。

自分用のメモも兼ねて、Wi-fiに接続するサンプルを書きます。

Wi-fiのコントローラはESP32と違いSoCとは別にRealtek RTL8720が使用されています。
まずはRTL8720のファームウェアのアップデートとArduinoのライブラリの追加をします。

手順は公式サイトを参照してください
Wio Terminal Network Overview
https://wiki.seeedstudio.com/Wio-Terminal-Network-Overview/

Wi-fiに接続するサンプル
#include "AtWiFi.h"
#include "TFT_eSPI.h"

const char* ssid = "(WI-fiアクセスポイントのSSID)";
const char* password =  "(WI-fiアクセスポイントのパスワード)";

TFT_eSPI tft = TFT_eSPI();

void setup() {

  WiFi.mode(WIFI_STA);  // ステーション(子機)モードに設定

  tft.begin();
  tft.setRotation(1);
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.fillScreen(TFT_BLACK);
  tft.setTextSize(2);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    tft.setCursor(10, 10);
    tft.printf("Connecting to WiFi...");
  }

  tft.printf(" OK");
  tft.setCursor(10, 30);
  tft.println(WiFi.localIP());

  WiFi.disconnect();
}

void loop() {

}

実行結果
f:id:uosoft:20200526144753j:plain

M5Stackで軽く遊んでみました 時計編

今回はM5Stackで遊んでみました。
これも前にM5StickCと一緒に買って積みハードになっていました。

サンプルスケッチを簡単にまとめただけですが、自分用のメモも兼ねてシンプルなソースを書きました。

Wi-fi経由でNTPサーバから時間を取得して日時を表示するまでのサンプルです。


#include <time.h>
#include <M5Stack.h>
#include <WiFi.h>

const char* ssid       = "(Wi-fiアクセスポイントのSSID)";  
const char* password   = "(Wi-fiアクセスポイントのパスワード)";

// NTPサーバのURL
const char* ntpServer =  "ntp.jst.mfeed.ad.jp";
//  GMT+9(日本時間)
const long  gmtOffset_sec = 9 * 3600;
// サマータイム時差(無し)
const int   daylightOffset_sec = 0;

void setup() {
  M5.begin();
  
  M5.Lcd.clear(TFT_BLACK);
  M5.Lcd.setTextColor(TFT_WHITE, TFT_BLACK);
  M5.Lcd.setTextSize(4);

  WiFi.begin(ssid, password);

  // 500ms*120回なので、1分でタイムアウト
  for (int i = 0; i < 120 && WiFi.status() != WL_CONNECTED; i++) {
    delay(500);
  }
  if (WiFi.status() != WL_CONNECTED) {
    // Wifi接続エラー
  }

  if (WiFi.status() == WL_CONNECTED) {
    configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
    struct tm t;
    if (!getLocalTime(&t)) {
      // NTPサーバ接続エラー
    }
  }
  WiFi.disconnect(true);
  WiFi.mode(WIFI_OFF);

}

void loop() {
  struct tm t;
  if (getLocalTime(&t)) {
    M5.Lcd.setCursor(0, 0);
    M5.Lcd.printf("%04d/%02d/%02d", (1900 + t.tm_year), t.tm_mon, t.tm_mday);
    M5.Lcd.setCursor(0, 40);
    M5.Lcd.printf("%02d:%02d:%02d", t.tm_hour, t.tm_min, t.tm_sec);
  }
  
  delay(100);

}

みんなのM5Stack入門

みんなのM5Stack入門

M5StickCで軽く遊んでみました2 UIFlow編

前回紹介したM5StickCですが、今回はUIFlowで遊んでみました。

UIFlowはWEB版とデスクトップ版があるのですが、今回は手軽そうなWEB版を使いました。
WEB版を使用するには、ネットにつながったWifi環境が必要です

準備

ダウンロードページ

Download – m5stack-store
https://m5stack.com/pages/download

ここから M5Burner をダウンロードします。
デスクトップ版(UIFlow-Desktop-IDE)もここでダウンロードします。

M5Bunner

ダウンロードした M5Bunner でファームウェアM5StickCに書き込みます。
2020年5月14日の時点でM5StickCに対応しているファームウェアはUIFlow-v1.4.5.1です。

UIFlow-v1.4.5.1でを押してファームウェアをダウンロードした後で各設定をして[Burn]ボタンを押すとファームウェアM5StickCへ書き込まれます。

COM: M5StickCが接続されたCOMポートを選択
Baudrate: Series設定時に変更されたデフォルトの値のままでOK
Series: StickCを選択
SSID: WifiアクセスポイントのSSID
Password: Wifiアクセスポイントのパスワード

ファームウェアが書き込まれると、M5StickCに下の画像のような画面が表示されます。
f:id:uosoft:20200302165016j:plain
丸いマークが緑ならネット接続に成功しています。それ以外の場合はSSID等のネットの設定を見直してください。
で隠してある部分にAPIキーが表示されます。

UIFlow

ブラウザでUIFlowのページを開きます。

設定

起動時に下のような画面が表示されるので、APIキー等の設定をします。

Api key M5StickCに表示されたAPIキー
Language 日本語も選択できます
Device Stick-c

遊んでみる

前回 と同じように簡単なカウンターを作ってみました。

ソース?
f:id:uosoft:20200514111814p:plain
表示の部分は本来テキストを表示するブロックがあるのですが、数値の0埋め表示が無かった(わからなかった)ので、コード実行ブロックを使用して直接Pythonのコードを書きました。
内部的にはMicroPythonで動かしているようで、Pyhonに置き換えられたコードも見ることができます。
f:id:uosoft:20200514112836p:plain

プログラムできる人はArduinoIDEで普通にコードを書くのが圧倒的にやりやすいと思いますが。
ちょっと遊んだりプログラムの勉強をするのには面白いと思います。

M5StickCで軽く遊んでみました

結構前に買って放置していたM5StickCを見つけたので軽く遊んでみました。

開発環境

開発環境はいくつかあるのですが、とりあえず使い慣れたArduino IDEで行います。
セットアップ方法は公式ページに書いてあります。
M5Stack Docs-The reference docs for M5Stack products.
https://docs.m5stack.com/#/en/arduino/arduino_development
解説は英語で書かれてますが、設定個所は同じなのでわかると思います。

サンプルプログラム

簡単なカウンターを作ってみました。

M5ボタン(ホームボタン)を押すとカウントアップして、リセットボタンを押すとカウントが0になります。

// M5StickCのライブラリをインクルード
#include <M5StickC.h>

// カウントを0で初期設定
int count = 0;

void setup() {

  // M5StickC初期化
  M5.begin();
  
  // 背景色を黒で塗りつぶし
  M5.Lcd.fillScreen(TFT_BLACK);
  // 文字色を白、背景色を黒に設定
  M5.Lcd.setTextColor(TFT_WHITE, TFT_BLACK);

  // M5StickCの向きを設定(M5ボタンが左)
  M5.Lcd.setRotation(1);
  // 文字サイズを設定
  M5.Lcd.setTextSize(6);

  // カウント表示
  print_count();
}

void loop() {

  // M5ボタンが押された時の処理
  if (digitalRead(M5_BUTTON_HOME) == LOW) {
    // ボタンを離すまで待つ
    while (digitalRead(M5_BUTTON_HOME) == LOW) ;
    // カウントアップ
    count++;
    // 9999以上は9999にする
    if (count > 9999) {
      count = 9999;
    }
    // カウント表示
    print_count();
  }

  // リセットが押された時の処理
  if (digitalRead(M5_BUTTON_RST) == LOW) {
    // ボタンを離すまで待つ
    while (digitalRead(M5_BUTTON_RST) == LOW) ;
    // カウントを0に
    count = 0;
    // カウント表示
    print_count();
  }

}

void print_count() {
  // カーソル位置をセット
  M5.Lcd.setCursor(10, 20);
  // カウントを4桁0埋めで表示
  M5.Lcd.printf("%04d", count);
}

Hallo world を少し発展させたようなプログラムですが、基本の文字の表示とボタンの状態取得はわかると思います。

SHARP PC-G850VSへスピーカを取り付けました。(PC-G850Vでも可)

2年ほど前に最後のポケコンが欲しいと思い中古でSHARPPC-G850VSを入手しました。

f:id:uosoft:20200430101008j:plain
この機種はスピーカが無く、ビープ音でさえ鳴らないので、スピーカを取り付けました。

別基板で作って拡張ピンに接続するのが本来の方法だと思うのですが、今回は内蔵したくて、直接ピンにスピーカを接続しました。

また、拡張ピンの内側に直接接続して内蔵させる方法も良くありますが、どうやらBZ+,BZ-端子があり、そこに繋げると良いみたいなので、こちらの方法で試してみました。

f:id:uosoft:20181008232456j:plainf:id:uosoft:20181008232505j:plain

 試しにBASICで"BEEP 1"を実行すると、無事に音が鳴りました。

同じ方法がG850Vでも行えるようです。

簡単な改造なのでぜひ試してみてください。

 

 

シャープ G850VS Pocket Computer 【関数電卓】