Assoc. Prof. Wiroon Sriborrirux, Founder of Advance Innovation Center (AIC) and Bangsaen Design House (BDH), Electrical Engineering Department, Faculty of Engineering, Burapha University
Lab Objective:
This lab demonstrates the process of reading a potentiometer sensor value through an Analog-to-Digital Converter (ADC) and display with OLED on a PSoC 6 microcontroller.
🔥 Requirements
Resources
Links
🚩 Let start
Create Application
Coding
Coding: Open the main.c file and add the following code to the main(void) function.
main.c
#include"cyhal.h"#include"cybsp.h"#include"stdio.h"#include"cy8ckit_028_sense.h"#include"GUI.h"// Define functionvoidlcd_print_top(constchar* s);voidlcd_print_bot(constchar* s);voidlcd_print_line_n(constchar* s,int linenum);cyhal_i2c_t i2c;cyhal_i2c_cfg_t i2c_cfg = { .is_slave =false, .address =0, .frequencyhal_hz =400000};intmain(void){cy_rslt_t result;cyhal_adc_t adc_obj;cyhal_adc_channel_t adc_chan_0_obj;char str[80]; /* Initialize the device and board peripherals */ result =cybsp_init();CY_ASSERT(result == CY_RSLT_SUCCESS);__enable_irq(); /* Initialize i2c */ result =cyhal_i2c_init(&i2c, CY8CKIT_028_SENSE_PIN_I2C_SDA, CY8CKIT_028_SENSE_PIN_I2C_SCL,NULL);CY_ASSERT(result == CY_RSLT_SUCCESS); result =cyhal_i2c_configure(&i2c,&i2c_cfg);CY_ASSERT(result == CY_RSLT_SUCCESS); /* Initialize the OLED display */ result =mtb_ssd1306_init_i2c(&i2c);CY_ASSERT(result == CY_RSLT_SUCCESS); /* ADC conversion result. */int adc_out; /* Initialize ADC. The ADC block which can connect to pin 10[6] is selected */ result =cyhal_adc_init(&adc_obj, P10_6,NULL);// ADC configuration structureconstcyhal_adc_config_t ADCconfig ={ .continuous_scanning =false, .resolution =12, .average_count =1, .average_mode_flags =0, .ext_vref_mv =0, .vneg = CYHAL_ADC_VNEG_VREF, .vref = CYHAL_ADC_REF_VDDA, .ext_vref = NC, .is_bypassed =false, .bypass_pin = NC };// Configure to use VDD as Vref result =cyhal_adc_configure(&adc_obj,&ADCconfig); /* Initialize ADC channel, allocate channel number 0 to pin 10[6] as this is the first channel initialized */ const cyhal_adc_channel_config_t channel_config = { .enable_averaging = false, .min_acquisition_ns = 220, .enabled = true };
result =cyhal_adc_channel_init_diff(&adc_chan_0_obj,&adc_obj, P10_6, CYHAL_ADC_VNEG,&channel_config);GUI_Init();for (;;) { /* Read the ADC conversion result for corresponding ADC channel. Repeat as necessary. */ adc_out =cyhal_adc_read(&adc_chan_0_obj);sprintf(str,"ADC = %d\r\n", adc_out);lcd_print_top(str);cyhal_system_delay_ms(100);sprintf(str,"Applied ES Lab");lcd_print_line_n(str,2);sprintf(str,"Lab 112 ADC read");lcd_print_line_n(str,4);lcd_print_bot("Template");cyhal_system_delay_ms(1000); }}// Create function for OLEDvoidlcd_print_top(constchar* s){GUI_GotoXY(0,0);GUI_DispString(s);}voidlcd_print_bot(constchar* s){GUI_GotoXY(0,50);GUI_DispString(s);}voidlcd_print_line_n(constchar* s,int linenum){ //linenum is 1-6int line = (linenum-1)*10;GUI_GotoXY(0,line);GUI_DispString(s);}
Build the Application
Launching the Application
Note: Before launching the program to the board, make sure that you have already connected the board to the computer through a USB cable.
Result
🎉 Congratulations! You can now complete Lab105
Supported toolchains (make variable 'TOOLCHAIN')
GNU Arm® embedded compiler v10.3.1 (GCC_ARM) - Default value of TOOLCHAIN