Aplikasi ADC PIC
05.01ADC BASCOM AVR
Prosedur Percobaan:
1. Pastikan semua supply dalam keadaan off
2. Hubungkan jumper seperti rangkaian dibawah
3. Buatlah listing program yang telah ada pada modul
4. periksakan rangkaian kepada asisten yang mengawas
5. Hidupkan semua supply
6. Upload program dari laptop ke modul
7. Tekan tombol Reset
8. Amati percobaan, jika tidak sesuai perbaiki rangkaian atau program
9. Jika sesuai, maka selesai dan demokan pada asisten yang mengawas
10.Jelaskan prinsip kerja + program dan hubungan keduanya kepada asisten
11.Demokan ke pembimbing praktikum
12.Matikan supply
1. Rangkaian Simulasi [kembali]
2. Listing Program [kembali]
3. Link Download [kembali]
4. Link Download [kembali]
File HTML - Download
File Proteus - Download
File Program - Download
File Video - Download
//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 directionsbit 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
}
}
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 directionsbit 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. Link Download [kembali]
File HTML - Download
File Proteus - Download
File Program - Download
File Video - Download