Kamis, 05 Juli 2012

Sistem Bilangan


MATERI
SISTEM BILANGAN

1.    Pendahuluan
      Sistem analog/digital  memproses sinyal-sinyal  bervariasi dengan  waktu  yang memiliki nilai-nilai kontinyu/diskrit seperti yang terlihat pada gambar 1.


Gambar 1 : sinyal analog vs sinyal diskrit

Beberapa keuntungan sistem digital dibandingkan dengan sistem analog adalah :
-          Kemampuan mereproduksi sinyal yang lebih baik dan akurat
-          Mempunyai reliabilitas yang lebih baik (noise lebih rendah akibat imunitas yang lebih baik)
-          mudah di disain, tidak memerlukan kemampuan matematika khusus untuk memvisualisasikan sifat-sifat rangkaian digital yang sederhana
-          fleksibilitas dan fungsionalitas yang lebih baik
-          kemampuan pemrograman yang lebih mudah
-          lebih cepat (debug IC complete complex digital dapat memproduksi sebuah keluaran lebih kecil dari 2 nano detik)
-          Ekonomis jika dilihat dari segi biaya IC yang akan menjadi rendah akibat pengulangan dan produksi massal dari integrasi jutaan elemen logika digital pada sebuah chip  miniatur tunggal.

            Sistem digital  menggunakan  kombinasi-kombinasi  biner  BENAR  &  SALAH untuk menyerupai cara ketika  menyelesaikan  masalah sehingga disebut  juga  logika-logika kombinasional. Dengan sistem digital dapat digunakan langkah-langkah berpikir logis atau keputusan-keputusan  masa  lalu  (memori)  untuk  menyelesaikan  masalah sehingga biasa disebut logika-logika sekuensial (terurut).

Logika digital dapat direpresentasikan dengan beberapa cara yaitu :
-          Tabel kebenaran (truth table) menyediakan suatu daftar setiap kombinasi yang mungkin dari masukan-masukan biner pada sebuah rangkaian digital dan keluaran-keluaran yang terkait.
-          Ekspresi-ekspresi  Boolean  mengekspresikan  logika  pada  sebuah  format fungsional.
-          Diagram gerbang logika (logic gate diagrams)
-          Diagrams penempatan bagian (parts placement diagrams)
-          High level description language (HDL)

2. Macam-macam Sistem Bilangan
Beberapa sistem bilangan :
a.    Bilangan Desimal
Bilangan desimal adalah bilangan yang memiliki basis 10
Bilangan tersebut adalah 0, 1, 2, 3, 4, 5, 6, 7, 8, dan 9 ( r = 10 )

b.    Bilangan Biner
Bilangan biner adalah bilangan yang memiliki basis 2
Bilangan tersebut adalah 0 dan 1 ( r = 2 )

c.    Bilangan Oktal
Bilangan oktal adalah bilangan yang memiliki basis 8
Bilangan tersebut adalah 0, 1, 2, 3, 4, 5, 6, dan 7 ( r = 8 )

d.    Bilangan Heksadesimal
Bilangan Heksadesimal adalah bilangan yang memiliki basis 16
Bilangan tersebut adalah 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, dan F ( r = 16 )

3.    Konversi Bilangan
            Dalam mengolah data digital, tak jarang ditemukan suatu sistem bilangan dengan suatu basis tertentu harus diolah dengan menggunakan suatu sistem bilangan yang lain, misalnya: suatu data dalam sistem bilangan heksadesimal diolah dalam sistem desimal. Agar dapat diolah, maka diperlukan konversi sistem bilangan.

3.1  Konversi Sistem Bilangan ke Desimal
a.    Konversi Bilangan Biner ke Bilangan Desimal
            Di sini bilangan yang akan dikonversi adalah 1011001. Langkah yang akan dilakukan adalah mengalikan bilangan berikut dengan angka delapan yang berpangkat, mulai 0 untuk yang paling belakang (LSB) sampai pangkat tertinggi untuk yang terdepan (MSB). Kemudian hasil perkalian tersebut dijumlah. Berikut langka-langkahnya :
(1x2)+(0x2¹)+(0x2²)+(1x2³)+(1x2)+(0x2)+(1x2) = 1+0+0+8+16+0+64 = 89
Jadi, BIlangan decimal dari hasil konversi bilangan biner 1011001 adalah 89

b.    Konversi Bilangan Oktal ke Desimal
            Di sini bilangan yang akan dikonversi adalah 43. Langkah yang akan dilakukan adalah mengalikan bilangan berikut dengan angka delapan yang berpangkat, mulai 0 untuk yang paling belakang (LSB) sampai pangkat tertinggi untuk yang terdepan (MSB). Kemudian hasil perkalian tersebut dijumlah. Berikut langkah-langkahnya :
(3x8)+(4x8¹)= 3+32 = 35
Jadi, BIlangan desimal dari hasil konversi bilangan Oktal 43 adalah 35

c.    Konversi Bilangan Hexadesimal ke Bilangan Desimal
            Pada pembahasan ini yang akan coba dikonversi adalah bilangan 4FC₁₆. Untuk melakukan konversi ini maka bilangan hexadesimal tersebut dikalikan dengan angka 16 yang berpangkat.Perkaliannya adalah sebagai berikut :
F adalah angka 15 dalam desimal, C adalah angka 12 dalam decimal
(12x16)+(15x16¹)+(4x16²) = 12 + 240 + 1024 = 1276
Jadi Hasil konversi dari Bilangan hexadesimal 4FC₁₆ adalah 1276 desimal.

3.2  Konversi Bilangan Desimal ke Bilangan Non Desimal
a.    Konversi Bilangan Desimal ke Bilangan Oktal
            Di sini bilangan yang akan dikonversi adalah 78. Langkah yang akan dilakukan adalah membagi secara bertahap angka 78 dengan 8 hingga habis. Berikut langkah-langkahnya :
78 dibagi 8 = 9 sisa 6
9 dibagi 8 = 1 sisa 1
            Sama dengan konversi dari decimal ke biner, penulisan dimulai dari hasil pembagian terakhir kemudian dilanjutkan dengan angka sisa dari yang terakhir hingga yang pertama. Berikut hasilnya : 116.

b.    Konversi Bilangan Desimal ke Bilangan Hexadesimal
            Di sini bilangan yang akan dikonversi adalah 150. Langkah yang akan dilakukan adalah membagi secara bertahap angka 150 dengan 16 hingga habis. Berikut langkah-langkahnya :
150 dibagi 16 = 9 sisa 6
            Sama dengan konversi dari decimal ke biner, penulisan dimulai dari hasil pembagian terakhir kemudian dilanjutkan dengan angka sisa dari yang terakhir sampai yang pertama. Berikut hasilnya : 96₁₆.

3.3  Konversi Sistem Bilangan ke Biner
a.    Konversi Bilangan Desimal ke Bilangan Biner
            Di sini bilangan yang akan dikonversi adalah 54. Langkah yang akan dilakukan adalah membagi secara bertahap angka 54 dengan 2 hingga habis. Berikut langkah-langkahnya :
54 dibagi 2 = 27 sisa 0
27 dibagi 2 = 13 sisa 1
13 dibagi 2 = 6 sisa 1
6 dibagi 2 = 3 sisa 0
3 dibagi 2 = 1 sisa 1
            Penulisannya dimulai dari hasil pembagian terakhir kemudian dilanjutkan dengan angka sisa dari yang terakhir sampai yang pertama. Berikut hasilnya : 110110.

b.    Konversi Bilangan Oktal ke Bilangan Biner
            Kali ini bilangan yang akan coba dikonversi adalah bilangan octal 237. Karena 1 digit bilangan Oktal mewakili 3 Bit yaitu 4, 2, dan 1 maka setiap digitnya tinggal dimasukkan ke format 4 | 2 | 1, seperti contoh berikut ini :
2 disusun dari (0x4)+(1x2)+(0x1) maka biner dari 2 = 010
3 disusun dari (0x4)+(1x2)+(1x1) maka biner dari 3 = 011
7 disusun dari (1x4)+(1x2)+(1x1) maka biner dari 7 = 111
            Maka hasil Bilangan Biner dari Bilangan Oktal 237 adalah 010011111 atau 10011111 karena angka 0 di depan tidak perlu ditulis.

c.    Konversi Bilangan Hexadesimal ke Bilangan Biner
            Kali ini bilangan yang akan coba dikonversi adalah bilangan hexadesimal 5D₁₆. Perlu diketahui, 1 digit bilangan Hexa mewakili 4 Bit yaitu 8, 4, 2, dan 1 maka setiap digitnya tinggal dimasukkan ke format 8 |4 | 2 | 1, seperti contoh berikut ini :
5 disusun dari (0x8)+(1x4)+(0x2)+(1x1) maka biner dari 5 = 0101
D (13 Desimal) disusun dari (1x8)+(1x4)+(0x2)+(1x1) maka biner dari D = 1101

            Maka hasil Bilangan Biner dari Bilangan Hexa 5D₁₆ adalah 01011101 atau 1011101 karena angka 0 di depan tidak perlu ditulis.


3.4  Konversi Sistem Bilangan Biner ke Sistem Bilangan Lain
a.    Konversi Bilangan Biner ke Bilangan Oktal
            Pada pembahasan ini yang akan coba dikonversi adalah bilangan 11001010. Untuk melakukan konversi ini maka bilangan biner tersebut dipilah-pilah setiap 3 Bit dari yang paling rendah (belakang). Hasil pemilahannya adalah sebagai berikut :
11    |     001   |    010
            Kemudian dimasukkan kerumus 421 karena bilangan oktal mewakili 3 Bit yaitu 4, 2 dan 1. Berikut perhitungannya :
(1x2)+(1x1)  |  (0x4)+(0x2)+(1x1)  |  (0x4)+(1x2)+(0x1) = (2+1)  |  (0+0+1)  |  (0+2+0) = 3 | 1 | 2
Dan cara penulisannya adalah 312.

b.    Konversi Bilangan Biner ke Bilangan Hexadesimal
            Pada pembahasan ini yang akan coba dikonversi adalah bilangan 11010. Untuk melakukan konversi ini maka bilangan biner tersebut dipilah-pilah setiap 4 Bit dari yang paling rendah (belakang). Hasil pemilahannya adalah sebagai berikut :
1    |       1010  
            Kemudian dimasukkan kerumus 8421 karena bilangan oktal mewakili 4 Bit yaitu 8, 4, 2 dan 1. Berikut perhitungannya :
(1x1)  |  (1x8)+(0x4)+(1x2)+(0x1)  |= 1  |  (8+0+2+0) = 1 | 10
            Karena pada Bilangan hexadesimal 10 adalah A maka hasil konversi dari Bilangan Biner 11010 adalah 1A₁₆.

4.    Aritmatika Digital
a.    Operasi Penjumlahan Bilangan Biner
            Pada bilangan biner yang hanya terdiri dari dua sistem bilangan (‘0’ dan ‘1’), sehingga operasi penjumlahan terhadap bilangan biner akan lebih sederhana, contoh:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10
1 + 1 + 1 = 11
            Sama hal-nya seperti pada operasi aritmatika penjumlahan pada bilangan desimal dimana bila ada hasil penjumlahan yang hasilnya dua digit, maka angka paling sebelah kiri akan dijumlahkan pada bilangan berikutnya atau dikenal dengan istilah ‘Disimpan’. Sebagai contoh perhatikan penjumlahan bilangan biner berikut ini.

              11  1   ←  (disimpan)  →   1
010101       1001001                 001101
100010       0011001                 100001
----------(+)   ----------(+)              ----------(+)
110111       1100010                 101110


b.    Operasi Pengurangan Bilangan Biner
            Operasi aritmatika pengurangan pada bilangan biner juga sama seperti operasi pengurangan pada bilangan desimal, sebagai contoh perhatikan operasi dasar pengurangan bilangan biner berikut ini.
0 – 0 = 0
1 – 0 = 1
0 – 1 = 1 → bit ‘0’ meminjam 1 dari bit di sebelah kiri-nya
1 – 1 = 0

Contoh: Pengurangan 37 - 17 = 20 (desimal) atau 100101 - 010001 = 010100 (biner)
 1 → pinjam
100101 = 37
010001 = 17
-----------------(-)
010100 = 20
            Untuk menyatakan suatu bilangan desimal yang bernilai negatif adalah dengan menambahkan tanda negatif (-) pada bilangan-nya, contoh -1, -2, -3, -4, -5 dan seterusnya. Tetapi pada bilangan biner ini tidak bisa dilakukan, lalu bagaimana untuk membuat atau membedakan suatu bilangan biner itu bernilai negatif (-).
            Ada beberapa cara untuk membuat suatu bilangan biner bernilai negatif, cara yang pertama adalah dengan menambahkan ekstra bit pada bagian paling sebelah kiri bilangan (Most Significant Bit / MSB), contoh;
101 = +5 
Dengan menambahkan ekstra bit: 
0101 = +5 → 0 merupakan ekstra bit (MSB) untuk tanda positif (+)
1101 = -5 → 1 merupakan ekstra bit (MSB) untuk tanda negatif (-)
            Cara seperti di atas ternyata dapat menimbulkan salah persepsi jika kita tidak cermat, karena nilai -5 = 1101, 1101 dapat diartikan juga sebagai bilangan 13 dalam bilangan desimal. Maka digunakan cara kedua yaitu menggunakan satu metode yang dinamakan ‘Komplemen Dua’. Komplemen dua merupakan komplemen satu (yaitu dengan merubah bit ‘0’ menjadi ‘1’ dan bit ‘1’ menjadi ‘0’) kemudian ditambah satu, contoh;
0101 = +5 → ubah ke bentuk komplemen satu

1010 → komplemen satu dari 101 ini kemudian ditambahkan 1
      1
-------(+)
1111 → ini merupakan bentuk komplemen dua dari 0101 yang bernilai -5

Contoh lain, berapakah nilai -7 pada bilangan biner?

0111 = +7
1000 → bentuk komplemen satu
      1
-------(+)
1001 → bentuk komplemen dua dari 0111 yang bernilai -7

            Sedangkan contoh untuk operasi pengurangan menggunakan metode komplemen dua sebenarnya adalah operasi penjumlahan bilangan biner, perhatikan contoh berikut.
Contoh;
hasil penjumlahan +6 + (– 4) = 2 (desimal), bagaimana jika dalam operasi penjumlahan bilangan biner (komplemen dua)?
Jawab: Pertama kita cari bentuk komplemen dua dari +4

0100 = +4
1011 → komplemen satu dari 1100
      1
-------(+)
100 → komplemen dua dari 100

Lalu jumlahkan +6 = 110 dengan -4 = (100)

110
100
---(+)
010 = +2 → hasil penjumlahan 110 (+6) dengan 100 (-4)

            Yang perlu diperhatikan dari operasi pengurangan bilangan biner menggunakan metode komplemen dua adalah jumlah bit-nya. Pada contoh di atas semua operasi pengurangan menggunakan bilangan biner 3 bit (bit = binary digit), maksudnya disini adalah jika bilangan biner yang dihitung merupakan bilangan biner 3 bit maka hasilnya harus 3 bit. Seperti pada pengurangan 110 dengan 100 dimana pada digit paling sebelah kiri (MSB) pada kedua bilangan biner yakni ‘1’ dan ‘1’ jika dijumlahkan hasilnya adalah ‘10’ tetapi hanya digit ‘0’ yang digunakan dan digit ‘1’ diabaikan.
 1
 110
 100
-------(+)
1010 → ‘1’ pada MSB diabaikan pada operasi pengurangan biner komplemen dua

Contoh lain hasil pengurangan bilangan desimal 3 – 5 = -2 jika dalam biner.
11
011 → bilangan biner +3
011 → komplemen dua bernilai -5
------(+)
110 → hasilnya = -2 (komplemen dua dari +2)

            Untuk mengetahui apakah 110 benar-benar merupakan nilai komplemen dua dari +2 cara-nya sama seperti kita merubah dari biner positif ke biner negatif menggunakan metode komplemen dua. Perhatikan operasi-nya berikut ini.
110 = -2
001 → komplemen satu dari 110
    1
------(+)
010 → komplemen dua dari 110 yang bernilai +2

            Dari contoh semua operasi perhitungan di atas dapat ditarik kesimpulan bahwa komplemen dua dapat digunakan untuk mengetahui nilai negatif dan nilai positif pada operasi pengurangan bilangan biner.

c.    Operasi Perkalian Bilangan Biner
            Sama seperti operasi perkalian pada bilangan desimal, operasi aritmatika perkalian bilangan biner pun menggunakan metode yang sama. Contoh operasi dasar perkalian bilangan biner.
0 x 0 = 0
0 x 1 = 0
1 x 0 = 0
1 x 1 = 1
Contoh perkalian 12 x 10 = 120 dalam desimal dan biner.
Dalam operasi bilangan desimal;

 12
 10
 ---(x)
 00
12
----(+)
120

Dalam operasi bilangan biner;

   1100 = 12
   1010 = 10
   ----(x)
   0000
  1100
 0000
1100
-------(+)
1111000 = 120

d.    Operasi Pembagian Bilangan Biner
            Operasi aritmatika pembagian bilangan biner menggunakan prinsip yang sama dengan operasi pembagian bilangan desimal dimana di dalamnya melibatkan operasi perkalian dan pengurangan bilangan.

Contoh pembagian 9 : 3 = 3 (desimal) atau 1001 : 11 = 11 (biner)
      ____
11 / 1001   = 11 → Jawaban
      11
      ---(-)
       11
       11
       ---(-)
        0
Contoh pembagian 42 : 7 = 6 (desimal) atau 101010 : 110 = 111 (biner)
        _______
110 / 101010   = 111 → Jawaban
       110
       ------(-)
        1001
         110
        ------(-)
          110
          110
          ----(-)
            0

Rabu, 04 Juli 2012

Eksternal Interupt Pada ATmega


          Interupsi adalah kondisi dimana pada saat program utama dijalankan/dieksekusi oleh CPU, kemudian tiba-tiba berhenti untuk sementara waktu karena ada rutin laian yang harus ditangani terlebih dahulu oleh CPU, dan setelah selesai mengerjakan rutin tersebut CPU kembali mengerjakan instruksi pada program utama. Berikut ini adalah sumber interupsi pada ATmega8535.

Interupsi Eksternal
          Pada ATmega8535 terdapat 3 pin untuk interupsi eksternal, yaitu INT0, INT1, dan INT2. Interupsi eksternal dapat dibangkitkan apabila terdapat perubahan logika 1 atau logika 0 pada pin INT0, INT1, dan INT2. Inisialisasi external interrupt pada ATmega16 dapat dilakukan dengan melakukan konfigurasi register MCUCR, MCUCSR, GICR, GIFR.
          Bit-bit INT0, INT1, dan INT2 pada register GICR digunakan untuk mengaktifkan masing-masing interupsi eksternal. Ketika bit-bit tersebut diset 1 (aktif) maka interupsi eksternal akan aktif jika bit I (interupt) pada SREG (status register) diset 1 juga (enable interupt), instruksi untuk mengaktifkan global interupt yaitu sei. Program interupsi dari masing-masing interupsi akan dimulai dari vektor interupsi pada masing-masing jenis interupsi eksternal. 
          Untuk interupsi yang dijalankan terlebih dahulu pada ATmega8535 yaitu ditunjukkan oleh tabel 1. Sehingga interupsi eksternal yang dijalankan terlebih dahulu adalah INT0, INT1, dan INT2. Untuk membuktikannya kita lakukan percobaan seperti berikut.

ALAT DAN BAHAN YANG DIGUNAKAN
  1. 1 set Personal Computer/Laptop yang sudah berisi program Code Vision dan Khazama
  2. 1 buah ISP Downloader AVR
  3. 1 buah sistem minimum AVR
  4. 1 buah I/O
  5. 1 buah kabel printer USB

PROSEDUR
A.    Interupt
  • Rangkailah peralatan yang diperlukan seperti dalam Gambar 1. Hubungkan soket jumper PORTC pada minimum system dengan soket jumper pada OUTPUT LED. Hubungkan PIN D2, PIN D3, dan PIN B2 ke push button ( INT0, INT1, dan INT2 ).
Gambar 1. Blok diagram antarmuka mikrokontroler dengan I/O
  • Buka program Code Vision AVR
  • Buatlah project baru. Pada saat mengeset chip, clock, dan External IRQ, set juga bagian PORTC untuk LED. Kemudian simpanlah file tersebut.
Gambar 2. Setting LED dan Interupt
  • Perhatikan blok program berikut.
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
// untuk program interupt 0
}

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
// Place your code here
// untuk program interupt 1
}

// External Interrupt 2 service routine
interrupt [EXT_INT2] void ext_int2_isr(void)
{
// Place your code here
// untuk program interupt 2
}
// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: On
// INT1 Mode: Falling Edge
// INT2: On
// INT2 Mode: Falling Edge
GICR|=0xE0;
MCUCR=0x0A;
MCUCSR=0x00;
GIFR=0xE0;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here
     // Untuk program utama
      };
}


  • Tuliskan script berikut dalam program utama:
while (1)
      {
      // Place your code here
      PORTC=0x00;
      delay_ms(1000);
      PORTC=0x01;
      delay_ms(1000);
      PORTC=0x03;
      delay_ms(1000);
      PORTC=0x07;
      delay_ms(1000);
      PORTC=0x0F;
      delay_ms(1000);
      PORTC=0x1F;
      delay_ms(1000);
      PORTC=0x3F;
      delay_ms(1000);
      PORTC=0x7F;
      delay_ms(1000);
      PORTC=0xFF;
      delay_ms(1000);
      };

  • Tuliskan script berikut dalam program interupt:

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
PORTC=0xFF;
delay_ms(1000);
PORTC=0x00;
delay_ms(1000);
PORTC=0xFF;
delay_ms(1000);
PORTC=0x00;
delay_ms(1000);
PORTC=0xFF;
delay_ms(1000);
PORTC=0x00;
delay_ms(1000);
}

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
// Place your code here
PORTC=0xFF;
delay_ms(1000);
PORTC=0x7F;
delay_ms(1000);
PORTC=0x3F;
delay_ms(1000);
PORTC=0x1F;
delay_ms(1000);
PORTC=0x0F;
delay_ms(1000);
PORTC=0x07;
delay_ms(1000);
PORTC=0x03;
delay_ms(1000);
PORTC=0x01;
delay_ms(1000);
PORTC=0x00;
delay_ms(1000);
}

// External Interrupt 2 service routine
interrupt [EXT_INT2] void ext_int2_isr(void)
{
// Place your code here
PORTC=0xF0;
delay_ms(1000);
PORTC=0x0F;
delay_ms(1000);
PORTC=0xF0;
delay_ms(1000);
PORTC=0x0F;
delay_ms(1000);
PORTC=0xF0;
delay_ms(1000);
PORTC=0x0F;
delay_ms(1000);
}
  • Downloadkan program ke mikrokontroler, setelah itu tekan pada push button yang berhubungan dengan PIN D2 (INT0).
  • Perhatikan dan catat nyala LED.
  • Lakukan hal serupa dengan Interup 1  dan Interupt 2.
  • Selanjutnya jalankan interup 0, interupt 1, dan interupt 2 secara bersamaan (antara program utama, program interup 0, program interupt 1, dan program interupt 2 harus berbeda).
  • Perhatikan dan catat nyala LED.

UNTUK PERCOBAAN INI SAYA BERI FILE PROTEUS UNTUK SIMULASI!!!!


 
Design by Wordpress Theme | Bloggerized by Free Blogger Templates | coupon codes