Isi kandungan:

Tutorial Penyusun AVR 9: 7 Langkah
Tutorial Penyusun AVR 9: 7 Langkah

Video: Tutorial Penyusun AVR 9: 7 Langkah

Video: Tutorial Penyusun AVR 9: 7 Langkah
Video: Tutorial Pembuatan Rangkaian 7 Segment Menggunakan Proteus dan Codevision AVR 2024, Julai
Anonim
Tutorial Penyusun AVR 9
Tutorial Penyusun AVR 9

Selamat Datang ke Tutorial 9.

Hari ini kita akan menunjukkan cara mengawal paparan 7 segmen dan paparan 4 digit menggunakan kod bahasa pemasangan ATmega328P dan AVR kami. Dalam melakukan ini, kita harus mengambil pilihan bagaimana menggunakan timbunan untuk mengurangkan jumlah daftar yang perlu kita ikuti. Kami akan menambah beberapa kapasitor (penapis lorong rendah) untuk mengurangkan bunyi pada papan kekunci kami. Kami akan membuat penguat voltan daripada beberapa transistor supaya suis gangguan INT0 kami berfungsi lebih baik untuk butang voltan rendah di baris bawah papan kekunci. Dan kita akan memukul kepala sedikit ke dinding dengan berusaha mendapatkan perintang yang betul supaya perkara itu berfungsi dengan baik.

Kami akan menggunakan papan kekunci kami dari Tutorial 7

Untuk melakukan tutorial ini, sebagai tambahan kepada perkara biasa, anda memerlukan:

  1. Paparan 7 segmen

    www.sparkfun.com/products/8546

  2. Paparan 4 digit

    www.sparkfun.com/products/11407

  3. Butang tekan

    www.sparkfun.com/products/97

  4. Lembar data untuk paparan yang boleh dimuat turun dari halaman masing-masing yang dipautkan di atas.
  5. Kapasitor seramik 68 pf, sepasang 104 kapasitor, sekumpulan perintang, dua transistor 2N3904 NPN.

Berikut adalah pautan ke koleksi lengkap tutorial penghimpun AVR saya:

Langkah 1: Pendawaian 7-segmen Paparan

Pendawaian 7-segmen Paparan
Pendawaian 7-segmen Paparan
Pendawaian 7-segmen Paparan
Pendawaian 7-segmen Paparan
Pendawaian 7-segmen Paparan
Pendawaian 7-segmen Paparan

Kami akan menggunakan kod yang sama dengan yang kami gunakan dalam Tutorial 7 untuk papan kekunci untuk mengawal paparan 7 segmen. Oleh itu, anda perlu membuat salinannya dan kami akan mengubahnya.

Kami akan memetakan segmen ke pin mikrokontroler kami seperti berikut:

(dp, g, f, e, d, c, b, a) = (PD7, PD6, PB5, PB4, PB3, PB2, PB1, PB0)

di mana huruf segmen ditunjukkan dalam gambar bersama dengan pinout yang sesuai dengan 5V biasa dan setiap segmen LED termasuk titik perpuluhan (dp) di kanan bawah paparan. Sebabnya adalah supaya kita dapat memasukkan keseluruhan nombor ke dalam satu daftar dan output yang mendaftar ke port B dan D untuk menerangi segmen. Seperti yang anda lihat, bit diberi nombor secara berurutan dari 0 hingga 7 dan mereka akan memetakan ke pin yang betul tanpa perlu menetapkan dan membersihkan bit individu.

Seperti yang anda lihat dengan kod yang telah kami lampirkan pada langkah seterusnya, kami telah memindahkan rutin paparan kami ke makro dan kami telah melepaskan pin SDA dan SCL untuk digunakan di masa depan dalam Tutorial seterusnya.

Saya harus menambah bahawa anda perlu meletakkan perintang antara anod biasa paparan dan rel 5V. Saya memilih perintang 330 ohm seperti biasa tetapi jika anda mahu anda boleh mengira rintangan minimum yang diperlukan untuk mendapatkan kecerahan maksimum dari paparan tanpa menggorengnya. Inilah cara untuk melakukannya:

Pertama lihat lembaran data dan perhatikan bahawa pada halaman pertama ia memberikan pelbagai sifat paparan. Kuantiti penting adalah "Arus Hadapan" (I_f = 20mA) dan "Voltan Hadapan" (V_f = 2.2V). Ini memberitahu anda mahu penurunan voltan pada paparan akan berlaku jika arus sama dengan arus hadapan. Ini adalah arus maksimum yang akan diambil oleh paparan tanpa menggoreng. Ini adalah kecerahan maksimum yang anda dapat keluar dari segmen.

Oleh itu, mari kita gunakan undang-undang Ohm dan peraturan gelung Kirchoff untuk mengetahui rintangan minimum apa yang perlu kita masukkan bersiri dengan paparan untuk mendapatkan kecerahan maksimum. Peraturan Kirchoff mengatakan bahawa jumlah voltan berubah di sekitar gelung tertutup dalam litar sama dengan sifar dan hukum Ohm mengatakan bahawa penurunan voltan melintasi perintang rintangan R adalah: V = I R di mana saya adalah arus yang mengalir melalui perintang.

Oleh itu, memandangkan voltan sumber V dan mengelilingi litar kami, kami mempunyai:

V - V_f - I R = 0

yang bermaksud (V - V_f) / I = R. Jadi rintangan 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

Oleh itu, jika anda mahu, anda boleh menggunakan 150 ohm dengan senang hati. Walau bagaimanapun, saya fikir 140 ohm menjadikannya terlalu terang untuk keinginan saya dan jadi saya menggunakan 330 ohm (yang merupakan jenis rintangan Goldilocks peribadi saya untuk LED)

Langkah 2: Kod dan Video Perhimpunan

Saya telah melampirkan kod pemasangan dan video yang menunjukkan operasi papan kekunci dengan paparan. Seperti yang anda lihat, kami hanya memetakan kunci Redial ke "r", butang flash ke "F", tanda bintang ke "A" dan tanda hash ke "H". Ini dapat dipetakan ke pelbagai operasi seperti backspace, enter, dan bagaimana-tidaknya jika anda ingin terus menggunakan papan kekunci untuk menaip nombor pada paparan LCD atau paparan 4 digit. Saya tidak akan melalui kod baris demi baris kali ini kerana ia sangat serupa dengan apa yang telah kita lakukan dalam tutorial sebelumnya. Perbezaannya adalah lebih kurang daripada perkara yang sama yang sudah kita ketahui seperti gangguan dan jadual mencari. Anda hanya perlu membaca kodnya dan melihat perkara baru yang telah kami tambahkan dan perkara-perkara yang telah kami ubah dan mengetahuinya dari situ. Kami akan kembali ke analisis baris demi baris dalam tutorial seterusnya apabila kami memperkenalkan aspek baru pengekodan bahasa pemasangan pada mikrokontroler AVR.

Sekarang mari kita lihat paparan 4 digit.

Langkah 3: Pendawaian Paparan 4 digit

Pendawaian 4-digit Paparan
Pendawaian 4-digit Paparan
Pendawaian 4-digit Paparan
Pendawaian 4-digit Paparan

Menurut lembar data, paparan 4 digit mempunyai Arus Maju 60 mA dan voltan hadapan 2.2 volt. Jadi, dengan pengiraan yang sama seperti sebelumnya, saya boleh menggunakan perintang 47 ohm jika saya mahu. Sebagai gantinya saya akan menggunakan… jam.. biarkan saya melihat… bagaimana dengan 330 ohm.

Cara paparan 4 digit disambungkan adalah terdapat 4 anod, satu untuk setiap digit, dan pin yang lain mengawal segmen mana yang terdapat di masing-masing. Anda boleh memaparkan 4 digit secara serentak kerana ia digandakan. Dengan kata lain, seperti yang kita lakukan untuk sepasang dadu, kita hanya mengitar kuasa melalui setiap anod secara bergantian dan ia akan mengedipkannya satu demi satu. Ini akan dilakukan dengan begitu pantas sehingga mata kita tidak akan melihat berkelip dan kelihatan seperti keempat digit. Namun, untuk memastikan, cara kita membuat kod adalah menetapkan keempat-empat digit, kemudian kitar anod, bukannya set, pindah, set, pindah, dll. Dengan cara itu kita dapat memperoleh masa yang tepat antara menyalakan setiap digit.

Buat masa ini, mari kita uji bahawa segmen berfungsi.

Letakkan perintang 330 ohm antara rel positif papan roti anda dan anod pertama pada paparan. Lembar data memberitahu kami bahawa pin bernombor dari 1 hingga 16 berlawanan arah jam bermula dari kiri bawah (ketika anda melihat paparan secara normal.. dengan titik perpuluhan di sepanjang bahagian bawah) dan menyatakan bahawa anod adalah nombor pin 6, 8, 9, dan 12.

Oleh itu, kami menyambungkan pin 6 hingga 5V dan kemudian memimpin negatif dari rel GND anda dan memasukkannya ke semua pin lain dan melihat bahawa semua segmen menyala pada digit yang sesuai dengannya (yang sebenarnya merupakan digit kedua dari yang betul). Pastikan anda mendapat semua 7 segmen dan titik perpuluhan untuk menyala.

Sekarang masukkan wayar GND anda ke salah satu pin untuk menyalakan salah satu segmen dan kali ini gerakkan perintang ke 3 anod yang lain dan lihat bahawa segmen yang sama menyala di setiap digit yang lain.

Ada yang tidak biasa?

Ternyata pinout pada lembar data salah. Ini kerana ia adalah lembar data dan pinout untuk paparan 12-pin, 4-digit. I. E. satu tanpa titik dua atau titik perpuluhan atas. Paparan yang saya dapat ketika saya memesannya ialah paparan 16-pin, 4-digit. Sebenarnya, di lombong, anoda segmen berada pada pin 1, 2, 6, dan 8. Anod kolon adalah pin 4 (katod pin 12) dan anod dp atas adalah pin 10 (katod adalah pin 9)

Latihan 1: Gunakan perintang dan dawai tanah anda untuk memetakan pin mana yang sesuai dengan segmen dan titik perpuluhan pada paparan sehingga kami mendapat segmen yang betul menyala ketika kita mengkodkannya.

Cara kita ingin membuat kod peta segmen sama seperti yang kita lakukan dengan paparan segmen 7 digit di atas - kita tidak perlu mengubah sesuatu dalam kod, satu-satunya perkara yang kita ubah adalah bagaimana wayar disambungkan di papan. Cukup pasangkan pin port yang betul pada mikrokontroler ke pin yang sesuai pada paparan 4 digit sehingga, sebagai contoh, PB0 masih menuju ke pin yang sesuai dengan segmen a, PB1 menuju ke segmen B, dll.

Satu-satunya perbezaan ialah sekarang kita memerlukan 4 pin tambahan untuk anoda kerana kita tidak boleh lagi pergi ke rel 5V. Kita memerlukan pengawal mikro untuk menentukan digit mana yang mendapat jus.

Oleh itu, kita akan menggunakan PC1, PC2, PC3, dan PD4 untuk mengawal anod dari 4 digit.

Anda juga boleh terus memasang dan memasang wayar. (jangan lupa perintang 330 ohm pada wayar anod!)

Langkah 4: Mengekod Paparan 4 digit

Mengekod Paparan 4 digit
Mengekod Paparan 4 digit

Mari fikirkan bagaimana kita ingin membuat kod paparan ini.

Kami ingin pengguna menekan butang papan kekunci dan nombornya muncul secara berurutan pada paparan ketika mereka menekan setiap butang. Oleh itu, jika saya menekan 1 diikuti oleh 2 ia akan muncul di paparan sebagai 12. Saya juga ingin menyimpan nilai itu, 12, untuk kegunaan dalaman tetapi kita akan sampai ke tahap itu sedikit kemudian. Buat masa ini, saya hanya mahu menulis makro baru yang menekan kekunci anda dan memaparkannya. Namun, kerana kami hanya mempunyai 4 digit, saya ingin memastikannya hanya membolehkan anda menaip empat nombor.

Isu lain ialah cara kerja paparan 4 digit multiplexed adalah dengan mengitar anoda sehingga setiap digit hanya dihidupkan selama beberapa saat sebelum memaparkan yang berikutnya dan kemudian yang berikutnya dan akhirnya kembali ke yang pertama sekali lagi, dll. Oleh itu, kami memerlukan kaedah untuk membuat kod ini.

Kami juga mahu ia menggerakkan "kursor" ke kanan ruang ketika kami menaip digit seterusnya. Oleh itu, jika saya mahu menaip 1234 misalnya, setelah saya menaip 1, kursor akan bergerak sehingga digit seterusnya yang saya taip akan muncul pada paparan 7 segmen seterusnya dan seterusnya. Walaupun ini berlaku, saya masih mahu dapat melihat apa yang saya taipkan sehingga masih perlu mengitar digit dan memaparkannya.

Bunyi seperti pesanan tinggi?

Perkara sebenarnya lebih teruk. Kita memerlukan 4 register tujuan umum yang boleh kita gunakan untuk menyimpan nilai semasa dari 4 digit yang ingin kita paparkan (jika kita akan mengitarinya kita mesti menyimpannya di suatu tempat) dan masalah dengan ini adalah bahawa kita mempunyai menggunakan daftar tujuan umum seperti orang gila dan jika kita tidak berjaga-jaga, kita tidak akan memiliki kiri. Oleh itu, adalah idea yang baik untuk mengatasi masalah itu lebih cepat daripada kemudian dan menunjukkan kepada anda cara membebaskan daftar dengan menggunakan timbunan.

Oleh itu, mari kita mulakan dengan mempermudah sesuatu, menggunakan timbunan, dan membebaskan beberapa daftar dan kemudian kita akan berusaha menyelesaikan tugas membaca dan memaparkan nombor kita pada paparan 4 digit.

Langkah 5: Push 'n Pop

Push 'n Pop
Push 'n Pop

Hanya ada beberapa "Daftar Tujuan Umum" yang kami miliki dan setelah digunakan, tidak ada lagi. Oleh itu, adalah praktik yang baik untuk menggunakannya hanya untuk beberapa pemboleh ubah yang digunakan sebagai storan sementara yang anda perlukan untuk membaca, dan menulis ke, port dan SRAM dengan, atau yang lain yang anda perlukan dalam subrutin di mana sahaja dan jadi anda namakan mereka. Oleh itu, apa yang telah saya lakukan, sekarang setelah kami menginisialisasi dan belajar menggunakan Stack, adalah mencari kod dan mencari register tujuan umum bernama yang digunakan hanya dalam satu subrutin atau mengganggu dan tidak ada tempat lain dalam kod tersebut dan ganti mereka dengan salah satu register temp kami dan push dan pop ke stack. Sebenarnya, jika anda melihat kod yang ditulis untuk pengawal mikro yang lebih kecil, atau jika anda kembali ke masa ketika semua cip lebih kecil, anda hanya akan melihat beberapa daftar tujuan umum yang harus digunakan untuk semuanya, jadi anda tidak dapat hanya menyimpan nilai di sana dan biarkan sahaja kerana anda pasti memerlukannya untuk mendaftar untuk perkara lain. Oleh itu, anda akan melihat pushin 'dan poppin' di semua tempat dalam kod. Mungkin saya harus menamakan pendaftar tujuan umum temp AX dan BX sebagai pujian yang dihormati oleh mereka yang telah berlalu.

Contoh akan membantu menjadikannya lebih jelas.

Perhatikan bahawa dalam penukaran Analog ke Digital kami mengganggu ADC_int kita menggunakan register tujuan umum yang telah kita namakan buttonH yang kita gunakan untuk memuatkan nilai ADCH dan membandingkannya dengan jadual carian kita untuk penukaran tekan butang analog. Kami hanya menggunakan butangH daftar ini dalam subrutin ADC_int dan tempat lain. Oleh itu, kita akan menggunakan temp2 pemboleh ubah yang kita gunakan sebagai pemboleh ubah sementara yang boleh kita gunakan dalam subrutin tertentu dan nilainya tidak akan mempengaruhi apa-apa di luar subrutin itu (iaitu nilai yang kita berikan dalam ADC_int tidak akan digunakan di mana saja lain).

Contoh lain adalah dalam makro kelewatan kami. Kami mempunyai daftar yang kami namakan "milisaat" yang mengandungi masa kelewatan kami dalam milisaat. Dalam kes ini, ia berada dalam makro dan kita ingat bahawa cara kerja makro adalah bahawa assembler meletakkan keseluruhan kod makro ke tempat program di mana ia dipanggil. Dalam kes ini, kami ingin menyingkirkan pemboleh ubah "milisaat" dan menggantinya dengan salah satu pemboleh ubah sementara kami. Dalam kes ini, saya akan melakukannya sedikit berbeza untuk menunjukkan kepada anda bagaimana walaupun nilai pemboleh ubah itu diperlukan di tempat lain, kita masih boleh menggunakannya dengan menggunakan timbunan. Oleh itu, bukannya milisaat, kita menggunakan "temp" dan agar kita tidak merosakkan perkara lain yang juga menggunakan nilai temp, kita hanya memulakan makro "delay" dengan "mendorong" temp ke stack, kemudian kita menggunakannya bukannya milisaat, dan kemudian pada akhir makro kita "menjana" nilai sebelumnya kembali dari timbunan.

Hasil bersihnya adalah bahawa kita telah "meminjam" temp dan temp2 untuk penggunaan sementara dan kemudian mengembalikannya ke nilai sebelumnya ketika kita selesai.

Berikut adalah rutin gangguan ADC_int setelah melakukan perubahan ini:

ADC_int:

tolak temp; simpan temp kerana kita mengubahnya di sini tekan temp2; simpan temp2 lds temp2, ADCH; memuatkan kekunci ldi ZH, tinggi (2 * nombor) ldi ZL, rendah (2 * nombor) cpi temp2, 0 breq return; jika pencetus bunyi tidak mengubah setkey 7segnumber: temp lpm, Z +; muat dari jadual dan kenaikan pos clc cp temp2, temp; bandingkan kekunci dengan PC brlo jadual + 4; jika ADCH lebih rendah, cuba lagi lpm 7segnumber, Z; jika tidak, masukkan jadual keyvalue inc digit; tambah nombor digit rjmp return; dan kembalikan adiw ZH: ZL, 1; kenaikan Z rjmp setkey; dan kembali ke atas kembali: pop temp2; memulihkan temp pop pop; pulihkan temp reti

Perhatikan bahawa cara kerja timbunan adalah yang pertama adalah yang terakhir. Sama seperti timbunan kertas. Anda melihat bahawa dalam dua baris pertama kami mendorong nilai temp ke tumpukan, kemudian kami mendorong temp2 ke tumpukan, kemudian kami menggunakannya di subrutin untuk perkara lain, dan akhirnya kami mengembalikannya ke nilai sebelumnya kembali oleh mematikan temp2 pertama (kerana ia yang terakhir didorongnya berada di bahagian atas timbunan dan akan menjadi yang pertama kita mundur) dan kemudian muncul temp.

Jadi mulai sekarang kita akan selalu menggunakan kaedah ini. Satu-satunya masa kita benar-benar akan menetapkan daftar untuk sesuatu selain pemboleh ubah temp adalah ketika kita memerlukannya di mana sahaja. Sebagai contoh, daftar yang disebut "limpahan" adalah yang kami gunakan di beberapa tempat yang berbeza dalam program dan oleh itu kami ingin memberikannya nama. Sudah tentu kita masih dapat menggunakannya seperti yang kita lakukan dengan temp dan temp2 kerana kita akan mengembalikan nilainya setelah kita selesai. Tetapi perkara itu akan memberi banyak perkara. Mereka dinamakan atas sebab dan kami mempunyai temp dan temp2 yang sudah ditentukan untuk pekerjaan itu.

Langkah 6: Penapis lulus rendah dan Penguat Voltan

Penapis lulus rendah dan Penguat Voltan
Penapis lulus rendah dan Penguat Voltan
Penapis lulus rendah dan Penguat Voltan
Penapis lulus rendah dan Penguat Voltan

Untuk mengurangkan kebisingan dan menjadikan papan kekunci berfungsi dengan lebih baik, kami ingin menambah beberapa penapis lorong rendah. Ini menyaring kebisingan frekuensi tinggi dan membenarkan isyarat frekuensi rendah melewati. Pada asasnya cara untuk melakukan ini adalah dengan menambahkan kapasitor 68 pf antara input analog dan ground kita dan juga kapasitor 0.1 microfarad (iaitu 104) antara gangguan PD4 (INT0) kita dan ground. Sekiranya anda bermain-main dengan menekan butang pada papan kekunci, anda akan dapat melihat apa yang mereka lakukan.

Seterusnya kita ingin membuat penguat voltan. Ternyata baris bawah kekunci pada papan kekunci (serta kunci panggil semula) mengeluarkan voltan yang terlalu rendah untuk menghentikan gangguan INT0. Port analog cukup sensitif untuk membaca voltan rendah dari kekunci ini tetapi pin interrupt kami tidak mendapat kelebihan kenaikan yang cukup baik untuk mengganggu ketika kami menekan kekunci tersebut. Oleh itu, kami menginginkan beberapa kaedah untuk memastikan bahawa voltan tegak yang naik memukul PD4 tetapi voltan rendah yang sama mencecah ADC0. Ini adalah urutan yang cukup tinggi kerana kedua-dua isyarat itu berasal dari wayar output yang sama pada papan kekunci kami. Terdapat sebilangan cara canggih untuk melakukan ini, tetapi kami tidak akan menggunakan papan kekunci kami lagi selepas tutorial ini, jadi mari kita bersama-sama kaedah yang berfungsi (hampir).

Anda harus menyambungkan butang luaran terlebih dahulu untuk menggantikan gangguan INT0 dan mengawal paparan dengan menahan kekunci pada papan kekunci dan mengklik butang. Ini mempunyai masalah kekunci yang lebih sedikit dan akan membolehkan anda yakin bahawa voltan anda ditetapkan dengan betul pada jadual carian papan kekunci. Sebaik sahaja anda mengetahui papan kekunci dikabelkan dengan betul kemudian lepaskan butang dan letakkan INT0 gangguan semula. Terdapat beberapa masalah kebisingan dan voltan yang serius yang mengawal papan kekunci dengan cara ini, adalah baik untuk mengetahui bahawa semuanya berfungsi sehingga masalah di masa depan dapat diasingkan ke kunci INT0.

Apabila anda memasang pad kekunci dan penguat voltan, kemungkinan nilai perintang yang sama dengan yang saya gunakan tidak berfungsi. Oleh itu, anda perlu melakukan percubaan untuk mendapatkan nilai yang sesuai untuk anda.

Sekiranya anda melihat rajah yang telah saya lampirkan pada langkah ini, anda akan melihat bagaimana penguat voltan berfungsi. Kami menggunakan beberapa perintang dan dua transistor. Cara transistor berfungsi (lihat lembaran data!) Adakah voltan minimum yang perlu anda masukkan ke pin asas pada transister (pin tengah) yang akan memenuhkannya dan membiarkan arus mengalir antara pin pengumpul dan pemancar sematkan. Dalam kes transistor 2N3904 yang kita gunakan di sini voltan adalah 0.65V. Sekarang kita mengambil voltan dari output kita dari papan kekunci dan kita tidak mahu mengubah output itu jadi kita akan meletakkan perintang besar antara output dari pad kekunci dan dasar transistor pertama (saya menggunakan 1Mohm). Saya telah melabelnya sebagai R_1 dalam rajah. Kemudian kami ingin menyediakan pembahagi voltan supaya pangkal transistor "hampir" pada 0,65 volt sudah dan hanya sedikit yang lebih kecil akan mendorongnya ke atas dan memenuhkannya. Sedikit kecenderungan kecil itu akan datang dari output papan kekunci apabila kita menekan butang. Oleh kerana kekunci bawah pada pad kekunci hanya mengeluarkan voltan kecil, kita mesti sudah dekat dengan tepu agar ia mencukupi. Resistor pembahagi voltan dilabel R_a dan R_b pada rajah. Saya menggunakan R_a = 1Mohm dan R_b = 560Kohm tetapi hampir pasti anda mesti bermain-main dengan nombor-nombor ini untuk mendapatkannya tepat untuk persediaan anda. Anda mungkin mahu mempunyai dinding di dekatnya untuk memukul kepala anda dan dua atau tiga gelas scotch di tangan (saya akan mengesyorkan Laphroaig - mahal, tetapi berbaloi jika anda suka asap. Sekiranya sesuatu menjadi benar-benar gila, maka cukup dapatkan jag BV dan menetap di malam hari)

Sekarang mari kita lihat bagaimana transistor akan memberi kita kelebihan yang baik untuk masuk ke kekunci INT0 dan menghasilkan gangguan kekunci kami. Pertama mari kita lihat apa yang berlaku apabila saya tidak menekan kekunci. Dalam kes itu transistor pertama (berlabel T1 dalam rajah) dimatikan. Oleh itu, tiada arus yang mengalir antara pemungut dan pin pemancar. Oleh itu, pangkal transistor yang lain (berlabel T2) akan ditarik tinggi dan dengan itu ia akan tepu membiarkan arus mengalir di antara pinnya. Ini bermaksud bahawa pemancar T2 akan ditarik rendah kerana ia dihubungkan ke pemungut yang tersambung ke tanah. Oleh itu, output yang masuk ke pin interrupt key INT0 kami (PD4) akan rendah dan tidak akan ada gangguan.

Sekarang apa yang berlaku apabila saya menekan kekunci? Baiklah asas T1 berada di atas 0.65V (dalam kes kunci bawah, ia hampir tidak berada di atas!) Dan kemudian arus akan dibenarkan mengalir yang akan menarik dasar T2 ke voltan rendah dan ini akan mematikan T2. Tetapi kita melihat bahawa apabila T2 dimatikan, maka output ditarik tinggi dan oleh itu kita akan mendapat isyarat 5V ke pin INT0 kita dan ia akan menyebabkan gangguan.

Perhatikan apa hasil bersihnya di sini. Sekiranya kita menekan kekunci 1, kita mendapat 5V menuju PD4 tanpa mengubah output secara signifikan ke ADC0, dan yang lebih penting, walaupun kita menekan Asterisk, 0, Hash, atau Redial, kita juga mendapat isyarat 5V menuju INT0 dan juga menyebabkan gangguan! Ini penting kerana jika kita hanya pergi terus dari output papan kekunci ke pin INT0, kunci tersebut tidak menghasilkan voltan dan ia tidak mencukupi untuk mencetuskan pin gangguan itu. Penguat voltan kami telah menyelesaikan masalah ini.

Langkah 7: Kod Paparan 4 digit dan Video

Itu semua untuk tutorial 9! Saya telah melampirkan kod dan video yang menunjukkan operasi.

Ini akan menjadi kali terakhir kami menggunakan pad kekunci analog (terima kasih Tuhan). Ia sukar untuk digunakan, tetapi juga sangat berguna untuk membantu kami belajar mengenai penukaran analog-ke-digital, port analog, gangguan, multiplexing, penapis bunyi, penguat voltan, dan banyak aspek pengkodean pemasangan dari jadual carian ke pemasa / kaunter Itulah sebabnya kami memutuskan untuk menggunakannya. (ditambah lagi dengan keseronokan untuk membersihkan barang).

Sekarang kita akan melihat komunikasi lagi dan mendapatkan paparan segmen 7 dan 4 digit kita untuk membaca gulungan dadu dari roller dadu kita dengan cara yang sama seperti yang kita lakukan dengan penganalisis daftar kita. Kali ini kami akan menggunakan antara muka dua wayar daripada kaedah kod morse yang digodam bersama.

Setelah komunikasi berfungsi dan gulungan muncul di paparan, kita akhirnya dapat membuat bahagian pertama produk akhir kita. Anda akan melihat bahawa tanpa semua port analog, kod kami akan menjadi lebih pendek dan mungkin lebih senang dibaca.

Bagi anda yang bercita-cita tinggi. Inilah "projek" yang boleh anda cuba yang anda pasti mempunyai pengetahuan yang perlu dilakukan ketika ini jika anda telah melalui semua tutorial ini hingga ke tahap ini:

Projek: Buat kalkulator! Gunakan paparan 4 digit dan papan kekunci kami dan tambahkan tekan butang luaran yang akan bertindak seperti kekunci "enter". Petakan tanda bintang ke "kali", hash untuk "membahagikan" panggilan semula ke "tambah" dan denyar ke "tolak" dan tulis rutin kalkulator yang bertindak seperti salah satu kalkulator "pengilat terbalik" HP lama yang dimiliki semua jurutera pada zaman dahulu. I. E. cara mereka bekerja ialah anda memasukkan nombor dan tekan "enter". Ini mendorong nombor itu ke tumpukan, kemudian anda memasukkan nombor kedua dan menekan "enter", yang mendorong nombor kedua ke timbunan. Akhirnya anda menekan salah satu operasi seperti X, /, + atau - dan ia akan menerapkan operasi itu ke dua nombor teratas di timbunan, memaparkan hasilnya, dan mendorong hasilnya ke tumpukan sehingga anda dapat menggunakannya lagi jika anda suka. Contohnya untuk menambah 2 + 3 yang akan anda lakukan: 2, "enter", 3, "enter", "+" dan paparan kemudian akan dibaca 5. Anda tahu bagaimana menggunakan timbunan, paparan, papan kekunci, dan anda mempunyai sebahagian besar kod latar belakang yang sudah ditulis. Cukup tambahkan kekunci enter dan subrutin yang diperlukan untuk kalkulator. Ia sedikit lebih rumit daripada yang anda fikirkan pada mulanya, tetapi ia menyeronokkan dan dapat dilakukan.

Jumpa awak lain kali!

Disyorkan: