Attiny85 4 key keyboard prototypeing(1番ピンのリセット解除)

 前回、
https://funasover.blogspot.com/2024/06/attiny85-3-key-keyboard-prototypeing.html
3つのキーのプロトタイプで4つにしていなかった。これを4つキーにするのが今回の目的。



これはATtiny85を使う人は皆ご存じで、1番ピンがリセットに割り当てされているので、USBを使う場合、自由に使えるのが、PB0(5番ピン)、PB1(6番ピン)、PB2(7番ピン)の3つしかなかったため。
1番ピンをデジタルインプットとして使えれば、一つ増やせる。

【スケッチの変更】

4つもあるので、どれが押されたかわかりやすいように、変更。
#include <TrinketKeyboard.h>
// Attiny85
// PB5(reset)-|   |-VCC
//        PB3-|   |-PB2
//        PB4-|   |-PB1
//        GND-|   |-PB0

#define KEY_ESCAPE 0x29
const int PB0pin = 0;
const int PB1pin = 1;
const int PB2pin = 2;
const int PB5pin = 5;
bool outputState = true;

void setup() {
   pinMode (PB0pin, INPUT_PULLUP);
   pinMode (PB1pin, INPUT_PULLUP);
   pinMode (PB2pin, INPUT_PULLUP);
   pinMode (PB5pin, INPUT_PULLUP);

   TrinketKeyboard.begin(); //start USB stuff
}
void loop() {
  TrinketKeyboard.poll();
   if (digitalRead(PB0pin) == LOW)
  {
    // type out a string using the Print class
    TrinketKeyboard.print("PB0 key pushed");
    TrinketKeyboard.pressKey(0,KEYCODE_ENTER);
    // this should push enter key
    TrinketKeyboard.pressKey(0, 0);
    // this releases the key
    delay(100);
  }

  if (digitalRead(PB1pin) == LOW)
  {
    // type out a string using the Print class
    TrinketKeyboard.print("PB1 key pushed");
    TrinketKeyboard.pressKey(0,KEYCODE_ENTER);
    // this should push enter key
    TrinketKeyboard.pressKey(0, 0);
    // this releases the key
    delay(100);
  }
    if (digitalRead(PB2pin) == LOW)
  {
    // type out a string using the Print class
    TrinketKeyboard.print("PB2 key pushed");
    delay(100);
        TrinketKeyboard.pressKey(0,KEYCODE_ENTER);
    // this should push enter key
    TrinketKeyboard.pressKey(0, 0);
    // this releases the key
  }
      if (digitalRead(PB5pin) == LOW)
  {
    // type out a string using the Print class
    TrinketKeyboard.print("PB5 key pushed");
    delay(100);
        TrinketKeyboard.pressKey(0,KEYCODE_ENTER);
    // this should push enter key
    TrinketKeyboard.pressKey(0, 0);
    // this releases the key
  }
  delay(1);
}

前回配線していなかった4つ目のスイッチと1番ピンを接続!(赤いスイッチと赤いライン)のスイッチにすべて配線。

【Resetの割り当てのままの動作】


スイッチを押してもないのに、PB5 key pushedが連続的に表示されてしまう。

【リセット機能の解除】

フィーズは、以下の設定にしていた。(https://funasover.blogspot.com/2024/06/attiny85digispark.html)

Low: 0xE1
High: 0xDD
Extended: 0xFE

HIGH FUSEの1ビット目、が リセットを無効化するフラグ。ここにチェックを入れると”5D”になる。

Low: 0xE1
High: 0x5D
Extended: 0xFE
に変更する。

変更の仕方だが、Attiny85のdigispark化した時の手順と同じ。https://funasover.blogspot.com/2024/06/attiny85digispark.html

・ArudinoNANOをISPとして、ATtiny85をセット
・コマンドプロンプトから
avrdude -C avrdude.conf -v -pattiny85 -carduino -PCOM22 -b19200 -U hfuse:w:0x5D:m
で書き換えてしまう。
ここで注意は、これで書き換えてしまうと、外部からのリセットが聞かないのでISPでの書き込みができなくなる。書き込む際は、リセッターでリセットしなおす必要がある。

【動作の確認】


順に一つキーを押した結果
無事に4のキーにする事ができる!
外部からリセットを掛ける事もないのでこれで4キーボードのプロトタイプが完了!

(後日談)
ただし、アルファベットや数字はよいが、このままだと記号が正しく表示されない。
解決方法については、
TrinketKeyboardで日本語キーボード109で正しく表示する方法https://funasover.blogspot.com/2024/06/trinketkeyboard109.html
を参照されたい。

次回はプロンプトタイプから基板を起こして作り込みをしていく!










コメント

このブログの人気の投稿

Attiny85とAQM0802A(LCD)のI2C接続

Attiny85 FuseRest

HS101 STM32の自作お手軽オシロスコープ