Lat Mikrkontrooler AVR
Lat Mikrkontrooler AVR
com
1
WWW.ANAKKENDALI.COM 1
www.anakkendali.com
2
Daftar Isi
Daftar Isi...................................................................................................................................................... 2
Ucapan Terimakasih ................................................................................................................................. 4
Jutsu 1 ......................................................................................................................................................... 5
Siap kenal ? ................................................................................................................................................ 5
Apa itu mikrokontroller ? ...................................................................................................................... 5
Jutsu 2 ......................................................................................................................................................... 6
Yuk belajar pemograman !....................................................................................................................... 6
I. Apa itu pemograman komputer ?............................................................................................... 6
II. Bagaimana Bahasa C itu ?........................................................................................................... 7
Jutsu 3 ....................................................................................................................................................... 15
Saatnya kita mencoba!........................................................................................................................... 15
a. Codevisson AVR dan KHAZAMA ............................................................................................. 15
b. Code Wizard CVAVR .................................................................................................................. 18
c. Setting Fuse bit ........................................................................................................................... 19
d. Schematic dan Design Board ....................................................................................................... 21
Jutsu 4 ....................................................................................................................................................... 22
I/O digital!.................................................................................................................................................. 22
A. Program LED Blink ........................................................................................................................ 26
B. Program Runing LED ..................................................................................................................... 29
C. Mengakses Push Button dan LED .................................................................................................. 32
D. Mengakses Seven Segmen .............................................................................................................. 36
E. Mengakses LCD 16x2..................................................................................................................... 39
F. Mengakses Keypad 4x4 .................................................................................................................. 43
Jutsu 5 ....................................................................................................................................................... 51
ADC ............................................................................................................................................................ 51
A. Percobaan dengan Potentiometer .................................................................................................... 52
B. Mengakses Sensor LM35 ................................................................................................................ 55
Jutsu 6 ....................................................................................................................................................... 60
Timer dan Counter .................................................................................................................................. 60
1. Blink dengan Timer (tanpa delay) .................................................................................................. 60
2. Membuat Stopwatch Sederhana ...................................................................................................... 64
WWW.ANAKKENDALI.COM 2
www.anakkendali.com
3
WWW.ANAKKENDALI.COM 3
www.anakkendali.com
4
Ucapan Terimakasih
Alhamdulillahirobbil‘alamin, saya bersyukur kepada Allah SWT yang sampai saat
ini masih diberi kesempatan hidup, nikmat dan hidayahnya sehingga saya masih
dapat menulis E-book latihan Mikrokontroller AVR.
kemudian saya ucapkan banyak terimakasih kepada kedua orang tua, keluarga, dan
Pesantren Al-Ishlah Tajug Indramayu, karena berkat do'a dan dukungan merekalah
saya benar-benar bisa menyelesaikan E-book ini.
Tidak lupa juga untuk teman saya Salsabila Maulidah yang selama ini meluangkan
waktunya untuk mengoreksi pembuatan Ebook Latihan Mikrokontroller AVR
sehingga Ebook ini dapat di selesaikan dengan semestinya. Dan masih banyak lagi
orang orang yang berpengaruh dalam pembuatan Ebook ini dan tidak bisa saya
sebutkan Namanya satu per satu.
Semoga buku ini bisa bermanfaat dan terus mengalirkan manfaat bagi para
pembacanya.
Rasulullah SAW bersabda yang artinya :
“Barang Siapa yang Pelit Akan Ilmu Niscaya Ia akan di-Belenggu Api Neraka”
Untuk itu sekiranya kita selalu berbagi dan terus berbagi, bahkan bukan hanya ilmu
saja, melainkan apa yang kita punya jika bisa dibagikan maka berbagilah kepada
yang lain.
WWW.ANAKKENDALI.COM 4
www.anakkendali.com
5
Jutsu 1
Siap kenal ?
Ketika kita menyukai lawan jenis hal yang harus pertama kita lakukan tentu saja
mencoba untuk mengenali terlebih dahulu, tidak mungkin kita bisa mendapatkan
hatinya tanpa kenal dulu orangnya ?, begitu juga dengan apa yang akan kita pelajari
pada E-Book keren ini, hal yang harus pertama kita lakukan adalah mengenal
tentang MIKORKONTROLLER.
Apa itu mikrokontroller ?
Zaman dimana teknologi sangat canggih saat ini mikrokontroller sangat sering kita
temui dalam kehidupan sehari – hari meskipun banyak dari kita tidak menyadari atau
bahkan tidak mengetahui sama sekali tentang mikrokontroller.
Banyak alat yang berada disekitar kita dengan sistem kerjanya menggunakan alat
yang bernama mikrokontroller misalnya : Televisi, Laptop, AC, Handphone dan lain
sebagainya, jadi bisa dikatakan mikrokontroller adalah sebuah pengendali yang
dapat mengatur bagian anggotanya seperti pada otak manusia yang mengendalikan
secara penuh anggotanya seperti tangan, kaki, mulut dan sebagainya.
Mikrokontroller bisa di aplikasikan pada banyak bidang seperti robotika, otomasi
industri, akuisi data, dan lain – lain.
Keuntungan menggunkan mikrokontroller selain harganya murah juga mudah untuk
di pelajari, karena dengan menggunakan mikrokontroller rangkaian elektronika yang
begitu rumit bisa digantikan dengan hanya memprogramnya, bayangkan jika kita
membuat alat jam digital menggunakan komponen passive tanpa adanya
mikrokontroller. Maka kita akan benar – benar dalam masalah besar.
Mikrokontroller yang akan dibahas pada E-book Keren ini adalah salah satu jenis
Mikrokontroller AVR ( Advanced Versatile RISC atau Alf and Vegard’s Risc
processor ).
Dan untuk praktek pemograman , mikrokontroller yang akan kita gunakan adalah
Atmega16/32/8535. Dan saya tidak akan menuliskan tentang IC tersebut karena
sudah bisa dilihat lebih jelas pada datasheet masing – masing IC.
WWW.ANAKKENDALI.COM 5
www.anakkendali.com
6
Jutsu 2
Yuk belajar pemograman !
I. Apa itu pemograman komputer ?
Program merupakan intruksi yang diberikan kepada komputer untuk melakukan
suatu tindakan tertentu, komputer tanpa program tidak akan pernah bekerja
sedikitpun, semua kegiatan yang kita lakukan sehari – hari di depan laptop atau
handphone kita. Sebenarnya kita melakukan itu semua dengan memberi program
tertentu pada komputer atau handphone. Dari mulai update status di facebook sampai
video call bareng gebetan. Hanya saja karena sudah dibuat sedemikian rupa oleh
developer code/program sehingga kita tinggal melakukan hal-hal sederhana seperti
menekan tombol dan sebagainya.
Bahasa Pemograman dibagi menjadi dua level yaitu :
• Bahasa tingkat rendah (Low Level Language)
Contohnya : Bahasa mesin dan Bahasa assembly
Bahasa dengan tingkat rendah merupakan Bahasa yang hanya memiliki
sedikit kosa kata sehingga sangat susah dimengerti oleh manusia.
Mikrokontroller AVR dapat diprogram degan Bahasa tingkat tinggi maupun rendah,
kita dapat menggunakan AVR studio untuk memprogram dengan Bahasa tingkat
rendah assembly adapun untuk Bahasa tingkat tinggi, kita dapat menggunakan
CVAVR (CodeVission AVR) dengan bahasa C atau BASCOM AVR dengan Bahasa
Basic. Dan pada praktek pemograman di E-Book Keren ini kita menggunakan
CVAVR (CodeVission AVR).
WWW.ANAKKENDALI.COM 6
www.anakkendali.com
7
while(1)
{
if (Input == 0){
PORTA = 0x00; Program utama, dimana program
} akan di eksekusi atau dijalankan
else{ berulang ulang,
PORTB = 0xFF;
}
}
}
WWW.ANAKKENDALI.COM 7
www.anakkendali.com
8
a. Indentifier
Identifier merupakan sebuah nama yang diberikan pada variable, fungsi, atau
yang lainya, misalnya kita akan memberikan nama fungsi baca_sensor maka
kita bisa menuliskan pada prgramnya
Void baca_sensor ()
b. Tipe Data
Berikut adalah table tipe data yang dilengkapi dengan ukuran bit dan daerah
nilai yang dapat ditampung pada tiap tipe data:
Ukuran
Tipe data Range
(Bit)
0,1 (tipe data bit pada Bahasa C adalah Boolean artinya
bit 1
dia hanya memiliki dua nilai yaitu true atau false
char 8 -128 sampai 127
unsigned char 8 0 sampai 255
signed char 8 -128 sampai 127
int 16 -32768 sampai 32767
short int 16 -32768 sampai 32767
unsigned int 16 0 sampai 65535
signed int 16 -32768 sampai 32767
long int 32 -2147483648 sampai 2147483647
unsigned long int 32 0 sampai 4294967295
signed long int 32 -2147483658 sampai 2147483657
float 32 ± 3.4e ± 38 (~7 digits)
WWW.ANAKKENDALI.COM 8
www.anakkendali.com
9
c. Operator
Operator pada pemograman sebenarnya sama saja dengan operator yang kita
pelajari pada ilmu matematika dan berikut adalah daftar table dari operator
pemograman
1. Operator Kondisi
Operator Kondisi Keterangan
< Lebih kecil dari ….
<= Lebih kecil atau sama dengan dari ….
> Lebih besar dari ….
>= Lebih besar atau sama dengan dari ….
== Sama dengan ….
!= Tidak sama dengan ….
2. Operator Aritmatika
Operator Aritmatika Keterangan
+ Penjumlahan
- Pengurangan
* Perkalian
/ Pembagian
% Sisa bagi (modulo)
3. Operator Logika
Operator Logika Keterangan
! Boolean NOT
&& Boolean AND
|| Boolean OR
4. Operator Bitwise
Operator Bitwise Keterangan
~ Komplement Bitwise
& Bitwise AND
| Bitwise OR
^ Bitwise Exclusive
>> Shift ke kanan
<< Shift ke kiri
WWW.ANAKKENDALI.COM 9
www.anakkendali.com
10
5. Operator Assigment
Operator Assigment Keterangan Contoh
= Untuk memasukan nilai A = 10
+= Menambahkan nilai dari nilai sebelumnya A += B A=A+B
-= Mengurangi nilai dari nilai sebelumnya A-=B A=A-B
*= Mengalikan nilai dari nilai sebelumnya A*=B A=A*B
d. Kontrol Percabangan
Pada Bahasa pemograman terdapat perintah percabangan yang berfungsi
untuk melakukan suatu tindakan pada keadaan tertentu.
perintah percabangan pada pemograman juga sangat logis dan selaras dengan
kehidupan kita contohnya seperti keadaan berikut.
Bila kita bertemu anjing lalu ia mengejar, kita pasti akan lari, bila kita lapar
kita harus makan.
Percabangan if … else
pada Bahasa pemograman C kita dapat melakukan sebuah percabangan
dengan menggunkan fungsi dari perintah if …. else contohnya seperti ini :
jika Sensor laser terdeteksi
lampu hijau nyala
jika salah dan keadaan Sensor Inframerah terdeteksi
lampu merah nyala
kita dapat menuliskan program Bahasa C untuk keadaan diatas seperti berikut:
WWW.ANAKKENDALI.COM 10
www.anakkendali.com
11
if (laser == 0){
Led_hijau = 1;}
else if (infrared == 1){
Led_merah = 1;}
{
switch (input_angka)
case 1: led_nyala;
break;
case 0: led_mati;
break;
}
e. Kontrol Perulangan
Perulangan atau juga disebut sebagai lopping adalah dimana kita membuat
program dan program itu dijalankan secara berulang – ulang atau terus
menerus. Ada tiga fungsi perintah looping yaitu, for…, while…, dan
do…while.
for…
untuk pengulangan menggunakan for kita dapat melakukan dua proses yaitu
penambahan atau pengurangan
WWW.ANAKKENDALI.COM 11
www.anakkendali.com
12
while
perulangan pada fungsi perintah while akan di eksekusi bila keadaan nya
true atau benar, jadi selama statement itu benar maka program akan terus
menerus di ulang dan dijalankan contohnya seperti ini, “selama tombol
ditekan maka led akan berkedip dengan pewaktuan 1 detik”
maka apabila tombol itu ditekan akan menghasilkan led yang bekedip secara
terus menerus, dan bisa di hentikan jika kita memiliki kondisi lain, pada kasus
ini tombol tidak ditekan.
Untuk contoh programnya sebagai berikut :
WWW.ANAKKENDALI.COM 12
www.anakkendali.com
13
do….while.
fungsi perulangan selanjutnya adalah do…while, jika pada while terlebih
dahulu melakukan pengujian persyaratan lalu kemudian mengeksekusi
program untuk perulangan tapi pada fungsi do….while kita akan melakukan
perulangan apabila kondisi nya benar. Contohnya seperti ini:
led akan berkedip mengulang terus menerus apabila kondisi hitung kurang
dari 100 contoh programnya seperti berikut:
hitung = 0;
do {
led =1;
delay_ms(100);
led =1;
delay_ms(100);
}
While (hitung <100);
f. Array
Array adalah kumpulan variable yang nama dan tipe datanya sama. Setiap
anggota dari kumpulan variable itu memeiliki nomer yang disebut index, pada
Bahasa C indexnya dimulai dari 0 (nol). Berikut adalah contoh deklarasi
variable yang menggunakan Array
kita bisa memanggil variable itu pada fungsi looping atau program utama
contohnya seperti ini:
PORTB = output[1];
Maka akan sama dengan PORTB=0x01;
WWW.ANAKKENDALI.COM 13
www.anakkendali.com
14
g. Fungsi
Ketika kita membuat program yang besar, fungsi akan sangat membantu
peranannya sehingga kita dapat mempersingkat program yang kita buat,
fungsi juga disebut subrutin yang terpisah untuk melakukan perintah tertentu
yang kemudian bisa dipanggil ke program utama (program loop).
Contohnya kita akan mengakses motor DC yang mana kita membutuhkan satu
Pin untuk keluaran digital dan satu Pin lainya untuk keluaran PWM, jika kita
menggunakan program biasa maka saat kita ingin merubah arah dan
kecepatanya akan sangat merepotkan dan memakan banyak program namun
dengan menggunakan fungsi kita dapat mengatur sehingga program yang kita
buat lebih sedikit dan mudah untuk di edit . Contohnya seperti ini :
PORTD.3=1;
OCR1B = 500;
delay_ms(100):
dari contoh diatas kita perlu merubah logika pada PORTD.3 untuk mengatur
arahnya dan mengatur nilai OCR1B untuk nilai PWM nya, dengan
penggunaan fungsi/subrutin kita bisa memperpendek program itu, contoh
programnya seperti berikut ;
Dengan program diatas kita bisa mengatur arah dan kecepatan hanya dengan
menentukan memanggil fungsi motor pada program utama (loop) dengan
cara seperti ini :
motor(200);
delay_ms(1000);
motor(0);
delay_ms(200);
WWW.ANAKKENDALI.COM 14
www.anakkendali.com
15
Jutsu 3
Saatnya kita mencoba!
a. Codevisson AVR dan KHAZAMA
Banyak aplikasi editor dan compiler yang bisa digunakan untuk memprogram
mikrokontoller AVR salah satunya yaitu Codevission AVR atau biasa disebut
CVAVR, karena di dalam E-book keren ini kita akan belajar memprogram
mikrokontroller ATMEGA menggunakan CVAVR. Selain CVAVR software yang
dibutuhkan untuk memprogram Mikrokontroller AVR yaitu KHZAMA AVR.
Untuk software Codevission AVR bisa didownload disini!
Sedangkan untuk software KHAZAMA AVR nya bisa Donwload disini!
Selanjutnya kita install terlebih dahulu software CVAVR dan KHAZAMA AVR.
Berikut adalah langkah – langkah untuk menginstal CVAVR
WWW.ANAKKENDALI.COM 15
www.anakkendali.com
16
3. selanjutnya tampil jendela serperti ini, centang pada I accept the agreement
kemudian Next !
4. masukan passwordnya dari file pass.txt yang ada di dalam folder Rar
WWW.ANAKKENDALI.COM 16
www.anakkendali.com
17
7. Jangan dibuka dulu aplikasinya, jika terlanjur dibuka tutup kembali, lalu pada
folder Crack pindahkan dua file yang bernama “crack” dan “cvavr2” ke
tempat instalasi, biasanya di directory C kemudian jika sudah di copy silahkan
buka file crack nya lalu pilih yes, dan selsai, sekarang kita bisa menggunakan
software CVAVR nya dengan membuka file cvavr2
Untuk cara install KHAZAMA AVR sama seperti menginstal aplikasi pada
biasanya, tinggal jalankan aplikasinya yang sudah didownload tadi lalu
tunggu sampai proses instalasi berhasil.
WWW.ANAKKENDALI.COM 17
www.anakkendali.com
18
Gambar diatas merupakan tampilan code wizard dimana kita memilih chip jenis
ATMEGA32 dengan Frekuensi clock 16Mhz.
Bisa kita lihat pada gambar tersebut terdapat banyak fitur yang bisa kita gunakan
seperti, I2c, LCD, Timer, ADC dan sebagainya.
Oke cukup itu penjelasan pada Sub bab tentang Software Codevission AVR dan
Khazama AVR, selanjutnya kita akan melangkah untuk memprogram pada
Hardware Mikrokontroller jenis ATMEGA32.
Ingat ! jangan karena E-book keren ini membahas Atmega32 sedangkan yang kita
punya Atmega16/8/328/8535 berangapan bahwa cara memprogramnya berbeda!
Memang karakteristik masing-masing IC berbeda tapi cara memprogramnya sama.
tinggal pengaturanya yang berbeda seperti contohnya. Jika kita mau menggunakan
Atmega16 maka pengaturan Chip pada Code Wizard harus disesuaikan dengan
Atmega16 juga. Untuk itu membaca datasheet sangat diperlukan bagi kita yang
sedang belajar dan bahkan untuk para professional sekalipun.
WWW.ANAKKENDALI.COM 18
www.anakkendali.com
19
WWW.ANAKKENDALI.COM 19
www.anakkendali.com
20
3. kemudian akan tampil jendela seperti gambar diatas, setelah itu klik Read All
4. Aturlah Fuse bit nya seperti pada gambar diatas ini, jangan sampai salah
karena kesalahan mengatur fuse bit menyebabkan IC mikrokontroller tidak
bisa lagi diprogram kemudian silahkan klik Write All
http://www.anakkendali.com/2018/02/cara-mengatur-fuse-bit-dengan-khazama-
avr.html
WWW.ANAKKENDALI.COM 20
www.anakkendali.com
21
WWW.ANAKKENDALI.COM 21
www.anakkendali.com
22
Jutsu 4
I/O digital!
Sebelum kita mencoba membuat program alangkah lebih baiknya kita mempelajari
system bilangan, namun karena ini bukanlah E-book khusus tentang Teknik Digital
atau Sistem bilangan jadi saya hanya akan membahas tiga bilangan saja yaitu :
Biner, Desimal, dan Hexadesimal.
Karena tiga bilangan tersebut yang sering saya gunakan untuk mengakses
mikrokontroller AVR. Baiklah berikut adalah penjelasan masing masing dari system
bilangan tersebut.
1. Biner
Bilangan biner merupakan bilangan Boolean yang hanya memiliki 2 nilai
yaitu 0 dan satu, untuk mengkonversi nilai biner ke bilangan Desimal caranya
seperti berikut :
Missal :
Binernya = 0101 Desimalnya = 5
Cara menghitungnya bisa dilihat angka biner dari yang sebelah kanan, biner
yang paling kanan itu adalah nilai pada bit 0 kemudian selanjutnya nilai pada
bit 1 sebelahnya lagi nilai pada bit 2 dan yang paling kiri nilai pada bit 3 dan
seterusnya jika ada.
WWW.ANAKKENDALI.COM 22
www.anakkendali.com
23
Jadi untuk menghitungnya. empat bit dari bilangan biner mewakili satu
bilangan Hexadesimal. Contohnya seperti ini :
Biner = 11000011
Maka kita bisa memecahnya menjadi dua masing-masing empat bit
{1100} 12 (desimalnya) dan untuk Hexadesimalnya = C
{0011} 3 (desimalnya) dan untuk Hexadesimalnya = 3
2. Desimal
Bilangan desimal merupakan bilangan yang sehari hari kita gunakan, baik
dalam menghitung uang ataupun menghitung matematika. Bilangan desimal
memiliki sebanyak 10 angka dari mulai 0 sampai 9.
Untuk mengkonversikan bilangan Desimal menjadi Biner seperti berikut :
Contoh desimal = 14
14:2 = 7 sisa 0
7:2 = 3 sisa 1
3:2 = 1 sisa 1
1:2 = 0 sisa 1
3. Hexadesimal
Bilangan Hexadesimal Memiliki 15 angka yaitu dari 0 sampai F untuk 10 =A,
11=B, 12=C, 13=D, 14=E, 15=F
Untuk mengkonversi dari Hexadesimal ke Biner yaitu sebagai berikut:
Contoh Hexadesimal = F4
Karena satu nilai Hexadesimal mewakili empat biner maka untuk F = biner
(1111) dan untuk 4 = biner (0100)
Sehingga untuk merubah ke Desimalnya menjadi mudah seperti berikut :
Hexadesimal(F4) = Biner(11110100) = Desimal(244)
WWW.ANAKKENDALI.COM 23
www.anakkendali.com
24
Figure 2 http://www.circuitstoday.com/atmega32-avr-microcontroller-an-introduction
IC ATMEGA32 memiliki empat port yang terdiri dari delapan pin untuk setiap port-
nya dimulai dari 0 sampai 7, ke empat port itu adalah PORTA, PORTB, PORTC dan
PORTD
WWW.ANAKKENDALI.COM 24
www.anakkendali.com
25
Untuk PORTA bisa digunakan sebagai tempat untuk masukan tegangan Analog
yang disebut ADC namun PORTA juga tetap bisa difungsikan sebagai digital.
Berikut adalah penjelasan bagaimana menggunakan port digital pada
mirkokontroller AVR.
Sebelumnya kita sudah mempelajari konversi bilangan tentunya akan membuat kita
memahami materi kali ini,
Pada Mikrokontroller AVR memiliki register DDR yang berfungsi untuk untuk
menginialisasi port, jika register DDR diberikan logika 1 maka port itu akan menjadi
mode OUPUT dan jika DDR itu diberikan logika 0 maka akan menjadikan port itu
mode INPUT. Misalnya kita ingin menjadikan Port C sebagai OUTPUT maka
perintah yang harus diberikan
DDRC = 0xFF;
FF merupakan bilangan hexadecimal yang bila dibinerkan akan menjadi
(1 1 1 1 1 1 1 1) sehingga untuk semua pin pada PORTC akan menjadi mode
OUTPUT.
jika kita memberikan perintah seperti ini
DDRC = 0x00
Maka 00 Hexadesimal jika dibinerkan menjadi ( 0 0 0 0 0 0 0 0) sehingga semua pin
pada PORTC akan menjadi mode INPUT.
Karakter x pada DDRC=0x00 merupakan tanda bahwa bilangan yang kita gunakan
adalah Hexadesimal sedangkan untuk Biner kita menggunakan karakter b contohnya
DDRC = 0b00000000; atau juga
DDRC = 0b11111111;
Lalu bagaimana jika kita ingin menentukan pin tertentu untuk OUTPUT dan INPUT
misalnya pada Port C bit 0 sampai 3 adalah OUTPUT dan 4 sampai 7 adalah INPUT
?
Silahkan cari tau sendiri jawabanya !
Untuk fungsi perintah PORT sendiri digunakan untuk menentukan Keluaran
logikanya apakah 1 atau 0 contoh programnya seperti berikut
PORTC = 0xFF;
WWW.ANAKKENDALI.COM 25
www.anakkendali.com
26
Artinya semua Port C akan mengeluarkan logika 1 dan juga sebaliknya untuk.
Untuk memahami materi IO Digital kita akan melakukan perocbaan pada modul
latihan mikrokontroller Atmega32
• Buka software CVAVR yang sudah terinstal di PC pilih New – Project – Yes
untuk menggunakan CodeWizard
• Atur code wizard Seperti pada gambar dibawah ini :
Figure 4 CodeWizard IO 1
Figure 5 CodeWizard IO 2
WWW.ANAKKENDALI.COM 26
www.anakkendali.com
27
http://www.hpinfotech.com
Project :
Version :
Date : 1/24/2018
Author : Chaerul Anam
Company : Sixty Light
Comments:
#include <mega32.h>
#include <delay.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out
// State7=T State6=T State5=T State4=T State3=1 State2=1 State1=1 State0=1
PORTB=0x0F;
DDRB=0x0F;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
WWW.ANAKKENDALI.COM 27
www.anakkendali.com
28
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
WWW.ANAKKENDALI.COM 28
www.anakkendali.com
29
// USART initialization
// USART disabled
UCSRB=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
while (1)
{
// Place your code here
PORTB=0xF0;
delay_ms(1000);
PORTB=0xFF;
delay_ms(1000);
}
}
Project :
Version :
Date : 1/24/2018
WWW.ANAKKENDALI.COM 29
www.anakkendali.com
30
#include <mega32.h>
#include <delay.h>
// Declare your global variables here
int data = 1;
void main(void)
{
// Declare your local variables here
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x0F;
DDRB=0x0F;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
WWW.ANAKKENDALI.COM 30
www.anakkendali.com
31
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// USART initialization
// USART disabled
WWW.ANAKKENDALI.COM 31
www.anakkendali.com
32
UCSRB=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
data = 0xFF;
delay_ms(10);
while (1)
{
// Place your code here
if (data <0){
data = 0xFF; // kemballikan ke keadaan semula
}
PORTB = data;
data <<=1; // melakukan geser kiri 1 bit
delay_ms(100);
}
}
Project :
Version :
Date : 1/24/2018
Author : Chaerul Anam
Company : Sixty Light
WWW.ANAKKENDALI.COM 32
www.anakkendali.com
33
Comments:
#include <mega32.h>
#include <delay.h>
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out
// State7=T State6=T State5=T State4=T State3=1 State2=1 State1=1 State0=1
PORTB=0xFF;
DDRB=0x0F;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
WWW.ANAKKENDALI.COM 33
www.anakkendali.com
34
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
WWW.ANAKKENDALI.COM 34
www.anakkendali.com
35
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
while (1)
{
// Place your code here
if ((PINB.7==0)&&(a==1)){
delay_ms(10);
PORTB.0 =0;
a=0;
}
else if ((PINB.7==0)&&(a==0)){
delay_ms(10);
PORTB.0=1;
a=1;}
if ((PINB.6==0)&&(b==1)){
delay_ms(10);
PORTB.1 =0;
b=0;
}
else if ((PINB.6==0)&&(b==0)){
delay_ms(10);
PORTB.1=1;
b=1;}
if ((PINB.5==0)&&(c==1)){
delay_ms(10);
PORTB.2 =0;
c=0;
}
else if ((PINB.5==0)&&(c==0)){
delay_ms(10);
PORTB.2=1;
c=1;}
WWW.ANAKKENDALI.COM 35
www.anakkendali.com
36
if ((PINB.4==0)&&(d==1)){
delay_ms(10);
PORTB.3 =0;
d=0;
}
else if ((PINB.4==0)&&(d==0)){
delay_ms(10);
PORTB.3=1;
d=1;}
}
}
Project :
Version :
Date : 1/24/2018
Author : Chaerul Anam
Company : Sixty Light
Comments:
#include <mega32.h>
#include <delay.h>
// Declare your global variables here
WWW.ANAKKENDALI.COM 36
www.anakkendali.com
37
char i[10]={0x88, 0xF9, 0x4C, 0x68, 0x39, 0x2A, 0x0A, 0xF8, 0x08, 0x28};
int j;
void main(void)
{
// Declare your local variables here
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=T State2=1 State1=1 State0=1
PORTC=0xF7;
DDRC=0xF7;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
WWW.ANAKKENDALI.COM 37
www.anakkendali.com
38
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
WWW.ANAKKENDALI.COM 38
www.anakkendali.com
39
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
while (1)
{
// Place your code here
PORTA = 0xBF;
PORTC = i[0];
delay_ms(1);
PORTA = 0xDF;
PORTC = i[1];
delay_ms(1);
PORTA = 0xEF;
PORTC = i[2];
delay_ms(1);
PORTA = 0xF7;
PORTC = i[3];
delay_ms(1);
}
}
WWW.ANAKKENDALI.COM 39
www.anakkendali.com
40
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 1/26/2018
Author : Chaerul Anam
Company : Sixty Light
Comments:
#include <mega32.h>
#include <delay.h>
// Alphanumeric LCD functions
#include <alcd.h>
WWW.ANAKKENDALI.COM 40
www.anakkendali.com
41
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
WWW.ANAKKENDALI.COM 41
www.anakkendali.com
42
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
WWW.ANAKKENDALI.COM 42
www.anakkendali.com
43
while (1)
{
// Place your code here
for (j=1; j>=0; j--){
for (i=16; i>=0; i--){
lcd_clear();
lcd_gotoxy(i,j);
lcd_putsf("www.kendalielektro.com");
delay_ms(1000);
}
}
}
}
http://www.anakkendali.com/2018/02/cara-mengakses-lcd-16x2-cvavr.html
WWW.ANAKKENDALI.COM 43
www.anakkendali.com
44
Project :
Version :
Date : 1/27/2018
Author : Chaerul Anam
Company : Sixty Light
Comments:
#include <mega32.h>
char keypad()
{
PORTB=0xEF;
if (PINB.3 == 0) return ('D');
if (PINB.2 == 0) return ('7');
if (PINB.1 == 0) return ('4');
if (PINB.0 == 0) return ('1');
// ---------------------------
PORTB=0xDF;
if (PINB.3 == 0) return ('*');
if (PINB.2 == 0) return ('8');
if (PINB.1 == 0) return ('5');
WWW.ANAKKENDALI.COM 44
www.anakkendali.com
45
void main(void)
{
// Declare your local variables here
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0xBF;
DDRB=0xF0;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
WWW.ANAKKENDALI.COM 45
www.anakkendali.com
46
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// USART initialization
// USART disabled
WWW.ANAKKENDALI.COM 46
www.anakkendali.com
47
UCSRB=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
while (1)
{
// Place your code here
key = keypad();
if(key == '1')
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf ("Keypad 1");
}
if(key == '2')
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf ("Keypad 2");
}
WWW.ANAKKENDALI.COM 47
www.anakkendali.com
48
if(key == '3')
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf ("Keypad 3");
}
if(key == '4')
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf ("Keypad 4");
}
if(key == '5')
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf ("Keypad 5");
}
if(key == '6')
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf ("Keypad 6");
}
if(key == '7')
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf ("Keypad 7");
}
if(key == '8')
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf ("Keypad 8");
}
if(key == '9')
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf ("Keypad 9");
}
if(key == '0')
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf ("Keypad 0");
}
if(key == '*')
{
WWW.ANAKKENDALI.COM 48
www.anakkendali.com
49
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf ("Keypad *");
}
if(key == '#')
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf ("Keypad #");
}
if(key == 'A')
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf ("Keypad A");
}
if(key == 'B')
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf ("Keypad B");
}
if(key == 'C')
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf ("Keypad C");
}
if(key == 'D')
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf ("Keypad D");
}
}
}
WWW.ANAKKENDALI.COM 49
www.anakkendali.com
50
http://www.anakkendali.com/2018/02/cara-mengakses-keypad-cvavr.html
WWW.ANAKKENDALI.COM 50
www.anakkendali.com
51
Jutsu 5
ADC
ADC (Analog to Digital Converter) merupakan salah satu fitur yang sudah tersedia
pada mikrokontroller Atmega dan terdapat 8 chanel dengan resolusi 10 bit, namun
juga kita dapat mengaturnya menjadi 8 bit. Pada E-BOOK keren ini saya tidak akan
menjelaskan tentang Register yang digunakan untuk mengatur ADC karena kita bisa
membaca lebih detail nya di setiap datasheet IC Atmega-nya.
Namun saya akan menjelaskan bagaimana perhitungan untuk ADC. Sebelumnya
kita ketahui bahwa Tegangan Analog merupakan bagian dari Sinyal Kontinyu yang
pada setiap waktu memiliki potensi untuk nilai yang berbeda, beda dengan Digital
yang hanya mempunyai dua nilai yaitu 0 dan 1 atau HIGH dan LOW.
Untuk contohnya sebagai berikut:
Analog : lampu jalan dapat diatur cahayanya dari mulai mati, redup, agak terang,
terang, dan terang sekali
Digital : lampu merah hanya dapat diatur nyala dan mati secara bergantian dengan
waktu tertentu tanpa peduli terang, redup nya.
Dari penjelasan diatas kita bisa memahami jika diberikan tegangan referensi 5V
maka tegangan analog bisa membaca nila mulai dari 0V sampai 5V secara kontinyu
berturut – turut sedangkan digital hanya bisa membaca 0V atau 5V.
Karena mikrokontroller beroperasi pada system digital maka ketika suatu device
misalkan Sensor menghasilkan keluaran Analog dan akan dimasukan ke
Mikrokontroller maka perlu adanya ADC.
𝑇𝑒𝑔𝑎𝑛𝑔𝑎𝑛 𝑅𝑒𝑓𝑒𝑟𝑒𝑛𝑠𝑖
𝐴𝐷𝐶 =
𝑅𝑒𝑠𝑜𝑙𝑢𝑠𝑖 𝐵𝑖𝑡 − 1
WWW.ANAKKENDALI.COM 51
www.anakkendali.com
52
Jadi untuk kasus di atas kita dapat menyelesaikanya dengan menghitung sebagai
berikut :
4.5
𝐴𝐷𝐶 = 𝑥 1023
5
Project :
Version :
Date : 2/7/2018
Author : Chaerul Anam
Company : Sixty Light
Comments:
#include <mega32.h>
#include <delay.h>
#include <alcd.h>
#include <stdlib.h>
WWW.ANAKKENDALI.COM 52
www.anakkendali.com
53
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
void main(void)
{
// Declare your local variables here
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
WWW.ANAKKENDALI.COM 53
www.anakkendali.com
54
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
WWW.ANAKKENDALI.COM 54
www.anakkendali.com
55
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
while (1)
{
// Place your code here
val = read_adc(0);
WWW.ANAKKENDALI.COM 55
www.anakkendali.com
56
Dari sini kita mencari tau tentang karakteristik sensor LM35, sesuai
datasheet LM35 ketika perubahan 1 derajat maka tegangannya berubah
10mV sehingga :
1 C = 10mV / 4,883mV
1C = 2.0479
Project :
Version :
Date : 2/7/2018
Author : Chaerul Anam
Company : Sixty Light
Comments:
#include <mega32.h>
#include <delay.h>
#include <alcd.h>
#include <stdlib.h>
WWW.ANAKKENDALI.COM 56
www.anakkendali.com
57
void main(void)
{
// Declare your local variables here
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
WWW.ANAKKENDALI.COM 57
www.anakkendali.com
58
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
WWW.ANAKKENDALI.COM 58
www.anakkendali.com
59
// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
while (1)
{
// Place your code here
suhu=read_adc(0x00);
suhu_c=(float)suhu*500/1023;
lcd_gotoxy(0,0);
lcd_putsf("Temperatur: ");
ftoa(suhu_c,3,temp);
lcd_gotoxy(0,1);
lcd_puts(temp);
lcd_gotoxy(8,1);
lcd_putchar(0xDF);
lcd_gotoxy(9,1);
lcd_putsf("C");
delay_ms(200);
}
}
WWW.ANAKKENDALI.COM 59
www.anakkendali.com
60
Jutsu 6
Timer dan Counter
Pada mikrokontroller atmega32/atmega16/atmega8/atmega32 tersedia fungsi untuk
menggunakan timer dan counter, biasanya counter digunakan untuk pencacahan, dan
timer untuk pewaktuan, pada modul latihan mikrokontroller ini kita menggunkanan
crystal dengan frequensi clock sebesar 16Mhz. Sehingga kita dapat menggunakan
pewaktuan sampai 16 juta per detik setiap melakukan intruksi program.
Karena menggunakan clock eksternal sehingga kita perlu melakukan pengaturan
fusebit yang sudah dijelaskan pada bab di atas, saya tidak akan menjelaskan setiap
register dari timer/counter karena kita bisa langsung membacanya di setiap datasheet
IC Atmega.
pada timer0 karena 8bit nilai maksimumnya 256 sedangkan untuk timer1 16 bit
jadi maksimalnya 65535
contoh jika kita ingin waktu 1 detik dengan menggunakan timer 16 bit dengan
frekuensi clock 16.000.000 Hz dan prescaler 1024 maka
TCNT = (1+FFFFh)-(1 * 16000000)/1024
TCNT = 65535 - 15625
TCNT = C2F6
WWW.ANAKKENDALI.COM 60
www.anakkendali.com
61
Project :
Version :
Date : 2/20/2018
Author : Chaerul Anam
Company : Sixty Light
Comments:
#include <mega32.h>
bit tim;
// Timer1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer1 value
TCNT1H=0xC2;
TCNT1L=0xF7;
// Place your code here
if (tim == 1)
{
PORTB.1 = 1;
WWW.ANAKKENDALI.COM 61
www.anakkendali.com
62
tim=0;
}else
if (tim == 0)
{
PORTB.1 = 0;
tim=1;
}
}
void main(void)
{
// Declare your local variables here
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x02;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
WWW.ANAKKENDALI.COM 62
www.anakkendali.com
63
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
WWW.ANAKKENDALI.COM 63
www.anakkendali.com
64
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
}
}
WWW.ANAKKENDALI.COM 64
www.anakkendali.com
65
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 2/20/2018
Author : Chaerul Anam
Company : Sixty Light
Comments:
#include <mega32.h>
#include <stdio.h>
// Alphanumeric LCD functions
#include <alcd.h>
#include <delay.h>
unsigned char index=0, count, detik=0, menit=0, jam=0;
char buff [16];
WWW.ANAKKENDALI.COM 65
www.anakkendali.com
66
void waktu(){
if (count>100)
{
detik++;
count=0;
}
if (detik>=60)
{
menit++;
detik=0;
if(menit>=60)
{
jam++;
menit=0;
}
}
void tombol()
{
waktu();
if ((PINB.7 == 1)&& (PINB.6==1)&&(PINB.5==1)&& (index==0)){
TIMSK=0x00;
count=0;
detik=0;
menit=0;
jam=0;
}
if (PINB.7 == 0 && (index==0 || index == 2))
{
index=1;
TIMSK=0x01;
}
WWW.ANAKKENDALI.COM 66
www.anakkendali.com
67
void tampil_lcd()
{
tombol();
lcd_clear();
lcd_gotoxy(0,0);
sprintf(buff,"Timer %d:%d:%d:%d", jam,menit,detik,count);
lcd_puts(buff);
if (index == 0)
{
lcd_gotoxy(0,1);
lcd_putsf("START RESET");
}
if (index == 1)
{
lcd_gotoxy(0,1);
lcd_putsf("START");
}
if (index == 2)
{
lcd_gotoxy(0,1);
lcd_putsf("STOP");
}
}
void main(void)
{
// Declare your local variables here
WWW.ANAKKENDALI.COM 67
www.anakkendali.com
68
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x07;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 16000.000 kHz
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x01;
TCNT0=0x8A;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
WWW.ANAKKENDALI.COM 68
www.anakkendali.com
69
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
WWW.ANAKKENDALI.COM 69
www.anakkendali.com
70
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 16
lcd_init(16);
while (1)
{
// Place your code here
tampil_lcd();
}
}
3. Mengakses Motor DC
mengakses motor DC membutuhkan fungsi PWM untuk menentukan
kecepatan motor dan fungsi IO digital untuk mengatur arahnya. PWM salah
satu dari fungsi Timer, pada rangkaian modul latihan mikrokontroller ini
menggunakan timer1 yang memiliki 2 register OCR pada PORTD.4 dan
PORTD.5 sehingga dapat digunakan untuk dua buah motor DC.
Berikut adalah program untuk mengakses motor DC
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 2/20/2018
Author : Chaerul Anam
Company : Sixty Light
Comments:
WWW.ANAKKENDALI.COM 70
www.anakkendali.com
71
#include <mega32.h>
void main(void)
{
// Declare your local variables here
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=Out Func5=Out Func4=Out Func3=Out Func2=In Func1=In Func0=In
// State7=T State6=0 State5=0 State4=0 State3=0 State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x78;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 16000.000 kHz
// Mode: Fast PWM top=0x00FF
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
WWW.ANAKKENDALI.COM 71
www.anakkendali.com
72
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
WWW.ANAKKENDALI.COM 72
www.anakkendali.com
73
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
while (1)
{
// Place your code here
// motor A
PORTD.3 = 0;
OCR1A = 255; // rubah dari 0-5
//motor B
PORTD.6 = 0;
OCR1B = 255; // rubah dari 0 - 5
}
}
WWW.ANAKKENDALI.COM 73
www.anakkendali.com
74
Jutsu 7
USART
USART atau lebih dikenal dengan komunikasi serial berfungsi untuk melakukan
interaksi dari satu device ke device yang lain misalnya Komputer ke Komputer,
Mikrokontroller ke Komputer, Mikrokontroller ke Mikrokontroller dan sebagainya.
Pada modul latihan mikrokontroller AVR ini menggunakan IC Atmega 32 yang
memiliki fungsi USART dengan pin TX sebagai pengirim dan RX sebagai penerima
yang terdapat pada PORTD.0 dan PORTD.1
Pada Ebook keren latihan Mikrokontroller tidak menjelaskan setiap register USART
pada IC Atmega karena sudah tersedia di setiap masing-masing datasheet IC
mikrokontroller nya.
Kemudian kita akan mencoba untuk komunikasi serial dengan cara menghubungkan
mikrokontroller dengan modul Bluetooth.
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
WWW.ANAKKENDALI.COM 74
www.anakkendali.com
75
Version :
Date : 2/22/2018
Author : Chaerul Anam
Company : Sixty Light
Comments:
#include <mega32.h>
void main(void)
{
// Declare your local variables here
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
WWW.ANAKKENDALI.COM 75
www.anakkendali.com
76
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
WWW.ANAKKENDALI.COM 76
www.anakkendali.com
77
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x67;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
WWW.ANAKKENDALI.COM 77
www.anakkendali.com
78
while (1)
{
// Place your code here
data = getchar();
lcd_clear();
sprintf(buff, "%3c",data);
lcd_gotoxy(0,0);
lcd_puts(buff);
delay_ms(100);
}
}
Project :
Version :
Date : 2/22/2018
Author : Chaerul Anam
Company : Sixty Light
Comments:
#include <mega32.h>
WWW.ANAKKENDALI.COM 78
www.anakkendali.com
79
void main(void)
{
// Declare your local variables here
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x0F;
DDRB=0x0F;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
WWW.ANAKKENDALI.COM 79
www.anakkendali.com
80
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x67;
WWW.ANAKKENDALI.COM 80
www.anakkendali.com
81
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
while (1)
{
// Place your code here
data = getchar();
if (data == '1'){
PORTB.0 =0;
}
else if (data == '2'){
PORTB.1=0;
}
else if (data == '3'){
PORTB.2=0;
}
else if (data == '4'){
PORTB.3=0;
}
else {
PORTB=0xFF;
}
}
}
WWW.ANAKKENDALI.COM 81
www.anakkendali.com
82
WWW.ANAKKENDALI.COM 82
www.anakkendali.com
83
Jutsu 8
Bonus Project Sederhana
1. Mengakses Sensor DHT 11
Sensor DHT 11 merupakan sensor yang sering digunakan untuk mengukur
suhu dan kelembaban, keluaran dari sensor ini berupa sinyal digital.
Berikut adalah program untuk mengakses Sensor DHT11
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 2/6/2018
Author : Chaerul Anam
Company : Sixty Light
Comments:
#include <mega32.h>
#include <delay.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
// Alphanumeric LCD functions
#include <alcd.h>
WWW.ANAKKENDALI.COM 83
www.anakkendali.com
84
void Resp()
{
DDRA &= ~(1<<PIN_DHT11);
while(PINA & (1<<PIN_DHT11));
while((PINA & (1<<PIN_DHT11))==0);
while(PINA & (1<<PIN_DHT11));
}
uint8_t receive_data()
{
for (i=0; i<8; i++){
while ((PINA & (1<<PIN_DHT11))== 0);
delay_us(30);
if (PINA & (1<<PIN_DHT11))
c=(c<<1)|(0x01);
else
c=(c<<1);
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
WWW.ANAKKENDALI.COM 84
www.anakkendali.com
85
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
WWW.ANAKKENDALI.COM 85
www.anakkendali.com
86
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
lcd_init(16);
while (1)
{
// Place your code here
Req();
Resp();
WWW.ANAKKENDALI.COM 86
www.anakkendali.com
87
I_RH = receive_data();
D_RH=receive_data();
I_TEMP=receive_data();
D_TEMP=receive_data();
CheckSum =receive_data();
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("Humidity : ");
lcd_gotoxy(0,1);
lcd_putsf("Temp : ");
else {
itoa(I_RH,buff);
lcd_gotoxy(11,0);
lcd_puts(buff);
lcd_putsf(".");
itoa(D_RH,buff);
lcd_puts(buff);
lcd_putsf("%");
itoa(I_TEMP,buff);
lcd_gotoxy(6,1);
lcd_puts(buff);
lcd_putsf(".");
itoa(D_TEMP,buff);
lcd_puts(buff);
lcd_putchar(0xDF);
lcd_putsf("C ");
itoa(CheckSum,buff);
lcd_puts(buff);
lcd_putsf(" ");
}
delay_ms(1000);
}
}
WWW.ANAKKENDALI.COM 87
www.anakkendali.com
88
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 2/23/2018
Author : Chaerul Anam
Company : Sixty Light
Comments:
#include <mega32.h>
#include <delay.h>
// Declare your global variables here
void _90_derajat(){
PORTA.0 = 1;
delay_us(1500);
PORTA.0 = 0;
WWW.ANAKKENDALI.COM 88
www.anakkendali.com
89
delay_ms(20);
}
void _0_derajat(){
PORTA.0 = 1;
delay_us(500);
PORTA.0 = 0;
delay_ms(20);
}
void _180_derajat(){
PORTA.0 = 1;
delay_us(3000);
PORTA.0 = 0;
delay_ms(20);
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=0
PORTA=0x00;
DDRA=0x01;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
WWW.ANAKKENDALI.COM 89
www.anakkendali.com
90
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
WWW.ANAKKENDALI.COM 90
www.anakkendali.com
91
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
while (1)
{
// Place your code here
if (PINB.7 == 0){
_180_derajat();
}
else if (PINB.6 == 0){
_90_derajat();
}
else if (PINB.5 == 0){
_0_derajat();
}
}
}
3. Membuat Jam Digital Sederhana
Berikut adalah program untuk membuat jam digital sederhana menggunakan
timer
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 1/12/2018
Author : Chaerul Anam
Company : Sixty Light
Comments:
WWW.ANAKKENDALI.COM 91
www.anakkendali.com
92
#include <mega16.h>
if (++detik == 60){
detik=0;
lcd_clear();
if (++menit == 60){
menit=0;
lcd_clear();
if (++jam == 24){
jam = 0;
lcd_clear();
}
}
}
hitung=0;
itoa(detik,tdetik); // integer to ascii
itoa(menit,tmenit);
itoa(jam,tjam);
lcd_gotoxy(9,0);
lcd_putsf (":");
lcd_gotoxy(10,0);
lcd_puts(tdetik);
lcd_gotoxy(6,0);
WWW.ANAKKENDALI.COM 92
www.anakkendali.com
93
lcd_putsf(":");
lcd_gotoxy(7,0);
lcd_puts(tmenit);
lcd_gotoxy(4,0);
lcd_puts(tjam);
lcd_gotoxy(0,1);
lcd_putsf("= Jam Digital =");
}
}
void main(void)
{
// Declare your local variables here
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
WWW.ANAKKENDALI.COM 93
www.anakkendali.com
94
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 2000.000 kHz
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x02;
TCNT2=0x00;
OCR2=0x96;
// USART initialization
// USART disabled
UCSRB=0x00;
WWW.ANAKKENDALI.COM 94
www.anakkendali.com
95
ACSR=0x00;
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
while (1)
{
// Place your code here
};
}
WWW.ANAKKENDALI.COM 95
www.anakkendali.com
96
Jutsu 9
Referensi
WWW.ANAKKENDALI.COM 96
www.anakkendali.com
97
Tentang Penulis
Chaerul Anam adalah nama berharga yang diberikan Seorang kakek tepat pada
tanggal 1 Desember 1996 di sebuah desa terpencil bagian Indramayu Selatan, sejak
kecil hidup saya sudah jauh dari kedua orang tua karena harus menjalani kehidupan
di Pondok Pesantren Al-Ishlah Tajug Indramayu untuk menimba ilmu selama 6
tahun atau setara dengan tingkat SMP dan SMA. setelah tamat dari pondok pesantren
saya melanjutkan studi ke jenjang perguruan tinggi swasta Universitas Islam
Indonesia Yogyakarta mengambil Jurusan Teknik Elektro. Alasan saya menulis
Ebook ini karena ada Pepatah mengatakan :
WWW.ANAKKENDALI.COM 97