Laporan Akhir Modul 3 uP&uC




1. Prosedur [kembali]

Modul 3 Percobaan 1

Langkah - langkah men-simulasikan rangkaiannya :

  1. Buatlah rangkaian sesuai dengan gambar di modul di Breadboard
  2. Lalu buka STMCUBEIDE,klik New STM32 Project
  3. Pilih MPU/MCU SELECTOR, dan ketik STM32F103C8
  4. Setting pin di file.ioc nya sesuai dengan kebutuhan
  5. Lalu generate code dan masukkan kode di main.c dan main.h
  6. Klik Build project dan Masukkan file.hex yang telat digenerate
  7. Masukkan file.hex ke STM32F103C8 di Proteus
  8. Run simulasi di Proteus

2. Hardware dan Diagram Blok [kembali]

  • STM32F103C8
  • LDR Sensor



  • Kipas DC
  • LED
  • Breadboard
  • Resistor


  • Push Button



  • Adaptor



3. Rangkaian Simulasi dan Prinsip Kerja [kembali]


Prinsip Kerja :

Percobaan greenhouse bekerja menggunakan dua mikrokontroler STM32F103C8T6 yang saling berkomunikasi melalui protokol SPI dengan sistem master dan slave. Mikrokontroler master bertugas membaca input berupa push button dan sensor LDR, sedangkan mikrokontroler slave bertugas mengontrol output berupa LED dan fan berdasarkan data yang diterima dari master. Sensor LDR dibaca menggunakan ADC untuk mengetahui intensitas cahaya lingkungan. Jika nilai cahaya berada di bawah threshold tertentu, master mengirim data logika untuk mengaktifkan fan pada slave. Push button digunakan sebagai input kontrol LED, dimana saat tombol ditekan master mengirim data logika HIGH sehingga LED pada slave menyala. Komunikasi data dilakukan melalui jalur SPI menggunakan pin MOSI, MISO, SCK, dan NSS dengan master sebagai pengendali clock komunikasi. Slave menerima data menggunakan SPI kemudian memproses data tersebut untuk menentukan kondisi output LED dan fan. Dengan demikian, sistem greenhouse mampu melakukan monitoring kondisi cahaya dan pengendalian output secara otomatis melalui komunikasi antar mikrokontroler.

4. Flowchart dan Listing Program [kembali]

Flowchart :

  • Master


  • Slave

Listing Program :

  • Master

#include "main.h"


ADC_HandleTypeDef hadc1;

SPI_HandleTypeDef hspi1;

uint8_t txData[2];

uint32_t ldrValue;


void SystemClock_Config(void);

static void MX_GPIO_Init(void);

static void MX_ADC1_Init(void);

static void MX_SPI1_Init(void);


/*=========================================================*/

uint32_t Read_LDR(void)

{

 

HAL_ADC_Start(&hadc1); 

 

HAL_ADC_PollForConversion(&hadc1,100); 

 

return HAL_ADC_GetValue(&hadc1); 

}


/*=========================================================*/

int main(void)

{

 

HAL_Init(); 

 

 

SystemClock_Config(); 


 

MX_GPIO_Init(); 

 

MX_ADC1_Init(); 

 

MX_SPI1_Init(); 


 

while (1) 

 

 

 

ldrValue = Read_LDR(); 

f(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==GPIO_PIN_RESET) 

 

 

 

txData[0] = 1;    

 

 

else 

 

 

 

txData[0] = 0; 


 

 

if(ldrValue < 1500) 

 

 

 

txData[1] = 1;    

 

 

else 

 

 

 

txData[1] = 0;    


 

 

HAL_SPI_Transmit(&hspi1, txData, 2, 100); 


 

 

HAL_Delay(200); 

 

}


/*=========================================================*/

void SystemClock_Config(void)

{

}


/*=========================================================*/

static void MX_GPIO_Init(void)

{

 

GPIO_InitTypeDef GPIO_InitStruct = {0}; 


 

__HAL_RCC_GPIOA_CLK_ENABLE(); 

 

__HAL_RCC_GPIOB_CLK_ENABLE(); 


 

GPIO_InitStruct.Pin = GPIO_PIN_0; 

 

GPIO_InitStruct.Mode = GPIO_MODE_INPUT; 

 

GPIO_InitStruct.Pull = GPIO_PULLUP; 

 

HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); 

}


/*=========================================================*/ 

static void MX_ADC1_Init(void)

{

 

ADC_ChannelConfTypeDef sConfig = {0}; 


 

hadc1.Instance = ADC1; 

 

hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; 

 

hadc1.Init.ContinuousConvMode = DISABLE; 

 

hadc1.Init.DiscontinuousConvMode = DISABLE; 

 

hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; 

 

hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; 

 

hadc1.Init.NbrOfConversion = 1; 

 

HAL_ADC_Init(&hadc1); 


 

sConfig.Channel = ADC_CHANNEL_9;    

 

sConfig.Rank = ADC_REGULAR_RANK_1; 

 

sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5; 


 

HAL_ADC_ConfigChannel(&hadc1, &sConfig); 

}

/*=========================================================*/

static void MX_SPI1_Init(void)

{

 

hspi1.Instance = SPI1; 

 

hspi1.Init.Mode = SPI_MODE_MASTER; 

 

hspi1.Init.Direction = SPI_DIRECTION_2LINES; 

 

hspi1.Init.DataSize = SPI_DATASIZE_8BIT; 

 

hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; 

 

hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; 

 

hspi1.Init.NSS = SPI_NSS_HARD_OUTPUT; 

 

hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; 

 

hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; 

 

hspi1.Init.TIMode = SPI_TIMODE_DISABLE; 

 

hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; 

 

hspi1.Init.CRCPolynomial = 7; 


 

HAL_SPI_Init(&hspi1); 

  • Slave

#include "main.h"

SPI_HandleTypeDef hspi1;

uint8_t rxData[2];

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_SPI1_Init(void);

/*=========================================================*/
int main(void)
{
 HAL_Init();

 SystemClock_Config();

 MX_GPIO_Init();
 MX_SPI1_Init();

 while (1)
 {
  
HAL_SPI_Receive(&hspi1, rxData, 2, HAL_MAX_DELAY); 

  
if(rxData[0]==1) 
 
 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
  
else 
 
 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);

  
if(rxData[1]==1) 
 
 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
  
else 

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
 }
}

/*=========================================================*/
void SystemClock_Config(void)
{
}

/*=========================================================*/
static void MX_GPIO_Init(void)
{
 GPIO_InitTypeDef GPIO_InitStruct = {0};

 __HAL_RCC_GPIOA_CLK_ENABLE();
 __HAL_RCC_GPIOB_CLK_ENABLE();

 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1,
GPIO_PIN_RESET);

 GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

/*=========================================================*/
static void MX_SPI1_Init(void)
{
 hspi1.Instance = SPI1;
 hspi1.Init.Mode = SPI_MODE_SLAVE;
 hspi1.Init.Direction = SPI_DIRECTION_2LINES;
 hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
 hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; 
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
 hspi1.Init.NSS = SPI_NSS_HARD_INPUT;
 hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
 hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
 hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
 hspi1.Init.CRCPolynomial = 7;

 HAL_SPI_Init(&hspi1);

5. Video Demo [kembali]





6. Konfigurasi  STM32CubeMX[kembali]

1. Buat dua project baru pada STM32CubeIDE menggunakan

mikrokontroler STM32F103C8T6. 

• Project_Master 

• Project_Slave. 

2. Konfigurasi Project Master

a. Atur pin PB0 sebagai GPIO Input dengan konfigurasi Pull-up.

b. Aktifkan SPI1 dengan pengaturan: 

• Mode: Full Duplex Master 

• Hardware NSS Signal: Output 

3. Konfigurasi Project Slave

a. Atur pin PB0 sebagai GPIO Output, level output High.

b. Atur pin PB1 sebagai GPIO Output, level output High.

c. Aktifkan SPI1 dengan pengaturan: 

• Mode: Full Duplex Slave 

• Hardware NSS Signal: Input 

4. Setelah seluruh konfigurasi selesai, lakukan Generate Code untuk

masing-masing project.


7. Video Simulasi [kembali]



8. Download File [kembali]

Download File Analisa [klik disini]

Download Datasheet STM32F103C8 [klik disini]

Download Datasheet Resistor [klik disini]

Download Datasheet LED [klik disini]

Download Datasheet LDR [klik disini]

Download Datasheet Push Button  [klik disini]


















Komentar

Postingan populer dari blog ini

Modul 1

Modul 1 uP&uC

Tugas Pendahuluan 1 M1