Kamis, 07 Desember 2017

DAC

[Home]
[Go to Bottom]



APLIKASI DAC
DENGAN MIKROKONTROLLER PIC16F84A

1. Tujuan [kembali]
  • Mempelajari aplikasi output pada mikrokontroller PIC 16F84A
  • Mempelajari aplikasi input pada mikrokontroller PIC 16F84A
  • Mempelajari aplikasi I/O pada mikrokontroller PIC 16F84A
2. Alat dan Bahan [kembali]

          a.    Module PIC 16F84A
             b.    LED
          c.    Jumper
          d.    Rangkaian reset
          e.    LCD
               
3.   DasarTeori  [kembali]
    Mikrokontroler PIC16F84 merupakan salah satu mikrokontroler dari keluarga PIC mikro yang popular digunakan sekarang ini, mulai dari pemula hingga para profesional. Hal tersebut karena PIC16F84 sangat praktis dan menggunakan teknologi FLASH memori sehingga dapat diprogram-hapus hinggaseribukali.
     Keunggulan mikrokontroler jenis RISC ini dibanding dengan mikrokontroler 8-bit lain di kelasnya terutama terletak pada kecepatan dan kompresi kodenya. Selain itu, PIC16F84 juga tergolong praktis dan ringkas karena memiliki kemasan 18 pin dengan 13 jalur I/O. meskipun demikian, mikrokontroler PIC16F84 bukan termasuk mikrokontroler yang memiliki fitur yang lengkap. Dalam keluarga PICmikro, PIC16F84 tergolong mikrokontroler skala sedang (Mid-Range).
        Fitur-Fitur PIC16F84
PIC16F84 bukanlah mikrokontroler yang istimewa dalam keluarga PICmikro. Namun demikian, PIC16F84 cukup mudah dipelajari dan dapat dibilang memiliki kemampuan yang handal sebagai mikrokontroler yang hanya memiliki kemasan 18 pin. Fitur-fitur pada PIC16F84 antara lain:


  • Kapasitas memori program 1024 x 14 FLASH memori
  • Ram berukuran 68 byte
  • Memori data berukuran 64 byte pada EEPROM
  • Memiliki 13 buah I/O (5 pada PortA dan 8 pada PortB)
  • Merupakan mikrokontroler RISC, sehingga hanya memiliki 35 macan instruksi
  • Memiliki Timer 8-bit dengan Prescaler 8-bit
  • WatchDog Timer (WDT) dengan osilator internal
  • Fuse untuk kode pengaman 
  • Dapat langsung menghidupkan LED
  • Pemrograman di dalam sistem (ICSP)
  • Mode SLEEP untuk menghemat daya
  • Kemasan fisik 18 pin DIP
  • Tegangan operasi normal 5 VDC 

           Deskripsi Pin-Pin

                                




Pin Mikrokontroler PIC16F84
        Mikrokontroler PIC16F84 diproduksi dalam kemasan 18 pin PDIP (Plastic Dual In Line) maupun 18 pin SO (Small Outline). Namun yang banyak dipasaran adalah dalam kemasan PDIP. Pin-pin untuk I/O sebanyak 13 pin, yang terdiri atas 5 pin untuk Port A dan 8 pin untuk Port B. Ada beberapa pin pada mikrokontroler ini yang memiliki fungsi ganda, yaitu pin 3, pin 4, pin 12, dan pin 13. Pin 3 dapat berfungsi sebagai pin I/O untuk Port A atau sebagai jalur input untuk clock eksternal. Pin 4 berfungsi sebagai pin reset dan juga dapat digunakan sebagai pin Vpp saat mode pemrograman. Sedangkan pin 12 dan pin 13 masing-masing berfungsi sebagai pin I/O dari Port B namun sekaligus juga dapat berfungsi sebagai pin clock dan data masukan pada pemrograman mikrokontroler.

  Pembangkit Clock-Oscilator




       Suatu mikrokontroler tidak akan dapat bekerja jika tidak diberi detak (clock) melalui suatu osilator. Osilator adalah rangkaian yang akan memberikan pulsa pada mikrokontroler dan berguna untuk mensinkronkan sistem dalam mikrokontroler tersebut. Untuk mengaktifkan sumber clock ini cukup dengan menambahkan rangkaian pasif saja seperti resistor dan kapasitor (RC Oscilator), kristal atau keramik resonator. Salah satu keistimewaan mikrokontroler PIC16F84 adalah terdapatnya 4 pilihan penggunaan osilator. Untuk pemakaian yang tidak memerlukan pewaktu kritis, bahkan dapat menggunakan sepasang resistor dan kapasitor saja sebagai osilator.
         Nilai kristal yang dapat dipakai maksimum adalah 4 MHz atau 10 MHz, hal ini karena mikrokontroler PIC16F84 dibuat dalam 2 versi frekuensi kerja. Untuk menentukan frekuensi maksimumnya dapat dilihat pada badan mikrokontroler. Jika terdapat tulisan PIC16F84-04/P berarti frekuensi maksimum yang diijinkan adalah 4 MHz.

4. Program [kembali]
              //Penyambungan Modul LCD
sbit LCD_RS at RB7_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;

// Pin direction

sbit LCD_RS_Direction at TRISB7_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;

void PrintToDisplay(char x, char y, float in1)   //fungsi cetak ke LCD

{
     char ch;                                    // deklarasi variabel ch
     int tint;                                   // deklarasi variabel tint
     tint=(int)(in1*1000);                       // mendapatkan nilai integer dari input analog
     ch=tint/1000;                               // mendapatkan bilangan pertama dari nilai analog
     Lcd_Chr(x,y,ch+48);                         // cetak bilangan pertama ke LCD
     Lcd_Chr_Cp('.');                            // cetak titik yang menjadi koma desimal
     ch=(tint%1000)/100;                         // mendapatkan bilangan kedua dari nilai analog
     Lcd_Chr_Cp(ch+48);                          // cetak bilangan kedua ke LCD
     ch=((tint%1000)%100)/10;                    // mendapatkan bilangan ketiga dari nilai analog
     Lcd_Chr_Cp(ch+48);                          // cetak bilangan ketiga ke LCD
     ch=((tint%1000)%100)%10;                    // mendapatkan bilangan keempat nilai analog
     Lcd_Chr_Cp(ch+48);                          // cetak bilangan keempat ke LCD
     Lcd_Out_Cp("Volt");                         // cetak satuan Volt ke LCD
     Delay_ms(10);                               // delay 10 ms
     }

     int vadc;                                   // deklarasi variabel vadc

     float vin, vinb;                            // deklarasi variabel vin dan vinb

void main() {

TRISB=0x00;                                      // PORTB sebagai output
TRISA=0xff;                                      // PORTA sebagai Input

Lcd_Init();                                      // Inisialisasi LCD

Lcd_Cmd(_LCD_CLEAR);                             // bersihkan layar LCD
Lcd_Cmd(_LCD_CURSOR_OFF);                        // matikan cursor LCD

ADCON0.ADCS0=0;                                  // ADCS0, ADCS1 & ADCS2 bersama sama menentukan kecepatan clock

ADCON0.ADCS1=1;                                  // jika 0 1 1 maka kecepatannya  Fosc/64
ADCON1.ADCS2=1;
ADCON0.CHS0=0;                                   // CHS0, CHS1 & CHS2 bersama-sama menentukan pin
ADCON0.CHS1=0;                                   // jika 0 0 0  maka pin yang digunakan adalah RA0/AN0
ADCON0.CHS2=0;
ADCON0.ADON=1;                                   // mengaktifkan konverter A/D
ADCON1.ADFM=1;                                   // menyatakan 10 bit terdiri dari 8 bit ADRESL dan 2 bit ADRESH
ADCON1.PCFG0=0;                                  // PCFG0, PCFG1, PCFG2 & PCFG3 bersama sama menetukan
ADCON1.PCFG1=0;                                  // apakah pin digunakan sebagai input analog atau input digital
ADCON1.PCFG2=0;                                  // jika 0000 maka semua pin sebagai input Analog
ADCON1.PCFG3=0;

for(;;) {                                        // looping

        ADCON0.Go_Done=1;                        // melakukan pengukuran konversi A/D
        while(ADCON0.Go_Done)                    // memastikan konversi aktif
        { }
        vadc=ADRESL+(ADRESH*256);


    /* Mengambil nilai digital, dengan ADRESL bit low hanya dapat menghitung

                                    hingga 256 dan meluap. sehingga jika 256 telah terpenhui maka nilai
                                    ADRESH akan bertambah 1 point. sehingga hasil digital yang didapatkan
                                    dapat dicari dengan ADRESL terakhir ditambah dengan ADRESH*256. dengan
                                    kolaborasi ini ADC dapat menghitung hingga 10bit.
                                 */

        vin=vadc*5/1024;                       // konversi nilai digital yang didapat ke nilai analog

                                               // dengan tegangan maksimum 5 volt
        PrintToDisplay(1,1,vin);                 // panggil fungsi  untuk mencetak ke layar LCD
        delay_ms(50);                                         // delay 50ms
        Lcd_Cmd(_LCD_CLEAR);                   // bersihkan layar LCD
        }

}

                      
5.  Flowchart [kembali]


6. Rangkaian Simulasi  [kembali]
          

                 
7. Video rangkaian  [kembali]
     
8. Link download  [kembali]
                link download rangkaian   : disini aja
                link download video          : disini aja
                link download program     : disini aja
                link download HTML        : disini aja

Tidak ada komentar:

Posting Komentar