Saturday 25 June 2016

Antarmuka Mikrokontroller dengan Toggle Switch

     Saklar toggle adalah salah satu saklar elektrik yang digerakkan secara manual oleh batang mekanik. Saklar toggle tersedia dalam berbagai bentuk dan ukuran, serta digunakan dalam berbagai aplikasi. Gambar dibawah memperlihatkan bentuk fisik dan symbol saklar toggle.


     Rangkaian I/O yang dipakai dalam praktikum, dibutuhkan komponen input yaitu saklar toggle dan LED sebagai komponen output serta Atmega16 sebagai IC pemrosesnya. Untuk rangkaian seperti dibawah ini :

     Seperti pada rangkaian diatas, pada PORTC kita gunakan sebagai INPUT (saklar) dan PORTA sebagai OUTPUT (LED). Soal pertama adalah meng-ON-kan dan meng-OFF-kan seluruh led pada PORTA dengan saklar satu (PINC.0). Maka programnya seperti dibawah ini :

#include <mega16.h>
void main(){
    PORTA=0x00;
    DDRA=0xff; //PORTA sebagai output, 0b11111111, nilai awal 0
    PORTC=0xff;
    DDRC=0x00; //PORTC sebagai input, 0b00000000, pull up     
while(1){
   if(PINC.0==1){  //jika saklar 1 berlogika HIGH, LED nyala
   PORTA=0xff;
   }
   else{          //jika saklar 1 diluar kondisi (selain HIGH), LED mati
   PORTA=0x00;
   }
}
}

dan hasilnya :

Tugas :
1.      Buat program untuk masing–masing algoritma berikut dengan menggunakan if :
a)      Jika switch bit 0 berlogika 1 maka LED bit 4 menyala.
b)      Jika switch bit 1 berlogika 1 maka LED bit 7 menyala.
2.      Buat satu program untuk masing–masing algoritma berikut dengan menggu­na­kan if-else.
a)      Jika switch bit 0 berlogika 1 maka LED bit 4 menyala.
b)      Jika switch bit 1 berlogika 1 maka LED bit 7 menyala.
c)       Jika switch bit 2 berlogika 1 maka LED menyala dengan konfigurasi
ON-OFF-ON-OFF-ON-OFF-ON-OFF (bit7-bit0).
d)      Jika switch bit 3 berlogika 1 maka LED menyala dengan konfigurasi
OFF-ON-OFF-ON-OFF-ON-OFF-ON (bit7-bit0).
e)      Jika switch bit 4 berlogika 1 maka LED menyala semua.
f)        JIka switch bit 5 berlogika 1 maka LED mati semua.

g)      Jika switch bit 6 berlogika 1 maka LED menyala berurutan mulai dari bit0 ke bit7 lalu kembali lagi ke bit0 dengan delay 1 detik

     Nah cukup sekian penjelasan Interface Atmega16 dengan Saklar. Ditunggu kritik dan sarannya dari pengunjung agar menjadi lebih baik lagi untuk kedepannya.
Perbanyaknya uji coba dirumah dengan programmu sendiri dan cari troubleshooting dalam memprogram, karena semua itu adalah pelajaran bagi kita.





Dasar Pemrograman C++ Pada Arduino

Dasar Pemrograman C++ Pada Arduino
Pembahasan:
● Struktur Dasar Pemrograman pada Arduino
● Komentar
● Identifier
● Konstanta
● Variabel
○ Tipe Data
○ Variabel Global
○ Variabel Lokal
● Operator
● Percabangan
● Pengulangan

Dasar Pemrograman C++  Pada Arduino
Target:
● Memahami dasar-dasar pemrograman pada Arduino
● Memahami dasar-dasar pemrograman C++
● Dapat menggunakan percabangan, pengulangan pada bahasa pemrograman C++

Pendahuluan
● Pada bagian ini akan dijelaskan mengenai dasar-dasar pemrograman
Arduino (C++)
● Untuk mempelajari bahasa pemogramaan C++ dapat mengunjungi
link berikut 
http://www.cplusplus.com/files/tutorial.pdf

Struktur Dasar
● Pemrograman pada Arduino selalu dilakukan dengan menyertakan
dua fungsi utama yaitu void setup() dan void loop()
fungsi utama pada pemrograman Arduino
void setup() {
}
void loop() {
}

Struktur Dasar (cont’d)
● Kedua fungsi yang disebutkan sebelumnya harus disertakan pada
saat pemrograman, meskipun di dalam fungsi tidak terdapat kode
program untuk dieksekusi
● Apabila tidak disertakan, maka akan terjadi error pada saat proses
compile (penerjemahan kode program ke bahasa mesin) program

Komentar
● Fitur bahasa pemograman yang dapat digunakan untuk membuat
dokumentasi pada kode program yang dibuat
Contoh penulisan komentar
Cara 1
//Kalimat ini adalah komentar
Cara 2
/*
Kalimat ini
adalah
komentar
*/

Identifier
● Identifier digunakan sebagai pengenal/identitas dari variabel,
konstanta, fungsi, structure, maupun class agar compiler dapat
membedakan antara satu dengan yang lainnya
Contoh penggunaan identifier
#define A 5
long 
B = 2;
void 
setup() {
Serial.begin(9600);
}
void 
loop() {
}

Identifier (cont’d)
● Pada contoh sebelumnya, dua buah identifier yaitu setup dan loop
digunakan sebagai nama fungsi, sedangkan dua buah identifier
lainnya digunakan sebagai nama konstanta (A) dan nama variabel (B)
● Aturan penulisan identifier pada bahasa C/C++ adalah sebagai
berikut:
○ Bersifat case sensitive, A dan a dianggap berbeda
○ Tidak dapat diawali dengan karakter angka
○ Tidak dapat menggunakan karakter space
○ Tidak dapat menggunakan karakter simbol (#, @, ?, !, $, %, &, *, dll.)
○ Tidak dapat mengguakan kata kunci yang telah digunakan oleh C/C++
ataupun oleh Arduino IDE
○ Hindari penggunaan nama identifier yang sama dengan nama identifier
yang sebelumnya telah digunakan

Konstanta
● Konstanta digunakan untuk menyimpan nilai tetap yang nantinya tidak
dapat diubah pada saat program dieksekusi
● Salah satu kegunaannya adalah untuk menentukan nilai yang bersifat
tetapan seperti nilai pi (Ṑ), kecepatan suara, batas pembacaan nilai
sensor (sebagai contoh panas didefinisikan dengan nilai 55), batas
pengulangan, dll.
● Konstanta dapat dibuat dengan dua cara, yaitu menggunakan
preprocessor directive #define ataupun menggunakan kata kunci
const

Konstanta (cont’d)
Contoh penggunaan preprocessor directive #define
#define MOTOR 5
void setup() {
pinMode(MOTOR, OUTPUT);
}
void loop() {
digitalWrite(MOTOR, HIGH);
}

● Contoh penggunaan #define adalah seperti di bawah
Apabila terdapat revisi pada rangkaian hardware, yaitu pin yang digunakan untuk
menggendalikan motor bukan lagi pin 5, kita hanya perlu mengubah nilai dari baris
konstanta MOTOR.
Konstanta (cont’d)
● Contoh penggunaan const adalah seperti di bawah
Contoh penggunaan kata kunci const
const byte MAX = 5 ;
void setup() {
Serial.begin(9600);
}
void loop() {
for(unsigned char i = MAX; i > 0; i--)
Serial.print("hello");
}

Apabila terdapat revisi pada program, yaitu jumlah pengulangan yang dilakukan bukan
lagi 5 kali, kita hanya perlu mengubah nilai dari baris konstanta MAX.

Variabel
● Variabel merupakan sebuah lokasi pada memori yang digunakan
untuk penyimpanan data/nilai yang dapat diubah
● Variabel dibedakan berdasarkan ruang lingkupnya, yaitu global atau
lokal
Contoh proses deklarasi variabel
//cara 1
tipe_data identifier;
//cara 2
tipe_data identifier = nilai;
//cara 3
tipe_data identifier1, identifier2;
//cara 4
tipe_data identifier1 = nilai1, identifier2 = nilai2;

Variabel Global
● Sebuah variabel global akan dikenali oleh semua bagian program
● Variabel global dapat dibuat dengan mendeklarasikannya di luar
semua fungsi yang ada
Contoh deklarasi variabel global
byte readSensor;
void setup() {
}
void loop() {
}

Variabel Global (cont’d)
● Keleluasaan pengaksesan oleh semua fungsi yang ada pada program
merupakan kelebihan kelebihan dari variabel global, namun hal
tersebut juga sekaligus menjadi kekurangan
● Apabila kode program menjadi sangat panjang dan kompleks, maka
keleluasaan pengaksesan tersebut akan menjadi salah satu sumber
error/bug, dimana proses pelacakan error akan sulit dilakukan apabila
seluruh bagian kode program dapat mengakses variabel tersebut
● Berdasarkan alasan tersebut maka hendaknya penggunaan variabel
global harus dibatasi dan jika memang benar-benar diperlukan

Variabel Lokal
● Seperti namanya, variabel lokal merupakan variabel yang hanya
dapat diakses pada lingkup lokal, yaitu di dalam sebuah fungsi
tertentu saja
Contoh deklarasi variabel lokal
void setup() {
byte angka1;
}
void loop() {
byte angka2;
}
Variabel angka1 hanya akan dikenali pada fungsi void setup(), sedangkan variabel
angka2 hanya akan dikenali pada fungsi void loop(). Pengaksesan variabel angka1
pada fungsi void loop() akan mengakibatkan error, demikian juga sebaliknya.

Tipe Data
● Variabel memiliki tipe data yang akan digunakan oleh compiler untuk
mengetahui jenis data yang disimpan
Tipe Data Ukuran Memori Rentang Nilai
boolean 8-bit true/false
byte 8-bit 0 - 255
char 8-bit -128 - 127
unsigned char 8-bit 0 - 255
word 16-bit 0 - 65,535
int 16-bit -32,768 - 32,767
unsigned int 16-bit 0 - 65,535
long 32-bit -2,147,483,648 - 2,147,483,647
unsigned long 32-bit 0 - 4,294,967,295
float 32-bit -3.4028235E+30 - 3.4028235E+38

Operator
● Simbol atau karakter pada program yang digunakan untuk melakukan
suatu operasi atau manipulasi
● Pada program, seringkali kita membutuhkan sebuah solusi dimana
solusi tersebut dihasilkan dari operasi dari satu atau beberapa
variabel/operand
● Bahasa C++ memiliki beberapa jenis operator yaitu:
○ Assignment
○ Arithmetic
○ Increase dan decrease
○ Relational dan equality
○ Logical
● Masing-masing operator memiliki tingkat eksekusi yang berbedabeda, sebagai contoh operator * (perkalian) akan didahulukan dari
operator + (penjumlahan)

Assignment
● Operator yang digunakan untuk menentukan nilai sebuah variabel
Contoh penggunaan operator assignment
//nilai 5 diisikan ke variabel a
a = 5;
//nilai variabel b diisikan ke variabel a
a = b;
//hasil penjumlahan nilai variabel a dan angka 7 diisikan ke
//variabel b
b = a + 7;
//nilai 5 diisikan ke variabel c, kemudian nilai variabel c
//diisikan ke variabel b, kemudian nilai variabel b diisikan ke
//variabel a
a = b = c = 5
Pembacaan operator assignment dilakukan dari kanan ke kiri

Arithmetic
● Operator yang digunakan untuk membuat ekspresi matematis pada
kode program

Simbol Keterangan
+ Penjumlahan
- Pengurangan
* Perkalian
/ Pembagian
% Modulo (hasil bagi dari 2 bilangan)


Increase dan Decrease
● Operator penambah atau pengurang nilai pada variabel
● Operator increase dilambangkan dengan ++, sedangkan operator
decrease dilambangkan dengan --
increase dan decrease
//kesamaan operator increase
a = a + 1;
a++;
//kesamaan operator decrease
a = a - 1;
a--;

Increase dan Decrease (cont’d)
● Operator increase dan decrease dapat dituliskan sebagai prefix atau
suffix sebuah variabel

Prefix dan suffix untuk operator increase dan decrease
b = 3;
a = b++;
//nilai a = 3, nilai b = 4
b = 3;
a = ++b;
//nilai a = 4, nilai b = 4
Suffix: nilai variabel akan ditambah setelah menemui operator increase
Prefix: nilai variabel akan ditambah sebelum menemui operator increase


Relational dan Equality
● Operator yang digunakan untuk membandingkan nilai dari dua
ekspresi pemrograman
● Hasil dari operator relational dan equality adalah nilai boolean yaitu
true atau false

Simbol Keterangan
==           Sama dengan
!=            Tidak sama dengan
>             Lebih dari
<             Kurang dari
>=           Lebih dari atau sama dengan
<=           Kurang dari atau sama dengan

Relational dan Equality (cont’d)
● Contoh penggunaan dari operator relational dan equality adalah
seperti di bawah
Contoh penggunaan operator relational dan equality
(7 == 5) //false
(5 > 4) //true
(13 < 2) //false
(2 < 2) //false
//anggap nilai a = 4, b = 5, c = 6
(a == 5) //4 tidak sama dengan 5, false
(a * b > 7) //20 lebih dari 7, true
(b - 3 < 5) //2 kurang dari 5, true

Logical
● Operator yang digunakan untuk melakukan operasi logika pada
program
Simbol Keterangan
! NOT
&& AND
|| OR

Logical (cont’d)
● Contoh penggunaan operator logical adalah seperti di bawahtoh penggunaan operator logical
!(17 < 6) //!false, memberikan hasil true
!(12 >= 12) //!true, memberikan hasil false
((5 == 5) && (7 < 5)) //(true && false) memberikan hasil false
((7 < 5) || (13 > 6)) //(false || true) memberikan hasil true

Percabangan
● Pada pemrograman pasti akan dijumpai keadaan dimana program
harus memilih kode program mana yang akan dieksekusi sesuai
dengan kondisi yang didapatkan
● Pada pemrograman C/C++ percabangan dapat dilakukan
menggunakan dua buah struktur sintaks yaitu if...else dan
switch...case
Contoh kebutuhan pemilihan tindakan berdasarkan sebuah kondisi
jika suhu ruangan panas
- maka kipas angin dinyalakan
jika suhu ruangan dingin
- maka kipas angin dimatikan
if...else
Contoh struktur penulisan if...else
if(kondisiLogika1) {
...
}
else if(kondisiLogika2) {
...
}
else {
...
}

else if dan else bersifat opsional. else if diletakkan setelah if, sedangkan else
diletakkan setelah if atau else if (jika ada).
Penulisan kondisi logika dilakukan dengan memanfaatkan operator relational dan
equality. Sebagai contoh adalah A * 5 < 18. Apabila tidak digunakan operator
relational dan equality, maka secara default kodisi tersebut dibandingkan dengan nilai
true (== true).

else if dan else bersifat opsional. else if diletakkan setelah if, sedangkan else
diletakkan setelah if atau else if (jika ada).
Penulisan kondisi logika dilakukan dengan memanfaatkan operator relational dan
equality. Sebagai contoh adalah A * 5 < 18. Apabila tidak digunakan operator
relational dan equality, maka secara default kodisi tersebut dibandingkan dengan nilai
true (== true).

If...else (cont’d)Co
ntoh penggunaan if...else
int angka = 0;
void setup(){
Serial.begin(9600);
if(angka > 0) {
Serial.println ("bilangan positif");
}
else if(angka < 0) {
Serial.println ("bilangan negatif");
}
else {
Serial.println ("angka 0");
}
}
void loop(){
}

switch...case
Contoh struktur penulisan switch...case
switch(kondisi) {
case nilai1:
...
break;
case nilai2:
...
break;
default:
...
break;
}

Program akan mengeksekusi ekspresi, yaitu kondisi yang ada pada switch. Nilai dari
eksekusi kondisi akan dibandingkan dengan nilai konstanta pada case pertama, yaitu
nilai1. Jika nilai kondisi sama degan nilai1, maka kode program yang ada dalam
case pertama akan dieksekusi. Jika tidak, maka pemeriksaan akan dilanjutkan ke case
berikutnya. Apabila nilai pada case tidak ada yang sesuai dengan nilai hasil eksekusi
kondisi, maka kode program yang ada pada bagian default akan dieksekusi.

switch...case (cont’d)ntoh struktur penulisan switch...case
int hari = 2;
void setup(){
Serial.begin(9600);
switch(hari) {
case 1:
Serial.println("hari senin");
break;
case 2:
Serial.println("hari selasa");
break;
default:
Serial.println("hari rabu");
break;
}
}
void loop(){
}

Pengulangan
● Kode program secara umum bersifat sekuensial, yaitu dieksekusi dari
atas ke bawah
● Ada kalanya pada program kita menghendaki suatu bagian kode
program dieksekusi berulang dengan batasan yang kita tentukan
Contoh penulisan kode program yang tidak efisien
int a;
void setup() {
a = a + 7;
a = a + 7;
a = a + 7;
a = a + 7;
a = a + 7;
a = a + 7;
a = a + 7;
}

Pengulangan (cont’d)oh penulisan kode program menggunakan pengulangan for
int a;
void setup() {
for(byte i = 0; i < 7; i++){
a = a + 7;
}
}
Nilai a akan ditambah dengan angka 7 sebanyak 7 kali. Jika dibandingkan dengan contoh
sebelumnya, penulisan ini terlihat lebih rapi dan terstruktur.

forontoh struktur penulisan for
word a;
void setup() {
//struktur for memiliki 3 parameter yang dapat diisi
//parameter pertama , deklarasi variabel pembatas pengulangan
//parameter kedua , kondisi yang akan diperiksa sebelum
//pengulangan dilakukan
//parameter ketiga , bagian increment atau decrement untuk
//variabel pembatas
for(int i = 0; i < 7; i++) {
a = a + 7;
}
}



Wednesday 1 June 2016

Program ATmega16 : LED

     Kembali sebagai fungsi keluaran, dapat mempengaruhi kerja dari hardware atau rangkaian yang nantinya akan diakses. Ada beberapa tipe kerja rangkaian untuk mengaksesnya, yaitu Aktif LOW dan Aktif HIGH. Aktif LOW merupakan kerja rangkaian yang dapat dioperasikan atau di ON-kan dengan diberi logika rendah ("0"/0V). Sedangkan Aktif HIGH merupakan kerja rangkaian yang dapat dioperasikan atau di ON-kan dengan diberi logika tinggi ("1"/+5V). Berdasarkan skematik dari kerja rangkaian diatas dapat digambarkan sebagai berikut :

     Pengaturan nilai keluaran setiap port disesuaikan dengan prinsip kerja rangkaian yang akan dioperasikan. Secara logika untuk pengaturan nilai keluaran pada setiap port harus berkebalikan dengan logika untuk menghidupkan atau mengoperasikan rangkaian tersebut. Misalkan, rangkaian LED aktif LOW, maka nilai keluaran harus diatur dengan nilai 1/HIGH. Sebaliknya juga dengan rangkaian LED aktif HIGH, maka nilai keluaran harus diatur dengan nilai 0/LOW. Pada tutorial kali ini, rangkaian yang digunakan memiliki prinsip kerja ON/aktif bila diberi logika 1/HIGH sehingga nilai keluaran pada PORT-B harus diatur menjadi LOW. Pengaturan tersebut dengan tujuan untuk mematikan rangkaian saat pertama kali dihidupkan atau LOW dalam keadaan normal.

     Instruksi yang digunakan dalam CVAVR untuk mengakses data keluaran (output) ke salah satu port sudah baku. Ada dua macam peng-akses-an port, yaitu secara bersamaan dan secara satu-persatu pin/bit. Sebagai contohnya sebagai berikut ini :
Mengakses PORT B.
Instruksi CVAVR secara bersamaan :
   PORTB = 0xf0;               //pada 8 bit data PORTB akan mengeluarkan data 11110000
atau
   PORTB = 0b11110000;  

Instruksi CVAVR secara per-bit:
   PORTB.0=1;   //pin atau bit ke-0 PORTB akan mengeluarkan data 1 (HIGH/+5V)
atau
   PINB.0=1;
   .
   .
   PORTB.3=1;   //pin atau bit ke-3 PORTB akan mengeluarkan data 1 (HIGH/+5V)
atau
   PINB.3=1;
   PORTB.4=0;   //pin atau bit ke-4 PORTB akan mengeluarkan data 0 (LOW/0V)
atau
   PINB.4=0;
   .
   .
   PORTB.7=0;   //pin atau bit ke-7 PORTB akan mengeluarkan data 0 (LOW/0V)
atau
   PINB.7=0;

RANGKAIAN SIMULASI ATMEGA16 DENGAN KELUARAN 8 LED



Contoh program LED menyala semua secara bersamaan :
     #include <mega16.h>
     void main(void){
     PORTB=0x00;
     DDRB=0xff;
     while(1){
      PORTB=0xff;
         }  
     }

Contoh program running LED :
     #include <mega16.h>
     #include <delay.h>
     void main(void){
     PORTB=0x00;
     DDRB=0xff;      //PORTB diatur menjadi output
     while (1)
          {
           PORTB=0b10000000;
           delay_ms(10);
           PORTB=0b01000000;
           delay_ms(10);
           PORTB=0b00100000;
           delay_ms(10);
           PORTB=0b00010000;
           delay_ms(10);
           PORTB=0b00001000;
           delay_ms(10);
           PORTB=0b00000100;
           delay_ms(10);
           PORTB=0b00000010;
           delay_ms(10);
           PORTB=0b00000001;
           delay_ms(10);
           }
     }  

atau

    #include <mega16.h>
    #include <delay.h>
    int geser=1;
    void main(void){
    PORTB=0x00;
    DDRB=0xFF;
    delay_ms(10);
    PORTB=0x01;
    delay_ms(10);
         while (1){
              if(geser<0){
                    geser=0x01;}
              delay_ms(10);
              PORTB=geser;
              geser<<=1;     //melakukan shift register
              };
     }


Contoh program LED berkedip secara bersamaan dengan delay :
     #include <mega16.h>
     #include <delay.h>
     void main(void){
     PORTB=0x00;
     DDRB=0xff;      //PORTB diatur menjadi output
     while (1)
          {
           PORTB=0xff;
           delay_ms(500);
           PORTB=0x00;
           delay_ms(500);
           }
     }


Rangkaian Minimum System Mikrokontroller ATmega16/32/8535

Pada postingan ini, kita akan belajar membuat minimum system. Minimum system digunakan untuk belajar mikrokontroller. Dengan minimum system ini kita dapat belajar memprogram mikrokontroller untuk berbagai keperluan seperti mengontrol nyala/mati LED, mengontrol perangkat rumah tangga, bahkan bisa digunakan dalam sistem robotika. Minimum sistem ini menggunakan IC ATmega16/32/8535 sebagai IC mikrokontroller. Untuk keperluan komponen sebagai berikut :

1. IC ATmega16/32/8535 + socket 40p  @1 buah
2. Xtal 12Mhz                                         @1 buah
3. kapasitor kramik 22pf                         @2 buah
4. kapasitor 100uf/16V                           @2 buah
5. Resistor 10k, 220Ohm                        @1buah
6. LED 3mm                                           @1 buah
7. IC 7805 / IC regulator 5V                   @1 buah
8. Dioda IN4002                                     @1 buah
9. Switch                                                 @1 buah
10. Pin header female                             @secukupnya
11. Konektor Screw                                @1 buah

SKEMA MINIMUM SYSTEM ATMEGA16/32/8535





Kemudian dari skema itu kita lanjut ke pembuatan layout PCBnya agar dapat digunakan nanti.


LAYOUT PCB MINIMUM SYSTEM ATMEGA16/32/8535





LAYOUT PCB MINIMUM SYSTEM ATMEGA16/32/8535




     Pada gambar skema board diatas terdapat terminal mosi,miso,sck, reset dan GND. Kelima terminal ini nantinya dihubungkan ke perangkat Downloader. Downloader berfungsi untuk membaca dan menulis program dari dan ke mikrokontroler. File yang dibaca atau ditulis oleh downloader berekstensi .Hex File .Hex tersebut dihasilkan oleh software pemrograman mikrokontroler. 
     Nah jika anda telah memiliki rangkaian sismin ATmega16/32/8535 seperti di atas saatnya anda untuk berlatih memprogram IC tersebut. Gunakan software CodeVisionAVR untuk membuat program dan jika dibutuhkan simulasi gunakan software Proteus. 
     Sekian tutorial pembuatan Minimum System ATmega16/32/8535 kali ini. Nantikan tutorial lain selanjutnya...


Program ATmega16 : Simulasi Menyalakan LED Menggunakan Proteus

     ATmega16 adalah IC Mikrokontroller yang banyak digunakan untuk membuat aplikasi berbasis mikrokontroller seperti pada materi kali ini kita akan membuat program menyalakan led dengan CodeVisionAVR dan mensimulasikannya di aplikasi proteus.

Software yang digunakan :
1. CodeVisionAVR
2. Proteus 7 Profesional

langkah awal adalah kita membuat rangkaiannya pada aplikasi Proteus, seperti pada gambar dibawah ini :

komponen yang digunakan adalah :
1. ATmega16                 (1)
2. LED                           (8)
3. Pushbutton                 (1)
4. Elko 100uf/16v          (1)
5. Kapasitor 22pf           (2)
6. Resistor 1k                 (1)
7. Crystal 12Mhz           (1)

     Rangkaian sudah selesai, oke kita lanjut ke CodeVisionAVR. Aplikasi ini adalah sarana kita untuk membuat program menyalakan led. Disini kita menggunakan bahasa C sebagai bahasa pemogramannya.
langkah awal adalah membuat project baru:

Chip yang digunakan ATmega16 dengan clock 12MHz. Kemudian pengaturan port. Disini kita menggunakan PortB sebagai Output. maka pengaturannya seperti ini.

pada menu toolbar, klik Program -> Generate, Save and Exit.


selanjutnya kita membuat programnya.

#include <mega16.h>  //header atmega16
void main(main){
PORTB=0x00;
DDRB=0xff;           //pengaturan manual, PORTB sebagai Output
while(1){
     PORTB=0xff;    //membuat kondisi LED nyala semua (1111111)
}
}

Kemudian compile program dengan cara pintas CTRL+F9.
 
     Pada aplikasi Proteus, klik dua kali IC ATmega16. Maka akan tampil seperti ini:


cari folder file.hex program yang kita buat pada CodeVisionAVR tadi kemudian klik ok. Jalankan simulasi proteus, dan hasilnya seperti ini. Output Led pada portB menyala semua.









Mengakses LCD 16x2 dengan Arduino

    Pada postingan sebelumnya kita sudah membahas tentang mengakses lcd 16x2 dengan atmega16. Kali ini saya akan berbagi tutorial cara menga...