Asas Mikrokontroler Terokai

Cuba Instrumen Kami Untuk Menghapuskan Masalah





Satu perkara yang baik mengenai IC mikrokontroler, ini terdapat hampir di semua pelosok dunia dan peruncit elektronik.

Pengenalan

Peranti mikrokontroler pada asasnya popular digunakan dalam aplikasi yang melibatkan penilaian persekitaran sekitar dan dalam elektronik yang serupa.



Anda dapat menemui peranti ini digunakan untuk menampilkan parameter tertentu, dalam aplikasi kontrol motor, pencahayaan LED, sensor dari berbagai jenis seperti sensor kemiringan, akselerometer, meter kecepatan, pencatat data, pengatur suhu, papan kekunci dll.

Pemahaman utama mengenai mikrokontroler dapat diperoleh dengan merujuk pada mikrokontroler AVR Amega32 yang sangat maju sehingga kadang-kadang disebut komputer dalam cip.



Peranti ini ditugaskan untuk menjalankan serangkaian perintah untuk membentuk program.

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

Ketika datang ke MCU, Anda mendapat kemudahan untuk memiliki pilihan untuk mengendalikan dan mengkonfigurasi semua pinoutnya.

Sekiranya anda merasa sedikit bosan dengan ini, hanya dengan tenang kerana ia sama sekali tidak rumit, anda akan meredakan semua aspek dengan stabil tetapi tegas ketika kami terus maju.

Dalam cip MCU semua pin kecuali Vdd dan Vss yang merupakan pin kuasa cip, dapat diberikan dengan sebutan eksklusif.

Butiran Pinout

Sekiranya anda melihat cip dari atas, anda akan menjumpai takuk segitiga kecil yang menunjukkan titik permulaan dari mana pinout bermula, ia adalah pin # 1 dari chip bermula tepat di bawah kedudukan ini.

Bermula dari pin ini, anda akan menjumpai 20 pin di bahagian bawah di sebelah kiri (kiri), dan 20 pin di sebelah lain (kanan), terus dari bawah ke atas di sebelah kanan.

8 pin pertama yang bermula dari takik adalah PBO-7 yang membentuk pin indeks IC kerana semua program di sini bermula dengan indeks sifar.

Rangkaian pinout di atas diistilahkan sebagai PORT B, sementara terdapat sekumpulan port serupa yang diberi A ke D.

Port ini dapat ditugaskan untuk menerima dan mengenali data yang diberi makan yang disebut INPUT, dan juga untuk mengirimkan data dalam beberapa bentuk yang disebut OUTPUT.

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

Satu pin dari PORT D (PDO-6) dapat dilihat terletak di sebelah kiri cip di bahagian bawah.

PD7 yang merupakan pin # 7 PORT D dapat dikesan berdiri sendiri dan memulakan siri pinout sebelah kanan.

Sekarang bergerak dari sebelah kanan cip di mana PORT D berakhir, PORT C memulakan kiraannya ke atas mengikut urutan.

Ini menyumbang kepada banyak pin MCU menarik dari analog ke digital.

Pin ini ditampilkan untuk menjadi input penginderaan untuk mengesan banyak parameter melalui tahap litar analog yang dikonfigurasi secara luaran.

Pin di atas merupakan PORT A.

Penukaran analog ke digital di atas pin di atas dapat difahami dengan bantuan contoh di mana tahap suhu analog yang dikesan menggunakan sensor biasa seperti termister diterapkan pada salah satu pin PORT A yang mudah diterima dan ditukar oleh MCU untuk menghasilkan bacaan digital dari sifar hingga 255 darjah F (angka 8-bit yang boleh ditingkatkan untuk mencapai output 10-bit).

Ciri lain yang dapat disaksikan dalam MCU juga adalah ruang pengaturcaraan yang tersedia atau memori yang menentukan ruang untuk pemboleh ubah dan program yang ditentukan untuk mikrokontroler.

Selanjutnya untuk ini, MCU mempunyai jam terpasang yang ditugaskan untuk menghitung parameter yang berkaitan.

Ciri jam membolehkan MCU menerapkannya sendiri untuk berbagai proses penghitungan yang mungkin cepat dalam julat mikrodetik bergantung pada spesifikasi perangkat tertentu, dan juga dapat lebih lambat ke jarak yang diinginkan.

Anda mungkin sudah memahami konsep mikrokontroler hingga ke tahap tertentu dan mengenai port dan pinnya.

Cara Membuat Penyambung SPI dari Pengaturcara ke Pengawal Mikro

Sekarang masanya untuk mendalami subjek ini dan menyelidiki dunia pengaturcaraan.

Oleh itu, sebelum melakukan prosedur memuatkan program ke dalam cip, kita perlu mencari cara yang tepat untuk menyatukan penyambung SPI (Serial Peripheral Interface) dengan MCU.

Tetapi walaupun selepas ini kita tidak boleh memasukkan SPI ke pin MCU, boleh? Kita juga tidak boleh membiarkan wayar yang dipanjangkan dari SPI masuk terus ke papan roti. Ini juga boleh menyebabkan tetapan wayar yang salah disambungkan dengan pin yang tidak betul membuat sambungan yang tidak betul.

Oleh itu, untuk membuat sesuatu benar-benar sempurna, kami melakukan prosedur di atas papan berukuran kecil di mana kami mendapat pin logam penyambung yang diperlukan juga disebut 'header' disolder. Pin header ini kini dapat digunakan untuk menyambung dengan penyambung SPI. Sambungan dari header ini boleh ditamatkan ke pin header selari lain yang mungkin digunakan untuk sambungan papan roti.

Oleh itu, pemasangan di atas kini membentuk platform penyambung antara yang selesa dan boleh dipercayai untuk SPI ke MCU.

Sekarang semuanya kelihatan bagus dan sempurna, jadi mari kita terus menjana pendapatan mengenai pengaturcara yang diperlukan antara PC dan MCU anda.

Mungkin terdapat sebilangan besar syarikat yang membuat dan menjual unit pengaturcara ini, jadi pembelian ini tidak menjadi masalah kepada anda, seperti Adafruit Industries, USBtinyISP atau Sparkfun dll.

Sebilangan daripadanya kelihatan sama sekali berbeza dengan jenis konvensional, tetapi pada dasarnya mempunyai semuanya serupa dan mengikuti peraturan pengaturcaraan standard dan boleh digunakan sebagai antara muka antara PC anda dan mikrokontroler AVR.

Walau bagaimanapun, pastikan anda berfikir, jika anda menggunakan MCU lain dan bukan AVR Atmega32, anda mungkin perlu memeriksa programmer yang sesuai untuk cip MCU tersebut.

Mungkin diperhatikan bahawa sebilangan besar pengaturcara ini menggunakan pemacu yang sama, sesuatu yang mesti dijaga dan kita akan mengetahui lebih lanjut mengenainya di bab-bab berikutnya.

Menyambungkan PC anda dengan cip mikrokontroler adalah asas, dan anda akan senang mengetahui betapa mudahnya proses yang diperlukan untuk ini. Oleh itu, mari tekan butang dengan segera J

Membuat papan antara muka SPI yang dijelaskan di atas tidaklah penting, ini adalah untuk membuat besi pateri anda berfungsi melalui semua sambungan melintasi dua baris pin yang ditunjukkan pada papan tujuan umum kecil.

Gambar di atas menunjukkan perincian sambungan yang perlu anda ikuti semasa menghubungkan kabel antara tajuk.

Untuk menjadikan semuanya lebih mudah, mari kita perhatikan perincian sambungan berikut untuk perkara yang sama dengan merujuk pada gambar di atas:

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

Pin SPI dari kiri kiri menghubungkan dengan pin jam (SCK)

Pin SPI di kiri bawah bergabung dengan Reset. (Kami akan belajar dengan terperinci mengenai pin ini dalam tutorial berikut)

SPI berkaitan dengan kait kanan bawah dengan pin GND MCU, GND merujuk kepada pin yang membentuk garis bekalan sifar atau rel negatif (relatif) bekalan.

SPI yang berakhir dari tajuk kanan tengah menghubungkan dengan pin 'Master Out, Slave IN' (MOSI) MCU.

SPI yang keluar dari header kanan atas disambung dengan (+) MCU yang jelas Vdd atau pin bekalan positif MCU.

Itu sahaja.

Sambungkan dua penyambung seperti yang dijelaskan dan papan antara muka SPI anda sudah siap untuk tindakan yang diperlukan.

Untuk bantuan lebih lanjut, anda boleh melihat gambar yang ditunjukkan di atas, papan antara muka terakhir anda akan kelihatan seperti ini setelah semua sambungan wayar dilakukan dengan betul dengan bantuan perbincangan di atas.

Saya harap anda mungkin telah membina antara muka SPI seperti yang dijelaskan dalam tutorial sebelumnya, dan sekarang saatnya untuk memastikan bahawa komputer kita menerima pengaturcara yang perlu kita gabungkan antara PC dan MCU.

Membuat Kod Pengaturcaraan Ringkas untuk MCU

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

Kami tahu bahawa mana-mana sistem operasi komputer seperti Windows memerlukan pemacu tanpa ada gunanya memuatkan apa pun ke dalam komputer, oleh itu pengaturcara kami memerlukan pemacu untuk memuatkan ke komputer anda.

Mari kita lihat prosedur yang diperlukan untuk memasang pemacu di OS komputer anda, di sini kita mengambil contoh OS Windows 7 dengan spesifikasi 32-bit atau 64-bit.

Buka sparkfun.com dan klik pada 'halaman pengaturcara AVR saku'. Pautan dapat dilihat dengan mudah di dalam halaman.

Seterusnya, cari 'Pemacu Windows' di bawah dokumen dan cukup klik padanya.

Ini akan memberi anda fail pocketprog-driver.zip di komputer anda.

Pergi ke komputer anda, cari lokasi muat turun dan buka zip fail yang dimuat turun ke dalam folder.

Sekiranya komputer anda menggunakan OS 64-bit, anda perlu mengikuti beberapa langkah lagi seperti yang diberikan di bawah, dengan OS 32-bit, anda boleh memulakan pemasangan secara langsung dari fail yang tidak dizip.

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

Google 'libusb sourceforge' dan klik pada pautan versi terbaru ini.

Anda akan menemui beberapa fail tambahan, namun anda berminat untuk mencari fail bib, iaitu: libusb-win32-bin - #. #. #. #. Zip

Sekarang, pergi dan cari lokasi muat turun ini di komputer anda, buka zip dan simpan di salah satu folder.

Ke folder ini, arahkan ke folder tong sampah, terus ke folder amd64.

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

Anda mahu menamakan semula ini sebagai: libusb0_x64.dll dan libusb0_x64.sys.

Sekarang anda perlu menyalin fail di atas ke dalam folder driverproget, hanya menimpa fail pada versi yang ada.

Untuk memasang pemacu di atas, kaedah berikut yang agak tidak konvensional dalam jenisnya akan menarik minat anda:

Ini adalah mod 'tambah perkakasan lama'.

Klik pada 'Menu Mula'

Kemudian teruskan dengan mengklik kanan pada 'komputer'

Klik “Manage”, dan akhirnya klik pada “device manager”

Selanjutnya, di dalam menu, pilih 'Tambah Perkakasan Lama'

Terus tekan 'seterusnya', sehingga penyihir dimasukkan

Ikuti arahannya, klik pada 'Pasang perkakasan yang perlu anda pilih dari senarai Lanjutan' ini akan mendorong ikon butang radio ke pilihan tertentu. Ini sebenarnya butang kawalan tingkap yang sekarang akan kelihatan seperti bulatan kecil yang mempunyai warna biru bulat di dalamnya.

Sekarang klik 'Seterusnya'

Ini akan menunjukkan kepada anda menu 'Show all Devices' yang perlu anda klik.

Selepas ini teruskan klik pada Ikon 'Have Disk'.

Dengan bantuan ikon 'Browse', terus ke lokasi folder driver -propocket. Sekiranya pemilihan anda dilakukan dengan betul, anda akan memvisualisasikan fail pocketprog.inf yang diletakkan di folder tersebut.

Klik dua kali ke atas fail ini dan anda pasti akan menyaksikan pemacu dipasang ke PC anda.

Berkali-kali !! Mari kita teruskan dengan tutorial seterusnya di halaman seterusnya.

Sekarang anda mungkin telah memasang perisian yang diperlukan dan membina antara muka SPI.

Cara Memindahkan Program ke dalam cip Mikrokontroler

Langkah seterusnya akan memerlukan beberapa komponen seperti papan roti, LED dan perintang yang dikira untuk aplikasi yang dimaksudkan.

Di bahagian ini, kita akan mempelajari kaedah ujian pengaturcara dan mengesahkan pemasangan pemacu dan perisian yang berkaitan.

Untuk memastikan sama ada pemacu dan perisian dipasang dengan betul, kami akan melaksanakan program mudah yang dikenali sebagai avrdude.

AVRdude adalah program yang berkaitan dengan pemasangan WinAVR terbaru tanpa pemindahan fail ke MCU yang sebenarnya tidak dapat dilakukan.

Program ini adalah format fail .hex yang pada asasnya dapat difahami oleh MCU untuk pelaksanaan yang diperlukan.

Sekiranya pengesahan tidak berjaya, pengaturcara tidak dapat melakukan pemindahan fail.

Mari kita lihat dengan cepat bagaimana kita dapat melaksanakan prosedur pengujian dengan bantuan arahan berikut:

Buka arahan DOS (Sistem operasi cakera) dengan mengklik 'menu mula' dan ketik cmd.exe di kotak carian yang diberikan.

Sekarang menjalankan AVRdude mungkin dilakukan dengan hanya mengetik avrdude –c usbtiny –p m32 di atas arahan DOS. Sebaik sahaja ini dilaksanakan, DOS akan segera mengetahui sama ada hubungan itu berjaya.

Dalam perintah di atas, '-c' adalah bendera pemberitahuan yang menyertakan spesifikasi parameter pengaturcara 'usbtiny', sementara tag '-p' mengidentifikasi perangkat mikrokontroler ('m32 menunjukkan Atmega32).

Sekiranya anda menggunakan MCU yang berbeza, anda perlu memasukkan awalan yang relevan untuk pelaksanaannya.

Setelah prosedur di atas selesai, anda boleh mengetik 'keluar' di atas arahan DOS, dan itu akan menggerakkan anda keluar dari tingkap.

Sekiranya anda benar-benar tertanya-tanya mengenai perincian pengaturcaraan yang sebenarnya, baik untuk itu kita perlu terlebih dahulu menyolder dan membina litar LED analog luaran di mana program itu dapat dilaksanakan, kerana kecuali jika ada sistem untuk mengakui tindak balas dari MCU, pengaturcaraan dan menjalankan mikrokontroler tidak akan bermakna.

Membuat papan LED sangat mudah, ini adalah mengenai pematerian kedua-dua plumbum LED di atas sekeping papan kenyataan dan sambungkan perintang dengan salah satu plumbum LED. Peranan LED ini hanya untuk menghadkan arus ke LED sehingga tidak terbakar kerana arus iklan voltan berlebihan dari keluaran MCU.

Nilai perintang boleh dikira dengan menggunakan formula mudah berikut:

R = (Ub - LEDfwd) / I

Di mana Ub adalah voltan bekalan, LEDfwd adalah voltan operasi optimum LED yang digunakan, dan saya adalah amp optimumnya.

Andaikan kita menggunakan LED MERAH yang mempunyai voltan maju LED = 2.5V dan arus I = 20mA, persamaan di atas dapat diselesaikan seperti berikut:

Oleh kerana voltan dari MCU adalah 5V, ia boleh dinyatakan sebagai:

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

Sekarang kita mempunyai LED, perintang 120 ohm dan papan kenyataan, hanya hubungkan komponen di atas seperti yang diberikan dalam rajah dengan pengawal mikro.

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

Selanjutnya, pengaturcaraan MCU.

Untuk membolehkan pengawal mikro melakukan beberapa pelaksanaan yang bermakna, adalah mustahak untuk menulis arahan yang sesuai ke dalam MCU.

Cara Memasang Persekitaran Pengaturcaraan dan Menyiasat WinAVR

Untuk ini kita mungkin boleh menggunakan 'editor teks' kita sendiri di PC kita, walaupun mungkin kita lebih menghargai penggunaan 'persekitaran pengaturcaraan' yang lebih profesional dan bukannya penyunting teks biasa, sederhana kerana pendekatan ini akan membolehkan anda menikmati ciri menarik yang terdapat dalam pakej 'persekitaran pengaturcaraan' ini.

Ini akan menyokong membuat dan mengedit program melalui bahasa yang berbeza dan juga menyusunnya ke dalam mod yang dapat disampaikan dengan mudah difahami dan diterima oleh cip mikrokontroler.

Pada akhirnya ini akan disokong oleh WinAVR dan dipindahkan ke cip MCU yang berkenaan.

WinAVR juga dilengkapi untuk melakukan banyak operasi lain seperti menyelesaikan masalah program dan memberi amaran kepada kami mengenai kemungkinan sintaks dan menyusun kesalahan dan kesalahan. Kami akan membincangkan ini mengenai tutorial kami nanti.

Anda mahu kursus pemasangan WinAVR menjadi sangat cepat dan pantas. Mari selami perinciannya dengan perkara berikut:

Anda perlu memuat turun versi terkini dari folder fail palsu sumber WinAVR. Anda akan menemui beberapa maklumat berguna yang berkaitan dengan muat turun ini dari laman web rasminya.

Anda akan diminta mengemukakan pertanyaan keselamatan, sehingga anda dapat menjawab jika anda ingin memuat turun, ini diminta agar fail yang akan diunduh adalah file yang dapat dieksekusi.

Muat turun fail dan mulakan proses pelaksanaan dengan mengklik padanya. Biarkan pemasangan bermula.

Prosesnya akan membimbing anda dengan beberapa pertanyaan yang dapat dijawab sehingga anda dapat mempermudah pemasangan mengikut keselesaan anda. Anda ingin mengabaikan banyak dari bentuk lalai mereka, semuanya bergantung kepada anda untuk memilih yang anda rasa paling sesuai untuk tindakan tersebut.

Sehingga sekarang anda akan mendapati semuanya cukup normal dan mudah dan mencari beberapa pilihan I menu permulaan dilemparkan kepada anda. Jangan khawatir, hanya beberapa yang benar-benar menggunakan salah satu tem bernama “programmer notepad”.

Setelah mengklik ikon ini, akan memulakan antara muka pengguna sehingga anda mungkin dapat menerapkan penulisan program (seperti membuat dan menyunting). Anda juga akan menyaksikan program yang terdiri daripada perintah menu untuk membantu anda menyusun kod dan memasukkannya ke dalam mikrokontroler.

Tugas asas notepad pengaturcara di atas adalah mengubah kod yang boleh dibaca manusia yang akan anda tulis menjadi satu siri arahan yang hanya dapat difahami oleh MCU.

Tutorial seterusnya akan merangkumi pengujian pengaturcara di atas supaya kami dapat memastikan keserasiannya dengan Windows dan sama ada ia 'berjabat tangan' dengan IC mikrokontroler anda dengan sempurna.

Cara Memprogram MCU untuk Menghidupkan LED

Setelah ini disahkan, kami akan terus membuat kod kecil 'tidak melakukan apa-apa', hanya untuk memastikan bahawa prosedur pemindahan kod tidak mengalami kesilapan.

Sudah tentu kita sekarang sudah bersedia untuk melaksanakan program pertama kita di dalam MCU, tetapi sebelum itu akan menarik untuk meringkaskan dengan cepat apa yang telah kita lakukan dalam tutorial sebelumnya:

Kami memperoleh mikrokontroler AVR Atmel mengikut spesifikasi yang diperlukan di sini, kami telah menggunakan ATMega32 untuk ilustrasi. Seterusnya, kami belajar mengenai asas mikrokontroler dan unit pengaturcara yang bertanggungjawab untuk memindahkan program ke dalam cip MCU.

Selanjutnya, kami membina penyambung antara muka SP yang penting agar komputer anda dapat dihubungkan dengan mikrokontroler untuk tindakan pengaturcaraan.

Selepas ini kami mengesahkan sama ada pemacu dipasang dengan betul di komputer untuk sistem 32-bit dan juga sistem operasi 64-bit.

Seterusnya, kami memasang persekitaran pemrograman yang dinamakan Win AVR untuk memudahkan penulisan iklan dengan mudah memindahkan kod ke dalam mikrokontroler, diikuti dengan pelaksanaan avrdude untuk mengesahkan pengaturcara dengan PC Anda dan mikrokontroler saling terhubung.

Akhirnya pada bab sebelumnya kami selesai membina litar LED / perintang dan menghubungkannya dengan output MCU yang berkaitan.

Itu banyak kerja, namun sudah tiba masanya untuk langsung melihat beberapa perkara pengaturcaraan yang sebenar!

Sebagai permulaan, kami ingin membahagikan mikrokontroler kepada tiga kategori yang akan memudahkan pemahaman kami:

Kawalan, Pengesanan, dan Komunikasi

Adalah menarik untuk mengetahui bahawa fungsi di atas dapat diprogramkan dengan berbagai cara.

Dalam program pertama kami, kami akan berusaha memerintahkan mikrokontroler untuk 'mengawal' parameter luaran, ya anda betul, itulah LED yang kami bina baru-baru ini.

Tepatnya, kami akan memberitahu MCU untuk menghidupkan LED yang disambungkan, ya saya tahu ini kelihatan sangat primitif, tetapi fasa permulaan harus selalu mudah.

Melangkah ke hadapan dengan pekerjaan sekarang, menjadikan MCU mengendalikan LED sebenarnya cukup mudah:

Untuk ini kami mengarahkan pin # 0 di PORT B ​​untuk menghasilkan 5V yang diperlukan untuk LED.

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

Terdapat dua perkara penting yang perlu diberi perhatian pada pin MCU ini: 1) output dan 2) 5 volt

Kami akan belajar cara untuk mengarahkan pin tertentu untuk menjadi keluaran MCU.

Setelah ditetapkan sebagai output dari chip, kami dapat memerintahkannya menjadi 'tinggi' (5V) atau 'rendah' (0V) seperti yang diinginkan untuk aplikasi.

Oleh kerana mana-mana rangkaian logik seperti MCU, pin boleh mengalami output atau input dan dapat dikonfigurasikan untuk menghasilkan logik tinggi atau logik rendah, pin hanya perlu ditetapkan sama ada logik tinggi atau logik rendah , tidak ada keadaan perantaraan atau tidak ditentukan selain daripada beberapa keadaan ini untuk mikrokontroler atau untuk IC digital untuk perkara itu. Hal yang sama juga berlaku untuk setiap pin MCU.

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

Walaupun tugasan di atas dapat dilakukan dalam banyak kaedah yang berbeza, kami akan membincangkan salah satu daripadanya demi kesederhanaan. Walau bagaimanapun, perlu diperhatikan bahawa walaupun yang akan dibentangkan sekarang kelihatan mudah dan menarik, ia tidak begitu sesuai dan bukan jenis yang disyorkan untuk semua aplikasi MCU, kerana alasan yang sama anda akan diperkenalkan dengan kaedah pengaturcaraan yang lebih popular di kemudian hari . Program-program ini akan memungkinkan hanya pin yang diinginkan untuk ditugaskan sesuai spesifikasi tanpa mempengaruhi yang bersebelahan lain yang mungkin telah ditetapkan untuk melakukan beberapa fungsi lain.

Walau bagaimanapun, sekarang kami tidak akan terlalu peduli dengan pin yang lain dan hanya akan menggunakan pin yang sesuai, mengelakkan beberapa komplikasi.

Untuk menetapkan pin sebagai output, kita perlu menggunakan Data Direction Register (DDR). Sekiranya anda tertanya-tanya apa maksud daftar di sini, itu hanyalah ruang di MCU yang membolehkan pengawal mikro bertindak balas dengan cara tertentu.

Dengan menggunakan DDR, kita dapat mengatur pin untuk mengirim data seperti 'output', atau menerima data yang berupa 'input'.

Namun, anda mungkin bingung mengenai kata itu, apa maksudnya? Data menambahkan dimensi ketiga pada pin yang mungkin ditugaskan untuk terus menerus pada logik sifar (0V) atau logik tinggi (5V), tetapi bagaimana dengan isyarat yang boleh berubah dengan cepat seperti frekuensi denyutan. Kekerapan akan disertai dengan logik tinggi dan rendah (5V dan 0V) berayun dengan beberapa selang atau jangka masa yang ditentukan, sehingga menjadi berorientasi waktu dan dapat disesuaikan dengan masa, itulah sebabnya kami mengenal pasti sebagai 'data' yang bermaksud parameter yang menunjukkan fungsi relatif dengan fungsi lain (keadaan logik dan masa).

Salah satu kaedah menetapkan pin0 sebagai output adalah dengan menulis kod berikut:

DDRB = 0b00000001

Dalam program di atas, DDRB menandakan Data Direction Register untuk PORT B ​​0b memerintahkan penyusun mengenai ungkapan binari nombor berikut sementara '1' di akhir ungkapan menunjukkan kedudukan pin0, itu adalah lokasi dalam bentuk pin pertama PORT B.

Sekiranya anda ingat, kami mengetahui bahawa PORT B ​​mengaitkan 8 pin dengannya (dari 0 hingga pin7), dan jika anda perhatikan kod di atas juga mempunyai 8 digit di dalamnya, yang bermaksud setiap digit menandakan 8 pin PORT B. ini.

Sekarang prosedur seterusnya adalah menetapkan 5V ke pin ini (pin0). Sekali lagi prinsip operasi serupa dengan DDR seperti yang dinyatakan di atas melalui kod binari berikut:

PORTB = 0b00000001

Seperti yang dapat dilihat, satu-satunya perbezaan antara kod di atas dan yang sebelumnya adalah bahawa dalam kod ini kita telah menggunakan daftar PORT. Daftar ini secara khusus menangani penugasan pin pada port tertentu yang diletakkan di dalam MCU. Oleh itu, ini membolehkan kita menetapkan logik data sebenar (0 atau 1) untuk pinout tersebut.

Sekarang kami mungkin berminat untuk membincangkan beberapa mengenai perincian program kami. Seperti yang kita tahu semua program memerlukan ruang tertentu untuk memulai pelaksanaan, ini dapat dibandingkan dengan seorang koki yang mengetahui semua ramuan mengenai resipi tertentu tetapi tidak diberi petunjuk dari mana untuk memulakan.

Fungsi 'utama' di sini adalah lokasi di mana setiap program C / C ++ memulakan pelaksanaan. Oleh itu utama boleh dibuat sebagai:

int utama (tidak sah)
{
}

Namun untuk membolehkan program menafsirkan perincian daftar DDR dan PORT dan fungsinya di dalam cip MCU, pernyataan tambahan perlu disertakan yang mungkin terdiri dari semua data mengenai AVR MCU. Mungkin kami ingin menambahkan penyertaan ini dalam semua program kami.

#sertakan
int utama (tidak sah)
{
}

Sebaik sahaja kompilasi dimulakan, bahagian pra-pemproses kompilator memfokuskan pada direktori AVR untuk mengenal pasti fail 'io.h'. Ekstensi '.h' di sini menunjukkannya sebagai file header, dan bahawa kod ini di dalam file akan diperkenalkan pada awal (head) file sumber yang sedang dibuat, maka nama 'header'.

Di sini kita dapat memperkenalkan pernyataan DDR dan PORT ke dalam kod kita, kerana penambahan fail tajuk io.h akan mengarahkan pengkompil mengenai mereka.

#sertakan

int utama (tidak sah)

{

DDRB = 0b00000001 // Data Direction Register menetapkan pin0 ke output dan baki pin sebagai input

PORTB = 0b00000001 // Tetapkan pin0 hingga 5 volt

}

Di atas menetapkan orientasi pin0 sebagai output, mempunyai magnitud 5V. Namun masih ada satu masalah yang belum ditentukan untuk pin ini, pin ini masih belum diperintahkan untuk dihidupkan selama-lamanya selagi MCU dihidupkan. Gelung maklum balas yang tidak terhingga ini akan memastikan bahawa pin ini dari MCU tidak MATI, sebaliknya terus dengan output 5V selama-lamanya.

Walaupun terdapat banyak kaedah yang berbeza dalam menerapkan instruksi gelung untuk pin, kami akan mencuba menggunakan gelung 'sementara' di sini. Seperti namanya, gelung “while” memberitahu mikrokontroler bahawa “sementara” daya tersedia, anda perlu tetap diaktifkan dengan 5V yang ditetapkan untuk pinout yang ditetapkan.

#sertakan

int utama (tidak sah)

{

DDRB = 0b00000001 // Data Direction Register menetapkan pin0 ke output dan baki pin sebagai input

PORTB = 0b00000001 // Tetapkan pin0 hingga 5 volt

semasa (1)

{

// Kod akan ada di sini jika perlu dilaksanakan berulang kali ... tanpa henti

}

}

Anda mungkin ingin memperhatikan bahawa, di sini kami telah menggunakan ‘1’ dalam bentuk argumen untuk gelung “while”, kerana semuanya kecuali ‘0’ dapat dianggap logik “benar”.

Ini menyiratkan, pertimbangan gelung “sementara” tidak akan bertanggung jawab atas apa pun kecuali “benar” yang logik, yang bermaksud bahawa pin tertentu akan bersambung dengan keadaan yang ditentukan selama-lamanya.

LED dapat dilihat menyala di pin yang ditetapkan secara kekal selagi MCU menerima kuasa melintasi Vdd dan Vssnya.

Itu saja, sekarang kita mempunyai hasil yang kita ingin dapatkan dan akhirnya dapat melihatnya berlaku setelah sekian banyak kerja keras, namun demikian untuk melihat hasil manis dari kerja keras kita sangat memuaskan.

Dalam tutorial seterusnya, kita akan belajar bagaimana menambahkan dimensi 'waktu' ke LED di atas, yaitu bagaimana membuatnya berkedip pada tingkat tertentu yang ditentukan.

Sebenarnya, dalam pelaksanaan di atas, LED sebenarnya berkedip tetapi kadar gelung sangat cepat sehingga hampir seperti suis kekal ON pada pencahayaan LED.

Kami akan melihat bagaimana gelung ini dapat ditambahkan dengan kelewatan yang diinginkan agar LED berkelip pada kadar yang tertunda.

Cara Membuat Blink LED Menggunakan mikrokontroler AVR

Dalam perbincangan terakhir, kita belajar bagaimana membuat LED suis ON melalui mikrokontroler, itu luar biasa bukan? Mungkin tidak banyak!

Di sini kita akan belajar bagaimana meningkatkan pencahayaan LED di atas dengan mengaitkan fungsi dua arah, iaitu kita akan berusaha menjadikannya berkedip atau berkelip pada frekuensi atau kadar yang ditentukan. Kami juga akan melihat bagaimana kadar ini dapat dinaikkan atau diturunkan seperti yang diinginkan oleh pengguna.

Mari kita perhatikan ini:

#sertakan

#sertakan

int utama (tidak sah)

{

DDRB | = 1<< PINB0

semasa (1)

{

PORTB ^ = 1<< PINB0

_delay_ms (100)

}

}

Sekiranya anda merasa bingung dengan simbol pelik (&, ^, | dll) yang digunakan dalam ungkapan di atas (& tidak ada tetapi boleh digunakan dalam kod lain yang serupa), berikut adalah maklumat berkaitan yang anda ingin ketahui mengenai ini :

Ini merangkumi banyak algoritma logik standard seperti AND, OR, NOT dan XOR yang biasanya digunakan dengan kod di atas.

Fungsi logik ini secara khusus membandingkan dua bit '1' dan '0' mengikut jadual kebenaran yang diberikan.

Kami akan mendapat idea dengan menganalisis susunan bit berikut:

01001011 &
10001101
sama dengan
00001001

Dalam kod di atas & merujuk kepada AND seperti yang digunakan dalam pengaturcaraan C.

Membaca baris secara menegak, ini menunjukkan bahawa 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 semudah itu. Ini adalah berdasarkan jadual kebenaran pengendali DAN.

Sekiranya kita menilai jadual berikut, ini menunjukkan simbol '|' menunjukkan penggunaan fungsi 'ATAU', '|' terdapat di sebelah kiri 'backspace' di papan kekunci komputer anda:

01001011 |
10001101
sama dengan
11001111

Sama seperti jadual kebenaran fungsi logik OR ini menunjukkan bahawa bit 0 atau 1 sama dengan 1, 1 atau 0 juga sama dengan 1, 0 atau 0 sama dengan 0, sementara 1 atau 1 sama dengan 1.

Kombinasi bit berikut adalah untuk pengendali logik XOR yang dilambangkan oleh ^ dan boleh dikaji seperti yang kita lakukan dengan jadual kebenaran AND, ATAU:

01001011 ^
10001101
sama dengan
11000110

Sekarang mari kita teruskan dengan program pertama dan pelajari apa yang ditunjukkan oleh baris berikut:

#sertakan

Melalui tutorial sebelumnya, kami mengetahui bagaimana ekspresi berfungsi, jadi kami tidak akan mengulanginya lagi tetapi nampaknya ini adalah 'memasukkan' baru yang dinyatakan oleh #include yang perlu diselidiki.

Dalam 'sertakan' ini, penundaan.h memungkinkan kita dengan beberapa kaedah pelaksanaan yang mudah.

Seperti namanya kelewatan.h memungkinkan kita untuk menyebabkan kelewatan dalam program tertentu.

Ungkapan int utama (tidak sah) seterusnya boleh dihilangkan dari perbincangan yang sedang berlangsung kerana kita telah membahasnya dalam catatan sebelumnya.

Seterusnya muncul DDRB yang diubah.

Berikut menunjukkan bentuk yang lebih awal yang bukan kaedah yang lebih baik untuk menetapkan pin kerana semua pin dari 0 hingga 7 ditukar untuk membentuk input. Tetapi bayangkan bagaimana keadaannya jika kita ingin membuat program yang lebih panjang yang memerlukan pin tersebut untuk beberapa fungsi lain? Misalnya pin2 mungkin diperlukan untuk menerapkan pengalihan alat jauh. Sekiranya kita tidak menghargai pemberian yang sama sebagai input hanya melalui percubaan dan kesilapan. Itu mungkin bermaksud tindak balas yang salah dari pemancar jarak jauh ke penerima perkakas.

DDRB = 0b00000001

Kami lebih suka mempengaruhi hanya satu bit, topi pin0 bit, melihat fungsi 'ATAU' ini dapat dilaksanakan melalui penyembunyian binari.

DDRB = DDRB | 0b00000001

Di sini ia ditutup dengan topeng 'ATAU': 0b00000001, walaupun nampaknya itu adalah nombor binari yang sahih, sekiranya DDRB sebelumnya misalnya: 0b01001010, kemudian menggunakan OR untuk ini melalui penyamaran dapat memberikan: 0b01001010 | 0b00000001 = 0b01001011.

Perbezaan yang dihasilkan seperti yang dapat disaksikan hanya dengan pin0, yang bitnya telah berubah!

Memampatkan penyataan di atas lebih jauh melalui C ++ memberikan:

DDRB | = 0b00000001

Walau bagaimanapun, kami mendapati bahawa terdapat lebih banyak lagi dalam program yang diberikan. Walaupun kelihatan agak sah dan jelas, kita harus memanfaatkan beberapa pernyataan dari fail tajuk io.h terutama apabila ia dibuat secara asas untuk kemudahan kita?

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.

Oleh itu, kita mulai dengan 0b00000000, dan meletakkan '1' untuk menghasilkan 0b0000001 dan kemudian kita memindahkannya ke 0 posisi kiri, yang memberikan 0b00000001 yang sama persis seperti di atas.

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

Hati-hati kita menggunakan indeks sifar yang bermaksud ada empat nol setelah “1”.

Sekarang melanjutkan ke gelung 'while' yang sebelumnya kami perhatikan di 'loop tak terhingga' sebelumnya. Tetapi mungkin sekarang kita mahu mikrokontroler melaksanakan beberapa pelaksanaan yang diinginkan. Ini mungkin hanya dapat dilaksanakan di dalam gelung yang diberikan. Ia adalah gelung di mana urutan tertentu diulang berulang kali.

Sekiranya pelaksanaan dilakukan sebelum putaran, pelaksanaannya akan dilakukan sekali sahaja.

Walau bagaimanapun, untuk menjadikan LED berkedip selama-lamanya, ia mesti menukar PINB0 secara bergantian ON / OFF dalam gelung. Di sini kita juga mendapati kelewatan diperkenalkan, tanpa itu sekelip mata LED tidak mungkin berlaku. Tetapi ini akan memaksa LED untuk berkedip pada kadar yang sangat cepat dan sukar dikenali dengan mata kasar, ia perlu sedikit perlahan untuk dapat dikenali dengan mata kita.

Kami menyedari prosedur penetapan bit tertentu dalam nombor binari, tetapi tidak pasti kaedah menerapkan bit tertentu '0' sekiranya masih '1'.

Program berikut dapat dilihat melakukan ini tetapi kami juga akan mendapati bahawa program tersebut mungkin tidak dapat dilihat dalam program ini.

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

Beberapa baris seterusnya mengubah bit PINB0 menjadi '0' (voltan sifar, LED dimatikan), tapi maaf perbandingan DAN tidak akan dapat menjalankan '0' dari bit, tetapi jika kita menggunakan TIDAK '~' untuk topeng binari ia boleh menukar semua 0s menjadi 1s dan sebaliknya.

Ini akan membolehkan kita hanya mempengaruhi bit PINB0 dan membalikkannya ke “0”. Tanda kurung dimasukkan untuk memuat pelaksanaan penyamaran sehingga operasi TIDAK dapat diterapkan untuk seluruh topeng dan tidak hanya di atas '1' sebelum pergeseran kiri '<<”.

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

Untuk mewujudkan kelewatan ON OFF atau jangka masa yang sama, kami boleh memotong empat baris sebelumnya menjadi dua dan menggunakan fungsi XOR untuk faedah kami. Ia mesti diperhatikan pada pelaksanaan XOR, pin yang ditetapkan kepada 1 sekiranya 0 dan sebaliknya. Pelaksanaan ini hanya akan mempengaruhi PINB0. Seperti mungkin perintah itu diterapkan, ia hanya akan mengubah bit menjadi kebalikan dari logik yang ada.

PORTB ^ = 1<< PINB0
_delay_ms (100)

SELESAI! LED anda akan berkedip sekarang sesuai dengan kadar yang ditetapkan .... Ringkas, bukan?




Sebelumnya: Litar Kawalan Jauh Pelbagai Peralatan Seterusnya: Litar Penunjuk Fasa AC, Neutral, Bumi