Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

i2c-input-device

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate this project.

README

I2C Input Device (ATmega328P)

概要

  • ATmega328P を用いた I2C接続の入力デバイス
  • 5ボタン+ロータリーエンコーダーを搭載
  • 差分式エンコーダ出力およびステータスビットを2バイト固定フォーマットで出力
  • 動作テスト用デバイスも製作(Test Device)

主な機能

  • I2Cスレーブ
  • 2バイト固定レスポンス
  • 差分式エンコーダー

出力

I2C 応答フォーマット(Read 2 bytes)

  • Byte0: エンコーダー差分(int8_t)
    • 前回 Read 以降の差分
      • -128..127 に飽和(超えたら status=001 を立てる)
      • Read したタイミングで累積差分を 0 にリセット(差分式)
  • Byte1: 上位3bit=ステータス, 下位5bit=ボタン押下(押下で1)
    • bit0: center
    • bit1: up
    • bit2: right
    • bit3: down
    • bit4: left
    • status:
      • 000 = 正常
      • 001 = overflow

ハード構成

  • ATmega328P (3.3V, internal 8MHz)
  • 5x tactile switch
  • 12/15 encoder

写真

外観

外観

基板

基板表 基板裏

回路図

回路図

コーディング

ほぼ全部ChatGPT5.2に書いてもらっています。

ビルド方法

開発環境

  • Arduino IDE 2.3.7
  • ボードパッケージ: ATmega328(MiniCore)
  • 書き込み方式: Arduino as ISP
  • ターゲット: ATmega328P(3.3V / 内部8MHz)

ボード設定

  • ボード: ATmega328
  • Variant: 328P / 328PA
  • Clock: Internal 8 MHz
  • Bootloader: No bootloader
  • BOD: BOD 2.7V
  • EEPROM: EEPROM retained
  • Compiler LTO: LTO enabled

Fuse値

Fuse 値 意味
L E2 内部8MHz、CKDIV8無効
H DA SPI有効、BOOT無効
E FD BOD有効

I2C動作条件

  • 電源: 3.3V
  • クロック: 100kHz
  • I2Cアドレス: 0x12
  • 外部プルアップ抵抗はマスター側に実装

補足

  • attachInterrupt は使用せず、PCINT を使用している
  • onRequest 内で割り込み状態を変更しないこと
  • ENC_STEPS_PER_NOTCH はエンコーダ個体に応じて調整すること

禁止事項

書き込み装置とマスターの同時接続は禁止
特に書き込み装置とマスターのロジックレベルが異なる場合、電源ラインの逆流やI/Oピンへの過電圧などが生じてデバイスが破損する可能性がある。

  • 書き込み時は必ずマスター側を取り外すこと
  • 運用時は ISP ケーブルを接続しないこと

Test Device (XIAO ESP32S3)

概要

  • I2C Input Deviceの出力をテストするデバイス
  • ボタンの押下状況とエンコーダーの累積値を表示する

ハード構成

  • XIAO ESP32S3
  • 128x64 OLED (SSD1306 Driver)

コーディング

全部ChatGPT5.2に書いてもらっています。

写真

外観


License Notices

Third-party license and notice information is available here:

  • THIRD_PARTY_NOTICES.md
  • licenses/