Anda di halaman 1dari 6

MODUL 4 ADC (Analog-toDdigital-Converter)

Muhammad Ridho Pambudi (S2113003)


Asisten: Ahmad Thoriq S.
Tanggal Percobaan: 27/05/2016
EL3014R Praktikum Sistem Mikroprosesor
Laboratorium Teknik Elektro
Institut Teknologi Sumatera
Abstrak
Pada percobaan kali ini akan Memahami tentang bagaimana
membuat program yang menggunakan ADC pada AVR
ATMEGA8535, lalu mengubah hasil konversi dalam
satuan biner menjadi satuan BCD dan dikirmkan ke PC
melalui komunikasi serial USART..

1. PENDAHULUAN
Adapun tujuan dari peraktikum kali ini adalah
sebagai berikut:
Mampu membuat program yang
menggunakan ADC pada AVR
ATMEGA8535 untuk mengkonversi input
pada tegangan analog menjadi digital. 3. HASIL DAN ANALISIS

Mampu membuat program untuk Tugas 1 : Program menampilkan


mengubah hasil konversi dalam satuan pembacaan suhu. Program ini bekerja
biner menjadi satuan BCD dan dikirmkan dengan ialah data berupa data analog dari
ke PC melalui komunikasi serial USART. sensor suhu lalu diubah ke digital.
Menggunakan rumus ADC=VIN x 1024
2. STUDI PUSTAKA (10bit)/VREF

. Analog To Digital Converter (ADC) adalah Konversi tersebut diubah kedalam degree yang
pengubah input analog menjadi kode kode digital. selanjutnya akan ditampilkan di lcd.
ADC banyak digunakan sebagai pengatur proses
industri, komunikasi digital dan rangkaian rakit komponen sesuai modul
pengukuran/pengujian. Umumnya ADC
digunakan sebagai perantara antara sensor yang
sambungkan dengan pc
kebanyakan analog dengan sistim komputer
seperti sensor suhu, cahaya, tekanan/berat, aliran
dan sebagainya kemudian diukur dengan
buat program untuk tugas 1
menggunakan sistim digital (komputer). ADC
(Analog to Digital Converter) memiliki 2 karakter
prinsip, yaitu kecepatan sampling dan resolusi. jalankan program
Kecepatan sampling suatu ADC menyatakan
seberapa sering sinyal analog dikonversikan ke .
bentuk sinyal digital pada selang waktu tertentu.
Tugas 2 : Program Menampilkan
Kecepatan sampling biasanya dinyatakan dalam
pembacaan intensitas cahaya
sample per second (SPS).
Program ini ialah mengubah data analog
dari sensor suhu (LDR) lalu diubah
digital.mengunakan rumus .
Vout = RLDR/(RLDR+R1) x VCR
Hal ini mengubah data analog ke digital
lalu diubah lagi ke degree sehingga bisa
ditamplikan kedalam lcd.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 1


inisalisai perangkat ke pc

buat program untuk tugas 2

jalankan program

4. KESIMPULAN
Pada peraktikum kali ini peraktikan dapat
menyimpulkan bahwa AVR ATMEGA
mempunyai pin untuk ADC (Analog to Digital
Converter) yang bias digunakan mengkonver data
analog ke digital. Sehingga hasilnya bisa dilihat di
LCD.

DAFTAR PUSTAKA
[1] Panduan Praktis mikrokontroler keluarga AVR
DT starter dan
[2] http://elektronika-dasar.web.id/adc-analog-
to-digital-convertion/

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 2


Lampiran [40] 39. dataLCD = 0x30;
Source code tugas 1 [41] 40. kirim_perintah_lcd();
[42] 41. delay_ms(5);
[3] 2. #include <mega8535.h>
[43] 42.
[4] 3. #include <delay.h>
[44] 43. dataLCD = 0x30;
[5] 4. #include <string.h>
[45] 44. kirim_perintah_lcd();
[6] 5. #include <stdio.h>
[46] 45. delay_us(150);
[7] 6.
[47] 46.
[8] 7. #define RS PORTD.5
[48] 47. dataLCD = 0x30;
[9] 8. #define RW PORTD.6
[49] 48. kirim_perintah_lcd();
[10] 9. #define E PORTD.7
[50] 49. delay_us(50);
[11] 10. #define PORT_DATA PORTA
[51] 50.
[12] 11. #define DDR_DATA DDRA
[52] 51. dataLCD = 0x38;
[13] 12.
[53] 52. kirim_perintah_lcd();
[14] 13. unsigned char dataLCD;
[54] 53. delay_us(50);
[15] 14.
[55] 54.
[16] 15. void kirim_perintah_lcd (void)
[56] 55. dataLCD = 0x04;
[17] 16. {
[57] 56. kirim_perintah_lcd();
[18] 17. DDR_DATA=0xFF;
[58] 57. delay_us(50);
[19] 18. RS=0;
[59] 58.
[20] 19. RW=0;
[60] 59. dataLCD = 0x01;
[21] 20. E=1;
[61] 60. kirim_perintah_lcd();
[22] 21.
[62] 61. delay_ms(2);
[23] 22. PORT_DATA=dataLCD;
[63] 62.
[24] 23. E=0;
[64] 63. dataLCD = 0x06;
[25] 24. }
[65] 64. kirim_perintah_lcd();
[26] 25.
[66] 65. delay_us(50);
[27] 26. void tulis_data_ram_lcd (void)
[67] 66.
[28] 27. {
[68] 67.
[29] 28. DDR_DATA=0xFF;
[69] 68. dataLCD = 0x0C;
[30] 29. RS=1;
[70] 69. kirim_perintah_lcd();
[31] 30. RW=0;
[71] 70. delay_us(50);
[32] 31. E=1;
[72] 71. }
[33] 32. PORT_DATA=dataLCD;
[73] 72.
[34] 33. E=0;
[74] 73. unsigned long int hasil;
[35] 34. }
[75] 74.
[36] 35.
[76] 75. unsigned long int bin2BCD
[37] 36. void init_lcd (void)
(unsigned int input)
[38] 37. {
[77] 76. {
[39] 38. delay_ms(20);
Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 3
[78] 77. hasil = ((input/10000)*65536)+ [109] 108. {unsigned char i, temp,
adc_input=0x00;
[79] 78. (((input%10000)/1000)*4096)+
[110] 109. DDRA=0x00;
[80] 79.
((((input%10000)%1000)/100)*256) [111] 110.
+ ADMUX=ADC_VREF_TYPE;
[81] 80. [112] 111. ADCSRA=0x87;
(((((input%10000)%1000)%100)/10)
[113] 112. SFIOR&=0xEF;
*16)+
[114] 113. UCSRA=0x00;
[82] 81.
((((input%10000)%1000)%100)%10) [115] 114. UCSRB=0x18;
;
[116] 115. UCSRC= 0x86;
[83] 82. return(hasil);
[117] 116. UBRRH = 0x00;
[84] 83. }
[118] 117. UBRRL=0x19;
[85] 84.
[119] 118.
[86] 85. #define ADC_VREF_TYPE
[120] 119. while(1)
0x00
[121] 120. {for (i=0; i<=strlenf( string)-
[87] 86. 1;i++)
[88] 87. unsigned int read_adc (unsigned
[122] 121. {temp=string[i];
char adc_input)
[123] 122. putchar(temp);
[89] 88. {
[124] 123. }
[90] 89. unsigned char temp;
[125] 124. hasil=read_adc(adc_input);
[91] 90. unsigned int data_adc;
[126] 125. hasil=hasil*49;
[92] 91.
ADMUX=adc_input|ADC_VREF [127] 126. hasil=bin2BCD(hasil);
_TYPE; [128] 127. temp=(hasil>>16 &
[93] 92. 0x0F)+0x30;
[94] 93. ADCSRA|=0x40; [129] 128. temp=(hasil>>12 &
0x0F)+0x30;
[95] 94.
[130] 129. putchar(temp);
[96] 95.
[131] 130. temp=(hasil>>8& 0x0F)
[97] 96. while ((ADCSRA & 0x10) == 0);
+0x30;
[98] 97. ADCSRA |= 0x10;
[132] 131. putchar(temp);
[99] 98. data_adc=0x0000;
[133] 132. putchar(',');
[100] 99. temp=ADCL; [134] 133. temp=(hasil>>4& 0x0F)
[101] 100. data_adc=ADCH; +0x30;
[102] 101. data_adc<<=8; [135] 134. putchar(temp);
[103] 102. data_adc|=temp; [136] 135. temp=(hasil & 0x0F)+0x30;
[104] 103. return data_adc; [137] 136. putchar(' ');
[105] 104. } [138] 137. putchar('C');
[106] 105. [139] 138. putchar(0x0D);
[107] 106. flash unsigned char string[]= [140] 139. putchar(0x0A);
{"Hasil Pada ADC0 : "}; [141] 140. delay_ms(1000);
[108] 107. void main(void)
141.}}

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 4


[174] 35. }
[175] 36.
[176] 37. void init_lcd (void)
[177] 38. {
[178] 39. delay_ms(20);
[179] 40. dataLCD = 0x30;
Source code tugas 2 [180] 41. kirim_perintah_lcd();
[181] 42. delay_ms(5);
[142] #include <mega8535.h>
[182] 43.
[143] 4. #include <delay.h>
[183] 44. dataLCD = 0x30;
[144] 5. #include <string.h>
[184] 45. kirim_perintah_lcd();
[145] 6. #include <stdio.h>
[185] 46. delay_us(150);
[146] 7.
[186] 47.
[147] 8. #define RS PORTD.5
[187] 48. dataLCD = 0x30;
[148] 9. #define RW PORTD.6
[188] 49. kirim_perintah_lcd();
[149] 10. #define E PORTD.7
[189] 50. delay_us(50);
[150] 11. #define PORT_DATA PORTA
[190] 51.
[151] 12. #define DDR_DATA DDRA
[191] 52. dataLCD = 0x38;
[152] 13.
[192] 53. kirim_perintah_lcd();
[153] 14. unsigned char dataLCD;
[193] 54. delay_us(50);
[154] 15.
[194] 55.
[155] 16. void kirim_perintah_lcd (void)
[195] 56. dataLCD = 0x04;
[156] 17. {
[196] 57. kirim_perintah_lcd();
[157] 18. DDR_DATA=0xFF;
[197] 58. delay_us(50);
[158] 19. RS=0;
[198] 59.
[159] 20. RW=0;
[199] 60. dataLCD = 0x01;
[160] 21. E=1;
[200] 61. kirim_perintah_lcd();
[161] 22.
[201] 62. delay_ms(2);
[162] 23. PORT_DATA=dataLCD;
[202] 63.
[163] 24. E=0;
[203] 64. dataLCD = 0x06;
[164] 25. }
[204] 65. kirim_perintah_lcd();
[165] 26.
[205] 66. delay_us(50);
[166] 27. void tulis_data_ram_lcd (void)
[206] 67.
[167] 28. {
[207] 68.
[168] 29. DDR_DATA=0xFF;
[208] 69. dataLCD = 0x0C;
[169] 30. RS=1;
[209] 70. kirim_perintah_lcd();
[170] 31. RW=0;
[210] 71. delay_us(50);
[171] 32. E=1;
[211] 72. }
[172] 33. PORT_DATA=dataLCD;
[212] 73.
[173] 34. E=0;
Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 5
[213] 74. unsigned long int hasil; [248] 109.{unsigned char i, temp,
adc_input=0x01;
[214] 75.
[249] 110.DDRA=0x00;
[215] 76. unsigned long int bin2BCD (unsigned
int input) [250] 111.ADMUX=ADC_VREF_TYPE;
[216] 77. { [251] 112.ADCSRA=0x87;
[217] 78. hasil = ((input/10000)*65536)+ [252] 113.SFIOR&=0xEF;
[218] 79. (((input%10000)/1000)*4096)+ [253] 114.UCSRA=0x00;
[219] 80. ((((input%10000)%1000)/100)*256)+ [254] 115.UCSRB=0x18;
[220] 81. [255] 116.UCSRC= 0x86;
(((((input%10000)%1000)%100)/10)*16)+
[256] 117.UBRRH = 0x00;
[221] 82. ((((input%10000)%1000)%100)%10);
[257] 118.UBRRL=0x19;
[222] 83. return(hasil);
[258] 119.
[223] 84. }
[259] 120.while(1)
[224] 85.
[260] 121.{for (i=0; i<=strlenf( string)-1;i++)
[225] 86. #define ADC_VREF_TYPE 0x00
[261] 122. {temp=string[i];
[226] 87.
[262] 123. putchar(temp);
[227] 88. unsigned int read_adc (unsigned char
[263] 124. }
adc_input)
[264] 125.hasil=read_adc(adc_input);
[228] 89. {
[265] 126.hasil=hasil*49;
[229] 90. unsigned char temp;
[266] 127.hasil=bin2BCD(hasil);
[230] 91. unsigned int data_adc;
[267] 128.temp=(hasil>>16 & 0x0F)+0x30;
[231] 92.
ADMUX=adc_input|ADC_VREF_TYPE [268] 129.putchar(temp);
;
[269] 130.putchar(',');
[232] 93.
[270] 131.temp=(hasil>>12 & 0x0F)+0x30;
[233] 94. ADCSRA|=0x40;
[271] 132.putchar(temp);
[234] 95.
[272] 133.temp=(hasil>>8& 0x0F) +0x30;
[235] 96.
[273] 134.putchar(temp);
[236] 97. while ((ADCSRA & 0x10) == 0);
[274] 135.putchar(',');
[237] 98. ADCSRA |= 0x10;
[275] 136.putchar('V');
[238] 99. data_adc=0x0000;
[276] 137.temp=(hasil>>4& 0x0F) +0x30;
[239] 100.temp=ADCL;
[277] 138.
[240] 101.data_adc=ADCH; [278] 139.temp=(hasil & 0x0F)+0x30;
[241] 102.data_adc<<=8;
[279] 140.
[242] 103.data_adc|=temp;
[280] 141.
[243] 104.return data_adc;
[281] 142.putchar(0x0D);
[244] 105.}
[282] 143.putchar(0x0A);
[245] 106.
[283] 144.delay_ms(1000);
[246] 107.flash unsigned char string[]= {"Hasil
145.}}
Pada ADC1 : "};
[247] 108.void main(void)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 6

Anda mungkin juga menyukai