Вы находитесь на странице: 1из 18

Praktikum Mikrokontroller Dan Interface

PERCOBAAN 3
ADC (ANALOG TO DIGITAL CONVERTER)
I.

Tujuan
1. Mahasiswa mengetahui fungsi dari ADC dari mikrokontroller
2. Mahasiswa dapat mengaplikasikan program untuk mikrokontroller ARM pada
software uVision dan STM32 CubeMX
3. Mahasiswa bisa mengintegrasikan antara ADC dengan LCD untuk
menampilkan nilai ADC yang terbaca

II.

Dasar Teori
ADC (analog to digital converter) adalah komponen elektronika yang befungsi
uuntuk mengubah (mengkonversi) besaran analog menjadi besaran digital.
Komponen ini mutlak diperlukan bila mikrokontroller dihubungkan dengan sebuah
sensor yang keluarannya (output) mempunyai besaran analog, sedangkan yang
dibaca dan diolah oleh sebuah mikrokontroller adalah data yang digital.
Analog-to-digital converters (ADCs)
Three 12-bit analog-to-digital converters are embedded and each ADC shares up
to 16 external channels, performing conversions in the single-shot or scan mode.
In scan mode, automatic conversion is performed on a selected group of analog
inputs. Additional logic functions embedded in the ADC interface allow:
Simultaneous sample and hold
Interleaved sample and hold
The ADC can be served by the DMA controller. An analog watchdog
feature allows very precise monitoring of the converted voltage of one, some or all
selected channels. An interrupt is generated when the converted voltage is
outside the programmed thresholds. To synchronize A/D conversion and
timers, the ADCs could be triggered by any of TIM1, TIM2, TIM3, TIM4, TIM5,
or TIM8 timer.

1. TBD stands for to be defined.


2. If an inverted reset signal is applied to PDR_ON, this value can be lowered
to 1.7 V when the device operates in a reduced temperature range (0 to 70
C).
3. It is recommended to maintain the voltage difference between VREF+ and
VDDA below 1.8 V.
4. VDDA -VREF+ < 1.2 V.
5. Based on characterization, not tested in production.
6. VREF+ is internally connected to VDDA and VREF- is
internally connected to VSSA.
7. RADC maximum value is given for VDD=1.8 V, and minimum value for
VDD=3.3 V.
8. For external triggers, a delay of 1/fPCLK2 must be added to the latency
specified in Table 65.

Equation 1: RAIN max formula

The formula above (Equation 1) is used to determine the maximum external impedance
allowed for an error below 1/4 of LSB. N = 12 (from 12-bit resolution) and k is the number of
sampling periods defined in the ADC_SMPR1 register.

1. Better performance could be achieved in restricted VDD, frequency and


temperature ranges.
2. Based on characterization, not tested in production.
3. If an inverted reset signal is applied to PDR_ON, this value can be lowered to
1.7 V when the device operates in a reduced temperature range (0 to 70 C).
ADC accuracy vs. negative injection current: Injecting a negative current on any of
the standard (non-robust) analog input pins should be avoided as this significantly
reduces the accuracy of the conversion being performed on another analog input. It
is recommended to add a Schottky diode (pin to ground) to standard analog pins
which may potentially inject negative currents.

1. See also Table 66.


2. Example of an actual transfer curve.

3. Ideal transfer curve.


4. End point correlation line.
5. ET = Total Unadjusted Error: maximum deviation between the actual and the
ideal transfer curves.
EO = Offset Error: deviation between the first actual transition and the first
ideal one.
EG = Gain Error: deviation between the last ideal transition and the last actual
one.
ED = Differential Linearity Error: maximum deviation between actual steps
and the ideal one.
EL = Integral Linearity Error: maximum deviation between any actual
transition and the end point correlation line.

1. Refer to Table 65 for the values of RAIN, RADC and CADC.


2. Cparasitic represents the capacitance of the PCB (dependent on soldering and
PCB layout quality) plus the pad capacitance (roughly 5 pF). A high
Cparasitic value downgrades conversion accuracy. To remedy this, fADC
should be reduced.
III.

Alat dan Bahan


1. Modul ARM STM32F407VGTx
2. Software uVision
3. Software STM32 CubeMX

IV.

Gambar Rangkaian

LCD
2x16

VC
C

VCC

PB 1
PB
2
PB
3
PB
4
PB
5
PB
6

PE
8
PE9
.
.
.
.
.

PD 0 7

ARM
STM32
F4

PE
14
PE
15

PB
1
PB
2
PC
1

LDR2
LM35
1

PC
2

POT 1

PC
3

POT
2

PC
4
PC
5

PB
7

LDR1

POT 3

PB
8
LM35 2

V.

Algoritma
Percobaan 1
Tampilkan nilai ADC dari potensio 1 dan potensio 2 ke dalam LCD

VI.

Percobaan 2
1. Jika PB 1 ditekan maka akan tampil angka 0 100 lux pada LCD
2. Jika PB 2 ditekan maka akan tampil angka 0 100 lux pada LCD
3. Jika PB 3 ditekan maka pada layar LCD kosong (clear)
4. Jika PB 4 ditekan maka akan tampil angka 0 50 oC pada LCD
5. Jika PB 5 ditekan maka akan tampil angka 0 100 V pada LCD
6. Jika PB 6 ditekan maka akan tampil angka 0 5 A pada LCD
7. Jika PB 7 ditekan maka akan tampil angka 0 1000 rpm pada LCD
8. Jika PB 8 ditekan maka akan tampil angka 0 100 oC pada LCD

Flow Chart
Percobaan 1

STAR
T

Tampilkan nilai
ADC [4] dan
ADC [5]

IV.

Gambar Rangkaian

EN
D

Percobaan 2

START

Tampilkan
0 100 lux

PB1

PB2

Tampilkan
0 100 lux

PB3

LDC Clear

PB4

Tampilkan
0 50 oC

PB5

Tampilkan
0 100 V

PB6

PB7

Tampilkan
05A

Tampilkan
0 1000 rpm

Tampilkan
0 100 oC

PB8

EN
D

VII.

Langkah Percobaan
1. Lakukan inisialisasi pin pin pada ARM menggunakan STM32 CubeMX
2. Lakukan aktivasi RCC menggunakan HSE crystal
3. Jadikan PIND 0 sampai PIND 7 sebagai GPIO Output yang nantinya
dihubungkan dengan LCD 2x16
4. Jadikan PINE 8 sampai PINE 15 sebagai GPIO Input yang nantinya
dihubungkan dengan push button
5. Lakukan aktivasi pin ADC 1 mulai IN 8 sampai 15 melalui pheriperal

Dimana setelah aktifasi dengan pencentangan ini maka pada


PINB1 akan aktif sebagai ADC1_IN8
PINB2 akan aktif sebagai ADC1_IN9
PINC0 akan aktif sebagai ADC1_IN10
PINC1 akan aktif sebagai ADC1_IN11
PINC2 akan aktif sebagai ADC1_IN12
PINC3 akan aktif sebagai ADC1_IN13
PINC4 akan aktif sebagai ADC1_IN14
PINC5 akan aktif sebagai ADC1_IN15
6. Kemudian lakukan clock configuration seperti praktikum sebelumnya
7. Buka configuration kemudian lakukan aktivasi pada ADC 1. Buka pada DMA
setting kemudian klik add dan ubah DMA Request menjadi ADC1

8. Kemudian centang useFifo dan lakukan etting seperti gambar beriku.


Pencentangan memory ini diperlukan agar ADC yang digunakan selalu update
data setiap saatnya. Jika tidak dicentang maka untuk update data perlu direset
terlebh ahulu pada ARM nya agar ADC update nilai

9. Pilih Parameter setting kemudian lakukan enable pada ADC etting yaitu scan
convertion mode, continous convertion mode dan DMA continou request.
Lakukan pengubahan Number of convertionmenjadi 8 karena kita
menggunakan 8 channel ADC dan lakukan pengubahan pada RANK yaitu

dengan mengubah RANK 1 dengan channel 8, RANK 2 dengan channel 9 dan


seterusnya sampai RANK 8 sebagai channel 15.

10. Lakukan pelabelan pada GPIO setting dengan mengisi nama pada user label
jika memang diperlukan dan kemudian aplly dan klik OK

11. Lakukan setting GPIO dengan mengubah PIND 0 sampai PIND 7 dengan
mode FAST dan PINE8 sampai PINE15 dengan mode pull down.
12. Setelah selesai melakukan semua setting maka langkah selanjutnya adalah
Generate Code dan buka Project
VIII.

Program

Percobaan 1

#include "stm32f4xx_hal.h"
#include "lcd_character.h"
#include "stdio.h"
ADC_HandleTypeDef hadc1;
DMA_HandleTypeDef hdma_adc1;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_DMA_Init(void);
static void MX_ADC1_Init(void);
IO uint16_t Nilai_ADC [8];
int main(void)
{
char simpan[20];
HAL_Init();

SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
lcd_init();
HAL_ADC_Start_DMA(&hadc1,(uint32_t*) &Nilai_ADC,8);
while (1)
{
sprintf(simpan,"P1=%4d P2=%4d",Nilai_ADC[5] ,Nilai_ADC[5]);
lcd_gotoxy(0,0);
lcd_puts(simpan);
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
PWR_CLK_ENABLE();
HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;

RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 4;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1
|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
void MX_ADC1_Init(void)
{
ADC_ChannelConfTypeDef sConfig;
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV4;
hadc1.Init.Resolution = ADC_RESOLUTION12b;
hadc1.Init.ScanConvMode = ENABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 8;
hadc1.Init.DMAContinuousRequests = ENABLE;
hadc1.Init.EOCSelection = EOC_SINGLE_CONV;
HAL_ADC_Init(&hadc1);
sConfig.Channel = ADC_CHANNEL_8;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC_CHANNEL_9;
sConfig.Rank = 2;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC_CHANNEL_10;
sConfig.Rank = 3;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC_CHANNEL_11;
sConfig.Rank = 4;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);

sConfig.Channel = ADC_CHANNEL_12;
sConfig.Rank = 5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC_CHANNEL_13;
sConfig.Rank = 6;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC_CHANNEL_14;
sConfig.Rank = 7;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC_CHANNEL_15;
sConfig.Rank = 8;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}
void MX_DMA_Init(void)
{
DMA2_CLK_ENABLE();
HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn);
}
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIOH_CLK_ENABLE();
GPIOC_CLK_ENABLE();
GPIOB_CLK_ENABLE();
GPIOD_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
}
#endif

Percobaan 2

#include "stm32f4xx_hal.h"
#include "lcd_character.h"
#include "stdio.h"
ADC_HandleTypeDef hadc1;

DMA_HandleTypeDef hdma_adc1;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_DMA_Init(void);
static void MX_ADC1_Init(void);
IO uint16_t Nilai_ADC [8];
int main(void)
{
char kata[20], simpan[20];
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
lcd_init();
HAL_ADC_Start_DMA(&hadc1,(uint32_t*) &Nilai_ADC,8);
while (1)
{
if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_8))
{
sprintf(simpan,"LDR 1= %3d lux
",((Nilai_ADC[0]*100)/4095));
sprintf(kata,"Sensor Cahaya
");
lcd_gotoxy(0,0);
lcd_puts(kata);
lcd_gotoxy(0,1);
lcd_puts(simpan);
}
if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_9))
{
sprintf(simpan,"LDR 2= %3d lux
",((Nilai_ADC[1]*100)/4095));
sprintf(kata,"Sensor Cahaya
");
lcd_gotoxy(0,0);
lcd_puts(kata);
lcd_gotoxy(0,1);
lcd_puts(simpan);
}
if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_10))
{
lcd_clear();
}
if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_11))
{
sprintf(simpan,"LM35 1= %2d C
",((Nilai_ADC[3]*50)/4095));
sprintf(kata,"Sensor Suhu
");
lcd_gotoxy(0,0);
lcd_puts(kata);
lcd_gotoxy(0,1);
lcd_puts(simpan);
}
if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_12))
{
sprintf(simpan,"POT 1= %3d V
",((Nilai_ADC[4]*100)/4095));
sprintf(kata,"Sensor Tegangan ");
lcd_gotoxy(0,0);

lcd_puts(kata);
lcd_gotoxy(0,1);
lcd_puts(simpan);
{
if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_13))
{
sprintf(simpan,"POT 2= %1d A
",((Nilai_ADC[5]*5)/4095));
sprintf(kata,"Sensor Arus
");
lcd_gotoxy(0,0);
lcd_puts(kata);
lcd_gotoxy(0,1);
lcd_puts(simpan);
}
if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_14))
{
sprintf(simpan,"POT 3= %4d rpm ",((Nilai_ADC[6]*1000)/4095));
sprintf(kata,"Sensor Kecepatan");
lcd_gotoxy(0,0);
lcd_puts(kata);
lcd_gotoxy(0,1);
lcd_puts(simpan);
}
if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_15))
{
sprintf(simpan,"LM35 1= %3d C
",((Nilai_ADC[7]*100)/4095));
sprintf(kata,"Sensor Suhu
");
lcd_gotoxy(0,0);
lcd_puts(kata);
lcd_gotoxy(0,1);
lcd_puts(simpan);
}
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
PWR_CLK_ENABLE();
HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 4;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1
|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;

RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
void MX_ADC1_Init(void)
{
ADC_ChannelConfTypeDef sConfig;
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV4;
hadc1.Init.Resolution = ADC_RESOLUTION12b;
hadc1.Init.ScanConvMode = ENABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 8;
hadc1.Init.DMAContinuousRequests = ENABLE;
hadc1.Init.EOCSelection = EOC_SINGLE_CONV;
HAL_ADC_Init(&hadc1);
sConfig.Channel = ADC_CHANNEL_8;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC_CHANNEL_9;
sConfig.Rank = 2;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC_CHANNEL_10;
sConfig.Rank = 3;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC_CHANNEL_11;
sConfig.Rank = 4;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC_CHANNEL_12;
sConfig.Rank = 5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC_CHANNEL_13;
sConfig.Rank = 6;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC_CHANNEL_14;
sConfig.Rank = 7;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC_CHANNEL_15;
sConfig.Rank = 8;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);

}
void MX_DMA_Init(void)
{
DMA2_CLK_ENABLE();
HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn);
}
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIOH_CLK_ENABLE();
GPIOC_CLK_ENABLE();
GPIOB_CLK_ENABLE();
GPIOD_CLK_ENABLE();
GPIOE_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
}
#endif

IX.

Analisa

Pada praktikum kali ini mempraktekkan tentang ADC (Analog to digital


converter) pada ARM STM32F4. Dimana ADC ini merupakan konverter yang
berfungsi untuk merubah besaran analog menjadi besaran digital yang nantinya akan
diolah untuk suatu proses tertentu. Penggunaan ADC ini sebenarnya digunakan untuk
masukan dari sebuah sensor dan bertujuan untuk memonitoring suatu sinyal dan
kemudian inyal terebut diguankan untuk suatu proses sehingga menghasilkan suatu
keluaran tertentu.
Pada praktikum kali ini menggunakan ADC chanel 8 sampai dengan chanel 15 dimana
chanel 8 terletak pada PINB1, chanel 9 terletak pada PINB2, sedangkan untuk chanel 10
sampai dengan 15 terletak pada PINC0 sampai dengan PINC5. Bisa dilihat pada gambar
percobaan bahwa chanel 8 dan chanel 9 dihubungkan dengan LDR 1 dan LDR dan untuk

chanel 11 sampai dengan 15 dihubungkan dengan LM35 1, potensio1, potensio2,


potensio3 dan LM352 sedangkan untuk chanel 10 tidak dihubungkan atau not connect.
Untuk menggunakan ADC pada ARM maka perlu dilakukan aktivasi melalui
software STM32CubeMx. Dan melakukan beberapa perintah setting yang sudah
dijelakan pada langkah percobaan. Untuk mendeklarasikan ADC yang digunkaan
maka juga perlu perintah
IO uint16_t Nilai_ADC [8]; diluar fungsi main
HAL_ADC_Start_DMA(&hadc1,(uint32_t*) &Nilai_ADC,8); didalam fungsi main

Angka 8 pada perintah tersebut mengartikan bahwa jumlah ADC yang diguakan
adalah sebanyak 8 chanel.
X.

Kesimpulan
1. ADC adalah sebuah konverter yang digunakan untuk mengubah besaran analog
menjadi besaran digital
2. Pada ARM STM32F4 terdapat beberapa chanel ADC salah satunya
terletak
pada PINB1, PINB2 dan PINC0 sampai dengan PINC5
3. Tidak semua PIN pada mikrokontroller ARM bisa digunakan sebagai ADC

Вам также может понравиться