Daftar Isi:
- Langkah 1: Menghubungkan Tampilan 7-seg
- Langkah 2: Kode Perakitan dan Video
- Langkah 3: Menghubungkan Tampilan 4-digit
- Langkah 4: Mengkode Tampilan 4-digit
- Langkah 5: Tekan 'n Pop
- Langkah 6: Filter Low-pass dan Penguat Tegangan
- Langkah 7: Kode Tampilan dan Video 4 digit
Video: Tutorial Perakitan AVR 9: 7 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:53
Selamat datang di Tutorial 9.
Hari ini kami akan menunjukkan cara mengontrol tampilan 7-segmen dan tampilan 4-digit menggunakan kode bahasa rakitan ATmega328P dan AVR kami. Selama melakukan ini, kita harus mengalihkan perhatian tentang cara menggunakan tumpukan untuk mengurangi jumlah register yang perlu kita ikat. Kami akan menambahkan beberapa kapasitor (filter low-pass) untuk mencoba mengurangi noise pada keypad kami. Kami akan membuat penguat tegangan dari beberapa transistor sehingga sakelar interupsi INT0 kami bekerja lebih baik untuk tombol tegangan rendah di baris bawah keypad. Dan kami akan membenturkan kepala kami ke dinding sedikit mencoba untuk mendapatkan resistor yang benar sehingga benda itu berfungsi dengan baik.
Kami akan menggunakan keypad kami dari Tutorial 7
Untuk melakukan tutorial ini, selain hal-hal standar, Anda perlu:
-
Tampilan 7 segmen
www.sparkfun.com/products/8546
-
Tampilan 4 digit
www.sparkfun.com/products/11407
-
Sebuah tombol tekan
www.sparkfun.com/products/97
- Lembar data untuk tampilan yang dapat diunduh dari halaman masing-masing yang ditautkan ke atas.
- Kapasitor keramik 68 pf, sepasang 104 kapasitor, sekelompok resistor, dua transistor NPN 2N3904.
Berikut ini tautan ke koleksi lengkap tutorial assembler AVR saya:
Langkah 1: Menghubungkan Tampilan 7-seg
Kami akan menggunakan kode yang sama yang kami gunakan di Tutorial 7 untuk keypad untuk mengontrol tampilan 7-segmen. Jadi, Anda perlu membuat salinannya dan kami akan memodifikasinya.
Kami akan memetakan segmen ke pin mikrokontroler kami sebagai berikut:
(dp, g, f, e, d, c, b, a) = (PD7, PD6, PB5, PB4, PB3, PB2, PB1, PB0)
di mana huruf-huruf segmen ditunjukkan pada gambar bersama dengan pinout yang sesuai dengan 5V umum dan masing-masing segmen LED termasuk titik desimal (dp) di kanan bawah layar. Alasan untuk ini adalah agar kita dapat memasukkan seluruh nomor ke dalam satu register dan output yang mendaftar ke port B dan D untuk menerangi segmen. Seperti yang Anda lihat, bit diberi nomor secara berurutan dari 0 hingga 7 sehingga mereka akan memetakan ke pin yang benar tanpa harus mengatur dan menghapus bit individu.
Seperti yang Anda lihat dengan kode yang telah kami lampirkan pada langkah berikutnya, kami telah memindahkan rutin tampilan kami ke makro dan kami telah membebaskan pin SDA dan SCL untuk digunakan di masa mendatang di Tutorial berikutnya.
Saya harus menambahkan bahwa Anda perlu meletakkan resistor antara anoda umum layar dan rel 5V. Saya memilih resistor 330 ohm seperti biasa tetapi jika Anda suka, Anda dapat menghitung resistansi minimum yang diperlukan untuk mendapatkan kecerahan maksimum dari layar tanpa menggorengnya. Berikut adalah cara melakukannya:
Pertama lihat lembar data dan perhatikan bahwa pada halaman pertama memberikan berbagai properti tampilan. Besaran yang penting adalah "Arus Maju" (I_f = 20mA) dan "Tegangan Maju" (V_f = 2.2V). Ini memberi tahu Anda bahwa penurunan tegangan di layar akan terjadi jika arusnya sama dengan arus maju. Ini adalah arus maksimum yang akan diambil layar tanpa menggoreng. Konsekuensinya juga kecerahan maksimum yang bisa Anda dapatkan dari segmen.
Jadi mari kita gunakan hukum Ohm dan aturan loop Kirchoff untuk mencari tahu berapa hambatan minimum yang kita perlukan untuk dirangkai secara seri dengan layar untuk mendapatkan kecerahan maksimal. Aturan Kirchoff mengatakan bahwa jumlah perubahan tegangan di sekitar loop tertutup dalam suatu rangkaian sama dengan nol dan hukum Ohm mengatakan bahwa jatuh tegangan pada resistor dengan resistansi R adalah: V = I R di mana I adalah arus yang mengalir melalui resistor.
Jadi diberi tegangan sumber V dan mengelilingi rangkaian kami, kami memiliki:
V - V_f - I R = 0
yang berarti (V - V_f)/I = R. Jadi hambatan yang diperlukan untuk mendapatkan kecerahan maksimum (dan mungkin menggoreng segmen) adalah:
R = (V - V_f)/I_f = (5.0V - 2.2V)/0.02A = 140 ohm
Jadi jika Anda mau, Anda bisa dengan senang hati menggunakan 150 ohm tanpa khawatir. Namun, saya pikir 140 ohm membuatnya terlalu terang untuk keinginan saya dan jadi saya menggunakan 330 ohm (yang merupakan semacam resistensi Goldilocks pribadi saya untuk LED)
Langkah 2: Kode Perakitan dan Video
Saya telah melampirkan kode perakitan dan video yang menunjukkan pengoperasian keypad dengan layar. Seperti yang Anda lihat, kami hanya memetakan tombol Panggil Ulang ke "r", tombol flash ke "F", tanda bintang ke "A" dan tanda hash ke "H". Ini dapat dipetakan ke berbagai operasi seperti backspace, enter, dan apa-tidak jika Anda ingin terus menggunakan papan tombol untuk mengetik angka pada layar LCD atau layar 4 digit. Saya tidak akan membahas kode baris demi baris kali ini karena sangat mirip dengan apa yang telah kita lakukan di tutorial sebelumnya. Perbedaannya terutama hanya pada hal yang sama yang sudah kita ketahui bagaimana melakukannya seperti interupsi dan tabel pencarian. Anda hanya perlu membaca kode dan melihat hal-hal baru yang telah kami tambahkan dan hal-hal yang telah kami ubah dan mencari tahu dari sana. Kami akan kembali ke analisis baris demi baris dalam tutorial berikutnya saat kami memperkenalkan aspek baru pengkodean bahasa rakitan pada mikrokontroler AVR.
Sekarang mari kita lihat tampilan 4-digit.
Langkah 3: Menghubungkan Tampilan 4-digit
Menurut datasheet, layar 4 digit memiliki Arus Maju 60 mA dan tegangan maju 2,2 volt. Jadi, dengan perhitungan yang sama seperti sebelumnya, saya bisa menggunakan resistor 47 ohm jika saya mau. Sebagai gantinya saya akan menggunakan … hrm.. coba saya lihat … bagaimana dengan 330 ohm.
Cara kabel tampilan 4 digit adalah bahwa ada 4 anoda, satu untuk masing-masing digit, dan pin lainnya mengontrol segmen mana yang masuk di masing-masing digit. Anda dapat menampilkan 4 digit secara bersamaan karena digandakan. Dengan kata lain, seperti yang kami lakukan untuk sepasang dadu, kami hanya memutar daya melalui masing-masing anoda secara bergantian dan itu akan berkedip satu demi satu. Ini akan melakukan ini begitu cepat sehingga mata kita tidak akan melihat kedipan dan akan terlihat seperti keempat digit menyala. Namun, untuk memastikannya, cara kita mengkodenya adalah dengan mengatur keempat digit, lalu menggilir anoda, daripada mengatur, memindahkan, mengatur, memindahkan, dll. Dengan begitu kita bisa mendapatkan waktu yang tepat antara menyalakan setiap digit.
Untuk saat ini, mari kita uji apakah semua segmen berfungsi.
Tempatkan resistor 330 ohm Anda di antara rel positif papan tempat memotong roti Anda dan anoda pertama di layar. Lembar data memberi tahu kita bahwa pin diberi nomor dari 1 hingga 16 berlawanan arah jarum jam mulai dari kiri bawah (ketika Anda melihat layar secara normal.. dengan titik desimal di sepanjang bagian bawah) dan menyatakan bahwa anoda adalah nomor pin 6, 8, 9, dan 12.
Jadi kami menghubungkan pin 6 ke 5V dan kemudian mengambil kabel negatif dari rel GND Anda dan menyodoknya ke semua pin lainnya dan melihat bahwa semua segmen menyala pada digit yang sesuai (yang sebenarnya adalah digit kedua dari hak). Pastikan Anda mendapatkan semua 7 segmen dan titik desimal menyala.
Sekarang tempelkan kabel GND Anda ke salah satu pin untuk menerangi salah satu segmen dan kali ini pindahkan resistor ke 3 anoda lainnya dan lihat bahwa segmen yang sama menyala di masing-masing digit lainnya.
Sesuatu yang tidak biasa?
Ternyata pinout pada datasheet salah. Ini karena ini adalah lembar data dan pinout untuk tampilan 12-pin, 4-digit. Yaitu. satu tanpa titik dua atau titik desimal atas. Tampilan yang saya dapatkan ketika saya memesannya adalah tampilan 16 pin, 4 digit. Padahal, di tambang saya, anoda segmen berada di pin 1, 2, 6, dan 8. Anoda titik dua adalah pin 4 (pin katoda 12) dan anoda dp atas adalah pin 10 (katoda adalah pin 9)
Latihan 1: Gunakan resistor dan kabel ground Anda untuk memetakan pin mana yang sesuai dengan segmen dan titik desimal mana pada tampilan sehingga kita mendapatkan segmen yang benar menyala saat kita mengkodekannya.
Cara kita ingin mengkodekan peta segmen persis seperti yang kita lakukan dengan tampilan 7-segmen satu digit di atas -- kita tidak perlu mengubah apa pun dalam kode, satu-satunya hal yang kita ubah adalah bagaimana kabel terhubung di papan tulis. Cukup colokkan pin port yang benar pada mikrokontroler ke pin yang sesuai pada tampilan 4 digit sehingga, misalnya, PB0 masih masuk ke pin yang sesuai dengan segmen a, PB1 ke segmen B, dll.
Satu-satunya perbedaan adalah bahwa sekarang kita membutuhkan 4 pin tambahan untuk anoda karena kita tidak bisa begitu saja pergi ke rel 5V lagi. Kami membutuhkan mikrokontroler untuk memutuskan digit mana yang mendapatkan jus.
Jadi kita akan menggunakan PC1, PC2, PC3, dan PD4 untuk mengontrol anoda dari 4 digit.
Anda mungkin juga melanjutkan dan mencolokkan kabel. (jangan lupa resistor 330 ohm pada kabel anoda!)
Langkah 4: Mengkode Tampilan 4-digit
Mari kita pikirkan bagaimana kita ingin mengkodekan tampilan ini.
Kami ingin pengguna menekan tombol keypad dan menampilkan nomor secara berurutan di layar saat mereka menekan setiap tombol. Jadi jika saya menekan 1 diikuti oleh 2 itu akan muncul di layar sebagai 12. Saya juga ingin menyimpan nilai itu, 12, untuk penggunaan internal tetapi kita akan membahasnya nanti. Untuk saat ini saya hanya ingin menulis makro baru yang mengambil penekanan tombol Anda dan menampilkannya. Namun, karena kami hanya memiliki 4 digit, saya ingin memastikan bahwa Anda hanya dapat mengetik empat angka.
Masalah lainnya adalah cara kerja tampilan 4 digit multipleks adalah dengan memutar anoda sehingga setiap digit hanya menyala selama sepersekian detik sebelum menampilkan yang berikutnya dan kemudian yang berikutnya dan akhirnya kembali ke yang pertama lagi, dll. Jadi kami perlu cara untuk mengkodekan ini.
Kami juga ingin memindahkan "kursor" ke kanan spasi saat kami mengetik digit berikutnya. Sehingga jika saya ingin mengetik 1234 misalnya, setelah saya mengetik 1, kursor akan berpindah sehingga angka berikutnya yang saya ketik akan muncul pada tampilan 7-segmen berikutnya dan seterusnya. Sementara ini terjadi, saya masih ingin dapat melihat apa yang telah saya ketik sehingga masih harus berputar melalui angka dan menampilkannya.
Kedengarannya seperti perintah tinggi?
Hal-hal yang sebenarnya bahkan lebih buruk. Kami membutuhkan 4 register tujuan umum yang dapat kami gunakan untuk menyimpan nilai saat ini dari 4 digit yang ingin kami tampilkan (jika kami akan menggilirnya, kami harus menyimpannya di suatu tempat) dan masalahnya adalah kami memiliki telah menggunakan register tujuan umum seperti orang gila dan jika kita tidak berhati-hati, kita tidak akan memiliki yang tersisa. Jadi mungkin ide yang baik untuk mengatasi masalah itu lebih cepat daripada nanti dan menunjukkan kepada Anda cara mengosongkan register dengan menggunakan tumpukan.
Jadi mari kita mulai dengan menyederhanakan sedikit, menggunakan tumpukan, dan mengosongkan beberapa register dan kemudian kita akan mencoba menyelesaikan tugas membaca dan menampilkan nomor kita pada tampilan 4 digit.
Langkah 5: Tekan 'n Pop
Hanya ada beberapa "Register Tujuan Umum" yang kami miliki dan setelah digunakan, tidak ada lagi. Jadi, praktik pemrograman yang baik adalah hanya menggunakannya untuk beberapa variabel yang digunakan sebagai penyimpanan sementara yang Anda perlukan untuk membaca dari, dan menulis ke, port dan SRAM dengannya, atau variabel lain yang akan Anda perlukan di subrutin di mana pun dan jadi Anda beri nama mereka. Jadi apa yang telah saya lakukan, sekarang kita telah menginisialisasi dan belajar menggunakan Stack, adalah menelusuri kode dan menemukan register tujuan umum bernama yang digunakan hanya di dalam satu subrutin atau interupsi dan tidak ada tempat lain dalam kode dan ganti mereka dengan salah satu register temp kami dan push dan pop ke stack. Faktanya, jika Anda melihat kode yang ditulis untuk mikrokontroler yang lebih kecil, atau jika Anda kembali ke masa ketika semua chip lebih kecil, Anda hanya akan melihat beberapa register tujuan umum yang harus digunakan untuk semuanya, jadi Anda tidak bisa simpan saja nilai di sana dan biarkan saja karena Anda pasti membutuhkan register itu untuk hal-hal lain. Jadi Anda akan melihat pushin 'dan poppin' di semua tempat dalam kode. Mungkin saya seharusnya menamai register tujuan umum sementara kami AX dan BX sebagai pujian hormat untuk masa lalu itu.
Sebuah contoh akan membantu membuat ini lebih jelas.
Perhatikan bahwa dalam konversi Analog ke Digital kami menyelesaikan interupsi ADC_int kami menggunakan register tujuan umum yang kami beri nama buttonH yang kami gunakan untuk memuat nilai ADCH dan membandingkannya dengan tabel pencarian analog ke konversi tekan tombol. Kami hanya menggunakan register buttonH ini dalam subrutin ADC_int dan tidak di tempat lain. Jadi sebagai gantinya kita akan menggunakan variabel temp2 yang kita gunakan sebagai variabel sementara yang dapat kita gunakan dalam setiap subrutin yang diberikan dan nilainya tidak akan memengaruhi apa pun di luar subrutin itu (yaitu nilai yang kita berikan di ADC_int tidak akan digunakan di mana pun lain).
Contoh lain adalah di makro penundaan kami. Kami memiliki register yang kami beri nama "milidetik" yang berisi waktu tunda kami dalam milidetik. Dalam hal ini dalam makro dan kita ingat bahwa cara kerja makro adalah assembler menempatkan seluruh kode makro ke dalam tempat program yang dipanggil. Dalam hal ini kami ingin menyingkirkan variabel "milidetik" dan menggantinya dengan salah satu variabel sementara kami. Dalam hal ini saya akan melakukannya sedikit berbeda untuk menunjukkan kepada Anda bagaimana bahkan jika nilai variabel akan dibutuhkan di tempat lain, kita masih dapat menggunakannya dengan menggunakan tumpukan. Jadi alih-alih milidetik kami menggunakan "temp" dan agar kami tidak mengacaukan hal-hal lain yang juga menggunakan nilai temp, kami cukup memulai makro "tunda" dengan "mendorong" temp ke tumpukan, lalu kami menggunakannya alih-alih milidetik, dan kemudian di akhir makro kami "mengeluarkan" nilai sebelumnya kembali dari tumpukan.
Hasil akhirnya adalah kita telah "meminjam" temp dan temp2 untuk penggunaan sementara dan kemudian mengembalikannya ke nilai sebelumnya ketika kita selesai.
Berikut adalah rutin interupsi ADC_int setelah melakukan perubahan ini:
ADC_int:
mendorong suhu; simpan temp karena kami memodifikasinya di sini Push temp2; simpan temp2 lds temp2, ADCH; muat tombol tekan ldi ZH, tinggi(2*angka) ldi ZL, rendah(2*angka) cpi temp2, 0 breq return; jika pemicu kebisingan tidak mengubah 7segnumber setkey: lpm temp, Z+; memuat dari tabel dan pasca kenaikan clc cp temp2, temp; bandingkan penekanan tombol dengan tabel brlo PC+4; jika ADCH lebih rendah, coba lagi lpm 7segnumber, Z; jika tidak memuat tabel nilai kunci inc digit; kenaikan angka digit kembali rjmp; dan kembalikan adiw ZH:ZL, 1; peningkatan Z rjmp setkey; dan kembali ke atas return: pop temp2; mengembalikan temp2 pop temp; mengembalikan suhu
Perhatikan bahwa cara kerja tumpukan adalah yang pertama aktif adalah yang terakhir mati. Persis seperti tumpukan kertas. Anda melihat bahwa dalam dua baris pertama kami, kami mendorong nilai temp ke tumpukan, lalu kami mendorong temp2 ke tumpukan, lalu kami menggunakannya di subrutin untuk hal-hal lain, dan akhirnya kami mengembalikannya ke nilai sebelumnya lagi dengan popping temp2 pertama (karena yang terakhir didorong ada di bagian atas tumpukan dan akan menjadi yang pertama kita keluarkan kembali) dan kemudian popping temp.
Jadi mulai sekarang kita akan selalu menggunakan cara ini. Satu-satunya waktu kita benar-benar akan menunjuk register untuk sesuatu selain variabel temp adalah ketika kita akan membutuhkannya di mana-mana. Misalnya, register yang disebut "overflows" adalah register yang kami gunakan di beberapa tempat berbeda dalam program, jadi kami ingin memberinya nama. Tentu saja kita masih bisa menggunakannya seperti yang kita lakukan dengan temp dan temp2 karena kita akan mengembalikan nilainya setelah kita selesai. Tapi itu akan terlalu banyak membuat spaghettify. Mereka diberi nama karena suatu alasan dan kami memiliki temp dan temp2 yang sudah ditunjuk untuk pekerjaan itu.
Langkah 6: Filter Low-pass dan Penguat Tegangan
Untuk sedikit menghilangkan noise dan membuat keypad bekerja lebih baik, kami ingin menambahkan beberapa filter low-pass. Ini menyaring kebisingan frekuensi tinggi dan memungkinkan sinyal frekuensi rendah melewatinya. Pada dasarnya cara untuk melakukannya adalah dengan menambahkan kapasitor 68 pf antara input analog dan ground dan juga kapasitor 0,1 mikrofarad (yaitu 104) antara interupsi PD4 (INT0) dan ground. Jika Anda bermain-main dengan ini sambil menekan tombol pada keypad Anda akan dapat melihat apa yang mereka lakukan.
Selanjutnya kita ingin membuat penguat tegangan. Ternyata baris bawah tombol pada keypad (serta tombol panggil ulang) mengeluarkan tegangan yang terlalu rendah untuk membuat interupsi INT0 tersandung. Port analog cukup sensitif untuk membaca tegangan rendah dari tombol-tombol ini tetapi pin interupsi kami tidak mendapatkan tepi naik yang cukup baik untuk menyela ketika kami menekan tombol-tombol itu. Oleh karena itu kami ingin beberapa cara untuk memastikan bahwa tegangan naik yang bagus menyentuh PD4 tetapi tegangan rendah yang sama mengenai ADC0. Ini adalah urutan yang cukup tinggi karena kedua sinyal berasal dari kabel output yang sama dari keypad kami. Ada beberapa cara canggih untuk melakukan ini, tetapi kita tidak akan menggunakan keypad lagi setelah tutorial ini, jadi mari kita kumpulkan metode yang berhasil (nyaris).
Anda harus terlebih dahulu menghubungkan tombol eksternal untuk mengganti interupsi INT0 dan mengontrol tampilan dengan menahan tombol pada keypad dan mengklik tombol. Ini memiliki lebih sedikit masalah keypad dan akan memungkinkan Anda untuk yakin bahwa voltase Anda diatur dengan benar pada tabel pencarian keypad. Setelah Anda mengetahui bahwa papan tombol disambungkan dengan benar, singkirkan tombol dan pasang kembali interupsi INT0. Ada beberapa masalah kebisingan dan tegangan yang serius yang mengontrol keypad dengan cara ini, jadi ada baiknya mengetahui bahwa semuanya berfungsi sehingga masalah di masa mendatang dapat diisolasi ke tombol INT0.
Saat Anda memasang papan tombol dan penguat tegangan Anda, kemungkinan besar nilai resistor yang sama yang saya gunakan tidak akan berfungsi. Jadi, Anda harus melakukan beberapa eksperimen untuk mendapatkan nilai yang sesuai untuk Anda.
Jika Anda melihat diagram yang saya lampirkan pada langkah ini, Anda akan melihat bagaimana penguat tegangan akan bekerja. Kami menggunakan beberapa resistor dan dua transistor. Cara kerja transistor (lihat lembar data!) apakah ada tegangan minimum yang perlu Anda input ke pin basis pada transister (pin tengah) yang akan menjenuhkannya dan memungkinkan arus mengalir antara pin kolektor dan emitor pin. Dalam kasus transistor 2N3904 yang kami gunakan di sini tegangannya adalah 0,65V. Sekarang kita mengambil tegangan itu dari output kita dari keypad dan kita tidak ingin mengubah output itu jadi kita akan menempatkan resistor besar antara output dari keypad dan basis transistor pertama (saya menggunakan 1Mohm). Saya telah memberi label ini sebagai R_1 dalam diagram. Kemudian kami ingin mengatur pembagi tegangan sehingga basis transistor "hampir" pada 0,65 volt dan hanya sedikit lagi yang akan mendorongnya ke atas dan menjenuhkannya. Bagian kecil itu akan keluar dari output keypad saat kita menekan sebuah tombol. Karena tombol bawah pada keypad hanya mengeluarkan tegangan kecil, kita harus sangat dekat dengan saturasi agar cukup. Resistor pembagi tegangan diberi label R_a dan R_b pada diagram. Saya menggunakan R_a = 1Mohm dan R_b = 560Kohm tetapi hampir dapat dipastikan bahwa Anda harus bermain-main dengan angka-angka ini untuk melakukannya dengan benar untuk pengaturan Anda. Anda mungkin ingin memiliki dinding di dekatnya untuk membenturkan kepala Anda dan dua atau tiga gelas scotch di tangan (saya akan merekomendasikan Laphroaig -- mahal, tapi sepadan jika Anda suka asap. Jika keadaan menjadi sangat gila, maka belilah kendi dari BV dan menetap di malam hari)
Sekarang mari kita lihat bagaimana transistor akan memberi kita keunggulan naik yang bagus masuk ke kunci INT0 dan menghasilkan interupsi penekanan tombol kita. Pertama mari kita lihat apa yang terjadi ketika saya tidak menekan tombol. Dalam hal ini transistor pertama (berlabel T1 dalam diagram) mati. Jadi tidak ada arus yang mengalir antara pin kolektor dan emitor. Jadi basis transistor lain (berlabel T2) akan ditarik tinggi dan dengan demikian akan jenuh memungkinkan arus mengalir di antara pinnya. Artinya emitor T2 akan tertarik rendah karena terhubung ke kolektor yang terhubung sendiri ke ground. Dengan demikian, output yang masuk ke pin interupsi penekanan tombol INT0 kami (PD4) akan rendah dan tidak akan ada interupsi.
Sekarang apa yang terjadi ketika saya menekan tombol? Nah kemudian dasar T1 berjalan di atas 0,65V (dalam kasus tombol yang lebih rendah itu hanya hampir tidak naik!) dan kemudian arus akan dibiarkan mengalir yang akan menarik dasar T2 ke tegangan rendah dan ini akan mematikan T2. Tetapi kita melihat bahwa ketika T2 mati, maka output ditarik tinggi dan karenanya kita akan mendapatkan sinyal 5V ke pin INT0 kita dan itu akan menyebabkan interupsi.
Perhatikan apa hasil bersihnya di sini. Jika kita menekan tombol 1, kita mendapatkan 5V ke PD4 tanpa secara signifikan mengubah output ke ADC0, dan yang lebih penting, bahkan jika kita menekan Asterisk, 0, Hash, atau Redial, kita juga mendapatkan sinyal 5V menuju INT0 dan juga menyebabkan interupsi! Ini penting karena jika kita langsung pergi dari output keypad ke pin INT0, tombol-tombol itu hampir tidak menghasilkan tegangan dan mereka tidak akan cukup untuk memicu pin interupsi itu. Penguat tegangan kami telah memecahkan masalah ini.
Langkah 7: Kode Tampilan dan Video 4 digit
Itu saja untuk tutorial 9! Saya telah melampirkan kode dan video yang menunjukkan operasi.
Ini akan menjadi yang terakhir kalinya kami menggunakan keypad analog (terima kasih Tuhan). Itu sulit untuk digunakan, tetapi juga sangat berguna untuk membantu kita belajar tentang konversi analog-ke-digital, port analog, interupsi, multiplexing, filter kebisingan, penguat tegangan, dan banyak aspek pengkodean perakitan dari tabel pencarian ke timer/counter, dll. Itulah sebabnya kami memutuskan untuk menggunakannya. (ditambah itu menyenangkan untuk mengais barang).
Sekarang kita akan melihat komunikasi lagi dan mendapatkan 7-segmen dan tampilan 4-digit kita untuk membaca gulungan dadu kita dari rol dadu kita dengan cara yang sama seperti yang kita lakukan dengan penganalisis register. Kali ini kita akan menggunakan antarmuka dua kawat daripada metode kode morse yang diretas bersama.
Setelah komunikasi kami berfungsi dan gulungan muncul di layar, kami akhirnya dapat membuat bagian pertama dari produk akhir kami. Anda akan melihat bahwa tanpa semua port analog, kode kita akan menjadi jauh lebih pendek dan mungkin lebih mudah dibaca.
Bagi Anda yang ambisius. Berikut ini adalah "proyek" yang dapat Anda coba yang tentunya memiliki pengetahuan untuk dilakukan saat ini jika Anda telah melalui semua tutorial ini hingga saat ini:
Proyek: Buat kalkulator! Gunakan tampilan 4 digit dan keypad kami dan tambahkan penekanan tombol eksternal yang akan bertindak seperti tombol "enter". Petakan tanda asterisk ke "kali", hash untuk "membagi" redial ke "plus" dan flash ke "minus" dan tulis rutinitas kalkulator yang bertindak seperti salah satu kalkulator "reverse polish" HP lama yang dimiliki semua insinyur kembali pada hari itu. Yaitu. cara kerjanya adalah Anda memasukkan nomor dan tekan "enter". Ini mendorong nomor itu ke tumpukan, lalu Anda memasukkan nomor kedua dan menekan "enter", yang mendorong nomor kedua ke tumpukan. Terakhir Anda menekan salah satu operasi seperti X, /, + atau - dan itu akan menerapkan operasi itu ke dua angka teratas pada tumpukan, menampilkan hasilnya, dan mendorong hasilnya ke tumpukan sehingga Anda dapat menggunakannya lagi jika Anda Suka. Misalnya untuk menambahkan 2+3 Anda akan melakukan: 2, "enter", 3, "enter", "+" dan tampilan kemudian akan membaca 5. Anda tahu cara menggunakan tumpukan, tampilan, keypad, dan Anda memiliki sebagian besar kode latar belakang sudah ditulis. Cukup tambahkan tombol enter dan subrutin yang diperlukan untuk kalkulator. Ini sedikit lebih rumit daripada yang mungkin Anda pikirkan pada awalnya, tetapi ini menyenangkan dan dapat dilakukan.
Sampai jumpa lain waktu!
Direkomendasikan:
Tutorial Perakitan AVR 2: 4 Langkah
Tutorial AVR Assembler 2: Tutorial ini merupakan lanjutan dari "Tutorial AVR Assembler 1" Jika Anda belum melalui Tutorial 1 Anda harus berhenti sekarang dan melakukannya terlebih dahulu. Dalam tutorial ini kita akan melanjutkan studi kita tentang pemrograman bahasa assembly dari atmega328p u
Tutorial Perakitan AVR 1: 5 Langkah
Tutorial Assembler AVR 1: Saya telah memutuskan untuk menulis serangkaian tutorial tentang cara menulis program bahasa assembly untuk Atmega328p yang merupakan mikrokontroler yang digunakan di Arduino. Jika orang tetap tertarik, saya akan terus mengeluarkannya seminggu atau lebih sampai saya kehabisan
Tutorial Perakitan AVR 6: 3 Langkah
Tutorial AVR Assembler 6: Selamat Datang di Tutorial 6! Tutorial hari ini akan singkat dimana kita akan mengembangkan metode sederhana untuk mengkomunikasikan data antara satu atmega328p dan lainnya menggunakan dua port yang menghubungkannya. Kami kemudian akan mengambil roller dadu dari Tutorial 4 dan Daftar
Tutorial Perakitan AVR 8: 4 Langkah
AVR Assembler Tutorial 8: Selamat Datang di Tutorial 8! Dalam tutorial singkat ini kita akan mengambil sedikit pengalihan dari memperkenalkan aspek-aspek baru dari pemrograman bahasa assembly untuk menunjukkan bagaimana memindahkan komponen prototyping kita ke "cetak" yang terpisah. papan sirkuit. NS
Tutorial Perakitan AVR 7: 12 Langkah
AVR Assembler Tutorial 7: Selamat Datang di Tutorial 7! Hari ini kita akan menunjukkan cara mengais keypad, dan kemudian menunjukkan cara menggunakan port input Analog untuk berkomunikasi dengan keypad. Kita akan melakukan ini menggunakan interupsi dan kabel tunggal sebagai memasukkan. Kami akan menyambungkan keypad agar