psoc

OLED Display Control

12월 8, 2019 PSOC No comments , ,

OLED Display Control

 

우선 OLED Display는 Aliexpress에서 저렴한 item으로 구매하였습니다. (약 1300원)

해상도는 128 x 64이며, PSOC에서는 I2C로 control 합니다.
실제 Display를 control하는 chip은 Solomon Systecho의 SSD1306입니다.

해당 control chip과 관련된 library가 존재 합니다.
ssd1306.zip

PSOC에서 TopDesign은 아래와 같이 단순히 I2C와 VCC/GND만 연결해 줍니다.
VCC는 3.3V~5V를 지원하기에 Digital Output으로 High 값으로 해도 충분 합니다. 20mA Output을 가지니 충분한듯 합니다.
GND는 Low로 설정 하였습니다.

실제 main.c code입니다.

#include "ssd1306.h"
...
    I2COLED_Start();
    CyGlobalIntEnable;
    CyDelay(1000);
    
    display_init(DISPLAY_ADDRESS);    
    for(;;)
    { 
        // clearing display
        display_clear();    
        display_update();    

        // drawing a pixel
        gfx_drawPixel(10, 10, WHITE);    
        display_update();
         ... 
     }

단순하게 I2C component만 Start하고 나머지는 ssd1306의 library를 그대로 사용합니다.

실제 출력한 예제 화면 입니다.

UART Logging

10월 19, 2019 PSOC No comments ,

PSOC 개발시 Logging을 사용하기 위해 USB UART를 사용하는 예제 입니다.

TopDesign은 아래와 같이 USBUART Component 를 추가 합니다.
LED는 Test 목적으로 Red, Green, Yellow LED를 ON/OFF 시키도록 할 예정입니다.

초기화 하고, USBUART를 Configuration 합니다.

    /* Start USBFS operation with 5-V operation. */
    USBUART_Start(USBFS_DEVICE, USBUART_5V_OPERATION);
    
    for(;;)
    {
        /* Host can send double SET_INTERFACE request. */
        if (0u != USBUART_IsConfigurationChanged())
        {
            /* Initialize IN endpoints when device is configured. */
            if (0u != USBUART_GetConfiguration())
            {
                /* Enumeration is done, enable OUT endpoint to receive data 
                 * from host. */
                USBUART_CDC_Init();
                break;
            }
        }
    
    }

아래와 같이 USBUART_PutString()을 이용하여, UART로 String을 전송 하여, Log Data를 전송 합니다.
Test 목적으로 LED Control에 3 bit로 write 합니다.

    int count =0;
    for(;;)
    {
        Control_Reg_LED_Write(count % 8);
           
        /* Service USB CDC when device is configured. */
        if (0u != USBUART_GetConfiguration())
        {
            sprintf(buffer, "LED Count 0x%x\r\n", count++);
            USBUART_PutString(buffer);
        }
        CyDelay(100);
    }

Tera Term을 이용하여 COM Port를 통해 UART Data를 Receive한 예

실제 Test를 위한 LED 예제 입니다.

Breathing LED

10월 12, 2019 PSOC No comments ,

PWM을 이용하여 Breathing LED 구현

Result)

Design


PWM 2개를 이용하여 2개의 Period 차이를 XOR Gate를 사용하여 Breathing LED 구현

PWM 출력을 XOR Gate에 연결하여 LED 출력으로 연결

PWM_1 Period: 255, CMP Value: 128
PWM_2 Period: 245, CMP Value: 120

 

Voltage Drop Circuit

10월 12, 2019 PSOC No comments , ,

SZH-PWSDF-036

Power Supply를 구매해서 사용 하고 싶지만, 가격이 비싸서;;;
어차피 주로 Digital Logic으로 구성해서 작업 할 예정이기에, 저렴한 Voltage Drop Kit을 구매하였습니다.

Specification

Input Voltage 4.0V ~ 38V
Output Voltage 1.25V ~ 35V (연속 가변)
Output Current 5A (max) (4.5A 권장)
Size 60mm * 37mm * 18mm
Weight 28g

 
Input Voltage를 USB to 악어 클립 을 사용시, 2.5V, 3.3V로 Drop시킬수 있고
12V Adaptor를 사용하여 12V 이하로 사용 가능 할듯 합니다.

USB를 이용하여 전원 구성하고, Bread Board에 연결하여, PSOC 5LP Dev Kit에 Power를 공급해 보았습니다.