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.

Link to post
Share on other sites
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ę! 1
Link to post
Share on other sites
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 🙂

Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.