ADC dengan PIC
21.131. 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]