[experiment] 改造によさそう
>> img
twitter-5643382/100%E5%9D%87%E3%83%86%E3%83%88%E3%83%AA%E3%82%B9/07994b79-a850-11ec-a640-620d0f06cb01
<<

>> oembed
https://twitter.com/ina_ani/status/1496436939678904324
<<

# 何がやりたい?・なぜやりたい?
- ゲームの[表示器]はバリエーションが少ない
  - テトリス液晶を理解できるとこのバリエーションを増やすことができる
  - 入手性も良い
- 意外と高くつく点が気になる
  - 本体が315円、専用基板、液晶制御用ICなどを入れると原価が500円くらいになりそう
  - 安さが売りにできるほど安くはないが、決して高くはない
    - 実験する価値あり
- キャッチーなのでウケが良さそう
  - 日本語表示もギリギリできそう
  - まだ同様の事例を見ていない

# 改造計画
- 電源ボタンは一応読み取るがDeepSleepまで行けるか微妙
- マイコン含めて中に入れられるとGood
  - Atmega328で良さそう
    - 3V駆動いけるか?
    - いけると思う
- 液晶の駆動電圧がわからない
  - 多分標準がありそう
  - レギュレータとか無いだろうし電池2本=3Vで良さそう
- 配線
  - 方向キーのフレキ、決定ボタン
  - スピーカー
- ボタンパッド
  - 画面下4つのボタン
- 液晶駆動用IC
  - 要選定
- マイコンなしでもブレークアウトボードとして使えるようにしたい
- 平面CADで寸法を記述するのが良いか?
- セグメントの配置がわからないと配線できないのでは?
  - 2回に分ける必要あり?
  - セグメントとコモンを知る必要あり
    - テスタでわかる?
    - LCD側を触ればわかりそうだが、壊しそうなので基板側でなんとかしたい
      - https://hackaday.com/2022/02/24/remoticon-2021-joey-castillo-teaches-old-lcds-new-tricks/
      - COMは3段階
      - SEGは2段階
      - 1/3duty 1/2biasだとこうなる
      - 配線の一部をテープで隠す
        - 消えたセグメントを記録する
        - 端から削るのは比較的容易
      - 駆動電圧は見たほうが良い

  - わからないとしたら・・
  - 液晶の配線すべてを一度引き出す必要あり
  - それとは別にLCD駆動ICのブレイクアウトボードも作る必要あり
  - 結構大掛かりだ・・

# 解析
18ピンx2 = 36
ボタンを上にして(シルク逆向き)
右上10本が4段階
それ以外(26pin)は3段階
電源を入れてしばらくすると自動OFFされるっぽいので解析時に注意が必要

セグメントの数を数えてみる
グリッド10x20=200
スコア表示1(下2桁)+7x4 = 29
HI-, SCORE, 音符 = 3
NEXT表示 8
(7+1?)*2 = 16
SPEED, LEVEL(分離してない?) 2
坊や 3?
PAUSE 1
GAME OVER 1

合計{{calc 200+29+3+8+16+2+3+1+1}}
SEG,COMからの計算 {{calc 10*26}}
だいたい良さそう 3個多いのが気になる

常時点灯疑惑
SCORE, スコア末尾の00, SPPED,LEVEL,坊やの体 = 5
これで4個減る。だいたいこれで良さそう。

# ドライバICを見てみる
10com, 26segのもの
電圧も気になる

aitendoには8comのものしか無い

- [HT1626]  100pinLQFP 16com, 48seg
  - ちょっとピンが多いのが気になる・・
  - AliExpressで1個300-400円
  - dutyの設定ができない 16com前提のようだ
    - 固定でも問題ないのか?
    - biasも1/5固定

自前で制御するにしても36ピンのGPIOが必要

2つ使うのはどうか?
comもsegも独立していないので無理

試して見る価値はありそう
高くても面白いからヨシで。

保険でArduino MEGA 2560を使う案も用意しておくのはどうか?
GPIOが多いのでダイレクト駆動できそう
http://awawa.hariko.com/avr_lcd_drive.html の方法を使うのが良さそう1/2, 1/3 dutyが試せそうだが、周辺回路が必要

失敗したら次回へ引き継ぐ形でOKだろう
- 2022-08-09 Arduino MEGA 2560 買った
- { } 大量のジャンパケーブル(家にあるものを数える)
- 2022-08-10 HT1626
  - 基板引いて作れそうか確認してから
- 基板を2枚に分けても良さそう(富豪的)

## HT1626が来た
https://pdf1.alldatasheet.jp/datasheet-pdf/view/206107/HOLTEK/HT1626.html
パッケージが違った!危ない危ない・・
>> img
twitter-5643382/100%E5%9D%87%E3%83%86%E3%83%88%E3%83%AA%E3%82%B9/40953b4c-21c1-11ed-a7e7-1e4361429b8d
<<
30pin x 20pinというパッケージだった
あと、思っていたより厚みがある
# 回路設計
## Phase1
- 8MHz水晶はなにがあるかな?
  - {done} 8MHz(3Vなので)レゾネータの在庫確認
- {done} USB周りはどうしよう?
  - ピンを引き出しただけ
  - {載せない} CH330Nを載せるのもあり
    - しかしUSBコネクタを指すところがないので微妙か?
- {done} HT1626のピンが均等ではなさそう。普通のフットプリントではダメかも?
  - データシートを見ると均等だぞ?
- HACHIBARの設計をまねてみるか
- {x} Atmegaの余っているGPIOを引き出す
- {x} セグメント部分のあまりも引き出す?(悩ましい)
- {done} 高さ方向の干渉の確認
  - 裏はなにも実装しないのがよさそう
  - 表は印刷で確認だ
- HT1626周辺回路はこれでよい? →良い
## Phase2
- {x} 印刷してサイズ確認
  - 固定穴の位置とサイズ
  - ゼブラ部分の位置とサイズ
  - 突起との干渉の有無
## Phase3
- { } お遊び要素
  - シルクに絵を描く
    - 裏面ががら空きだ
## 最後
発注する

>> img
twitter-5643382/100%E5%9D%87%E3%83%86%E3%83%88%E3%83%AA%E3%82%B9/1dc91554-4862-11ed-a7e7-1e4361429b8d
<<
>> img
twitter-5643382/100%E5%9D%87%E3%83%86%E3%83%88%E3%83%AA%E3%82%B9/2e5f38d4-4862-11ed-a7e7-1e4361429b8d
<<
>> img
twitter-5643382/100%E5%9D%87%E3%83%86%E3%83%88%E3%83%AA%E3%82%B9/367df9d9-4862-11ed-a7e7-1e4361429b8d
<<
>> img
twitter-5643382/100%E5%9D%87%E3%83%86%E3%83%88%E3%83%AA%E3%82%B9/3f532bb8-4862-11ed-a7e7-1e4361429b8d
<<
2022/10/10 注文した
2022/10/19 届いた

# 1st基板
## エラッタ
- ATMega328のフットプリントのピンアサインが間違っている
  - DIPのピン配置でSMT部品のフットプリントがあたっている
  - リカバリ不能
- VLCDが未結線
  - 引き出してあるのでEXT端子でショートさせるつもりだったんだっけ?
  - →3.3Vでよさそう
  - 5Vで濃くなるかは気になる

## 要確認
- ボタンの接触
  - ボタン引き出しコネクタ?(なくてもいいかな?)
- 電源LED(外付け前提でもOKかな)

## HT1626を試してみる
液晶にはつなげずに通信してみる

- OSCIを繋げないけど大丈夫か?
  - デフォルトで内部発振と書かれている
- WRITE Modeを使えば良さそう
- ~CS, ~WR, DATAを使う
- ~CS
  - 書き込み中はLOWにする
- ~WR
  - 書き込み時のクロック
- ~RD
  - 読み込み時のクロック
- DATA
  - 実データ

### コマンド実行
- https://github.com/valerionew/ht1621-7-seg/blob/master/src/HT1621.cpp#L138-L146
  - 型番違いだが初期化シーケンスは参考になりそう
  - Read系は実装していない

- BIAS
  - 例だと 1/3duty 4comを指定
  - 該当コマンドがなさそう
  - 1/5bias 1/16 duty固定
- RC256
  - 不要そう
- SYSDIS
  - 不要そう
- WDTDIS1
  - 不要そう
- SYS EN
- LCDON

- WRITE

レスポンスが得られるものがないのでうまく動いているか確認できない気がする
メモリに書いてみて、書かれているか見るみたいなのをやりたい

できた。WRが浮いていてしばらくハマった
## 何か表示してみる
- 順番にセグメントを切り替えていくのが良さそう
- 何か日本語が出せると良さそう
  - グリッド部分は10x20
    - 4文字くらい表現できるか?
- {x} Arduino側にスイッチをつけてセグメント番号と該当メモリの点滅を実施する仕組みを作る
  - これを使ってメモリマップを完成させる
  - 何か文字を出すところまでやって記事にする
- 5V VCCで5V VLCDにするとコントラストがおかしい
  - 最終系で電圧をどうするかを試しておく必要がある
  - 3.3Vではどうやっても初期化が動かない
  - スペックを見る限り2.7~5.2Vで動きそうだが・・
    - 本番は乾電池3本で動かそうとしているので4.5Vで動けば良いのだがどうだろう
      - レギュレータを積まないArduinoで制御してみないとわからんか?
      - 今手元にあるものでこれができるものがあるか・・?
        - EXT端子が出ているガジェットでレギュレータを積んでいないものを使うかな
          - HACHIBAR
            - これは3.0Vだが、これで動けばある程度間違いないかな?
            - これで動いたらなぜ3.3Vで動かなかったんだ感はある
              - 信号が5Vだからという仮説
                - ありそう

https://www.holtek.com/documents/10179/116745/an0468e.pdf

# 2nd基板
- エラッタの修正
- { } DRC

## ファームウェアを焼くよ
[avrdude] の使い方毎回調べてるな・・

FUSEはどうすればいいんだっけ?
普通のArduinoのプロジェクトで参考になるものは・・
あ、でもBODを気を付けないと・・

むー、fuseはかけるけどflashができないな・・なんだろう
最小構成で動かない
2枚目を試したがまだfuseが書けない
- 多分はんだ付けが甘い
- 電源?

再起動したらうまく行った?
単にWrite時間が長くて自分が待てなかっただけか?
しかしArduinoとしての書き込みができない。シルクを見るとTX,RXが手元のモジュールに対して逆な気がする

TXのはんだづけが微妙だったっぽい。うまく書き込めた

## PIN配置
- CS PB3 D11
- WR PB1 D9
- DAT PB2 D10
- RD PB0 D8

## 動いた!
- 5V電源だと液晶が濃すぎて見えない
  - 抵抗入れても変わらず
- 3V電源でいい感じ
  - この時は抵抗の有無は関係ない
- 筐体の乾電池で駆動できた!
- 今の所2nd基板には間違いはない?
  - TX,RXのシルクが逆か?(自信なし)
- COMピンが浮いていた。指で触ると反応したので気づけた

## 気づき
- すごいチャタリングする
## 何か作ろう
### 事前準備
- メイン画面以外のメモリマッピングを確認したい
- 遊びながら書き込む仕組みを作りたい
  - 今の基板でできるか?
    - VCC, GND, Reset, TX, RXを露出できれば行けるけどケースにうまくマウントできるか?
      - 非破壊では難しそう
### 書き込みできなくなった
- 3.3Vだから?
- そして微妙に書けたのか起動もしなくなった・・積み

### 復活の準備
- {x} ふたを開ける
- {x} ICPSで反応があるかを見る
- {x} ICSPでファームウェアを書き直す
- 3.3V書き込みで現象が再現するかを見る
  - やはりかけない
- {x} 配線を5Vに戻して再挑戦
  - {かけた}これでも書けない場合USBシリアルモジュールが壊れたことを疑う
    - 例えば3.3Vが出ていないとか
      - ありそう、燃えたし
      - これで書けても3.3Vが出て無い説はあるな
        - テスターで見ればわかる
      - ただ事象が起きたのが書き込み後なので、この線は薄いか?
  - {こっちでした}これで書けるなら3.3Vで書き込みができないでFA
    - なんでそうなったんだろう?
  - 書くときは5V、動作は3.3Vでお茶を濁すか
    - イテレーションが回しにくい・・
- { } 念のためブートローダーをロックする

### 原因判明?
- CH340GのV3端子がVCCにつながっていない
- {x} V3をVCCと繋げてちゃんと動くかみてみる
  - ちゃんと動いた場合、電源は来ていたがCH340Gが微妙に動いていた事になる
    - USB機器としては認識されるがUSB-Serialとしての機能が動かない
      - めっちゃ紛らわしい動きだな・・
- うごいた!
  - けど4.3Vくらい出ている気がする
    - ツェナーダイオードの特性か、CH340Gの内部に別の経路で5V来てるのか?
      - 別のモジュールでRSTに5V印加されている例があった

### 液晶で遊ぶ
- 日本語を出したい
  - 10x20ある
  - 1文字ずつ出すなら余裕がある
  - 頑張れば縦に4文字くらいいける?
  - 美咲フォントが8x8なので縦2文字入る
### ボタン
- ON/OFF PD2 D2
  - inturrptに使えるように工夫したんだった
- S/P PD5 D5
- RESET PD6 D6
- SOUND PD7 D7

- ROT PC0
- ARROW
  - マトリクスになってるっぽい
  - PC1
  - PC2
  - PC3
  - PC4
  - 配線を見る
    - U 1,3
    - D 1,4
    - L 2,4
    - R 2,3
  - 制御を考える
    - 1,2をINPUTにして3,4をパタパタさせる?

### スピーカー
- PD3 D3

## DeepSleep実験
https://www.hiramine.com/physicalcomputing/atmega328/sleepbuttonwakeup.html
素直に動いた

# 記事書いた
https://inajob.hatenablog.jp/entry/tetris-hack
>> img
https://cdn-ak.f.st-hatena.com/images/fotolife/i/inajob/20221028/20221028164529.jpg
<<
https://inajob.hatenablog.jp/entry/tetris-hack2
>> img
https://cdn-ak.f.st-hatena.com/images/fotolife/i/inajob/20221218/20221218145042.png
<<
# 改良案
- 3.3Vに昇圧する
- USB端子を付ける
  - CH330Nなどを入れる必要がある?
  - Pro Microはどうか?
- Raspberry Pi Picoにするのも一案
  - 3.3Vも作れる
  - でも入らなそう