Daftar Isi:
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
Ini adalah awal dari seri untuk mengajarkan Anda memprogram mikrokontroler AVR Anda dengan Bascom AVR.
Mengapa saya melakukan ini.
Sebagian besar sampel program dalam seri ini dapat Anda buat dengan Arduino.
Beberapa lebih mudah dan beberapa lebih sulit, tetapi pada akhirnya keduanya akan berjalan pada pengontrol yang sama.
Tetapi cara pemrograman berbeda di setiap lingkungan pengembangan. Arduino membutuhkan perpustakaan untuk semuanya kecuali fungsi dasar. Bascom juga bekerja dengan perpustakaan, tetapi saya jarang harus menyertakannya. Dengan Arduino, semua pengaturan khusus perangkat keras dilakukan melalui perpustakaan. Anda memiliki pengaruh yang sangat kecil pada kekuatan sebenarnya dari mikrokontroler. Dimulai dengan pengatur waktu yang dimiliki pengontrol. dengan arduino Anda membutuhkan perpustakaan lagi. jika Anda memiliki timer sampai berfungsi, mungkin perpustakaan lain bertabrakan dengan pengaturan Anda. Di bascom Anda memiliki akses gratis ke perangkat keras lengkap termasuk sektor boot yang ditempati oleh arduino. misalnya, beberapa perpustakaan di bascom menanyakan timer mana yang ingin Anda gunakan. di sisi lain, karena arduino membuatnya sangat mudah untuk membuat perpustakaan sendiri, secara alami membuatnya menjadi platform di mana perangkat keras dan sensor baru biasanya memiliki perpustakaan secara langsung. apa yang sering dikaitkan dengan banyak penelitian di bascom dan fungsi yang biasanya dilakukan oleh perpustakaan harus dengan susah payah dimasukkan ke dalam kode program. tapi kabar baiknya komunitas bascom juga sangat besar itulah sebabnya ada solusi untuk setiap ide.
Jadi itu sebagian tergantung pada proyek apa yang digunakan untuk lingkungan pengembangan dan sebagian pada pengetahuan orang pemrograman.
tapi mengapa saya melakukan seri ini. di satu sisi menghemat banyak uang. Saya tidak perlu membeli papan arduino untuk setiap proyek. Sebagai contoh: Arduino uno noname berharga sekitar 12 €, pengontrol yang ada di dalamnya hanya 2,5 € dengan sirkuit minimum yang diperlukan untuk fungsi yang stabil, biayanya sekitar 4 €. di sisi lain Anda memiliki pilihan lengkap chip avr yang didukung tersedia. atmegas 8 hingga 256 dan attiny 8 hingga 2313 dan banyak jenis xmega yang saya tidak punya pengalaman. Jika Anda hanya ingin menggunakan servo dan sensor ultrasonik yang dapat mengenali tangan, misalnya, dan kemudian membuka tutup tempat sampah, Anda dapat menggunakan chip sekecil mungkin. Jadi ada banyak alasan untuk belajar bahasa kedua.
Jadi mari kita mulai
Perlengkapan
Ini adalah daftar bagian minimum yang diperlukan untuk pengoperasian chip dan pemrograman yang stabil.
Papan tempat memotong roti untuk pengujian
Atmega 8-16PU (lebih baik Anda membeli 2 atau 3 jika Anda tidak sengaja membunuhnya)
7805 pengatur tegangan 5V
Resistor 10Kohm
Kapasitor film 100nF
10µF kapasitor elektrolitik
Kapasitor elektrolit 100µF
beberapa kabel untuk papan tempat memotong roti
Windows PC 7/8/8.1/10
Programmer ISP (saya akan menggunakan USBasp di sini Anda dapat membelinya di amazon dengan sedikit uang)
Bascom AVR (Anda dapat mengunduh DEMO di sini. Semua fungsi tidak terkunci, tetapi Anda hanya dapat menulis kode hingga ukuran 4Kb yang cukup untuk banyak kode).
Bagian opsional:
LED dengan resistor
saklar dorong
bagian khusus proyek
Langkah 1: Instalasi Bascom dan Setup
Unduh file dan instal Bascom AVR. Instal semua bagiannya termasuk kotak centang terakhir setelah menginstal.
Setelah itu reboot PC Anda jika tidak bascom tidak akan mulai.
Setelah reboot mulai bascom.
Buka Opsi -> Programmer dan pilih USBasp dari daftar, simpan pengaturan dan tutup Bascom.
Gunakan Program ini untuk menginstal usbasp. Setelah itu, reboot PC Anda lagi. Sekarang hubungkan USBasp dengan PC Anda dan mulai pengelola perangkat. USBasp akan muncul di perangkat libusb.
Stat Bascom lagi dan buat file baru. Simpan ke komputer Anda dan tekan tombol F7 pada keyboard Anda.
Kompiler memulai dan mengkompilasi program kosong. Sekarang Anda dapat menguji fungsionalitas programmer.
Tekan tombol F4 pada keyboard Anda untuk memulai jendela programmer. Sekarang buka chip -> mengidentifikasi untuk memulai interaksi. LED dari USBasp sekarang akan berkedip singkat. Anda harus mendapatkan pesan seperti chip Id FFFFFF tidak dapat membaca perangkat. Itu pertanda baik bahwa Programmer bekerja tetapi tidak menemukan chip.
Sekarang kita bisa mulai membangun sirkuit pertama.
Langkah 2: Mari Kita Lihat Lebih Dekat pada Chip
Jika dilihat dari pinout chipnya sepertinya chip tersebut tidak memiliki kemiripan dengan board arduino. Tentu, kami menggunakan Atmega8 dan di Arduino uno adalah Atmega328. Tetapi Pinoutnya hampir sama tetapi chip board Arduino Uno memiliki lebih banyak fungsi. Berikut nama-nama pin. VCC dan GND adalah pin untuk catu daya.
AREF dan AVCC adalah pin untuk tegangan referensi dan catu daya untuk konverter analog ke digital.
PB 0-7 PC 0-6 PD 0-7 adalah pin input output tujuan umum dengan beberapa hunian.
reset pin sesuai dengan namanya. Untuk me-restart chip. Baris di atas nama reset berarti negasi. Itu berarti, untuk mereset chip Anda harus menariknya ke 0V.
Untuk pin berikut instruksi terpisah segera hadir.
RXD TXD adalah pin perangkat keras untuk komunikasi serial UART.
INT0 INT1 adalah pin Interupsi Perangkat Keras
XCK /T0 UART Sumber jam / Timer/Counter0 Sumber jam
Pin XTAL /TOSC untuk kristal eksternal hingga 16MHz (model berbeda hingga 20MHz) /Pin kristal untuk RTC internal
T1 mirip dengan T0
Pin AIN adalah untuk komparator analog
ICP1 mirip dengan T0/T1
OC1A adalah pin output perangkat keras untuk pwm timer1 channel A
SS / OC2 chip pilih pin untuk SPI / seperti OC1B tetapi saluran B
MOSI MISO SCK/ OC2 adalah pin SPI perangkat keras dan pin untuk pemrograman / PWM output timer2
ADC0 ke ADC5 adalah input analog
SDA SCL adalah Pin untuk perangkat keras I2C
Chip normal dapat bekerja dari 4, 5V hingga 5, 5V, Atmega 8L dapat bekerja dengan Tegangan yang jauh lebih rendah.
Anda melihat bahkan chip ini dapat melakukan lebih dari yang tampaknya tidak dapat dilakukan oleh Arduino Uno. Tetapi Arduino juga dapat melakukannya, Anda hanya perlu memprogramnya.
Langkah 3: Sirkuit Pertama
Sekarang saatnya untuk membangun sirkuit pertama Anda.
Apa biasanya sirkuit pertama? Benar! Mari kita berkedip LED.
LED terhubung dengan PB0. Resistor di sebelah chip memiliki 10k Ohm.
Resistor di sebelah LED memiliki 470 Ohm.
Sekarang Anda dapat menghubungkan USBasp dengan Atmega seperti yang ditunjukkan pada gambar.
Tetapi sebelum Anda menghidupkan daya, izinkan kami menulis programnya.
Langkah 4: Tulis Program Pertama
Buat file baru di Bascom dan ketik teks berikut.
$regfile "m8def.dat"
$crystal = 1000000 config portb.0 = keluaran lakukan portb.0 = 1 tunggu 1 portb.0 = 0 tunggu 1 loop
setelah itu kompilasi dengan menekan F7 pada keyboard Anda.
Sekarang kita dapat memprogram chip dengan menekan F4. Jendela pemrogram muncul. Sekarang saatnya untuk menyalakan daya dari papan tempat memotong roti. Anda harus menerapkan sesuatu antara 6 dan 12 Volt.
Sekarang pergi ke chip -> program otomatis. Jika jendela programmer menutup secara otomatis pemrograman berhasil.
LED harus berkedip dalam frekuensi satu detik.
Sekarang lihat lebih dekat ke program untuk memahami sintaks.
$regfile "m8def.dat"
$kristal = 1000000
dengan $regfile kami memberi tahu kompiler jenis chip yang digunakan nama chip Arduino akan menjadi "m328pdef.dat"
dengan $crystal kami memberi tahu dia kecepatan cpu sekitar 1MHz.
config portb.0 = Keluaran
itu berarti PB0 harus bertindak sebagai output.
Omong-omong, singkatan PB0 berarti port B bit 0. Chip ini dibagi menjadi beberapa port. Setiap pelabuhan diberikan surat untuk identifikasi yang jelas. dan setiap portpin sedikit dari 0 hingga 7. Sebagai contoh, saya dapat menulis satu byte lengkap ke dalam register keluaran port, yang akan dikeluarkan melalui pin port individual.
melakukan
lingkaran
Inilah yang dimaksud dengan pernyataan void loop di Arduino. Semua di antara dua perintah itu akan berulang selamanya. (dengan beberapa pengecualian tetapi nanti lebih banyak tentang itu)
Portb.0 = 1
tunggu 1 portb.0 = 0 tunggu 1
Di sini kita menghasilkan kedipan led.
Portb.0 = 1 memberitahu chip untuk mengalihkan output PB0 ke 5V
perintah wait 1 biarkan chip menunggu selama satu detik. Jika Anda ingin mengganti led lebih cepat, Anda harus mengganti perintah wait dengan waitms sekarang, Anda dapat memasukkan beberapa waktu sekarang dalam milidetik mis. waitms 500. (waitus berarti menunggu dalam nanodetik)
Portb.0 = 0 memberitahu chip untuk mengalihkan output PB0 ke 0V.
Langkah 5: Tambahkan Tombol untuk Menggunakan Input
Sekarang kita tambahkan tombol untuk menyalakan led jika tombol ditekan.
Masukkan tombol seperti yang ditunjukkan pada gambar.
sekarang ketik program berikut.
$regfile "m8def.dat"
$crystal = 1000000 config portb.0 = output config portd.7 = input Portd.7 = 1 lakukan jika pind.7 = 0 maka portb.0 = 1 else portb.0 = 0 loop
Jika Anda mengunggah program itu ke chip, led hanya menyala ketika tombol ditekan. Tapi kenapa?
program dimulai secara identik seperti yang terakhir sampai
config portd.7 = masukan. Artinya, pin PD7 yang terhubung dengan tombol bertindak sebagai input.
Portd.7 = 1 tidak mengalihkan pin ke high, tetapi mengaktifkan resistor pull up internal Atmega.
Pernyataan if terlihat agak aneh jika Anda terbiasa dengan Arduino.
jika Anda menggunakan pernyataan if Anda harus menggunakan pernyataan "maka". Dalam contoh ini pernyataan if digunakan untuk operasi perintah tunggal. Jika Anda ingin menggunakan lebih banyak perintah, Anda harus menulisnya seperti ini.
jika pind.7=0 maka
portb.0=1 beberapa kode beberapa kode beberapa kode lain portb.0 = 0 end if
untuk penggunaan pernyataan if ini, Anda harus menggunakan pernyataan "end if" di bagian akhir.
apa yang masih penting. Mungkin Anda sudah melihatnya. input tidak ditanyakan dengan portx.x, tetapi dengan pinx.x. Anda dapat dengan mudah mengingatnya. Output memiliki "o" (port) dalam kata dan input memiliki "i" (pin).
Sekarang giliran Anda untuk bermain-main sedikit.
Instruksi saya berikutnya akan segera hadir (pernyataan standar seperti while, pilih case, for, dan variabel.)
Jika Anda menyukai instruksi saya dan ingin lebih banyak, beri tahu saya di komentar.