Le but principal du clavier est de taper. Mais il peut également être utilisé pour écrire du code sur le microcontrôleur. La méthode n'est pas conventionnelle, mais elle peut être utile lorsqu'il n'y a rien d'autre à portée de main. Ou comme divertissement avec un clavier qui ne convient plus au travail normal. Voici comment procéder.
Exemple de circuit de programmation:

ScrollLock définit le niveau à l'entrée RESET, CapsLock - à l'entrée SCK, NumLock - à l'entrée MOSI. La LED (VD4) à la sortie MISO est utilisée pour contrôler l'entrée en mode programmation. Les détails marqués d'un astérisque (*) sont facultatifs.
Algorithme de programmation (pour microcontrôleurs AT90 ou ATmega):
1) Réglez 0 sur SCK et MOSI (activez CapsLock et NumLock). SCK doit être à 0 avant que RESET passe à 0.
2) Réglez 0 sur RESET (activez ScrollLock).
3) Formez, en changeant l'état de SCK et MOSI (ScrollLock et NumLock), la séquence de transfert du contrôleur en mode de programmation.
4) Si la LED à la sortie MISO ne s'allume pas, il est nécessaire de générer une seule impulsion sur la ligne SCK et de répéter la séquence (point 3).
Si après 32 tentatives, la transition vers le mode de programmation ne s'est pas produite, il semble que quelque chose s'est mal passé. En cas de succès, la programmation se déroule via ScrollLock et NumLock (SCK et MOSI). Un boom attentif et persistant peut programmer le microcontrôleur manuellement.
Pourquoi ça ne marche pas?
Le principal problème lors de la mise en œuvre d'un tel programmeur est la propre logique du clavier. La définition de l'état des LED par un programme externe correspond au résultat sur le clavier, mais le processus de transition d'activation / désactivation des LED est sa propre affaire. Voici les oscillogrammes de la commutation réelle:

Activation de NumLock (CapsLock et ScrollLock inclus).

Désactiver ScrollLock (CapsLock et NumLock sont activés).
Nous pouvons dire que tous les claviers ne sont pas également utiles pour la programmation de microcontrôleurs. Sur les trois que j'avais, une seule avait les LED commutées indépendamment.
Que faire si vous n'avez pas de chance avec le clavier?
Tous les «transitoires» sont empilés dans le temps en quelques microsecondes et un certain niveau est réglé sur SCK, MOSI et RESET avec un retard de plus de 1 ms. Dans ce cas, les signaux de programmation peuvent être extraits à l'aide d'un filtre passe-bas. Voici un exemple de filtre:

74HC14 - Déclencheur Schmitt, il est destiné à la formation de niveaux de sortie. Il peut être remplacé par un comparateur analogique (par exemple LM2901). Dans les microcontrôleurs, les entrées AVR ont un déclencheur Schmitt intégré, qui vous permet de contourner la chaîne RC si les niveaux de sortie 1 et 0 correspondent aux niveaux nécessaires.
Par exemple. Clavier devenu programmeur:

→ Implémentation en douceur du programmeur