Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
workshop:tastatur_bauen_standby_problem [05.12.2021 10:04] – [Problem:] ebrndworkshop:tastatur_bauen_standby_problem [05.12.2021 10:17] (aktuell) – [Lösung:] ebrnd
Zeile 7: Zeile 7:
  
 === *Vermutete* Ursache: === === *Vermutete* Ursache: ===
-Der Teensy hat keine Vbus-Detection, sondern erkennt nur daran, dass die USB-Verbindung aktiv ist, ob er mit dem PC verbunden ist. Das klappt nicht, wenn der PC nicht an ist. Und aus mir unerfindlichen Gründen klappt es halt auch nicht, wenn der PC wieder eingeschaltet ist, und die Tastatur geht nicht mehr.+Der Teensy hat keine Vbus-Detection, sondern erkennt nur daran, dass die USB-Verbindung aktiv ist, ob er mit dem PC verbunden ist (''SPLIT_USB_DETECT''). Das klappt nicht, wenn der PC nicht an ist. Und aus mir unerfindlichen Gründen klappt es halt auch nicht, wenn der PC wieder eingeschaltet wurde, und die Tastatur geht nicht mehr.
  
 ==== Lösung: ==== ==== Lösung: ====
Zeile 15: Zeile 15:
 === Achtung === === Achtung ===
  
-Dieser Ansatz erfordert Änderungen im QMK selbst. Macht ihn also in einem eigenen QMK-Checkout, der nicht benutzt werden soll, um Firmware für *andere* Tastaturen zu bauen. Durch die Änderung an der ''split_util.c'' ist es danach nicht mehr möglich, Firmware für Tastaturen, die **nicht** ''SPLIT_HAND_PIN'', ''SPLIT_MATRIX_GRID'' oder ''EE_HANDS'' benutzen, in diesem QMK-Ordner zu bauen.+Dieser Ansatz erfordert Änderungen im QMK selbst. Macht ihn also in einem eigenen QMK-Checkout, der nicht benutzt werden soll, um Firmware für **andere** Tastaturen zu bauen. Durch die Änderung an der ''split_util.c'' ist es danach nicht mehr möglich, Firmware für Tastaturen, die **nicht** ''SPLIT_HAND_PIN'', ''SPLIT_MATRIX_GRID'' oder ''EE_HANDS'' benutzen, in diesem QMK-Ordner zu bauen.
  
-Es ist auch möglich, die hier beschriebene Änderung durch Präprozessor-Anweisungen "transparent" zu machen, so dass sie nur greift, wenn wir Firmware für unsere eigene Tastatur bauen (und über einen git branch so einzubauen, dass weiterhin updates des QMK-Quellcodes vom QMK-Repository möglich sind). Da ich aber sowieso für jede Tastatur einen eigenen Checkout benutze, *habe ich das hier nicht beschrieben*.+Es ist auch möglich, die hier beschriebene Änderung durch Präprozessor-Anweisungen "transparent" zu machen, so dass sie nur greift, wenn wir Firmware für unsere eigene Tastatur bauen (und über einen git-Branch so einzubauen, dass weiterhin Updates des QMK-Quellcodes vom QMK-Repository möglich sind). Da ich aber sowieso für jede Tastatur einen eigenen Checkout benutze, habe ich das hier nicht beschrieben.
  
 === 1. Einen Pin benutzen, um die Seite zu erkennen === === 1. Einen Pin benutzen, um die Seite zu erkennen ===
  
-Zunächst habe ich den Mikrocontrollern eine andere Möglichkeit gegeben, zu erkennen ob sie die rechte oder linke Hälfte sind. Dazu habe ich Pin C6 der linken Hälfte mit +5V verbunden; und Pin C6 der rechten Hälfte mit GND.+Zunächst habe ich den Mikrocontrollern eine andere Möglichkeit gegeben, zu erkennen ob sie die rechte oder linke Hälfte sind.
  
-In der ''config.h'' habe ich dann die Zeile ''#define MASTER_RIGHT'' auskommentiert und ''#define SPLIT_HAND_PIN C6'' hinzugefügt.+  * Dazu habe ich Pin C6 der linken Hälfte mit +5V verbunden; und Pin C6 der rechten Hälfte mit GND. 
 + 
 +In der ''config.h'' habe ich dann die Zeile ''#define MASTER_RIGHT'' auskommentiert und ''#define SPLIT_HAND_PIN C6'' hinzugefügt
 + 
 +<code c> 
 +#define USE_I2C 
 +//#define MASTER_RIGHT // Right hand has the USB connection to the PC 
 +#define SPLIT_USB_DETECT // Teensy boards lack Vbus detection -> Listen for active USB connection to determine hand. 
 +#define SPLIT_HAND_PIN C6 
 +</code> 
 + 
 +(Die Zeile mit ''SPLIT_USB_DETECT'' ist eigentlich auch nicht mehr nötig, kann also auch auskommentiert / gelöscht werden. Sie schadet aber auch nicht.)
  
 === 2. Diesen Pin nicht nur für Handedness, sondern auch für "Connectedness" benutzen === === 2. Diesen Pin nicht nur für Handedness, sondern auch für "Connectedness" benutzen ===
Zeile 29: Zeile 40:
 Das allein reicht nicht. Nach dem Standby wird zwar über den Pin die rechts/links-Erkennung gemacht, aber nicht die "USB/kein-USB"-Erkennung. Das allein reicht nicht. Nach dem Standby wird zwar über den Pin die rechts/links-Erkennung gemacht, aber nicht die "USB/kein-USB"-Erkennung.
  
-In der Datei ''quantum/split_common/split_util.c'' finden wir die Funktion ''usbIsActive(void)'' in Zeile 60. Die wird genutzt, um zu prüfen ob die Hälfte gerade mit dem PC verbunden ist. Wir kommentieren die komplette Funktion (inklusive dem ''#if defined( SPLIT_USB_DETECT)'' und dem ''#endif'') aus, und ersetzen sie durch:+In der Datei ''quantum/split_common/split_util.c'' finden wir die Funktion ''usbIsActive(void)'' in Zeile 60. Die wird genutzt, um zu prüfen ob die Hälfte gerade mit dem PC verbunden ist. Wir kommentieren die komplette Funktion (inklusive dem ''#if defined(SPLIT_USB_DETECT)'' und dem ''#endif'') aus, und ersetzen sie durch:
  
 <code c> <code c>
Zeile 50: Zeile 61:
 Also wird nun erkannt, ob es sich um die rechte/linke Hälfte handelt, indem unser Pin C6 ausgelesen wird. Und durch unsere Änderung oben wird auch erkannt, ob wir mit dem PC reden (können sollten), indem ebenfalls Pin C6 gelesen wird. Bei meiner Tastatur hat das das Problem gelöst. Also wird nun erkannt, ob es sich um die rechte/linke Hälfte handelt, indem unser Pin C6 ausgelesen wird. Und durch unsere Änderung oben wird auch erkannt, ob wir mit dem PC reden (können sollten), indem ebenfalls Pin C6 gelesen wird. Bei meiner Tastatur hat das das Problem gelöst.
  
-Und dadurch wird auch klar, warum dieser QMK-Checkout nicht mehr für eine Tastatur mit "normaler" Handedness-Detection (kein ''#define'' dafür, oder ''SPLIT_MASTER_RIGHT'') benutzt werden kann: Die Funktionen ''is_keyboard_left'' und ''isUsbActive'' würden sich gegenseitig aufrufen, und keine würde jemals bei einem ''return'' ankommen.+//Zusatzinfo:// Wenn wir uns in ansehen, was die Funktion ''is_keyboard_left'' tut, wenn keins der ''#define''s gesetzt ist, oder nur ''MASTER_RIGHT'', wird klar, warum dieser QMK-Checkout nicht mehr für eine Tastatur mit "normaler" Handedness-Detection (ohne ''SPLIT_HAND_PIN'', ''SPLIT_MATRIX_GRID'' oder ''EE_HANDS'') benutzt werden kann: Die Funktionen ''is_keyboard_left'' und ''isUsbActive'' würden sich gegenseitig aufrufen, und keine würde jemals bei einem ''return'' ankommen.
  
 === Alternative Lösungsideen === === Alternative Lösungsideen ===
Zeile 56: Zeile 67:
 Es müsste auch möglich sein, über ''SPLIT_MATRIX_GRID'' oder ''EE_HANDS'' (plus Änderung an der ''split_utils.c'') zum gleichen Ergebnis zu kommen. Das habe ich nicht getestet, weil meine Tastatur keine Stelle in der Matrix mehr frei hat, bzw. ich auch nicht herausfinden wollte, wie ich das EEPROM des Teensy beschreiben kann. Es müsste auch möglich sein, über ''SPLIT_MATRIX_GRID'' oder ''EE_HANDS'' (plus Änderung an der ''split_utils.c'') zum gleichen Ergebnis zu kommen. Das habe ich nicht getestet, weil meine Tastatur keine Stelle in der Matrix mehr frei hat, bzw. ich auch nicht herausfinden wollte, wie ich das EEPROM des Teensy beschreiben kann.
  
-Auch der [[https://docs.qmk.fm/#/feature_split_keyboard?id=teensy-boards|hier]] beschriebene Teensy-Vbus-Mod sollte (*ohne* Änderung an der ''split_utils.c'') funktionieren. Das habe ich auch nicht getestet, weil ich keine passende Schottky-Diode zur Hand habe.+Auch der [[https://docs.qmk.fm/#/feature_split_keyboard?id=teensy-boards|hier]] beschriebene Teensy-Vbus-Mod sollte (**ohne** Änderung an der ''split_utils.c'') funktionieren - es muss nur in der ''config.h'' das ''#define SPLIT_USB_DETECT'' gelöscht werden). Das habe ich auch nicht getestet, weil ich keine passende Schottky-Diode zur Hand habe.
workshop/tastatur_bauen_standby_problem.1638698689.txt.gz · Zuletzt geändert: 05.12.2021 10:04 von ebrnd
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Noncommercial-Share Alike 4.0 International
Recent changes RSS feed Driven by DokuWiki