Dasar-dasar Mikrokontroler Dijelajahi

Coba Instrumen Kami Untuk Menghilangkan Masalah





Satu hal yang hebat tentang IC mikrokontroler, ini tersedia hampir di semua bagian dunia dan pengecer elektronik.

pengantar

Pada dasarnya perangkat mikrokontroler populer digunakan dalam aplikasi yang melibatkan penilaian lingkungan sekitar dan elektronik serupa.



Anda dapat menemukan perangkat ini digunakan untuk menampilkan parameter tertentu, dalam aplikasi kontrol motor, pencahayaan LED, berbagai jenis sensor seperti sensor kemiringan, akselerometer, pengukur kecepatan, pencatat data, pengontrol suhu, keyboard, dll.

Pengertian utama mengenai mikrokontroler dapat diperoleh dengan mengacu pada mikrokontroler AVR Amega32 yang sangat canggih sehingga terkadang disebut komputer dalam sebuah chip.



Perangkat ini ditugaskan untuk menjalankan serangkaian perintah untuk membentuk suatu program.

Bahasa program yang akan Anda lihat di sini adalah C ++. Anda akan mempelajari bahasa ini secara lebih mendalam dalam kursus di sini.

Ketika datang ke MCU, Anda mendapatkan fasilitas untuk memiliki opsi untuk mengontrol dan mengkonfigurasi semua pinout-nya.

Jika Anda sedikit lelah dengan ini, tenang saja karena tidak ada yang rumit sama sekali, Anda akan dimudahkan melalui semua aspek dengan mantap tetapi tegas saat kita melangkah maju.

Dalam chip MCU, semua pin kecuali Vdd dan Vss yang merupakan pin daya chip, dapat ditetapkan dengan sebutan eksklusif.

Detail Pinout

Jika Anda melihat sekilas chip dari atas, Anda akan menemukan takik segitiga kecil yang menunjukkan titik awal dari mana pinout dimulai, itu dihitung bahwa pin # 1 chip dimulai tepat di bawah takik ini.

Mulai dari pin ini Anda akan menemukan 20 pin sampai ke bawah di sisi itu (kiri), dan 20 pin lagi di sisi lain (kanan), dilanjutkan dari bawah ke atas di sisi kanan.

8 pin pertama yang dimulai dari notch adalah PBO-7 yang merupakan pin indeks dari IC karena semua program di sini dimulai dengan indeks nol.

Rangkaian pinout di atas disebut PORT B, sementara ada set port identik lainnya yang ditetapkan A ke D.

Port-port ini dapat ditugaskan untuk menerima dan mengenali data yang dimasukkan yang disebut INPUT, dan juga untuk mengirimkan data dalam beberapa bentuk tertentu yang disebut OUTPUT.

Dua dari pin yang termasuk dalam kategori umum adalah pin (+) / (-) yang juga disebut sebagai Vdd dan GND.

Satu pin dari PORT D (PDO-6) mungkin terlihat terletak di sisi kiri chip di area bawah.

PD7 yang merupakan pin # 7 dari PORT D dapat dilacak berdiri sendiri dan dimulai dari rangkaian pinout sisi kanan.

Sekarang pindah dari sisi kanan chip tempat PORT D berakhir, PORT C mulai menghitungnya secara berurutan.

Ini berkontribusi pada banyak pin MCU yang menarik dari analog ke digital.

Pin ini ditampilkan untuk menjadi input penginderaan untuk mendeteksi banyak parameter melalui tahapan rangkaian analog yang dikonfigurasi secara eksternal.

Pin di atas merupakan PORT A.

Konversi analog ke digital di pin di atas dapat dipahami dengan bantuan contoh di mana tingkat suhu analog dideteksi menggunakan sensor biasa seperti thermister diterapkan ke salah satu pin PORT A yang siap diterima dan konverter oleh MCU untuk menghasilkan pembacaan digital dari nol hingga 255 derajat F (angka 8-bit yang dapat ditingkatkan untuk mencapai keluaran 10-bit).

Fitur lain yang dapat dilihat di MCU juga adalah ruang pemrograman yang tersedia atau memori yang menentukan ruang untuk variabel dan program yang ditentukan untuk mikrokontroler.

Selain itu, MCU memiliki jam built-in yang ditugaskan untuk menghitung parameter yang relevan.

Fitur jam memungkinkan MCU untuk menerapkan dirinya sendiri untuk banyak proses penghitungan yang berbeda yang bisa cepat dalam kisaran mikrodetik tergantung pada spesifikasi perangkat tertentu, dan juga bisa lebih lambat ke tingkat yang diinginkan.

Sekarang Anda mungkin telah memahami konsep mikrokontroler sampai batas tertentu dan mengenai port dan pinnya.

Cara Membuat Konektor SPI dari Programmer ke Mikrokontroler

Sekarang saatnya untuk masuk lebih dalam ke subjek dan menyelidiki dunia pemrograman.

Karena itu, sebelum terlibat dalam prosedur pemuatan program ke dalam chip, kita perlu menemukan cara yang tepat untuk mengintegrasikan konektor SPI (Serial Peripheral Interface) dengan MCU.

Namun bahkan setelah ini kita tidak bisa begitu saja mendorong SPI ke pinout MCU, bukan? Kami juga tidak dapat mengizinkan kabel yang diperpanjang dari SPI untuk langsung dimasukkan ke papan roti. Ini juga dapat menyebabkan pengaturan kabel yang salah terhubung dengan pin yang salah membuat koneksi yang buruk.

Oleh karena itu untuk membuat semuanya benar-benar sempurna, kami melakukan prosedur pada veroboard kecil di mana kami mendapatkan pin logam penghubung yang diperlukan yang juga disebut solder “header”. Pin header ini sekarang dapat digunakan untuk menghubungkan dengan konektor SPI. Sambungan dari header ini dapat diakhiri ke pin header paralel lain yang dapat digunakan untuk sambungan papan tempat memotong roti.

Jadi perakitan di atas sekarang membentuk platform penghubung perantara yang nyaman dan andal untuk SPI ke MCU.

Selama ini semuanya terlihat bagus dan sempurna, jadi mari kita lanjutkan untuk mendapatkan penghasilan terkait programmer yang dibutuhkan antara PC Anda dan MCU.

Mungkin ada sejumlah perusahaan yang membuat dan menjual unit pemrogram ini, jadi mendapatkannya seharusnya tidak menjadi masalah bagi Anda, seperti Adafruit Industries, USBtinyISP, atau Sparkfun, dll.

Beberapa di antaranya dapat terlihat sangat berbeda dengan tipe konvensional, tetapi pada dasarnya semuanya identik dan mengikuti aturan pemrograman standar dan dapat digunakan sebagai antarmuka antara PC Anda dan mikrokontroler AVR.

Namun pastikan satu pemikiran, jika Anda menggunakan beberapa MCU lain dan bukan AVR Atmega32, Anda mungkin harus memeriksa programmer yang sesuai untuk chip MCU tertentu.

Dapat diamati bahwa beberapa programmer ini menggunakan driver yang sama, sesuatu yang harus diperhatikan dan kita akan mempelajarinya lebih lanjut di bab berikutnya.

Menghubungkan PC Anda dengan chip mikrokontroler benar-benar mendasar, dan Anda akan senang mengetahui betapa sederhananya proses yang diperlukan untuk ini. Jadi ayo kita tekan tombolnya sekarang juga

Membuat papan antarmuka SPI yang dijelaskan di atas tidaklah sulit, ini semua tentang membuat besi solder Anda bekerja melalui semua koneksi di dua baris tajuk pin yang ditunjukkan pada papan tujuan umum kecil.

Gambar di atas menunjukkan detail koneksi yang harus Anda ikuti saat menghubungkan kabel di antara header.

Untuk membuatnya lebih sederhana, mari kita lihat detail koneksi berikut untuk hal yang sama dengan mengacu pada gambar di atas:

Pin SPI mulai dari kiri atas menuju ke 'Master IN, Slave OUT' (MISO)

Pin SPI dari kiri tengah terhubung dengan pin jam (SCK)

Pin SPI di kiri bawah bergabung dengan tombol Reset. (Kita akan mempelajari lebih lanjut tentang pin ini di tutorial berikut)

SPI yang relevan dengan kait kanan bawah dengan pin GND dari MCU, GND mengacu pada pin yang membentuk jalur suplai nol atau rel negatif (relatif) dari suplai.

SPI yang diakhiri dari header kanan tengah terhubung dengan pin “Master Out, Slave IN” (MOSI) dari MCU.

SPI yang keluar dari header kanan atas dihubungkan dengan (+) dari MCU yang cukup jelas merupakan Vdd atau pin suplai positif dari MCU.

Itu dia.

Hubungkan kedua konektor seperti yang dijelaskan dan papan antarmuka SPI Anda siap untuk tindakan yang diperlukan.

Untuk bantuan lebih lanjut Anda dapat berkonsultasi dengan gambar yang ditunjukkan di atas, papan antarmuka akhir Anda akan terlihat seperti ini setelah semua koneksi kabel dilakukan dengan benar dengan bantuan diskusi di atas.

Saya harap Anda mungkin sudah membuat antarmuka SPI seperti yang dijelaskan di tutorial sebelumnya, dan sekarang saatnya memastikan bahwa komputer kita menerima pemrogram yang perlu kita integrasikan di antara PC dan MCU.

Membuat Kode Pemrograman Sederhana untuk MCU

Kami mengambil unit USBTinyISP yang tersedia dari Sparkfun, untuk menghubungkan komputer dengan mikrokontroler.

Kami tahu bahwa setiap sistem operasi komputer seperti Windows akan membutuhkan driver yang tanpanya tidak akan berguna untuk memuat apa pun ke komputer, sehingga programmer kami memerlukan driver untuk memuat ke komputer Anda.

Mari kita intip prosedur yang diperlukan untuk menginstal driver di OS komputer Anda, berikut kami ambil contoh OS Windows 7 dengan spesifikasi 32-bit atau 64-bit.

Buka sparkfun.com dan klik 'halaman programmer AVR saku'. Tautan dapat dengan mudah divisualisasikan di dalam halaman.

Selanjutnya, temukan 'driver Windows' di bawah dokumen dan cukup klik di atasnya.

Ini akan memberi Anda file pocketprog-driver.zip di komputer Anda.

Buka komputer Anda, temukan lokasi unduhan dan cukup unzip file yang diunduh ke dalam folder.

Jika komputer Anda adalah OS 64-bit, Anda perlu mengikuti beberapa langkah lagi seperti yang diberikan di bawah ini, dengan OS 32-bit, Anda dapat langsung memulai penginstalan dari file yang telah diekstrak.

Untuk 64-bit ikuti ini, untuk 32-bit abaikan saja:

Google “libusb sourceforge” dan klik tautan ini versi terbaru.

Anda akan menemukan beberapa file tambahan, namun Anda akan tertarik untuk menemukan file bib, yaitu: libusb-win32-bin - #. #. #. #. Zip

Sekarang, buka dan temukan lokasi unduhan ini di komputer Anda, unzip dan simpan di salah satu folder.

Ke folder ini, navigasikan ke folder bin, lanjutkan ke folder amd64.

Anda akan melihat beberapa folder di sini sebagai: ghcalled libusb0.dll dan libusb0.sys.

Anda ingin mengganti namanya menjadi: libusb0_x64.dll dan libusb0_x64.sys.

Sekarang Anda perlu menyalin file di atas ke folder pocketprog-driver, cukup timpa file pada versi yang ada.

Untuk menginstal driver di atas, metode berikut yang agak non-konvensional dalam tipenya akan menarik minat Anda:

Ini adalah mode 'tambahkan perangkat keras lama'.

Klik 'Start Menu'

Kemudian lanjutkan dengan mengklik kanan pada 'komputer'

Klik 'Kelola', dan terakhir klik 'pengelola perangkat'

Selanjutnya, di dalam menu, pilih 'Add Legacy Hardware'

Lanjutkan dengan menekan 'berikutnya', sampai wizard dimasukkan

Mengikuti petunjuknya, klik 'Instal perangkat keras yang Anda perlukan untuk memilih dari daftar Lanjutan' ini akan meminta ikon tombol radio ke dalam pilihan tertentu. Ini sebenarnya adalah tombol kontrol jendela yang sekarang akan tampak seperti lingkaran kecil dengan arsip biru bundar di dalamnya.

Sekarang cukup klik 'Berikutnya'

Ini akan menunjukkan kepada Anda menu 'Tampilkan semua Perangkat' yang perlu Anda klik.

Setelah ini lanjutkan untuk mengklik Ikon 'Have Disk'.

Dengan bantuan ikon 'Browse', lanjutkan ke lokasi folder pocketprog-driver. Jika pemilihan dilakukan dengan benar oleh Anda, Anda akan memvisualisasikan file pocketprog.inf yang ditempatkan di folder tersebut.

Klik dua kali di atas file ini dan Anda pasti akan menyaksikan driver terinstal ke PC Anda.

Selesai !! Mari kita lanjutkan dengan tutorial berikutnya di halaman berikutnya.

Sekarang Anda mungkin telah menginstal perangkat lunak yang diperlukan dan membangun antarmuka SPI.

Cara Mentransfer Program ke dalam chip Mikrokontroler

Langkah selanjutnya akan memanggil beberapa komponen seperti papan tempat memotong roti, LED dan resistor yang dihitung untuk aplikasi yang dimaksudkan.

Di bagian ini kita akan mempelajari metode pengujian programmer dan mengkonfirmasi penginstalan driver dan perangkat lunak yang relevan.

Untuk memverifikasi apakah driver dan perangkat lunak diinstal dengan benar, kami akan menerapkan program sederhana yang dikenal sebagai avrdude.

AVRdude adalah program yang terkait dengan penginstalan WinAVR terbaru yang tanpanya transfer file yang sebenarnya ke MCU tidak dapat dilakukan.

Program ini adalah format file .hex yang pada dasarnya dapat dimengerti oleh MCU untuk eksekusi yang diperlukan.

Jika verifikasi tidak berhasil, pemrogram tidak akan mampu melakukan transfer file.

Mari kita lihat dengan cepat bagaimana kita dapat menerapkan prosedur pengujian dengan bantuan petunjuk berikut:

Buka prompt DOS (Disk operating system) dengan mengklik 'start menu' dan ketik cmd.exe di kotak pencarian yang diberikan.

Sekarang menjalankan AVRdude dapat dilakukan hanya dengan mengetik avrdude –c usbtiny –p m32 melalui DOS prompt. Segera setelah ini diterapkan, DOS akan langsung mengetahui apakah koneksi berhasil.

Pada perintah di atas, '-c' adalah tanda pemberitahuan yang menyertakan spesifikasi parameter programmer 'usbtiny', sedangkan tag '-p' mengidentifikasi perangkat mikrokontroler ('m32 menunjukkan Atmega32).

Jika Anda telah menggunakan MCU yang berbeda, Anda perlu menyertakan awalan yang relevan untuk penerapan.

Setelah prosedur di atas selesai, Anda dapat mengetik 'exit' pada prompt DOS, dan itu akan mengeluarkan Anda dari jendela.

Jika Anda benar-benar bertanya-tanya mengenai detail pemrograman yang sebenarnya, maka untuk itu pertama-tama kita perlu menyolder dan membangun sirkuit LED analog eksternal di mana program dapat diimplementasikan, karena kecuali ada sistem yang mengakui respons dari MCU, pemrograman dan menjalankan mikrokontroler akan sangat tidak berarti.

Membuat papan LED sangat sederhana, ini semua tentang menyolder dua kabel LED di atas sepotong veroboard dan menghubungkan resistor dengan salah satu kabel LED. Peran LED ini hanya untuk membatasi arus ke LED agar tidak terbakar akibat kelebihan tegangan dan arus dari keluaran MCU.

Nilai resistor dapat dihitung dengan menggunakan rumus sederhana berikut:

R = (Ub - LEDfwd) / I

Di mana Ub adalah tegangan suplai, LEDfwd adalah tegangan operasi optimal dari LED yang digunakan, dan I adalah amp optimalnya.

Misalkan kita menggunakan LED MERAH yang memiliki tegangan maju LED = 2.5V dan arus I = 20mA, persamaan diatas dapat diselesaikan sebagai berikut:

Karena tegangan dari MCU adalah 5V, itu dapat dinyatakan sebagai:

R = (5 - 2.5) /. 02 = 125 ohm, ¼ watt, nilai terdekatnya adalah 120 ohm.

Sekarang kita memiliki LED, resistor 120 ohm dan veroboard, cukup hubungkan komponen di atas seperti yang diberikan dalam diagram dengan mikrokontroler.

Setelah ini selesai, MCU dapat diprogram untuk respons yang diinginkan pada pengaturan LED di atas.

Selanjutnya, pemrograman MCU.

Untuk memungkinkan mikrokontroler melakukan beberapa implementasi yang berarti, sangat penting untuk menulis instruksi yang sesuai ke dalam MCU.

Cara Memasang Lingkungan Pemrograman dan Menyelidiki WinAVR

Untuk ini kami mungkin dapat menggunakan 'editor teks' kami sendiri di PC kami, meskipun mungkin dari kami akan menghargai penggunaan 'lingkungan pemrograman' yang lebih profesional daripada editor teks biasa, sederhana karena pendekatan ini memungkinkan Anda untuk menikmati beberapa fitur menarik yang ada di dalam paket 'lingkungan pemrograman' ini.

Ini akan mendukung pembuatan dan pengeditan program melalui berbagai bahasa dan juga mengkompilasinya menjadi mode penyampaian yang mudah dipahami dan diterima oleh chip mikrokontroler.

Pada akhirnya ini akan didukung oleh WinAVR dan ditransfer ke chip MCU yang bersangkutan.

WinAVR juga dapat diperlengkapi untuk melakukan banyak operasi lain seperti memecahkan masalah program dan memperingatkan kita tentang kemungkinan sintaks dan mengkompilasi kesalahan dan kesalahan. Kita akan membahas ini di tutorial kita nanti.

Anda ingin proses instalasi WinAVR menjadi sangat cepat dan cepat. Mari selami detailnya dengan poin-poin berikut:

Anda perlu mengunduh versi terbaru dari folder file pemalsuan sumber WinAVR. Anda akan menemukan beberapa info berguna terkait unduhan ini dari situs resminya.

Anda akan diminta melewati pertanyaan keamanan, sehingga Anda dapat menjawab jika Anda ingin unduhan dilakukan, ini akan menanyakan file yang akan diunduh adalah file yang dapat dieksekusi.

Unduh file dan mulai proses eksekusi dengan mengkliknya. Biarkan penginstalan dimulai.

Proses ini akan memandu Anda dengan beberapa pertanyaan yang dapat dijawab sehingga Anda mungkin dapat merampingkan penginstalan sesuai kenyamanan Anda. Anda ingin mengabaikan banyak dari ini ke bentuk defaultnya, terserah Anda untuk memilih yang menurut Anda paling sesuai untuk tindakan.

Sampai sekarang Anda akan menemukan semuanya cukup normal dan mudah dan menemukan beberapa opsi di menu awal yang dilemparkan kepada Anda. Jangan khawatir, hanya beberapa di antaranya yang benar-benar menggunakan salah satu file bernama 'programmer notepad'.

Setelah ikon ini diklik, antarmuka pengguna akan dimulai sehingga Anda dapat menerapkan penulisan program (seperti membuat dan mengedit). Anda juga akan menyaksikan program yang terdiri dari perintah menu untuk membantu Anda menyusun kode dan memasukkannya ke dalam mikrokontroler.

Tugas mendasar dari notepad programmer di atas adalah mengubah kode yang dapat dibaca manusia yang akan Anda tulis menjadi serangkaian instruksi yang hanya dapat dimengerti oleh MCU.

Tutorial selanjutnya akan membahas pengujian programmer di atas sehingga kita dapat yakin mengenai kompatibilitasnya dengan Windows dan apakah itu “berjabat tangan” dengan IC mikrokontroler Anda dengan sempurna.

Cara Memprogram MCU untuk Menghidupkan LED

Setelah ini dikonfirmasi, kami akan melanjutkan untuk membuat kode kecil 'tidak melakukan apa-apa', hanya untuk memastikan bahwa prosedur transfer kode tidak mengalami kesalahan.

Tentu saja kami sekarang siap untuk mengimplementasikan program pertama kami di dalam MCU, tetapi sebelumnya akan menarik untuk meringkas dengan cepat apa yang kami lakukan dalam tutorial kami sebelumnya:

Kami membeli mikrokontroler AVR Atmel sesuai spesifikasi yang kami butuhkan di sini kami telah menggunakan ATMega32 untuk ilustrasi. Selanjutnya, kami belajar tentang dasar-dasar mikrokontroler dan unit pemrogram yang bertanggung jawab untuk mentransfer program ke chip MCU.

Selanjutnya, kami membangun konektor antarmuka SP yang penting agar komputer Anda dapat dihubungkan dengan mikrokontroler untuk tindakan pemrograman.

Setelah ini kami mengonfirmasi apakah driver telah diinstal dengan benar di komputer untuk sistem operasi 32-bit dan 64-tetapi.

Selanjutnya, kami menginstal lingkungan pemrograman yang disebut Win AVR untuk memudahkan penulisan iklan transfer kode ke mikrokontroler, diikuti dengan penerapan standar untuk memverifikasi pemrogram dengan PC Anda dan mikrokontroler yang saling berhubungan.

Akhirnya di bab sebelumnya kita selesai membangun rangkaian LED / resistor dan menghubungkannya dengan keluaran MCU yang relevan.

Memang banyak pekerjaan, tetapi sekarang saatnya untuk langsung membahas beberapa hal pemrograman nyata!

Untuk memulai, kami ingin membagi mikrokontroler menjadi tiga kategori, ini akan sangat menyederhanakan pemahaman kami:

Kontrol, Deteksi, dan Komunikasi

Menarik untuk diketahui bahwa fungsi di atas dapat diprogram dengan berbagai cara.

Pada program pertama kami, kami akan mencoba untuk memerintahkan mikrokontroler untuk 'mengontrol' parameter eksternal, ya Anda benar itu akan menjadi LED yang kami buat baru-baru ini.

Tepatnya, kami akan memberi tahu MCU untuk MENGAKTIFKAN LED yang terhubung, ya saya tahu ini terlihat cukup primitif, tetapi fase memulai selalu harus mudah.

Melanjutkan pekerjaan sekarang, membuat MCU mengontrol LED sebenarnya cukup sederhana:

Untuk ini kami menginstruksikan pin # 0 pada PORT B ​​untuk menghasilkan 5V yang dibutuhkan untuk LED.

Ingat dari tutorial sebelumnya, kami menghubungkan anoda LED ke pin MCU yang disebutkan di atas.

Ada dua hal penting yang perlu diperhatikan pada pin MCU ini: 1) keluaran dan 2) 5 volt

Kami akan mempelajari cara yang kami gunakan untuk menginstruksikan pin tertentu untuk menjadi keluaran MCU.

Setelah disetel menjadi keluaran chip, kami dapat menginstruksikannya menjadi 'tinggi' (5V) atau 'rendah' (0V) seperti yang diinginkan untuk aplikasi.

Karena rangkaian logika apa pun seperti MCU, pin bisa menjadi layu output atau input dan dapat dikonfigurasi untuk menghasilkan logika tinggi atau logika rendah, pin hanya perlu ditetapkan baik menjadi logika tinggi atau logika rendah , tidak ada status perantara atau tidak ditentukan selain beberapa status ini untuk mikrokontroler atau untuk IC digital apa pun dalam hal ini. Hal yang sama juga berlaku untuk setiap pin MCU.

Adapun penugasan pin input dan output, input akan diposisikan untuk menerima sinyal dari tahap analog eksternal, sedangkan output akan bertanggung jawab untuk menafsirkannya ke dalam keadaan logis yang ditentukan, atau frekuensi.

Meskipun tugas di atas dapat dilakukan dengan berbagai metode, kita akan membahas salah satunya demi kesederhanaan. Namun harus dicatat bahwa meskipun yang akan disajikan sekarang terlihat mudah dan menarik, itu tidak begitu layak dan bukan tipe yang direkomendasikan untuk semua aplikasi MCU, untuk alasan yang sama Anda akan diperkenalkan dengan metode pemrograman yang lebih populer nanti dalam kursus ini. . Program-program ini akan memungkinkan hanya pin yang diinginkan untuk ditetapkan sesuai spesifikasi tanpa mempengaruhi yang berdampingan lainnya yang mungkin sudah ditetapkan untuk melakukan beberapa fungsi lain.

Namun saat ini kami tidak akan terlalu mempermasalahkan tentang pin lain dan hanya akan menggunakan pin yang relevan, menghindari komplikasi sampai batas tertentu.

Untuk menetapkan pin sebagai output kita perlu menggunakan Data Direction Register (DDR). Jika Anda bertanya-tanya apa arti register di sini, itu hanyalah spasi di MCU yang memungkinkan mikrokontroler merespons dengan cara tertentu.

Dengan menggunakan DDR kita dapat mengatur pin untuk mengirim data yang seperti “keluaran”, atau menerima data dalam bentuk “masukan”.

Bagaimanapun Anda mungkin bingung tentang kata tersebut, apa artinya ini? Sebuah data menambahkan dimensi ketiga ke pin yang dapat ditetapkan untuk terus menerus pada logika nol (0V) atau logika tinggi (5V), tetapi bagaimana dengan sinyal yang dapat berubah dengan cepat seperti frekuensi pulsa. Suatu frekuensi akan disertai dengan logika tinggi dan rendah (5V dan 0V) berosilasi dengan beberapa interval atau periode tertentu, sehingga menjadi berorientasi waktu dan dapat disesuaikan dengan waktu, itulah mengapa kami mengidentifikasi sebagai 'data' yang berarti parameter yang menunjukkan fungsi relatif terhadap fungsi lain (status logika dan waktu).

Salah satu cara menetapkan pin0 sebagai keluaran adalah dengan menulis kode berikut:

DDRB = 0b00000001

Pada program di atas, DDRB menandakan Data Direction Register for PORT B ​​0b menginstruksikan compiler mengenai ekspresi biner berikut dari suatu bilangan sedangkan “1” di akhir ekspresi menunjukkan posisi pin0, yaitu lokasinya di form dari pin pertama PORT B.

Jika Anda ingat kita mengetahui bahwa PORT B ​​mengaitkan 8 pin dengannya (dari 0 hingga pin7), dan jika Anda perhatikan kode di atas juga memiliki 8 digit di dalamnya, artinya setiap digit menandakan 8 pin PORT B. ini

Sekarang prosedur selanjutnya adalah menetapkan 5V ke pin ini (pin0). Sekali lagi prinsip operasinya identik dengan DDR seperti yang diungkapkan di atas melalui kode biner berikut:

PORTB = 0b00000001

Seperti yang dapat dilihat, satu-satunya perbedaan antara kode di atas dan yang sebelumnya adalah bahwa dalam kode ini kita telah menggunakan register PORT. Register ini secara khusus menangani penetapan pin dari port tertentu yang diposisikan di dalam MCU. Jadi ini memungkinkan kami untuk menetapkan logika data nyata (0 atau 1) untuk pinout tersebut.

Sekarang kami mungkin tertarik untuk membahas beberapa tentang perkiraan detail program kami. Seperti kita ketahui, semua program membutuhkan ruang tertentu untuk memulai pelaksanaan, ini dapat dibandingkan dengan koki yang mengetahui semua bahan terkait resep tertentu tetapi tidak diinstruksikan dari mana harus memulai.

Fungsi 'utama' di sini adalah lokasi di mana setiap program C / C ++ memulai eksekusi. Oleh karena itu, induk dapat dibuat sebagai:

int utama (kosong)
{
}

Namun untuk mengaktifkan program untuk menafsirkan detail register DDR dan PORT dan fungsinya di dalam chip MCU, pernyataan tambahan perlu disertakan yang mungkin terdiri dari semua data mengenai AVR MCU. Mungkin kami ingin menambahkan penyertaan ini di semua program kami.

#include
int utama (kosong)
{
}

Segera setelah kompilasi dimulai, bagian pra-prosesor dari kompilator berfokus pada direktori AVR untuk mengidentifikasi file 'io.h'. Ekstensi '.h' di sini menunjukkannya sebagai file header, dan kode di dalam file ini akan diperkenalkan di awal (head) file sumber yang sedang dibuat, oleh karena itu dinamai 'header'.

Di sini, kita dapat memperkenalkan pernyataan DDR dan PORT ke dalam kode kita, karena penambahan file header io.h akan mengarahkan kompiler terkait dengannya.

#include

int utama (kosong)

{

DDRB = 0b00000001 // Arah Data Register pengaturan pin0 ke output dan pin yang tersisa sebagai input

PORTB = 0b00000001 // Setel pin0 ke 5 volt

}

Di atas memperbaiki orientasi pin0 sebagai output, memiliki besaran 5V. Namun masih ada satu masalah yang belum ditentukan untuk pin ini, yaitu pin ini belum diinstruksikan untuk DIAKTIFKAN tanpa batas waktu selama MCU dinyalakan. Putaran umpan balik tak terbatas ini akan memastikan bahwa pin dari MCU ini tidak MATI, melainkan berlanjut dengan keluaran 5V tanpa batas.

Meskipun ada banyak metode berbeda dalam menerapkan instruksi loop untuk pin, kami akan mencoba menggunakan loop 'while' di sini. Seperti namanya, loop 'while' memberi tahu mikrokontroler bahwa 'saat' daya tersedia, Anda harus tetap aktif dengan 5V yang ditetapkan untuk pinout yang ditetapkan.

#include

int utama (kosong)

{

DDRB = 0b00000001 // Arah Data Register pengaturan pin0 ke output dan pin yang tersisa sebagai input

PORTB = 0b00000001 // Setel pin0 ke 5 volt

sementara (1)

{

// Kode akan ada di sini jika perlu dieksekusi berulang kali ... tanpa akhir

}

}

Anda mungkin ingin mencatat bahwa, di sini kami telah menggunakan '1' dalam bentuk argumen untuk pengulangan 'while', karena segala sesuatu kecuali '0' dapat dianggap sebagai 'benar' yang logis.

Artinya, pertimbangan loop 'while' tidak akan pernah bertanggung jawab untuk apa pun kecuali logika 'true', yang berarti bahwa pin tertentu akan menempel dengan status yang ditentukan tanpa batas.

LED dapat disaksikan ON di pin yang ditetapkan secara permanen selama MCU menerima daya di Vdd dan Vss-nya.

Itu saja, sekarang kita mendapatkan hasil yang kita inginkan dan akhirnya bisa melihatnya terjadi setelah sekian banyak kerja keras, tapi bagaimanapun juga melihat hasil manis dari kerja keras kita begitu memuaskan.

Dalam tutorial selanjutnya kita akan mempelajari cara menambahkan dimensi 'waktu' ke LED di atas, yaitu cara membuatnya berkedip pada kecepatan tertentu.

Sebenarnya, dalam penerapan di atas, LED sebenarnya berkedip tetapi kecepatan putarannya sangat cepat sehingga hampir seperti tombol AKTIF secara permanen di atas iluminasi LED.

Kita akan melihat bagaimana loop ini dapat ditambahkan dengan penundaan seperti yang diinginkan untuk membuat LED berkedip pada tingkat yang tertunda itu.

Cara Membuat LED Blink Menggunakan Mikrokontroler AVR

Pada pembahasan terakhir kita belajar cara menghidupkan saklar LED melalui mikrokontroler, luar biasa bukan? Mungkin tidak terlalu banyak!

Di sini kita akan belajar bagaimana membumbui iluminasi LED di atas dengan mengaitkan fungsi dua arah, yaitu kita akan mencoba membuatnya berkedip atau berkedip pada frekuensi atau kecepatan tertentu. Kami juga akan melihat bagaimana tarif ini dapat ditingkatkan atau diturunkan sesuai keinginan pengguna.

Mari kita lihat ini:

#include

#include

int utama (kosong)

{

DDRB | = 1<< PINB0

sementara (1)

{

PORTB ^ = 1<< PINB0

_delay_ms (100)

}

}

Jika Anda merasa bingung dengan simbol aneh (&, ^, | dll) yang digunakan dalam ekspresi di atas (& tidak ada tetapi dapat digunakan dalam kode serupa lainnya), berikut adalah informasi terkait yang ingin Anda ketahui tentang ini :

Ini mencakup banyak algoritme logika standar seperti AND, OR, NOT dan XOR yang biasanya digunakan dengan kode di atas.

Fungsionalitas logis ini secara khusus membandingkan dua bit '1' dan '0' menurut tabel kebenaran yang ditetapkan.

Kita akan mendapatkan ide dengan menganalisis pengaturan bit berikut:

01001011 &
10001101
sama
00001001

Dalam kode di atas & mengacu pada AND seperti yang digunakan dalam pemrograman C.

Membaca baris secara vertikal, menunjukkan bahwa 0 dan 1 sama dengan 0, 1 dan 0 juga sama dengan 0, 0 dan 0 sama dengan 0, 1 dan 1 sama dengan 1. Membaca sesederhana itu. Ini sesuai tabel kebenaran dari operator AND.

Jika kita menilai tabel berikut, itu menunjukkan simbol '|' menunjukkan penggunaan fungsi 'ATAU', '|' dapat ditemukan tepat di sebelah kiri 'backspace' di keyboard komputer Anda:

01001011 |
10001101
sama
11001111

Secara identik tabel kebenaran dari fungsionalitas logika OR ini menunjukkan bahwa bit 0 atau 1 sama dengan 1, 1 atau 0 juga sama dengan 1, 0 atau 0 sama dengan 0, sedangkan 1 atau 1 sama dengan 1.

Kombinasi bit berikut adalah untuk operator logika XOR yang dilambangkan dengan ^ dan dapat dipelajari seperti yang kita lakukan dengan tabel kebenaran AND, OR:

01001011 ^
10001101
sama
11000110

Sekarang mari kita lanjutkan dengan program pertama dan pelajari arti baris berikut di dalamnya:

#include

Melalui tutorial kami sebelumnya, kami mengetahui bagaimana ekspresi berfungsi, jadi kami tidak akan mengulanginya, namun tampaknya 'sertakan' baru yang diekspresikan oleh #include yang perlu diselidiki.

Dalam 'sertakan' ini, delay.h memungkinkan kita dengan beberapa metode implementasi yang mudah.

Seperti namanya, delay.h memungkinkan kita untuk menyebabkan penundaan pada program tertentu.

Ekspresi berikutnya int main (void) dapat dihilangkan dari diskusi yang sedang berlangsung karena kita telah membahas ini di posting sebelumnya.

Berikutnya adalah DDRB yang telah diubah.

Berikut ini adalah bentuk sebelumnya yang bukan merupakan cara yang lebih baik untuk menetapkan pin karena semua pin dari 0 hingga 7 dialihkan untuk membentuk input. Tapi bayangkan bagaimana situasinya jika kita ingin membuat program yang lebih panjang yang membutuhkan pin tersebut untuk beberapa fungsi lainnya? Misalnya pin2 mungkin diperlukan untuk menerapkan sakelar jarak jauh pada suatu alat. Dalam hal ini kami tidak akan menghargai menetapkan hal yang sama sebagai masukan hanya melalui trial and error. Itu bisa berarti respons yang salah dari pemancar jarak jauh ke penerima alat.

DDRB = 0b00000001

Kami lebih suka mempengaruhi hanya satu bit, hat pin0 bit, melihat sekilas fungsi 'ATAU' ini dapat dieksekusi melalui masking biner.

DDRB = DDRB | 0b00000001

Di sini terselubung dengan topeng “ATAU”: 0b00000001, meskipun tampaknya merupakan bilangan biner asli, dalam kasus DDRB sebelumnya misalnya: 0b01001010, kemudian menerapkan OR ke ini melalui masking dapat menghasilkan: 0b01001010 | 0b00000001 = 0b01001011.

Perbedaan resultan seperti yang bisa disaksikan hanya dengan pin0, yang bitnya telah berubah!

Mengompresi pernyataan di atas lebih jauh melalui C ++ memberikan:

DDRB | = 0b00000001

Namun kami menemukan bahwa ada lebih banyak program yang diberikan. Meskipun mungkin terlihat cukup sah dan jelas, kami harus memanfaatkan beberapa pernyataan dari file header io.h terutama ketika dibuat secara fundamental untuk kenyamanan kami?

Jadi jika “DDRB | = 1<< PINBO, why it’s like that?

1<< PINBO is implemented for applying the masking effect. The “1” indicates what may be introduced inside the mask, while the < < is simply the left shift functionality. It executes exactly as it’s named, and PINBO is the number of locations that the “1” would sequence across the left hand side. To be precise PINBO may be equivalent of a 0.

Jadi kita mulai dengan 0b00000000, dan menempatkan '1' untuk menghasilkan 0b0000001 dan kemudian kita mentransfernya ke posisi kiri 0, yang memberikan 0b00000001 yang persis sama seperti di atas.

Sekarang, jika seandainya PINB4, pernyataan tersebut dapat dinyatakan sebagai 1<< PINB4. I this case the “1” would be pushed to the left 4 locations producing: 0b00010000.

Hati-hati kami menggunakan indeks nol yang berarti ada empat angka nol setelah '1'.

Sekarang lanjutkan ke loop 'while' yang telah kita catat di 'loop tak terbatas' sebelumnya. Tapi mungkin sekarang kita ingin mikrokontroler mengimplementasikan beberapa eksekusi yang diinginkan. Ini mungkin hanya dapat dilakukan di dalam loop yang diberikan. Ini adalah pengulangan di mana urutan tertentu diulangi lagi dan lagi.

Jika eksekusi akan ditempatkan sebelum loop, itu akan diimplementasikan hanya sekali.

Namun untuk membuat LED berkedip tanpa batas waktu, maka PINB0 harus dinyalakan / dimatikan secara bergantian dalam loop. Di sini kami juga menemukan penundaan yang diberlakukan, yang tanpanya kedipan LED tidak mungkin dilakukan. Tetapi ini akan memaksa LED untuk berkedip dengan kecepatan yang sangat cepat yang sulit dikenali dengan mata telanjang, itu perlu sedikit melambat agar dapat dikenali dengan mata kita.

Kami mengetahui prosedur penyiapan bit tertentu dalam bilangan biner, tetapi tidak yakin metode penerapan bit tertentu '0' jika nilainya '1'.

Program berikut dapat terlihat melakukan ini, tetapi kami juga akan menemukan bahwa program tersebut mungkin tidak terlihat dalam program.

Dua pernyataan awal mengubah bit menjadi '1' (5V, lampu LED), kemudian jeda diperkenalkan selama 100 ms.

Beberapa baris berikutnya mengubah bit PINB0 menjadi '0' (voltase nol, LED mati), tetapi maaf, pembanding AND tidak dapat mengeksekusi '0' dari bit, tetapi jika kita menggunakan TIDAK '~' untuk binary mask, ini bisa mengubah semua 0 menjadi 1 dan sebaliknya.

Ini akan memungkinkan kita untuk mempengaruhi bit PINB0 saja dan mengubahnya menjadi '0'. Tanda kurung disertakan untuk memuat eksekusi masking sehingga operasi NOT dapat diterapkan untuk seluruh mask dan tidak hanya di atas '1' sebelum shift kiri '<<”.

PORTB | = 1<< PINB0
_delay_ms (100)
PORTB & = ~ (1<< PINB0)
_delay_ms (100)

Untuk membuat penundaan ON OFF atau periode dengan durasi yang sama, kami dapat mempersingkat empat baris sebelumnya menjadi dua dan menerapkan fungsionalitas XOR untuk keuntungan kami. Harus dicatat bahwa XOR mengeksekusi pin yang ditetapkan ke 1 jika nilainya 0 dan sebaliknya. Eksekusi ini hanya akan mempengaruhi PINB0. Seperti mungkin kali perintah diterapkan, itu hanya akan mengubah bit menjadi kebalikan dari logika yang ada.

PORTB ^ = 1<< PINB0
_delay_ms (100)

SELESAI! LED Anda akan berkedip sekarang sesuai dengan kecepatan yang ditetapkan…. Sederhana, bukan?




Sepasang: Sirkuit Remote Control Beberapa Peralatan Berikutnya: Rangkaian Indikator Fase AC, Netral, Earth Fault