Tujuan utama keyboard adalah mengetik. Tetapi bisa juga digunakan untuk menulis kode ke mikrokontroler. Metode ini tidak konvensional, tetapi dapat berguna ketika tidak ada hal lain yang tersedia. Atau sebagai hiburan dengan keyboard yang tidak lagi cocok untuk pekerjaan normal. Di bawah ini adalah cara melakukannya.
Contoh rangkaian programmer:

ScrollLock mengatur level pada input RESET, CapsLock - pada input SCK, NumLock - pada input MOSI. LED (VD4) pada output MISO digunakan untuk mengontrol entri ke mode pemrograman. Detail yang ditandai dengan tanda bintang (*) adalah opsional.
Algoritma pemrograman (untuk mikrokontroler AT90 atau ATmega):
1) Set 0 ke SCK dan MOSI (aktifkan CapsLock dan NumLock). SCK harus pada 0 sebelum RESET ke 0.
2) Set 0 ke RESET (aktifkan ScrollLock).
3) Formulir, dengan mengubah status SCK dan MOSI (ScrollLock dan NumLock), urutan mentransfer controller ke mode pemrograman.
4) Jika LED pada output MISO tidak menyala, perlu untuk menghasilkan satu pulsa pada saluran SCK dan ulangi urutannya (poin 3).
Jika setelah 32 upaya transisi ke mode pemrograman tidak terjadi, tampaknya ada sesuatu yang salah. Jika berhasil, pemrograman lebih lanjut dilakukan melalui ScrollLock dan NumLock (SCK dan MOSI). Boom yang penuh perhatian dan persisten dapat memprogram mikrokontroler secara manual.
Mengapa ini tidak berhasil?
Masalah utama ketika mengimplementasikan programmer seperti itu adalah logika keyboard sendiri. Mengatur status LED oleh program eksternal sesuai dengan hasil di keyboard, tetapi proses transisi untuk menyalakan / mematikan LED adalah urusannya sendiri. Di bawah ini adalah osil dari peralihan sungguhan:

Mengaktifkan NumLock (termasuk CapsLock dan ScrollLock).

Mematikan ScrollLock (CapsLock dan NumLock aktif).
Kita dapat mengatakan bahwa tidak semua keyboard sama-sama berguna untuk pemrograman mikrokontroler. Dari tiga yang saya miliki, hanya satu yang LEDnya beralih secara independen.
Apa yang harus dilakukan jika Anda sangat tidak beruntung dengan keyboard?
Semua "transien" ditumpuk dalam waktu dalam beberapa mikrodetik, dan level tertentu diatur ke SCK, MOSI, dan RESET dengan penundaan lebih dari 1 ms. Dalam hal ini, sinyal pemrograman dapat diekstraksi menggunakan filter low-pass. Berikut ini contoh filter:

74HC14 - Pemicu Schmitt, dimaksudkan untuk pembentukan level output. Itu dapat diganti oleh komparator analog (mis. LM2901). Dalam mikrokontroler, input AVR memiliki pemicu Schmitt bawaan, yang memungkinkan Anda untuk berkeliling rantai RC jika level output 1 dan 0 sesuai dengan yang diperlukan.
Sebagai contoh. Keyboard yang telah menjadi programmer:

โ Implementasi lunak dari programmer