LoginSignup
2
1

USBマイコンCH552TでLチカ&HidKeyboardのサンプルを動作【電子工作】

Last updated at Posted at 2023-12-23

この記事は 本郷学園マイコン部 Advent Calendar 2023 23日目の記事です。

やったこと

8ビットUSBマイコンのCH552Tの環境構築とLチカを行い、さらにHidKeyboardのサンプルを使用してみました。

用意したもの

変換基板へのマイコンの実装

SOP8パッケージの実装と同様に半田を流し込んで過剰分を後から吸い取りました。パッケージのテープ固定に失敗してマイコンが1個犠牲になりましたが、後日友人(非マイコン部員)がヒートガンを使って再実装してくれました。リフロー最強。

ブレッドボードへの回路実装

USBの電源と信号線をマイコンに接続し、LEDをP1.1(8番ピン)に接続します。またV33GNDVCCGNDそれぞれの間に0.1μFのバイパスコンデンサを入れる必要があり、これがないとPCに正常に認識されません。

USBmicroBのDIP化基板から出ているIDピンはUSB On-The-Go機能のためのものであり、GNDと直結するとその側がホストとして扱われるようになります。今回の使い方ではオープンのままとします。

USBのD+V33でプルアップしてPCと接続すると、マイコンがBootloadモードで起動して書き込みを受け付ける状態となるので、D+を10kΩ炭素皮膜抵抗でプルアップしておきます。

配線

ドライバのインストール

WCH-LinkUtilityのインストールによって、必要なドライバはすべてインストールされるようです。

ArduinoIDEへのch55xduinoの登録

ch55xduinoは、ArduinoIDE上でCH552の開発を行うための環境です。ArduinoIDE上のPreferences->Additional Board Managerhttps://raw.githubusercontent.com/DeqingSun/ch55xduino/ch55xduino/package_ch55xduino_mcs51_index.json を追加することでこれが利用できるようになります。

Lチカ!!!

Bootload用のタクトスイッチを押下しながらPCと接続した後、ArduinoIDEで次のコードをコンパイルして書き込みました。LEDを接続したIOピンはP1.1(8番)なので、これに対応する数11をピン番号として指定します。同様にP1.212という番号に対応するようです。

void setup() {
  pinMode(11, OUTPUT);
}
void loop() {
  digitalWrite(11, HIGH);
  delay(100);
  digitalWrite(11, LOW);
  delay(100);
}

初回の書き込みによってマイコンにブートローダが書き込まれるようですが、このあたりの挙動はまだよく把握できていません。

HidKeyboardのサンプルを試す

CH552の内蔵USB機能を用いたHIDキーボードのサンプルが用意されていたので、これを試してみました。

該当のサンプルスケッチはFile->Examples->Generic_Examples->05.USB->HidKeyboardにありますが、これをそのまま開くとフォルダ構造が再現されないため、ch55xduinoをGitHubから直接ダウンロードし、その中からスケッチをフォルダごと取り出します。

P3.0P3.1P3.2がそれぞれaHello、Capslockに割り当てられており、入力がLOWになるとそれぞれの機能が発動します。

CH552に採用されているコアプロセッサはIntel8051から派生したMCS51ですが、これに対応したフリーのC++コンパイラがなく、オブジェクトやポリモーフ関数などが利用できません。このため通常のArduino用のコードと異なり、関数名はアンダーバーで指定されます(Keyboard.press->Keyboard_pressなど)。

#ifndef USER_USB_RAM
#error "This example needs to be compiled with a USER USB setting"
#endif

#include "./src/userUsbHidKeyboard/USBHIDKeyboard.h"
// 略
void loop() {
  //button 1 is mapped to letter 'a'
  bool button1Press = !digitalRead(BUTTON1_PIN);
  if (button1PressPrev != button1Press) {
    button1PressPrev = button1Press;
    if (button1Press) {
      Keyboard_press('a');
    } else {
      Keyboard_release('a');
    }
  }
  // 略
}

コード先頭には、USB通信機能用のRAMを確保する設定を選択するよう促すプリプロセッサがあり、コンパイルする際にはTools->USB Settings->USER CODE w/ 148B USB ramを選択する必要があります。

usbsettings.png

私が試した際にはBootload用のプルアップ抵抗をつけっぱなしにしていましたが、これを外さなければUSB通信を正常に行うことができません。開発ボードなどを利用している環境では起こらないトラブルですが、一応書き記しておきます。

おわりに

パスコンの入れ忘れによる不動作で数時間を溶かしてしまいました。やはりパスコンは全てを解決する

先日KiCadでProMicroサイズの開発ボードを組んでみたのですが、どうも虚無を錬成しているといった気分に支配されてしまい途中で放り出してしまいました。

このマイコンでUSBデバイスを作れることがわかったので、実際にマクロパッドを作ってみたいと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1