Daftar Isi:

Tutorial Perakitan AVR 6: 3 Langkah
Tutorial Perakitan AVR 6: 3 Langkah

Video: Tutorial Perakitan AVR 6: 3 Langkah

Video: Tutorial Perakitan AVR 6: 3 Langkah
Video: simak video ini sebelum anda memasang AVR generator 3phase/1phase 2024, November
Anonim
Tutorial Perakitan AVR 6
Tutorial Perakitan AVR 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 Register Analyzer dari Tutorial 5, menghubungkannya bersama-sama, dan menggunakan metode kami untuk mengkomunikasikan hasil gulungan dadu dari roller ke analyzer. Kami kemudian akan mencetak gulungan dalam biner menggunakan LED yang kami buat untuk penganalisis di Tutorial 5. Setelah kami berhasil, kami akan dapat membuat bagian berikutnya dari keseluruhan proyek kami di tutorial berikutnya.

Dalam tutorial ini Anda akan membutuhkan:

  1. Papan prototipe Anda
  2. Rol dadu Anda dari Tutorial 4
  3. Register Analyzer Anda dari Tutorial 5
  4. Dua kabel penghubung
  5. Salinan Lembar Data Lengkap (revisi 2014):

    www.atmel.com/images/Atmel-8271-8-bit-AVR-M…

  6. Salinan Instruksi Set Manual (revisi 2014):

    www.atmel.com/images/atmel-0856-avr-instruc…

Berikut ini tautan ke koleksi lengkap tutorial assembler AVR saya:

Langkah 1: Bagaimana Kita Bisa Membuat Dua Mikrokontroler Berbicara Satu Sama Lain?

Bagaimana Kita Bisa Membuat Dua Mikrokontroler Berbicara Satu Sama Lain?
Bagaimana Kita Bisa Membuat Dua Mikrokontroler Berbicara Satu Sama Lain?

Karena kami mulai memperluas proyek kami sehingga produk akhir tunggal kami terdiri dari kumpulan bagian-bagian yang lebih kecil, kami akan membutuhkan lebih banyak pin daripada yang dapat disediakan oleh satu Atmega328P. Oleh karena itu kita akan melakukan setiap bagian dari keseluruhan proyek pada mikrokontroler yang terpisah dan kemudian meminta mereka berbagi data di antara mereka. Jadi masalah yang perlu kita pecahkan adalah bagaimana kita bisa menemukan metode sederhana bagi pengontrol untuk berbicara satu sama lain dan mentransfer data di antara mereka? Nah, satu hal tentang pengontrol ini adalah mereka masing-masing mengeksekusi 16 juta instruksi per detik. Ini waktunya sangat tepat sehingga kami dapat menggunakan waktu ini untuk mentransfer data. Jika kita menggunakan penundaan milidetik untuk menyusun data, maka kita tidak benar-benar harus setepat itu karena CPU mengeksekusi 16.000 instruksi dalam satu milidetik. Dengan kata lain, satu milidetik adalah keabadian bagi CPU. Jadi mari kita coba dengan gulungan dadu. Saya ingin mengirimkan hasil lemparan dadu dari chip penggulung dadu ke chip penganalisis. Misalkan Anda berdiri di seberang jalan dan saya ingin memberi tahu Anda hasil lemparan sepasang dadu saya. Satu hal yang bisa saya lakukan, jika kita berdua punya jam tangan, adalah saya bisa menyalakan senter, lalu ketika Anda siap menerima data saya, Anda menyalakan senter Anda dan kami berdua memulai jam kami. Kemudian saya menyalakan senter saya selama beberapa milidetik saat dadu bergulir dan kemudian mematikannya. Jadi jika saya memutar angka 12, saya akan tetap menyalakan lampu selama 12 milidetik. Sekarang masalah di atas adalah, bagi Anda dan saya, tidak mungkin kita dapat mengatur waktu dengan cukup akurat untuk membedakan antara 5 milidetik dan 12 milidetik. Tetapi bagaimana dengan ini: Misalkan kita memutuskan bahwa saya akan menyalakan lampu saya selama satu tahun untuk setiap angka pada dadu? Kemudian jika saya menggulung 12, saya akan menyinari Anda selama 12 tahun dan saya pikir Anda akan setuju bahwa tidak ada kemungkinan Anda akan membuat kesalahan dalam menentukan angka, kan? Anda bisa istirahat dan bermain bisbol, Anda bahkan bisa bermain dadu di Vegas selama 6 bulan, selama di beberapa titik sepanjang tahun untuk melirik ke seberang jalan untuk melihat apakah lampu menyala Anda tidak akan melewatkan hitungan. Itulah tepatnya yang kami lakukan untuk mikrokontroler! Satu milidetik untuk CPU seperti satu tahun. Jadi jika saya menyalakan sinyal selama 12 milidetik, hampir tidak ada kemungkinan mikrokontroler lain akan mengacaukannya selama 10 atau 11 tidak peduli interupsi apa dan yang lainnya terjadi sementara itu. Untuk mikrokontroler, satu milidetik adalah keabadian. Jadi inilah yang akan kita lakukan. Pertama kita akan memilih dua port pada controller untuk menjadi port komunikasi kita. Saya akan menggunakan PD6 untuk Menerima Data (kita bisa menyebutnya Rx jika kita mau) dan saya akan memilih PD7 untuk mengirimkan data (kita bisa menyebutnya Tx jika kita mau). Chip penganalisis akan memeriksa pin Rx secara berkala dan jika melihat sinyal, chip tersebut akan turun ke "subrutin komunikasi" dan kemudian mengirimkan sinyal kembali ke rol dadu yang mengatakan bahwa chip tersebut siap untuk menerima. Mereka berdua akan memulai pengaturan waktu dan rol dadu akan mengirimkan sinyal (yaitu 5V) selama satu milidetik per angka pada dadu. Jadi jika gulungannya berenam ganda, atau 12, maka rol dadu akan mengatur PD7 ke 5V selama 12 milidetik dan kemudian mengaturnya kembali ke 0V. Alat analisa akan memeriksa pin PD6-nya setiap milidetik, menghitung setiap waktu, dan ketika kembali ke 0V kemudian mengeluarkan angka yang dihasilkan ke layar alat analisa, menunjukkan dua belas dalam biner pada LED. Jadi begitulah rencananya. Mari kita lihat apakah kita bisa menerapkannya.

Langkah 2: Subrutin Komunikasi

Hal pertama yang perlu kita lakukan adalah menghubungkan kedua pengontrol. Jadi ambil kabel dari PD6 di satu dan hubungkan ke PD7 di sisi lain, dan sebaliknya. Kemudian inisialisasi dengan mengatur PD7 ke OUTPUT pada keduanya dan PD6 ke INPUT pada keduanya. Akhirnya atur semuanya ke 0V. Secara khusus, tambahkan kode berikut ke bagian Init, atau Reset kode pada setiap mikrokontroler:

sbi DDRD, 7; PD7 diatur ke keluaran

cbi PortD, 7; PD7 awalnya 0V cbi DDRD, 6; PD6 diatur ke input cbi PortD, 6; PD6 awalnya 0V clr total; total pada dadu awalnya 0

Sekarang mari kita atur subrutin komunikasi pada chip penggulung dadu. Pertama-tama tentukan variabel baru di bagian atas yang disebut "total" yang akan menyimpan jumlah total yang dilempar pada sepasang dadu dan menginisialisasinya ke nol.

Kemudian tulis subrutin untuk berkomunikasi dengan penganalisis:

menyampaikan:

cbi PortD, 7 sbi PortD, 7; Kirim sinyal siap tunggu: sbic PinD, 6; baca PinD dan lewati jika 0V rjmp wait delay 8; penundaan untuk menyinkronkan (menemukan ini secara eksperimental) send: dec total delay 2; delay untuk setiap die count cpi total, 0; 0 disini berarti "total" jumlah penundaan telah terkirim breq PC+2 rjmp send cbi PortD, 7; PD7 ke 0V clr total; reset total dadu menjadi 0 ret

Dalam analyzer kami menambahkan rcall dari rutinitas utama ke subrutin komunikasi:

penganalisis clr; bersiap untuk nomor baru

sbic PinD, 6; periksa PD6 untuk komunikasi rcall sinyal 5V; jika 5V pergi untuk berkomunikasi mov analyzer, total; output ke penganalisis tampilan rcall analyzer

dan kemudian tulis subrutin komunikasi sebagai berikut:

menyampaikan:

jumlah kl; reset total ke 0 penundaan 10; delay untuk menghilangkan bouncing sbi PortD, 7; atur PB7 ke 5V ke sinyal siap terima: delay 2; tunggu nomor berikutnya inc total; kenaikan total sbic PinD, 6; jika PD6 kembali ke 0V kita selesai menerima rjmp; jika tidak, lakukan loop back up untuk mendapatkan lebih banyak data cbi PortD, 7; reset PD7 setelah selesai ret

Ini dia! Sekarang setiap mikrokontroler diatur untuk mengkomunikasikan hasil lemparan dadu dan kemudian menampilkannya pada alat analisa.

Kami akan menerapkan cara komunikasi yang jauh lebih efisien nanti ketika kami perlu mentransfer konten register antar pengontrol, bukan hanya gulungan dadu. Dalam hal ini, kita masih akan menggunakan hanya dua kabel yang menghubungkannya tetapi kita akan menggunakan 1, 1 yang berarti "memulai transmisi"; 0, 1 berarti "1"; 1, 0 berarti "0"; dan akhirnya 0, 0 berarti "akhiri transmisi".

Latihan 1: Lihat apakah Anda dapat menerapkan metode yang lebih baik dan menggunakannya untuk mentransfer lemparan dadu sebagai angka biner 8-bit.

Saya akan melampirkan video yang menunjukkan milik saya sedang beroperasi.

Langkah 3: Kesimpulan

Kesimpulan
Kesimpulan

Saya telah melampirkan kode lengkap untuk referensi Anda. Itu tidak sebersih dan rapi seperti yang saya inginkan, tetapi saya akan membersihkannya saat kami mengembangkannya di tutorial mendatang.

Mulai sekarang saya hanya akan melampirkan file yang berisi kode daripada mengetik semuanya di sini. Kami hanya akan mengetik bagian yang ingin kami diskusikan.

Ini adalah tutorial singkat di mana kami menemukan metode sederhana untuk memberi tahu mikrokontroler penganalisis kami apa hasil lemparan dadu kami dari mikrokontroler rol dadu kami sementara hanya menggunakan dua port.

Latihan 2: Alih-alih menggunakan sinyal siap untuk menunjukkan kapan rol dadu siap mengirim dan sinyal lain siap menerima, gunakan "interupsi eksternal" yang disebut "Interupsi Perubahan Pin". Pin pada atmega328p dapat digunakan dengan cara ini, itulah sebabnya mereka memiliki PCINT0 melalui PCINT23 di sampingnya dalam diagram pinout. Anda dapat mengimplementasikan ini sebagai interupsi dengan cara yang sama seperti yang kita lakukan dengan interupsi timer overflow. Dalam hal ini "penangan" interupsi akan menjadi subrutin yang berkomunikasi dengan penggulung dadu. Dengan cara ini Anda tidak perlu benar-benar memanggil subrutin komunikasi dari main: subrutin itu akan pergi ke sana setiap kali ada interupsi yang datang dari perubahan status pada pin itu.

Latihan 3: Cara yang lebih baik untuk berkomunikasi dan mentransfer data antara satu mikrokontroler ke kumpulan mikrokontroler lainnya adalah dengan menggunakan antarmuka serial 2-kawat bawaan pada mikrokontroler itu sendiri. Coba baca bagian 22 dari lembar data dan lihat apakah Anda dapat mengetahui cara menerapkannya.

Kami akan menggunakan teknik yang lebih canggih ini di masa mendatang ketika kami menambahkan pengontrol lebih lanjut.

Fakta bahwa semua yang kami lakukan dengan penganalisis kami adalah mengambil total lemparan dadu dan kemudian mencetaknya dalam biner menggunakan LED bukanlah hal yang penting. Faktanya adalah sekarang penganalisis kami "tahu" apa itu lemparan dadu dan dapat menggunakannya dengan tepat.

Dalam tutorial berikutnya kita akan mengubah tujuan "penganalisis" kita, memperkenalkan beberapa elemen rangkaian lagi, dan menggunakan lemparan dadu dengan cara yang lebih menarik.

Sampai Lain waktu…

Direkomendasikan: