Katakanlah Anda memiliki mikrokontroler yang agak sederhana dan kecil dan tidak memiliki antarmuka, tidak ada komputer, tidak ada debugger, kompiler, atau assembler. Bisakah Anda menulis kode Anda dalam perakitan, mengubahnya (secara manual) ke kode mesin, dan kemudian menerapkan daya ke pin yang sesuai menggunakan sumber tegangan?
Saya mengerti Anda akan membutuhkan I / O dan memori yang tepat untuk benar - benar melakukan apa pun, tetapi jika Anda begitu cenderung dan punya waktu, dapatkah Anda melakukan ini? Saya kira, secara historis, bagaimana hal ini dilakukan ketika tidak ada komputer / kompiler / assembler untuk memulai? Jangan ragu untuk menautkan saya ke sumber daya luar. Terima kasih! :)
Jawaban:
Iya!
Kode dapat ditulis "di luar kepala Anda" dalam biner, jika diinginkan.
Lama (lama sekali) yang lalu ini adalah bagaimana saya mulai menggunakan (kemudian) mikroprosesor.
Saya dan teman-teman akan menulis kode dalam bahasa assembly, kompilasi secara manual ke kode mesin (sesuatu yang dapat Anda lakukan "dengan inspeksi" setelah beberapa latihan) kemudian masukkan ke dalam prosesor dengan berbagai cara. Pada satu sistem yang kami bangun, kami akan mengatur alamat pada sakelar biner (nyala mati) atau menggunakan fitur kenaikan otomatis prosesor, masukkan 8 bit data pada sakelar biner dan kemudian tekan sakelar "jam" untuk memasukkan data ke memori.
Fungsionalitas yang setara dapat dicapai dengan sakelar yang lebih sedikit pada mikrokontroler modern menggunakan pemrograman SPI serial - lihat di bawah.
Iya!
Tapi itu akan sangat lambat untuk dilakukan!
Banyak mikrokontroler modern memungkinkan penggunaan antarmuka "SPI" untuk pemrograman.
Ini biasanya terdiri dari jalur input dan output data dan garis "jam", dan biasanya garis reset.
Banyak prosesor yang mengijinkan jam dan data SPI menjadi "statis" yang berarti tidak ada batasan berapa lama Anda dapat mengatur data antar bit. Anda dapat memprogram prosesor seperti itu menggunakan jalur data dan garis jam yang digerakkan oleh sakelar yang dioperasikan secara manual. Garis jam harus "bebas bouncing" - Anda harus dapat mengaturnya tinggi atau rendah dalam satu transisi per operasi - sehingga antarmuka minimum mungkin perlu menyertakan gerbang yang dipicu Schmitt. Anda mungkin "lolos" hanya penundaan RC dan saklar tombol, tetapi input yang dipicu Schmitt lebih aman. Jalur data tidak perlu bebas bouncing karena statusnya hanya dibaca di tepi jam.
Beberapa antarmuka bersifat interaktif - data dikeluarkan oleh prosesor selama pemrograman (mis. Data out = MISO = Master In Serial Out pada prosesor AVR). Untuk membaca ini, Anda perlu menambahkan misalnya LED dan resistor (dan mungkin saja buffer atau transistor jika kemampuan drive BENAR-BENAR rendah).
MC6800:
Dari memori semi-fading (hampir 40 tahun!)
LDI A, $ 7F ...... 86 7F ...... 1000 0110 0111 1111
STA, $ 1234 ...... B7 12 34 ... 1011 0111 0001 0010 0011 0100
LDI X, $ 2734 .. CE 27 34 ... 1100 1110 0010 0111 0011 0100
...
sumber
Awalnya, dalam mesin yang dapat diprogram, program tersebut secara manual dilubangi ke pita kertas atau kartu. Kemudian mereka menggunakan semacam mesin tik untuk melakukan pukulan, dan bahkan kemudian masih komputer (seperti yang kemudian dikenal) dapat meninju pita kertas mereka sendiri.
Itu, secara harfiah, duduk di sana dengan kartu dan secara manual membuat lubang di dalamnya.
Setiap kolom adalah instruksi atau bit data yang ditafsirkan oleh mesin keadaan CPU untuk melakukan tugas.
Sekarang jika tentu saja itu semua memori flash, dan ya, mendapatkan data di sana di tempat pertama biasanya membutuhkan komputer untuk melakukannya. Tapi itu tidak sepenuhnya 100% benar.
Lagi pula, apa yang dilakukan oleh seorang programmer komputer dan perangkat keras selain mengatur keadaan pin IO pada waktu yang tepat? Jadi, jika Anda benar-benar cukup masokis, Anda dapat membangun sistem yang memungkinkan Anda mengirim instruksi yang benar ke pin pemrograman mikrokontroler dengan cara yang benar untuk menginstal beberapa instruksi ke dalam memori flash untuk dieksekusi.
Mungkin sesuatu yang melibatkan banyak sakelar, beberapa register geser, generator jam, dll.
Saya ingat di kampus kami memiliki sistem pemrograman berbasis Z80 baru-ketinggalan jaman - unit ukuran koper dengan Z80, sejumlah kecil RAM, sekelompok layar 7-segmen LED, dan deretan switch. Program dengan secara manual memuat instruksi ke dalam RAM menggunakan sakelar.
sumber
Anda mengatakan "mikrokontroler kecil dan tidak memiliki antarmuka, tidak ada komputer, tidak ada debugger, kompiler, atau assembler.". Baik Anda dapat bertahan tanpa komputer, debugger, compiler, atau assembler, tetapi Anda harus memiliki semacam antarmuka untuk terhubung dengan mikrokontroler untuk memuat program.
Pertama-tama, lupakan bahasa tingkat tinggi seperti C. Kemudian cara termudah adalah menulis program Anda dalam bahasa assembly, tetapi jangan gunakan assembler untuk menerjemahkannya ke kode mesin. Alih-alih, lihat masing-masing instruksi perakitan dalam manual pemrograman, temukan kode hex yang setara, dan tulis itu.
Anda harus mengalokasikan variabel Anda sendiri, sehingga Anda dapat mengisi alamat yang sesuai di bagian operan dari instruksi. Juga lupakan tentang menggunakan tumpukan dan tumpukan, terlalu banyak pekerjaan. Setelah selesai, Anda akan memiliki program mesin yang dapat dimuat langsung ke dalam memori flash mikrokontroler - tidak diperlukan penghubung juga.
Karena kurangnya alamat eksternal dan bus data pada hampir semua mikrokontroler (karena mereka akan mengambil terlalu banyak pin yang dibutuhkan oleh port I / O dan periferal), hampir semua mikrokontroler diprogram melalui antarmuka khusus seperti ini:
Biasanya "programmer" di sebelah kiri akan terhubung ke PC, yang akan mengunduh file mesin yang dihasilkan oleh kompiler / linker.
Namun jika programmer memiliki keyboard, seperti yang di bawah ini:
kemudian seseorang dapat memasukkan kode hex untuk program yang dihasilkan secara manual langsung ke programmer, dan memprogram perangkat tanpa memerlukan kompiler, linker, atau PC yang merupakan apa yang Anda tanyakan. (Keyboard juga digunakan untuk mengedit file hex, dan menghasilkan checksum.)
Memang sedikit programmer yang memiliki keyboard seperti ini. Yang ini tidak akan cocok untuk penggemar karena mungkin harganya beberapa ribu dolar.
Programer khusus ini memprogram bagian-bagian sebelum mereka diletakkan di papan; antarmuka dan soket tersedia untuk beberapa PIC dan juga Atmel AVRs antara lain.
sumber
Secara praktis, sesuatu seperti mengganti pin JTAG secara manual akan sangat rawan kesalahan. Untuk memasukkan program dengan ukuran apa pun yang layak akan membutuhkan ribuan matikan. Tapi secara teori, itu mungkin.
Jika Anda diizinkan untuk menyiapkan mikrokontroler terlebih dahulu (atau menulis boot ROM untuk itu), Anda dapat dengan mudah mengimplementasikan sesuatu seperti sakelar sakelar eksternal yang digunakan pada mainframe awal. Jika Anda mengizinkan logika eksternal, Anda bahkan bisa menggunakan keypad hex untuk mempercepatnya.
Akhirnya, meskipun tidak umum hari ini, Anda dapat membeli mikrokontroler berbasis ROM dengan kode khusus di dalamnya. Anda harus menawarkan sejumlah uang di muka dan menjamin volume tertentu, tetapi saya telah melihat pelanggan melakukannya untuk menghemat uang pada produksi volume tinggi. Dalam hal ini, tidak akan ada sinyal eksternal yang diperlukan untuk memprogram mikrokontroler sama sekali. Kode akan dibangun ke dalam tata letak fisik chip.
Tentu saja, Anda juga dapat menggunakan mikrokontroler yang menjalankan kode dari antarmuka memori eksternal, tetapi itu curang. :-)
sumber
Benar. Bahkan, kursus mikroprosesor pertama yang saya ambil (sekitar 87) menggunakan papan Motorola 68000. Kami akan mengerjakan kode dalam assembly, mencari hex untuk assembly, dan mengetik hex ke terminal untuk memprogram board. Jika Anda diedit, Anda harus memastikan kode yang Anda masukkan lebih pendek dari kode yang Anda ganti, dan kemudian buffer sisanya dengan NOP. Jika coDE lebih panjang, Anda harus mengetik ulang semuanya! Kami belajar menambahkan banyak NOP.
sumber
Benar. Setelah Anda memiliki format biner dari instruksi aktual (mudah dilakukan untuk set instruksi yang ditentukan dengan baik), yang Anda butuhkan hanyalah mengimplementasikan protokol pemrograman.
Misalnya, ambil sesuatu yang kecil seperti AVR Tiny 4 . Bagian 14 merinci antarmuka pemrograman termasuk protokol dan lapisan fisik. Ini relatif sederhana dan Anda hanya perlu beberapa tombol dan resistor pullup / down untuk mengirim / menerima 1 atau 0. Jika Anda merasa ambisius, tambahkan beberapa LED untuk membaca kembali output.
Masalah terakhir yang tersisa adalah jika Anda dapat melakukannya dengan cukup cepat, yang untungnya * untuk AVR Tiny 4 (bagian 16), ia tidak memiliki frekuensi minimum ketika datang ke pemrograman itu.
* note: sejauh datasheet menentukan. Ini mungkin berbeda dalam kenyataannya ... Saya ragu ada yang mencoba pemrograman dengan kecepatan clock mHz.
Jangan ragu untuk mengotomatisasi proses sebanyak yang diinginkan. Ini yang dilakukan sebagian besar perangkat pemrograman: mengotomatiskan proses.
sumber
Dengan cara apa pun Anda memasukkan program ke UC, Anda "berinteraksi" dengan itu, karena itulah artinya interfacing. Bahkan banyak sakelar yang Anda putar secara manual adalah "antarmuka".
Jadi saya akan memperlakukan pertanyaan ini sebagai "bagaimana saya antarmuka ke UC dengan perangkat keras yang sebagian besar-mekanik (sebagai lawan elektronik), dan sedingin mungkin?"
Untuk jawaban saya, masukkan program sebagai piano roll. Rol bar pelacak piano dari piano pemain pada dasarnya memberi Anda setidaknya 65 (tergantung format) bit yang dapat Anda nyalakan dan matikan secara independen berdasarkan perforasi di kertas. Sisanya menuntut kerja dengan pisau eksak. Tapi setidaknya program Anda, setelah berjalan, disimpan (agak) secara permanen (tidak seperti pendekatan flip-the-switches-manual).
sumber
Tidak hanya mungkin untuk memprogram mikrokontroler tanpa komputer, tetapi Anda sebenarnya dapat membeli komputer hari ini yang dirancang khusus untuk diprogram dengan sakelar sakelar perangkat keras. Kit ini disebut Kartu Keanggotaan , dan itu merupakan kreasi ulang komputer COSMAC Elf dari tahun 1970-an. Kit ini dijelaskan dalam artikel terbaru di majalah IEEE Spectrum . Dimungkinkan juga untuk memprogram versi yang lebih baru dari Kartu Keanggotaan dari PC.
sumber
Baik. Bagaimana dengan ini: Anda menulis program dalam assembler dan mencari sendiri opcodes, seperti yang disarankan sebelumnya. Cara mendapatkannya di komputer: ambil pemutar kaset lama, lepaskan kepala pemutaran, tetapi tinggalkan penggulung dan penjepit. Ini akan menjadi transportasi Anda. Jika Anda memiliki pemutar reel-to-reel, Anda dapat membiarkan kepala pemutaran tetap di tempatnya.
Kemudian ambil selembar kertas yang panjang dan sempit, atau pita transparan yang lebih baik. Di sinilah Anda menyandikan program Anda. Anda menggunakan trek sebanyak yang Anda punya pin untuk diprogram. Di satu trek Anda meletakkan titik-titik hitam secara berkala; ini jammu. Di trek lain Anda meletakkan titik atau strip hitam dan biarkan kosong sesuai dengan data dan sinyal. Anda menyinari semuanya dan mendeteksinya dengan fototransistor kecil (atau menyinari satu LED pada pita dan mendeteksi cahaya dengan yang lain, yang serupa) dan menggerakkan jam dan jalur sinyal dengan transistor. Ini membutuhkan sedikit ruang pada pemutar kaset, itulah sebabnya Anda mungkin perlu melepaskan kepala pemutaran.
Tentu saja Anda juga dapat menyandikan sinyal sebagai audio, tetapi sedikit lebih rumit untuk memecahkan kode. Atau Anda dapat mendeteksi pantulan alih-alih cahaya yang ditransmisikan. Atau Anda dapat membuat lubang pada pita hitam, atau pita kertas, alih-alih membuat tanda hitam pada pita transparan. Masa bodo. Pemutar kaset menggerakkan pita dengan kecepatan konstan, sehingga Anda dapat memasukkan sinyal clock tanpa komputer.
sumber
Iya. Masalah utama mungkin berinteraksi dengan antarmuka pemrograman. Jika Anda memiliki alamat polos dan bus data, semuanya menjadi sedikit lebih mudah. Pernahkah Anda melihat beberapa komputer yang sangat awal? Program dimasukkan satu instruksi pada satu waktu ke dalam RAM dengan sakelar di bagian depan.
sumber
Komputer mini PDP-8 Digital Equipment 40+ tahun yang lalu tidak memiliki kemampuan boot otomatis. Program biasanya dimuat dari kaset kertas berlubang tetapi pemuat untuk memuat kaset kertas harus dimasukkan secara manual pada sakelar panel depan.
Di situs Digital dan PDP-8, pelanggan seperti OEM yang menggunakannya sebagai pengendali tertanam pada hari itu, tidak jarang bagi pengguna untuk menghafal boot loader dan bersaing satu sama lain untuk waktu tercepat yang diambil untuk memasuki boot. loader ke dalam mesin. Mesin-mesin itu menggunakan ingatan inti-magnetik (tangan digantung di bagian-bagian dunia yang jauh, oleh para wanita dengan jari-jari kecil, menggunakan jarum dan kawat halus).
Karena isi memori magnetik tidak mudah menguap, boot loader dapat hidup tanpa daya dan entri manual hanya diperlukan setelah perakitan awal, loader dihilangkan oleh bug program, atau program yang diperlukan untuk menggunakan ruang loader.
sumber
Jawabannya adalah ya , Anda dapat memprogram pengontrol mikro tanpa komputer, debugger, dll. Apa yang Anda perlukan adalah menyediakan berbagai tegangan, data, jam, dan urutan pemrograman yang ditentukan oleh pabrikan UC (bukan pekerjaan mudah).
sumber