Blog Presentasi.

ADC dengan PIC






1. Rangkaian Simulasi [kembali]

Prinsip kerja rangkaian :
         Rangkaian diatas merupakan rangkaian sederhana dari pengunaan PIC untuk penggunaan sebagai ADC. Pada rangkaian tersebut input ADCnya digunakan potensiometer dan nilai analognya ditampilkan pada layar LCD

2. Flowchart [kembali]


3. Listing 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
        }

}


 4. Video [kembali]

5. Link Download [kembali]

           

          
Unknown Unknown Author