HAMTRONIK || TUTORIAL CvAVR Part 1 "Input Output" I/O



Halo sobat hamtronik,

Kali ini saya akan berbagi cara memprogram microcontroller menggunakan IDE CvAVR.

kita mulai dari yang paling dasar gaes, agar kita paham alur dan cara kerja program yang akan kita  bikin. Target kita nanti bisa bikin project yang bisa diaplikasikan dan bermanfaat di kehidupan kita.

langsung gass.. kita akan memprogram mikro kontroller atmega8, untuk MCU (baca microcontroller) yang lain nanti akan mudah menyesuaikan. Saat ini kita belum membutuhkan atmega8 dalam bentuk fisik, namun cukup dengan simulasi. Jika anda ingin langsung praktek dengan atmega8 fisik malah bagus.

Software yang perlu disiapkan:

1. CvAVR 3.12 (sesuai yang saya gunakan di tutorial ini)

2. Protues 7.9 atau diatasnya


amati gambar berikut fokus pada text di luar kurung dan abaikan yang lainnya.

gb.1 Diagram Port Atmega8

ada 3 grup port IO atmega8 yang bisa kita gunakan yaitu

Port B 8bit dari B0 s.d B7

Port C 7bit dari B0 s.d B6

Port D 8bit dari D0 s.d D7

Supaya lebih mudah memahami kita langsung praktek saja, silahkan bikin file simulasi baru di proteus sperti sekema dibawah ini.

yang belum bisa cara bikin silahkan tonton video disini

gb.2 Skema latihan IO proteus

Selanjutnya kita buka software CvAVR, kemudian buat project baru. ikuti langkah-langkah berikut

klik "File" >> New >> Project

gb.3 Membuat project baru CvAVR

jika tampil peringatan berikut, silahkan klik "No"


Kemudian anda diminta untuk menyimpan project, silahkan pilih folder penyimpanan dan beri nama file "Part1 IO" kemudian tekan "Save"


Selanjutnya akan diminta memilih Jenis MCU yang akan kita program. Silahkan cari Atmega8, dan otomatis kita juga akan dibuatkan sebuah file berexteni dot C. (lingkaran merah) Biarkan begitu saja dan tekan "OK"

gb. 4

Setelah itu akan tampil windows konfigurasi sperti dibawah ini, Klik tab "C Compiler", kemudian ubah clock dari 8,000000 menjadi 1,000000. Karena atmega8 baru sudah diset clock 1Mhz dari pabriknya, jadi sementara kita tidak utak-utik clock di atmega8. Kemudian tekan "OK"

gb. 5


tara... Editor C sudah terbuka dan siap digunakan. Jika anda ingin custom tampilan editor seperti gambar ini bisa klik "Setting" pilih "Editor" kemudian sesuaikan dengan selera anda. Tampilan default bawaan editor ini dengan background putih. Silahakan tutup window yang kiranya tidak digunakan, sehingga tampilan editor menjadi lebih lega seperti dibawah ini.

gb. 6

Selanjutnya edit code, sehingga menjadi seperti gambar gb.7 Jangan sampai ada yang terlewat walaupun hanya titik koma. karena bisa error 

sebelum edit code, kita senggol dulu aturan-aturan penulisan code di CvAVR. Code di CvAVR menggunakan bahasa C yang bersifat case sensitif, artinya huruf besar dan huruf kecil dibaca berberda.

misal menulis "LEBAR" dan "lebar" kedua kata tersebut dinilai berbeda oleh sistem.

Aturan penulisan angka atau bilangan

Ada 3 sistem bilangan yang sering dipakai dalam penulisan code yaitu Biner, Desimal dan Hexadesimal.
  • Penulisan bilangan biner selalu di dahului dengan "0B" contoh 0B10101
  • Penulisan Bilangan Decimal tidak ada tanda apapun, jadi langsung menulis angka tersebut contoh: 231
  • Penulisan bilangan Hexadecimal didahului dengan "0x" contoh 0x1A
Jadi misal ada angka 0xFF berati sama dengan 0B11111111 dan sama dengan 255.


gb.7 latihan IO

PENJELASAN dan ALUR PROGRAM

Baris 1 s.d 5

disebut komentar. diawali denga "/*" dan ditutup dengan tanda "*/" baris ini berfungsi hanya sebagai keterangan saja, jadi tidak ikut diexekusi kompiler. untuk komentar dalam 1 baris saja bisa dengan tanda "//". jadi semua text disebelah kanan simbol diartikan sebagai komentar. contoh pda baris ke 9.

Baris 8 dan 9

digunakan untuk memanggil library.
io.h >> library untuk register atau mendefinisikan IO
delay.h >> library untuk tunda, ada 2 yang sering dipakai: 
delay_us(nilai) : menunda dalam micro second
delay_ms(nilai): menunda dalam mili second 

 

Baris 11
void main(), ini adalah fungsi utama program, Fungsi ini wajib ada. Saat proses kompile sistem akan mencari Fungsi main terlebih dahulu untuk excekusi program. baris baris code akan kita tuliskan didalam fungsi ini, yaitu antara kurung kurawal baris 12 sampai baris 28. Jika ada fungsi-fungsi yang lain nanti akan kita panggil didalam fungsi ini juga.

Baris 13 s.d 18
Baris ini merupakan inisialisasi Port, dimana kita akan setting port-port ini sebagai input atau output.
untuk Memperlakukan Port - Port ini sebagai input atau output kita menggukan register DDRx, dimana x adalah nama portnya ( B, C dan D). Setting input atau output dengan cara memberi Nilai masing-masing bit mulai dari bit ke 7 sampai ke 0. Jika 1 Port sebagai output dan Jika 0 Port sebagai input.

perthatikan baris 13, ada sintax DDRB = 0b00000000;

"0B" (baca nol B) artiya bilangan yang ditulis adalah biner, dan 00000000 ini berarti PB7 s.d PB0 disetting sebagai input.

Baris 14
DDRC = 0B1111111;    berarti PC6 s.d PC0 disetting sebagai output.(lihat gb.1, PC hanya ada 7 bit)

Baris 15
DDRD = 0xff;    "0x" (baca nol x) menandakan bilangan yang ditulis adalah hexa decimal, ff hexa = 11111111 biner. berarti PD7 s.d PD0 disetting sebagai output.

Baris 16
PORTB = 0B11111111; memberikan nili 1 pada port B, karena PB tadi disetting sebagai input maka jika diberi nilai 1 sama dengan memberi resistor pullup ke VCC. jika 0 tidak ada resistor pullup.

Baris 17
PORTC=0;  jika tidak ada tanda "0B" atau "0x" maka nilai tersebut adalah decimal. berarti sama dengan 0B0000000; itu berati memberi output low pada PC6 s.d PC0.

Baris 18
PORTD=0; berarti sama dengan PC, jadi berarti memberi output low PD7 s.d PD0. 



Baris 20
while(1) 
beuntuk umumya adalah
while(value)
{
  ..
}

merupakan sintax perulangan, jadi semua coding yang berada di dalam kurung kurawal (baris 21 dan 27) akan diulang atau looping selama value bernilai benar atau 1.

Baris 22
PORTD = PINB; ingat baris 18? iya ini berarti memberikan nilai output pada PD. dan PINB berarti membaca input dari PB. jadi alurnya adalah membaca input dari PB dan kemudian dikeluarkan melalui PD.

Baris 23
PORTC = 0B1111111; ingat baris 17? iya ini berarti memberi nilai high pada semua PC. sehingga jika kita pasang LED PC ke Ground maka Led akan menyala.

Baris 24
delay_ms(300); artinya memberi delay atau menahan Baris 23 dalam waktu 300 mili second.

Baris 25
PORTC = 0B0000000; berarti memberi nilai low pada semua PC. sehingga jika kita pasang LED PC ke Ground maka Led akan mati.

Baris 26
delay_ms(300); artinya memberi delay atau menunda baris 25 dalam waktu 300 mili second.

Baris 27
} ini penutup dari sintax perulangan while pada baris 20

Baris 28
} ini merupkan penutup dari fungsi "void main()"

jadi program diatas akan mengulang secara terus menerus baris 22 samapai 26

Oke sob, penjelasan program per baris sudah selesai. sekarang saatnya mengkompile code kita untuk menghasilkan file hex. File hex ini yang nantinya bisa kita upload ke MCU atau kita buat simulasi.

Langkah berikutnya tekan menu "project" kemudian pilih "build all"


jika tidak ada eror maka akan tampil seperti gambar berikut, sebelah kiri tidak ada tanda eror merah (kotak orange) dan tampil hasil memori berapa % sudah digunakan. (kotak hijau)



selanjutnya masukkan file hex ke dalam propertis atmega8 di software proteus. kemudian jalankan atau run simulainya. jika masih bingung caranya silahkan tonton vidio disini

amati kondisi nyala LED, mainkan dipswitch pada PB. apa yang terjadi pada LED di PD?

Latihan

1. Modifikasi coding sehingga nyala LED di PC jadi bervariasi atau tidak menyala dan mati bersamaan.
2. Modifikasi coding sehingga PC0 PC1 PC2 menjadi Input dan PC 3 4 5 6 menjadi output. dan tambahkan tombol pada proteus untuk PC 0 1 2.


Sampai disini Part1 selesai, jika ada pertanyaan kita akan bahas dikolom komentar.

Semoga bermanfaat..


video Yotube


Post a Comment

Previous Post Next Post