Isi kandungan:

Tutorial Penyusun AVR 6: 3 Langkah
Tutorial Penyusun AVR 6: 3 Langkah

Video: Tutorial Penyusun AVR 6: 3 Langkah

Video: Tutorial Penyusun AVR 6: 3 Langkah
Video: simak video ini sebelum anda memasang AVR generator 3phase/1phase 2024, November
Anonim
Tutorial Penyusun AVR 6
Tutorial Penyusun AVR 6

Selamat Datang ke Tutorial 6!

Tutorial hari ini akan menjadi pendek di mana kita akan mengembangkan kaedah mudah untuk menyampaikan data antara satu atmega328p dan yang lain 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 kaedah kami untuk menyampaikan hasil dadu roll dari roller ke penganalisis. Kami kemudian akan mencetak gulungan dalam bentuk binari menggunakan LED yang kami buat untuk penganalisis dalam Tutorial 5. Setelah kami berjaya ini, kami akan dapat membina bahagian keseluruhan projek kami dalam tutorial seterusnya.

Dalam tutorial ini, anda memerlukan:

  1. Papan prototaip anda
  2. Roller dadu anda dari Tutorial 4
  3. Penganalisis Daftar Anda dari Tutorial 5
  4. Dua wayar penyambung
  5. Salinan Helaian Data Lengkap (semakan 2014):

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

  6. Salinan Manual Set Arahan (semakan 2014):

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

Berikut adalah pautan ke koleksi lengkap tutorial penghimpun AVR saya:

Langkah 1: Bagaimanakah Kita Mendapatkan Dua Pengawal Mikro untuk Berbual antara satu sama lain?

Bagaimanakah Kita Mendapatkan Dua Pengawal Mikro untuk Berbual antara satu sama lain?
Bagaimanakah Kita Mendapatkan Dua Pengawal Mikro untuk Berbual antara satu sama lain?

Oleh kerana kami mula mengembangkan projek kami sehingga produk akhir kami terdiri daripada koleksi bahagian yang lebih kecil, kami memerlukan lebih banyak pin daripada satu Atmega328P yang dapat disediakan. Oleh itu, kami akan melakukan setiap projek keseluruhan pada mikrokontroler yang berasingan dan kemudian meminta mereka berkongsi data di antara mereka. Oleh itu, masalah yang perlu kita selesaikan adalah bagaimana kita dapat menggunakan kaedah mudah bagi pengawal untuk saling berbicara dan memindahkan data di antara mereka? Satu perkara mengenai pengawal ini ialah mereka masing-masing melaksanakan 16 juta arahan sesaat. Ini tepat pada waktunya dan oleh itu kita dapat menggunakan masa ini untuk memindahkan data. Sekiranya kita menggunakan kelewatan milisaat untuk membentuk data, maka kita tidak semestinya begitu tepat kerana CPU menjalankan 16, 000 arahan dalam satu milisaat. Dengan kata lain, milisaat adalah kekekalan untuk CPU. Oleh itu, mari kita mencuba dengan dadu. Saya mahu menghantar hasil dadu roll dari chip dice roller ke analyzer chip. Katakan anda berdiri di seberang jalan dan saya ingin memberi isyarat kepada anda hasil gulungan sepasang dadu saya. Satu perkara yang dapat saya lakukan, jika kita berdua mempunyai jam tangan, adalah saya dapat menyalakan lampu suluh, maka apabila anda sudah bersedia untuk menerima data saya, anda akan menyalakan lampu suluh anda dan kami berdua memulakan jam kami. Kemudian saya menyalakan lampu suluh saya untuk bilangan milisaat yang tepat semasa dadu bergulung dan kemudian mematikannya. Oleh itu, jika saya menghidupkan 12, saya akan terus menyala selama 12 milisaat. Sekarang masalah dengan perkara di atas adalah bahawa, untuk anda dan saya, tidak mungkin kita dapat membuat masa dengan cukup tepat untuk membezakan antara 5 milisaat dan 12 milisaat. Tetapi bagaimana dengan ini: Andaikan kita memutuskan bahawa saya akan terus menyala selama satu tahun untuk setiap nombor pada dadu? Kemudian jika saya melancarkan 12, saya akan menerangi anda selama 12 tahun dan saya fikir anda akan bersetuju bahawa tidak ada kemungkinan bahawa anda akan melakukan kesalahan dalam mengetahui nombornya bukan? Anda boleh berehat sebentar dan bermain bola keranjang, anda juga boleh bermain omong kosong di Vegas selama 6 bulan, selama pada suatu ketika sepanjang tahun untuk melirik ke seberang jalan untuk melihat apakah cahaya menyala anda tidak akan ketinggalan. Itulah yang kita lakukan untuk pengawal mikro! Satu milisaat tunggal untuk CPU adalah seperti setahun. Oleh itu, jika saya menghidupkan isyarat selama 12 milisaat, hampir tidak ada kemungkinan mikrokontroler yang lain akan mengelirukannya selama 10 atau 11 tidak kira apa gangguan dan apa yang tidak berlaku pada masa ini. Bagi pengawal mikro, satu milisaat adalah kekekalan. Oleh itu, inilah yang akan kita lakukan. Mula-mula kita akan memilih dua port pada pengawal untuk menjadi port komunikasi kita. Saya akan menggunakan PD6 untuk Menerima Data (kita boleh menyebutnya Rx jika kita suka) dan saya akan memilih PD7 untuk menghantar data (kita boleh memanggilnya Tx jika kita mahu). Cip penganalisis akan memeriksa pin Rx secara berkala dan jika melihat isyarat, ia akan jatuh ke "subrutin komunikasi" dan kemudian menghantar isyarat kembali ke penggelek dadu dengan mengatakan ia sudah siap untuk diterima. Mereka berdua akan memulakan masa dan roller dadu akan menghantar isyarat (iaitu 5V) untuk satu milisaat setiap nombor pada dadu. Oleh itu, jika gulungan itu berenam enam, atau 12, maka dadu roller akan menetapkannya PD7 hingga 5V selama 12 milisaat dan kemudian menetapkannya kembali ke 0V. Penganalisis akan memeriksa pin PD6nya setiap milisaat, dikira setiap kali, dan apabila kembali ke 0V maka ia mengeluarkan nombor yang dihasilkan ke paparan penganalisis, menunjukkan dua belas dalam binari pada LED. Jadi itulah rencananya. Mari lihat sama ada kita dapat melaksanakannya.

Langkah 2: Subrutin Komunikasi

Perkara pertama yang perlu kita lakukan ialah menghubungkan kedua-dua pengawal. Oleh itu, ambil wayar dari PD6 pada satu dan sambungkan ke PD7 pada yang lain, dan sebaliknya. Kemudian mulakannya dengan menetapkan PD7 ke OUTPUT pada keduanya dan PD6 ke INPUT pada keduanya. Akhirnya tetapkan semuanya ke 0V. Secara khusus, tambahkan yang berikut ke bahagian Init, atau Reset kod pada setiap mikrokontroler:

sbi DDRD, 7; PD7 ditetapkan ke output

cbi PortD, 7; PD7 pada mulanya 0V cbi DDRD, 6; PD6 ditetapkan untuk memasukkan cbi PortD, 6; PD6 pada mulanya 0V clr total; jumlah dadu pada mulanya 0

Sekarang mari kita sediakan subrutin komunikasi pada chip dadu-roller. Mula-mula tentukan pemboleh ubah baru di bahagian atas yang disebut "total" yang akan menyimpan jumlah bilangan yang digulung pada sepasang dadu dan memulakannya menjadi sifar.

Kemudian tulis subrutin untuk berkomunikasi dengan penganalisis:

berkomunikasi:

cbi PortD, 7 sbi PortD, 7; Hantar menunggu isyarat siap: sbic PinD, 6; baca PinD dan langkau jika 0V rjmp tunggu kelewatan 8; kelewatan untuk disegerakkan (dijumpai ini secara eksperimen) hantar: dec total delay 2; kelewatan untuk setiap jumlah cpi mati, 0; 0 di sini bermaksud kelewatan nombor "total" telah dihantar breq PC + 2 rjmp hantar cbi PortD, 7; Jumlah PD7 hingga 0V clr; tetapkan semula jumlah dadu menjadi 0 ret

Dalam penganalisis kami menambah panggilan dari rutin utama ke subrutin berkomunikasi:

penganalisis clr; bersiap sedia untuk nombor baru

sbic PinD, 6; periksa PD6 untuk rcall isyarat 5V berkomunikasi; jika 5V pergi untuk berkomunikasi penganalisis mov, jumlahnya; output ke paparan penganalisis rcall analyzer

dan kemudian tulis subrutin komunikasi seperti berikut:

berkomunikasi:

jumlah clr; tetapkan semula jumlah ke 0 kelewatan 10; kelewatan untuk menghilangkan bouncing sbi PortD, 7; tetapkan PB7 hingga 5V ke isyarat siap terima: kelewatan 2; tunggu nombor seterusnya termasuk jumlah; kenaikan jumlah sbic PinD, 6; jika PD6 kembali ke 0V kita selesai menerima rjmp; jika tidak, gelung sandaran untuk lebih banyak data cbi PortD, 7; tetapkan semula PD7 apabila selesai ret

Itupun dia! Sekarang setiap mikrokontroler disiapkan untuk menyampaikan hasil dadu roll dan kemudian memaparkannya pada penganalisis.

Kami akan melaksanakan cara berkomunikasi yang lebih cekap di kemudian hari apabila kami perlu memindahkan kandungan daftar antara pengawal dan bukannya hanya dadu. Dalam kes itu, kita masih akan menggunakan hanya dua wayar yang menghubungkannya tetapi kita akan menggunakan 1, 1 untuk bermaksud "memulakan penghantaran"; 0, 1 bermaksud "1"; 1, 0 bermaksud "0"; dan akhirnya 0, 0 bermaksud "penghantaran akhir".

Latihan 1: Lihat apakah anda dapat menerapkan kaedah yang lebih baik dan menggunakannya untuk memindahkan dadu roll sebagai nombor binari 8-bit.

Saya akan melampirkan video yang menunjukkan tambang sedang beroperasi.

Langkah 3: Kesimpulannya

Kesimpulannya
Kesimpulannya

Saya telah melampirkan kod lengkap untuk rujukan anda. Ia tidak begitu bersih dan kemas seperti yang saya mahukan, tetapi saya akan membersihkannya semasa kami mengembangkannya dalam tutorial akan datang.

Mulai sekarang saya hanya akan melampirkan fail yang mengandungi kod daripada menaip semuanya di sini. Kami hanya akan menaip bahagian yang berminat untuk kami bincangkan.

Ini adalah tutorial ringkas di mana kami menggunakan kaedah mudah untuk memberitahu mikrokontroler penganalisis kami apa hasil dadu gulungan kami dari mikrokontroler dadu-roller ketika hanya menggunakan dua port.

Latihan 2: Daripada menggunakan isyarat siap untuk menunjukkan kapan penggulung dadu siap dihantar dan lain ketika penganalisis bersedia menerima, gunakan "gangguan luaran" yang disebut "Pin Change Interrupt". Pin pada atmega328p dapat digunakan dengan cara ini dan itulah sebabnya mereka mempunyai PCINT0 melalui PCINT23 di sebelahnya dalam gambarajah pinout. Anda boleh melaksanakan ini sebagai gangguan dengan cara yang sama seperti yang kami lakukan dengan interupsi limpahan pemasa. Dalam kes ini, "pengendali" yang mengganggu akan menjadi subrutin yang berkomunikasi dengan roller dadu. Dengan cara ini, anda tidak perlu memanggil subrutin komunikasi dari utama: ia akan pergi ke sana setiap kali ada gangguan yang datang dari perubahan keadaan pada pin tersebut.

Latihan 3: Cara yang lebih baik untuk berkomunikasi dan memindahkan data antara satu mikrokontroler ke koleksi yang lain adalah dengan menggunakan antara muka bersiri 2-wayar terpasang pada mikrokontroler itu sendiri. Cuba baca bahagian 22 lembar data dan lihat apakah anda dapat mengetahui cara melaksanakannya.

Kami akan menggunakan teknik yang lebih canggih ini pada masa akan datang apabila kami menambah pengawal selanjutnya.

Fakta bahawa semua yang kami lakukan dengan penganalisis kami adalah mengambil keseluruhan dadu dan kemudian mencetaknya dalam bentuk perduaan menggunakan LED bukanlah perkara yang penting. Hakikatnya sekarang penganalisis kami "mengetahui" apa itu dadu roll dan dapat menggunakannya dengan sewajarnya.

Dalam tutorial seterusnya, kita akan mengubah tujuan "penganalisis" kita, memperkenalkan beberapa elemen litar lagi, dan menggunakan dadu roll dengan cara yang lebih menarik.

Sehingga lain kali …

Disyorkan: