Skocz do zawartości

Klawiatury mechaniczne


Pomocna odpowiedź

Jakiś czas temu wymieniłem się z innym hobbystą płytkami do klawiatur — wysłałem mu mojego Flatreusa, a on w zamian przysłał mi zestaw do budowy Chocolad. Trochę ten zestaw przeleżał w szufladzie, czekając na lepsze czasy, ale ostatnio się za niego zabrałem, bo chciałem trochę potestować dwuczęściową klawiaturę.

Problem w tym, że jak wiele takich projektów, ten także używa Arduino Pro Micro, z firmwarem QMK — a mi się trochę gorzej robi na jego widok. Więc postanowiłem przerobić klawiaturę, żeby użyć CircuitPythona i swojego własnego kodu. W tym celu zaprojektowałem płytkę kompatybilną z Pro Micro, ale z SAMD21 na pokładzie:

5898261619906969912.thumb.jpg.c971ecb0aecb26b749b543e7b937be36.jpg

Zmontowanie klawiatury nie było trudne. Niestety autor nie umieścił na płytkach żadnych napisów ani obrysów komponentów, więc było trochę zgadywania — skończyło się na tym, że wszystkie diody wlutowałem odwrotnie, ale na szczęście SAMD21 ma zarówno PULL-UP jak i PULL-DOWN na wszystkich nóżkach, więc "naprawiłem" w kodzie.

3897781619907175766.thumb.jpg.8d058ebe74a322030d38f966d074b045.jpg

Komunikacja pomiędzy płytkami okazała się trudniejsza. Kabel, którym połączone są płytki ma cztery żyły — TRRS. Dwie z nich idą na zasilanie, a pozostałe dwie można wykorzystać do komunikacji — zazwyczaj UART albo I2C. Niestety w tym przypadku autor z jakiegoś powodu zdecydował, że użyje tylko trzech żył, a jedną zostawi niepodłączoną. Co więcej, połączył ze sobą nóżki RX po obu stronach. Po kilku próbach, zdecydowałem się w końcu po prostu użyć jednokierunkowego UART (na szczęście potrzebuję komunikację tylko w jedną stronę), ale że chciałem użyć sprzętowego UARTa, trzeba było z jednej strony przełączyć połączenie do nóżki TX.

4542941619907536132.thumb.jpg.c439ec5d33bd6335d800de93d172229e.jpg

Układ, na który się zdecydowałem jest dość wygodny, a jednocześnie prosty do zapamiętania:

chocolad.thumb.png.5e3b0ec92e826ae4c0dcd52ad800d55d.png

Dodatkowo, CircuitPython ostatnio dorobił się dynamicznych deskryptorów USB, wobec czego możliwym stało się włączanie i wyłączanie dysku i konsoli bez konieczności wgrywania nowego firmware-u. Aby skorzystać z tego, wystarczy w pliku boot.py umieścić taki kod:

import board
import digitalio
import storage
import usb_cdc
import usb_hid

row = digitalio.DigitalInOut(board.D4)
col = digitalio.DigitalInOut(board.A2)
col.switch_to_output(value=0)
row.switch_to_input(pull=digitalio.Pull.UP)

if row.value:
    storage.disable_usb_drive()
    usb_cdc.disable()

usb_hid.enable(devices=(usb_hid.KEYBOARD,))

row.deinit()
col.deinit()

W ten sposób dysk i konsola pojawia się tylko, jeśli podłączając klawiaturę wciśniemy wybrany klawisz — możemy wtedy z łatwością zmienić układ klawiatury lub wprowadzić poprawki do kodu. Restart albo podłączenie bez wciskania tego klawisza spowoduje, że przez USB widoczna będzie tylko klawiatura.

2 godziny temu, jbanaszczyk napisał:

Który fragment Ci się nie podoba? ProMicro czy QMK? I dlaczemu?

Właściwie to oba mi się nie podobają, ale na dwa różne sposoby.

QMK nie lubię, bo jest znacząco przekombinowane, a jednocześnie wiele rzeczy jest zrobionych nie do końca dobrze. Na przykład hold/tap, czyli mechanizm, który pozwala klawiszowi być modyfikatorem jeśli go przytrzymamy, a zwykłym klawiszem, jeśli go tylko wciśniemy i puścimy, jest zrobiony na czasach wciśnięcia — co powoduje problemy jeśli ktoś pisze szybciej lub wolniej niż autor kodu założył. Sytuację dodatkowo pogarsza fakt, że większość ludzi używa QMK nie mając zielonego pojęcia o tym jak on działa, używając różnego rodzaju automatycznych generatorów konfiguracji, czy to online czy aplikacji desktopowych.

Pro Micro, czy też ogólnie 32u4 nie lubię, bo jest to atmega — dinozaur, który nie do końca może się zdecydować czy ma być małym prostym procesorkiem do migania diodą czy wyświetlania temperatury w elektronicznych termometrach, czy komputerem z obsługą USB. A w dodatku jest znacznie za mała żeby używać jej z CircuitPythonem. Do tego wszyscy używają jej w swoich projektach, bo taka tradycja, ani nie rozumiejąc jakie są alternatywy, ani nawet nie wykorzystując jej możliwości.

Nie mówię, że ja się zawsze tak dobrze na wszystkim znałem, ale boli mnie kiedy coś jest używane bez zrozumienia i bez próby zrozumienia. Kod dla klawiatury nie musi być bardzo skomplikowany, w końcu nie dzieje się tam tak naprawdę tak dużo. A jednocześnie jest wiele decyzji, które można podjąć w swoim własnym projekcie, biorąc pod uwagę nasze własne potrzeby i kontekst, zamiast akceptować domyślne decyzje podjęte kiedyś tam przez autorów QMK czy projektantów płytki Arduino.

  • Lubię! 2
13 minut temu, deshipu napisał:

Na przykład hold/tap ... powoduje problemy jeśli ktoś pisze szybciej lub wolniej niż autor kodu założył

Pewnie załatwiłoby sprawę PERMISSIVE_HOLD (albo TAPPING_TERM).

Dzięki za odpowiedź. Zawsze to jakiś świeży punkt widzenia 🙂

  • 2 miesiące później...
(edytowany)

Małe uaktualnienie. Nowy CircuitPython ma teraz moduł "keypad", robiący skanowanie matrycy "w tle" w C, a do tego mamy możliwość włączania i wyłączania urządzeń USB na starcie, oraz definiowania własnych deskryptorów HID. Zatem pobawiłem się trochę z jedną z klawiatur (tą z LED-ami RGB pod każdym klawiszem).

Efekt jest taki, że animacje LED-ów są dużo płynniejsze, przytrzymanie klawisza w lewym górnym rogu przy podłączaniu klawiatury daje nam dostęp do jej dysku USB i konsoli pythonowej, oraz można wciskać dowolną liczbę klawiszy na raz — klawiatura wysyła raporty jako bitmapę wciśniętych klawiszy, więc mamy NKRO.

Do zrobienia pozostaje automatyczne przełączanie się na tradycyjne raporty gdy host nie obsługuje NKRO — na przykład jak "wejdziemy do biosu" — ale jako że osobiście nie mam takiej potrzeby, nie chce mi się tego teraz robić.

Edytowano przez deshipu
  • Lubię! 1
  • 4 tygodnie później...
(edytowany)

Wreszcie zdobyłem porządne klawisze (MBK Legend Glow) do swojej głównej klawiatury:

IMG_20210819_150136.thumb.jpg.a1c9085c001d9acee676fbdcaafff9e9.jpg

Co prawda brakuje "+", "-" i "Ins", ale nie jestem wybredny, zastąpiłem je jakimiś innymi. Nadal czekam na groupbuy dla zwykłych MBK Legend, przeciąga im się do końca roku na razie.

Edytowano przez deshipu
typo
2 godziny temu, deshipu napisał:

Wreszcie zdobyłem porządne klawisze (MK Legend Glow) do swojej głównej klawiatury:

Też czekam na Legendy 😞

Jakie są te MK Legend Glow w dotyku? Chodzi mi o profil. Nie są za bardzo sferyczne, a za mało walcowate?

(edytowany)
46 minut temu, jbanaszczyk napisał:

Jakie są te MK Legend Glow w dotyku? Chodzi mi o profil. Nie są za bardzo sferyczne, a za mało walcowate?

Trudno jest mi się do tego odnieść. Mają dokładnie taki sam profil jak zwykłe białe MBK bez legend, które da się wszędzie kupić, nawet na sztuki. Nie jest on ani trochę walcowaty, a całkowicie sferyczny, więc ciężko tu mówić o "za bardzo" czy "za mało". Dla mnie są wygodne, na pewno dużo lepsze niż płaskie od Kalitha które miałem dotychczas, ale przypuszczam, że to kwestia indywidualnych preferencji.

Edytowano przez deshipu
typo
  • Pomogłeś! 1
1 godzinę temu, deshipu napisał:

Trudno jest mi się do tego odnieść. [...] to kwestia indywidualnych preferencji.

Dzięki. wiem, że pytanie podobne do "jak pachną fiołki", ale odpowiedź przyda się 🙂

  • Lubię! 1
  • 3 tygodnie później...

Dzisiaj przyszły Kailh Purpz, więc w ramach testu zmontowałem klawiaturę, do której kiedyś zrobiłem płytkę, ale nie miałem siły złożyć.

IMG_20210907_114743.thumb.jpg.552dabff7beced7a7f8315dbba0a8ee0.jpg

Jak zwykle użyłem klawiszy z keychrona, bo nie mam dla nich zastosowania (są za małe i za wysokie), więc leżą.

IMG_20210907_213740.thumb.jpg.8823224fda8554ad738ea3396ca8caad.jpg

Klawiatura jest przeróbką Atreusa/Flatreusa, polegającą na dodaniu dwóch dodatkowych kolumn na brzegach, żeby tam wsadzić wszystkie taby, escape-y, backspace-y i entery. W ten sposób zwolnił się środek, więc wsadziłem tam klawisze nawigacji. Cyfry standardowo na drugiej warstwie na home row, funkcyjne na górze.

IMG_20210907_213732.thumb.jpg.5edf587da800b7d100580d825ba321a8.jpg

Wyszła całkiem mała, ale wygodna klawiatura. Kaminy mi nie zastąpi, ale jest całkiem fajna.

Jedno co zauważyłem — Purpz to liniowe switche z badzo lekką sprężyną, jak wróciłem z tej klawiatury z powrotem do Kaminy z białymi chocs, to każdy klawisz wydaje się wymagać teraz strasznego wysiłku do wciśnięcia. Człowiek się przyzwyczaja do lenistwa.

  • Lubię! 2
  • 7 miesiące później...
  • 8 miesiące później...
  • 6 miesiące później...
Dnia 2.02.2023 o 21:01, keytabspace napisał:

jak najlepiej zacząć zabawę z robieniem klawiatur

Najlepiej na etapy rozbić. Zapoznać się z raportowaniem protokołu HID, fizycznym łączeniem klawiszy (multipleksowanie, jakieś diody, żeby nie dyło duchów), obrać technologię, w której chce się zrobić klawiaturę (wydruk, PCB, sklejka :D). Ja osobiście, spodobała mi się klawiatura wyspowa z lapka Lenovo i w sumie wiele modeli ma nieznacznie różniące się jej wydania (inna czcionka, kosmetyka). Kupiłem jak mniemam oryginalną z demontażu nowego nieużywanego G505 - z numeryczną i bez podświetlania. na razie powoli obczajałem HID - przewodowy i Bluetooth LE, tak żeby urządzenia kompozytowe działały - klawiatura/multimedia/mysz na Windowsie i Linuksie/Androidzie. Obrać mikrokontroler - ja Pico W. Jak dotąd jest w proszku, choć poszczególne elementy (opanowanie HID), czy schemat klawiatury z serwisówki płyty głównej laptopa (są oznaczone wyjścia i wejścia do obsługi klawiatury - klawiatura pasywna, etap wyboru i łączenia przełączników odchodzi). Potem złożyć to w całość, żeby nie kosztowało to tyle co nowa oryginalna Lenovo wyspowa USB/BT.

  • Pomogłeś! 1
  • 1 miesiąc później...
Dnia 21.08.2023 o 16:58, matsobdev napisał:

Najlepiej na etapy rozbić. Zapoznać się z raportowaniem protokołu HID, fizycznym łączeniem klawiszy (multipleksowanie, jakieś diody, żeby nie dyło duchów), obrać technologię, w której chce się zrobić klawiaturę (wydruk, PCB, sklejka :D). Ja osobiście, spodobała mi się klawiatura wyspowa z lapka Lenovo i w sumie wiele modeli ma nieznacznie różniące się jej wydania (inna czcionka, kosmetyka). Kupiłem jak mniemam oryginalną z demontażu nowego nieużywanego G505 - z numeryczną i bez podświetlania. na razie powoli obczajałem HID - przewodowy i Bluetooth LE, tak żeby urządzenia kompozytowe działały - klawiatura/multimedia/mysz na Windowsie i Linuksie/Androidzie. Obrać mikrokontroler - ja Pico W. Jak dotąd jest w proszku, choć poszczególne elementy (opanowanie HID), czy schemat klawiatury z serwisówki płyty głównej laptopa (są oznaczone wyjścia i wejścia do obsługi klawiatury - klawiatura pasywna, etap wyboru i łączenia przełączników odchodzi). Potem złożyć to w całość, żeby nie kosztowało to tyle co nowa oryginalna Lenovo wyspowa USB/BT.

Dzięki!

  • 3 tygodnie później...

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...