顯示具有 Cypress PSOC 標籤的文章。 顯示所有文章
顯示具有 Cypress PSOC 標籤的文章。 顯示所有文章

2017年5月13日 星期六

PSoC 5LP - CY8CKIT-059 + SD112-45-11-221 光電二極體(PD)

     光電二極體與常規的半導體二極體基本相似,只是光電二極體可以直接暴露在光源附近或通過透明小窗、光導纖維封裝,來允許光到達這種器件的光敏感區域來檢測光訊號。許多用來設計光電二極體的二極體使用了一個PIN結,而不是一般的PN接面,來增加器件對訊號的響應速度。光電二極體常常被設計為工作在逆向偏壓狀態。
   一個光電二極體的基礎結構通常是一個PN接面或者PIN結。當一個具有充足能量的光子衝擊到二極體上,它將激發一個電子,從而產生自由電子(同時有一個帶正電的電洞)。這樣的機制也被稱作是內光電效應。如果光子的吸收發生在結的空乏層,則該區域的內電場將會消除其間的屏障,使得電洞能夠向著陽極的方向運動,電子向著陰極的方向運動,於是光電流就產生了。實際的光電流是暗電流和光照產生電流的綜合,因此暗電流必須被最小化來提高器件對光的靈敏度。

   SD112-45-11-221 內含放大器的光電二極體單顆報價80USD算是超級貴的基礎元件。

   PSoC 5LP 內建20Bit的 Delta-Sigma ADC, Delta-Sigma ADC 由微分器、積分器構成的ΔΣ調變電路,會因其微分特性而對量化雜訊(Quantization noise)產生一種高通濾波的效果。一般線性PCM中產生的量化雜訊平均分布在各頻率上,基於前述特性,可以將量化雜訊推往高頻,而產生noise shaping功效。將取樣頻率設高,則人耳可聽到的頻段相對低頻,此時將已經被推往高頻的量化雜訊以低通濾波器濾除,則可以得到量化雜訊較少的原訊號。

SD112-45-11-221



SD112-45-11-221  接腳圖

SD112-45-11-221  需要負電源,我使用LMC7660 把+5V轉換成-5V


PSoC 5LP  規劃內部線路


PSoC 5LP  ADC_Delsig_1 設定


PSoC 5LP 接腳設定,A_in 接 SD112-45-11-221 ,A_in2接地線。


Main 程式碼


#include <project.h>
#include <TFT.h>
#include <device.h>
#include <stdio.h>                    

extern uint16_t MAX_X, MAX_Y ;        

#if defined (__GNUC__)

    asm (".global _printf_float");
#endif

int main()
{
 
    int16 output;
char8 str[10];
 
    SPIM_Start();
 
    ADC_DelSig_1_Start();

    ADC_DelSig_1_StartConvert();
 
 
    TFT_Init(1);
    TFT_FillScreen(0, MAX_X, 0, MAX_Y, BLACK);
    TFT_DrawString("ADC_Output",  0, 0, 2, GREEN);
 
for(;;)
    {
        if(ADC_DelSig_1_IsEndConversion(ADC_DelSig_1_RETURN_STATUS))
        {
            output = ADC_DelSig_1_GetResult16();
output = ADC_DelSig_1_CountsTo_mVolts(output) ;
sprintf(str, "%d mV", output);

TFT_DrawString("         ",1,0,2,RED);
            TFT_DrawString(str,1,32,2,RED);
CyDelay(1000u);
            TFT_FillRectangle(0,  32,   320,    64, BLACK);
        }
 
    }
}
/* [] END OF FILE */

上傳到後PSoC 5LP - CY8CKIT-059就會開始顯示光度值,SD112-45-11-221 的RG高達600Mohm 一般亮度夏一定爆表!!

這是閱讀的亮度下,這已經是超過飽和值。


白天關燈後還是爆表。


關燈再用罩子罩住還會有1.4V輸出。

PSoC 5LP 的 Delta-Sigma ADC 的確可抑制雜訊。

2017年1月12日 星期四

PSoC 5LP - CY8CKIT-059 + Adafruit 2.4" TFT Breakout 測試

****使用軟體版本 PSoC Creator 4.0 ****

    Adafruit 2.4" TFT 主控晶片是採用ILI9341仿間有很多採用ILI9341的 TFT LCD 電源與控制信號只接受3.3VAdafruit 電源與控制信號可接受5V。

 先到這裡下載 element14 在 PSoC 4200 上做好的範例下載後解壓縮。

https://www.hackster.io/rayburne/psoc-4-using-the-color-glcd-ili9341-8c92f5


開啟PSoC Creator 選擇使用 CY8CKIT-059。


使用線路圖。


填入專案名稱與路徑。


 1.會出現一張空白線路圖。

  2. 將剛剛下載的檔案目錄內的 Bitmaps.h  device.h  fonts.h TFT.c TFT.h 複製到專案工作目錄下C:\Users\${name}\Desktop\PSOC\ILI9341\ILI9341.cydsn



在左邊 Header Files 按滑鼠右鍵 ADD >>  Existing Item...


將工作目錄內的 Bitmaps.h  device.h  fonts.h  TFT.h 加入專案。


加好後專案就會有這四個檔案。


在Source Files 案右鍵 ADD  >>  Existing Item...


將工作目錄內的 TFT.c 加入專案。


1.在右邊零件區搜尋SPI。

2.將SPI Master [V2.50] 拖曳進線路圖內。
.

1. 在零件區搜尋PIN。
2. 拖曳4個 Digital Output Pin [v2.20] 進線路圖更改名稱為MOSI SCK CS D_C。
3. 拖曳1 個 Digital Output Pin [v2.20] 進線路圖更改名稱為 MISO。


接好線路圖 。


1.用滑鼠點兩下SPIM_1這個零件。
2.將名稱改為SPIM Data Bits : 改為 8 Bit Rate: 改為 12 Mbps。


在Advanced 的地方 圈選 Internal Clock 勾選 Enable High Speed Mode Rx Buffer Size (8-bit words) 填入 8  Tx Buffer Size (8-bit words) 填入 8 然後按OK。


點選左邊 Desing Wide Resources (ILI9341.cydwr) 開始配置接腳。


綠色部分為可配置接腳。

接腳配置完成。


編輯 main.c

#include <project.h>
#include <TFT.h>
#include <device.h>
#include <stdio.h>                  

extern uint16_t MAX_X, MAX_Y ;      

int main()
{
    SPIM_Start();
    TFT_Init(3);  
    TFT_FillScreen(0, MAX_X, 0, MAX_Y, BLACK);
 
    while(1)
 
    {
 
    TFT_DrawString("TFT TEST...",  15, 50, 1, GREEN);
    CyDelay(1000);
    TFT_FillRectangle(0,  50,   320,    50, BLACK);
 
    TFT_DrawString("TFT_FillRectangle",  15, 50, 1, RED);
    CyDelay(1000);
 
    TFT_FillRectangle(0,  0,   320,    20, BLACK);

     
    TFT_FillCircle(160, 120, 50,RED);
    CyDelay(1000);
 
    TFT_FillCircle(160, 120, 50,BLACK);
 
    TFT_FillScreen(0, MAX_X, 0, MAX_Y, RED);
    TFT_FillScreen(0, MAX_X, 0, MAX_Y, GREEN);
    TFT_FillScreen(0, MAX_X, 0, MAX_Y, BLUE);
 
    TFT_FillScreen(0, MAX_X, 0, MAX_Y, BLACK);
 
    }
}
//******
輸入好後按燒錄。


燒錄完成後就會開始顯示測試畫面。




2016年1月6日 星期三

CYPRESS PSoc4 CY8CKIT-049-42XX 6通道數位電壓表

CYPRESS PSoc4 CY8CKIT-049-42XX  6通道數位電壓表 

CYPRESS PSoc4 CY8CKIT-049-42XX 開發粄一片只要 4 美元


  前段是USB轉URAT 後段是 PSOC 4200,買來折開前段當USB轉URAT用都太划算!前段拿去當別的開發用了後端當然也不能浪費.

 這是為了插入麵包板和好Pin的情形.



   之前有買 CY8CKIT-059 就用CY8CKIT-059的SWD,不用另外建uratboot

    開啟PSoC Creator -->新專案 --> 選IC (PSoC4200) --> 檔名 -->畫線路圖


ADCmux 內容

  

IC 腳位配置圖


寫 main.C

/* ========================================
 *
 * Copyright YOUR COMPANY, THE YEAR
 * All Rights Reserved
 * UNPUBLISHED, LICENSED SOFTWARE.
 *
 * CONFIDENTIAL AND PROPRIETARY INFORMATION
 * WHICH IS THE PROPERTY OF your company.
 *
 * ========================================
*/

#include <printf.h>
#include "Nokia5110LCD.h"
#include <ADCmux.h> 

void initHarware()

{
    
    CyGlobalIntEnable;          //啟動中斷
    
    ADCmux_Start();            //啟動ADC
    
    ADCmux_StartConvert();     //開始轉換
   
}
                 
    char buffer[16];                    //字元暫存
    
    int16 result;                         //ADC 轉換後數值
    

int main()                               //主程式
{
    initHarware();                    //  
    LCD_Init();                       //
   
    for(;;)
    { 
            
    ADCmux_IsEndConversion(ADCmux_WAIT_FOR_RESULT);   // 等待ADC中斷
 
    result = ADCmux_GetResult16(0) / 2 ;                                           // ADC0 的值 /2 存入 result
    
    LCD_Clear();    //清除LCD
        
sprintf(buffer, "Ch0= %d", result);                                    // "Ch0= %d" result 轉成ASCII 存回 beffer
    LCD_gotoXY(0,0);                         //LCD 游標回0,0
    LCD_String(buffer);                       //LCD 顯示 buffer 內容
    LCD_gotoXY(63,0);                      //LCD 游標 63,0
    LCD_String("mV");                      //顯示 mV 字元
    
    result = ADCmux_GetResult16(1) / 2 ;      //第二通道
    
sprintf(buffer, "Ch1= %d", result);   
    LCD_gotoXY(0,1);
    LCD_String(buffer);
    LCD_gotoXY(63,1);
    LCD_String("mV");
    
    result = ADCmux_GetResult16(2) / 2 ; 
    
sprintf(buffer, "Ch2= %d", result);   
    LCD_gotoXY(0,2);
    LCD_String(buffer);
    LCD_gotoXY(63,2);
    LCD_String("mV");
    
    
   result = ADCmux_GetResult16(3) / 2 ;
    
sprintf(buffer, "Ch0= %d", result);
    LCD_gotoXY(0,3);
    LCD_String(buffer);
    LCD_gotoXY(63,3);
    LCD_String("mV");
        
    result = ADCmux_GetResult16(4) / 2 ; 
    
sprintf(buffer, "Ch1= %d", result);   
    LCD_gotoXY(0,4);
    LCD_String(buffer);
    LCD_gotoXY(63,4);
    LCD_String("mV");
        
    result = ADCmux_GetResult16(5) / 2 ; 
    
sprintf(buffer, "Ch2= %d", result);   
    LCD_gotoXY(0,5);
    LCD_String(buffer);
    LCD_gotoXY(63,5);
    LCD_String("mV");
    
    
    CyDelay(1000);  //延遲一秒


  
    }
}

/* [] END OF FILE */


快速鍵  Ctrl + F5 完成



2016年1月4日 星期一

Cypress CY8CKIT-049-42xx 超音波測距

   Cypress  CY8CKIT-049-42xx  超音波測距

本實驗使用 :

 Cypress  CY8CKIT-049-42xx 開發粄     X 1
 40字元 X2 行  LCM                                 X 1
 超音波感測器  HC-SR04                         X 1
 軟體環境 PSoC Creator 3.3

  開啟 PSoC Creator 3.3
File --> New --> Project..



選擇 Target device --> PSoC4200  -->Next


選擇 Empty schematic 用空白線路圖 -->Next


選擇新的工作區,填入工作區名稱,選哲存放位置,填入專案名稱


預設就是一張空白線路圖.


      要顯示距離在LCM上需要一個LCM驅動,右邊零件區 Display -> Character LCD 將這零件拉進線路圖中.


在右下角有這顆零件的Datasheet.


     點兩下這個LCD_Char_1零件,將Name 改成 LCD_Char , LCD Custom Character Set 改成 Horizontal Bargraph -->OK.


     超音波測距需要一個Timer Counter , 在右邊零件區 Digital --> Functions --> Timer Counter 將這零件拉進線路圖中.


點兩下這個 Timer_1 零件,將 Name 改成 Timer.


      點選 Timer/Counter 將 Run mode : 改成 One shot , 
勾選 On compare/capture count, rolad 
勾選 Rising edge, start 勾選 Rising edge, stop 
勾選 Falling edge, capture 勾選 Falling edge.


Timer 需要一個 Clock ,在右邊零件區 System --> Clock 將這零件拉進線路圖中.


點兩下這個 Clock_1 零件,將 Frequency  改成 1Mhz,Tolerance改成 -2% +2%.


Timer 觸發後需要一個 中斷控制器 ,在右邊零件區 System -->Interrupt 將這零件拉進線路圖中.


點兩下這個 isr_1 零件,將 Name 改成 ISR.


     
    超音波模組需要兩個信號接腳 Trig & Echo , Trig是通知超音波模組開始發送信號,Echo是超音波模組回報收到回音.
      需要一輸出接腳接到超音波模組的Trig,右邊零件區 Ports & Pin -> Digital Output Pin 將這零件拉進線路圖中.


點兩下這個 Pin_1 零件,將 Name 改成 Trig,HW connection 不勾選.

     
    需要一輸入接腳接到超音波模組的Echo,右邊零件區 Ports & Pin -> Digital Input Pin 將這零件拉進線路圖中.


點兩下這個 Pin_1 零件,將 Name 改成 Echo.


       CY8CKIT-049-42xx 上有一個LED,可用來指示超音波偵測時同步點亮,確認程式運作正常
需要一輸出接腳接到 Y8CKIT-049-42xx LED,右邊零件區 Ports & Pin -> Digital Output Pin 將這零件拉進線路圖中.


    點兩下這個 Pin_1 零件,將 Name 改成 LED,HW connection 不勾選. 勾選 External terminal

    再來就需佈線,按 "w" 鍵 開始佈線,滑鼠在 + 形狀時點一下要接線的第一點拉到第二點再點一下,完成後如圖


滑鼠點兩下左上角的 Ultrasonic.cydwr 配置IC實際對外輸出腳位



點選右上角 port 會列出可用的Pin,綠色為可選用.


選好後中間IC圖示會標註目前指定Pin腳的功能


點選左邊 main.c 開始寫程式.

//以下為 main.c 內容

#include <project.h>

// 初始化設定
int16 i =0;
int distance=0;

// 中斷設定
CY_ISR(Timer_ISR_handler)
{
    // 計時器 1Mhz 一個脈衝=1uS
    Timer_ClearInterrupt(Timer_INTR_MASK_CC_MATCH);
    i= Timer_ReadCounter();    
    
    // 超音波each回信號 58 uS = 1 cm
    
    distance =i/58;
   
    }

int main()

{
// 啟動計時器
    Timer_Start();
// 啟動中斷
    CyGlobalIntEnable; 
    ISR_StartEx(Timer_ISR_handler);

    
// 啟動 LCD    
    LCD_Char_Start();
    LCD_Char_DisplayOn();
    
             
        for(;;)
        {
    
    CyDelay(500);    // 延遲500ms
    
    // 啟動超音波
    Trig_Write(1);
    LED_Write(1);
    CyDelayUs(10);    //延遲10us
    Trig_Write(0);
    LED_Write(0);   
    
    LCD_Char_ClearDisplay();
   
    LCD_Char_Position(0,0);
    LCD_Char_PrintString("CY8CKIT-049-42xx  UltraSonic");
    
    LCD_Char_Position(1,0);
    LCD_Char_PrintString("Distance: ");
    
    LCD_Char_Position(1,10);
    LCD_Char_PrintNumber(distance);
    
    LCD_Char_Position(1,14);
    LCD_Char_PrintString("cm");    
    
    LCD_Char_Position(1,25);
    LCD_Char_PrintString("Story Chen");   
    
}
          
}

/* [] END OF FILE */


滑鼠點Debug Program 或 快速鍵 Ctrl + F5 開始編譯燒錄


沒錯誤就可看到成果了