DDZZ669

  • 2019-06-27
  • 加入了学习《黑科技探头:碰一下就知电流大小(英文)》,观看 黑科技探头:碰一下就知电流大小(英文,国外网友评测)

  • 2019-04-14
  • 加入了学习《书写机器演示》,观看 书写机器演示

  • 2019-01-04
  • 回复了主题帖: 什么?微软是故意让你装盗版!

    国产软件要加油了

  • 2018-12-25
  • 回复了主题帖: 【树莓派3B+测评】使用USB摄像头

    donatello1996 发表于 2018-12-25 10:16 我的摄像头比较便宜所以拍出来的图片比较辣鸡。。。你这个是多少钱买的?
    就是这个:

  • 回复了主题帖: 【树莓派3B+测评】使用USB摄像头

    donatello1996 发表于 2018-12-25 10:16 我的摄像头比较便宜所以拍出来的图片比较辣鸡。。。你这个是多少钱买的?
    这是我们实验室的一个USB摄像头,不清楚价格

  • 2018-12-24
  • 回复了主题帖: CY8CKIT-149 PSoC 4100S测评评奖结果公布

    我的地址就是论坛系统中的那个地址:)

  • 2018-12-21
  • 发表了日志: 【CY8CKIT-149 PSoC 4100S测评】+LED开关计数与LCD显示(结项报告)

  • 发表了主题帖: 【CY8CKIT-149 PSoC 4100S测评】+LED开关计数与LCD显示(结项报告)

    [项目概述] 本项目将CY8CKIT-149 PSoC 4100S作为控制核心,通过外接LCD1602作为显示设备,外接按键和LED作为信号接收与显示测试。 整个项目硬件如下图所示。其中PSoC板子上的按键和外接的按键共用一个引脚,目的是测试外接的按键与板子上的按键效果一样。 PPSoC板子上的LED和外接的LED也共用一个引脚,但PSoC板子上的LED为低电平点亮,自制板子上的LED为高电平点亮。 项目实现的功能通过按键来控制LED的亮灭,同时将LED的状态(PSoC板子上的那个LED)显示在LCD1602上。 并且对按键按下的次数进行计数,将计数值也显示在LCD1602上。 另外,PSoC板子上的3个触摸按键控制与之相邻的LED的亮灭(实时指示触摸按键是否按下)。 [硬件设计] 1)LCD1602底座的制作      LCD1602的底座制作在上个帖子中已有介绍,请查看这里。 2)按键与LED测试小板的制作      制作了一个8路LED+3路按键的测试小板,如下图,8路LED为共地连接,即均为高电平点亮模式。      3路按键也为共地连接,按下按键后按键信号接地。 此次测试只用到小板子的1个LED和1个按键。 [软件设计] 软件的编写使用新建空项目的方式,如何新建空项目参考之前的这篇。 新建项目后,先在原理图页面添加需要用到的元件,如下图。 需要用到LCD,电容传感器(CapSense),IIC模块(用于电容传感器的通信),按键(SW),4个LED。 需要注意的是,PSoC上三个电容按键的Tx引脚在硬件连接上为公共引脚,需要手动配置一下。 双击CapSense模块,首先要手动添加3个电容触摸按键,如下图。 然后修改电容按键模式为CSX(Mutual-cap), 这个时候你们会看到下面的Pins需要8个,我这里显示6个是我已经修好了3个Tx为公共引脚。 修改公共引脚的方式为进入Advanced界面,打开按键1和按键2的Tx界面,将右侧Selected pins选择按键0的Tx,即与按键0的Tx共用一个引脚。 修改好后,再返回看Basic界面,Pins required就会变为6。 接下来进行引脚分配,如下图,电容按键的Tx公共引脚为P0.2,LCD1602这次选用P2口。 最后就是修改主程序了,我是参考各个例程中的代码进行摘取、拼接、修改完成的。 #include "project.h" #define LED_ON                                                (0u) #define LED_OFF                                                (1u) void LED_Control(); void delay_ms(uint16 t) {         uint16 a,b,c;     for(a=100;a>0;a--)         for(b=114;b>0;b--)                    for(c=t;c>0;c--); } typedef enum {     SENSOR_SCAN = 0x01u,                    WAIT_FOR_SCAN_COMPLETE = 0x02u,          PROCESS_DATA = 0x03u,                } DEVICE_STATE; _Bool state=LED_OFF; int main(void) {     DEVICE_STATE currentState = SENSOR_SCAN;       CyGlobalIntEnable; /* Enable global interrupts. */     LED_8_Write(state);     EZI2C_Start();     CapSense_Start();     /* Place your initialization/startup code here (e.g. MyInst_Start()) */     LCD_1602_Start();        LCD_1602_Position(0,0);     LCD_1602_PrintString("LED8:");     LCD_1602_Position(1,0);     LCD_1602_PrintString("Count:");     uint8 count=0;     LCD_1602_Position(0,6);     LCD_1602_PrintString("OFF");     LCD_1602_Position(1,7);        LCD_1602_PrintInt8(count);     for(;;)     {         if(SW1_Read()==0)         {             delay_ms(10);             if(SW1_Read()==0)             {                 state=!state;                 LED_8_Write(state);                 LCD_1602_Position(0,6);                 if(state)                     LCD_1602_PrintString("OFF");                 else                     LCD_1602_PrintString("ON ");                 count++;                 LCD_1602_Position(1,7);                    LCD_1602_PrintInt8(count);                          while(SW1_Read()==0){}             }         }         switch(currentState)         {             case SENSOR_SCAN:                     /* Initiate new scan only if the CapSense block is idle */                 if(CapSense_NOT_BUSY == CapSense_IsBusy())                 {                           /* Scan widget configured by CSDSetupWidget API */                     CapSense_ScanAllWidgets();                     /* Set next state to WAIT_FOR_SCAN_COMPLETE  */                     currentState = WAIT_FOR_SCAN_COMPLETE;                 }                 break;             case WAIT_FOR_SCAN_COMPLETE:                 /* Put the device to CPU Sleep until CapSense scanning is complete*/                 if(CapSense_NOT_BUSY != CapSense_IsBusy())                 {                     CySysPmSleep();                 }                 /* If CapSense scanning is complete, process the CapSense data */                 else                 {                     currentState = PROCESS_DATA;                 }                 break;             case PROCESS_DATA:                                /* Process data on all the enabled widgets */                 CapSense_ProcessAllWidgets();                 /* Controls LEDs Status based on the result of Widget processing. */                 LED_Control();                 /* Set the device state to SENSOR_SCAN */                 currentState = SENSOR_SCAN;                   break;               default:                 break;         }     } } void LED_Control() {     /*Turn ON/OFF LEDs based on the status of the corresponding CapSense buttons*/     LED_11_Write(CapSense_IsWidgetActive(CapSense_BTN0_WDGT_ID) ? LED_ON : LED_OFF );     LED_12_Write(CapSense_IsWidgetActive(CapSense_BTN1_WDGT_ID) ? LED_ON : LED_OFF );     LED_13_Write(CapSense_IsWidgetActive(CapSense_BTN2_WDGT_ID) ? LED_ON : LED_OFF ); } 复制代码 [结果分析] 按键和LED都可以正常工作,LCD1602上的计数值是16进制显示的,下一步想把它修改为10进制显示。 另外,LCD1602有时会在个别区域显示不正确,不知道是屏幕问题还是程序问题,需要进一步探究。 不过,整体的功能已经实现,视频演示效果如下。 [视频效果演示] $('flv_Jyc').innerHTML=(mobileplayer() ? "" : AC_FL_RunContent('width', '300', 'height', '600', 'allowNetworking', 'internal', 'allowScriptAccess', 'never', 'src', 'https://player.youku.com/player.php/sid/XMzk3NDg3Njk3Mg==.html/v.swf', 'quality', 'high', 'bgcolor', '#ffffff', 'wmode', 'transparent', 'allowfullscreen', 'true')); [之前的测评链接] 【CY8CKIT-149 PSoC 4100S测评】+开箱展示 【CY8CKIT-149 PSoC 4100S测评】+软件安装与程序下载 【CY8CKIT-149 PSoC 4100S测评】+PWM分析与使用(上) 【CY8CKIT-149 PSoC 4100S测评】+PWM分析与使用(下) 【CY8CKIT-149 PSoC 4100S测评】+UART串口使用 【CY8CKIT-149 PSoC 4100S测评】+定时器/计数器的使用 【CY8CKIT-149 PSoC 4100S测评】+LCD的使用 【CY8CKIT-149 PSoC 4100S测评】+新建空白工程(以Key-LED为例)

  • 2018-12-14
  • 发表了主题帖: 【CY8CKIT-149 PSoC 4100S测评】+新建空白工程(以Key-LED为例)

    之前的探索都是在官方例程上进行修改,这次我们新建一个空白工程,并添加元件进行项目编写。 并以简单的按键控制LED的小例子进行介绍。 首先是新建一个空白工程,如下图: 完成后可以看到一个空白的原理图,左边项目列表也只有主函数,如下图: 我们可以打开主函数看一下,并先编译一下,如下图: 在原理图面部拉入一个输入Pin和一个输出Pin,输入作为按键的输入,输出作为控制LED亮灭,如下图: 板子上有一个用户按键(3.7)和一个用户LED(3.4),分配给引脚配置: 看一下板子原理图上用户按键和用户LED,按键按下是接地,LED需要高电平点亮: 先编译一下程序,报错,提升输出需要连接一个东西,如下图: 我们在原理图上不需要连接LED,可以将这个引脚去掉,双击进行,取消HW connection的勾选,如下图: 再次编译OK。 我们可以来写主函数了,想要实现的功能是按键按一下,LED的状态翻转一下,即按一下亮,再按一下灭。 写了一个延时函数用于按键消抖时使用。 定义bool变量控制LED的状态。 while(Pin_Key_Read()==0){}语句是等待按键松开。 #include "project.h" void delay_ms(uint16 t) {         uint16 a,b,c;     for(a=100;a>0;a--)         for(b=114;b>0;b--)                    for(c=t;c>0;c--); } int main(void) {     CyGlobalIntEnable; /* Enable global interrupts. */     Pin_LED_Write(0);     /* Place your initialization/startup code here (e.g. MyInst_Start()) */     _Bool STATE=1;     for(;;)     {         /* Place your application code here. */         if(Pin_Key_Read()==0)         {             delay_ms(10);             if(Pin_Key_Read()==0)             {                 Pin_LED_Write(STATE);                 STATE=!STATE;                 while(Pin_Key_Read()==0){}             }         }     } } 复制代码 编译下载,LED却常亮,按键无效??? 仔细分析,忘了给按键加上拉,因为此时按键引脚位悬空状态。 研究了一下key中的函数,发现好像没有函数可以用于配置上拉模式,最后在原理图界面找到了。 双击Pin_Key,驱动模式Drive mode选择Open drain,drives high(需要取消HW connection勾选),初始状态选择High,如下图: 再次编译下测,测试OK。 没有录视频,两张测试图片如下:

  • 发表了日志: 【CY8CKIT-149 PSoC 4100S测评】+新建空白工程(以Key-LED为例)

  • 2018-12-10
  • 发表了主题帖: 【CY8CKIT-149 PSoC 4100S测评】+LCD的使用

    继续研究官方自带的例程,这次是用的是I2C_LCD这个例子,例程的打开方式请参考之前PWM例程打开的步骤。 因为手边只有LCD1602,并且没有I2C接口,那么就在这个例程上改成LCD1602。 根据LCD1602的基本配置电路,我做了一个小转接板,方便接线,如下图。 3脚VO是调节字体的亮度,我找了给330欧的电阻,这个大小与具体的LCD有关,能接个可调电阻最好。 另外还要在PSoC4100板子上焊接上排针,用于连接LCD1602。 打开例程,我们添加一个Character_LCD模块,并重命名为LCD_1602。 双击该模块,默认的设置先不用改,点开Datesheet可以查看LCD的帮助文档。 在文档中可以找到接口使用方法,只需要使用LCD1602的DB6-DB7的4个数据位,外加3个控制位。 来到引脚分配页面,只关心红框中我们添加的,可以使用其默认分配的引脚0.0-0.6。 再来修改一下主函数: int main(void) {     CyGlobalIntEnable;     LCD_1602_Start();        LCD_1602_Position(0,0);     LCD_1602_PrintString("PSOC4100 LCD1602");     LCD_1602_Position(1,0);     LCD_1602_PrintString("hello eeworld ! ");     for(;;)     {} } 最终的效果如下图:

  • 发表了日志: 【CY8CKIT-149 PSoC 4100S测评】+LCD的使用

  • 2018-12-08
  • 回复了主题帖: 【CY8CKIT-149 PSoC 4100S测评】+定时器/计数器的使用

    wwd7928 发表于 2018-12-8 09:48 板子哪里买的?
    论坛提供的,测评板块

  • 2018-12-06
  • 发表了主题帖: 【CY8CKIT-149 PSoC 4100S测评】+定时器/计数器的使用

    继续研究官方自带的例程,这次是用的TCPWM_P4_periodic_Interrupt01这个例子,例程的打开方式请参考之前PWM帖子中关于PWM例程打开的步骤。 只从TCPWM_P4_periodic_Interrupt01这个名字也看不出来具体作用,分析之后原来是定时器/计数器配合中断来实现LED的周期性亮灭。 先来看一下电路原理,中间的Timer定时器很显眼,左边是时钟电路,右边是中断以及LED电路。 右上角的LED_Green2是我添加的。 双击Timer,原来是我们之前用的PWM模块,只是这次选用Timer/Counter功能它就成了定时器了。 想想也对的,之前用的stm32的定时器本身也是可以产生PWM的。 看一下定时器的配置,Period原本是999,我改成500了,而时钟频率是1kHz. 1kHz什么概念?就是1秒1000次,配合计数器的500,就是500ms完成一次计数,给中断发一个信号。 对了,还要进行引脚配置,如图,新添加的LED2配置为5.2口,板子上就在5.5的旁边。 来看一下主函数: int main() {        /* Enable global interrupt */     CyGlobalIntEnable;     /* Set up and enable a TCPWM interrupt handler. */     Isr_Timer_StartEx(InterruptHandler);     /* Start the TCPWM Component */     Timer_Start();     for(;;)     {         /* Do nothing */     } } 复制代码 很简洁,各种初始化后进入无限循环,没什么说的。 再来看一下中断函数: _Bool n=0; CY_ISR(InterruptHandler) {     /* Clear the TCPWM terminal count interrupt */     Timer_ClearInterrupt(Timer_INTR_MASK_TC);     /* Toggle the green LED state */     LED_Green_Write(~LED_Green_Read());     n=!n;     if(n==1)         LED_Green2_Write(~LED_Green2_Read()); } 复制代码 我添加了一个bool变量 n,进入中断后取反一下,如果n为1,则翻转一下LED2的状态。 也就是进入两次中断后翻转一下LED2的状态。 上面分析了根据时钟频率以及定时器的计数值,500ms进入一次中断,那么我添加的LED2就是1000ms, 即1秒翻转一次亮灭状态。 而程序原有的LED是进入中断一次就翻转,即0.5秒翻转一次亮灭状态。 下载程序运行,满足分析的效果,没有录视频,拍了两个照片,如下:

  • 发表了日志: 【CY8CKIT-149 PSoC 4100S测评】+定时器/计数器的使用

  • 2018-12-01
  • 发表了主题帖: 【CY8CKIT-149 PSoC 4100S测评】+UART串口使用

    本帖最后由 DDZZ669 于 2018-12-1 11:34 编辑 这次来研究一下UART串口例程(Software Transmit UART),例程的打开方式可以参考之前PWM例程打开的步骤。 打开例程之后,会出现如下界面,例子中的原理图注解的很详细,电脑都画出来了。 串口波特率57600,双击SW Tx UART模块可以更改波特率以及其它参数。 图中的SW Tx UART模块是指开发板(PSoC kit)上中间那块主控板上的UART接口,KitProg是指开发板前部的那个小板, 这个小板既可以下载程序,又可以当USB转串口模块使用,可以说是十分方便了。 再来看一下主程序,如下图,依然十分简洁,串口开启之后,就是发数据了。 可以看到可以发字符串(String)、单字节的十六进制数(HexByte)、双字节的十六进制数(HexInt)、数组(Array)等。 下载该程序,连接板子到电脑的USB,随便打开一种串口调试软件,选择正确的串口号和波特率,就可以看到串口输出了,如下图: 我们可以试着改一下例程中的主程序,输出自己想要的字符,我的修改如下: #include #define DATAARR_LEN         (14u) // Length of dataArray #define SEND_INTERVAL       (2000u) int main() {     uint16 cnt = 0;     uint8 dataArray[DATAARR_LEN]={ 0x48u, 0x65u, 0x6Cu, 0x6Cu, 0x6Fu, 0x20u, 0x45u, 0x45u, 0x77u, 0x6Fu, 0x72u, 0x6Cu, 0x64u, 0x21u };     /*                               H      e      l      l      o    space    E      E      w      o      r      l      d      !    */     SW_Tx_UART_Start();     for(;;)     {         SW_Tx_UART_PutString("CY8CKIT-149 PSoC 4100S Plus Proototyping Kit");         SW_Tx_UART_PutCRLF();         SW_Tx_UART_PutString("Software Transmit UART Component demo");         SW_Tx_UART_PutCRLF();         SW_Tx_UART_PutArray(dataArray, DATAARR_LEN); // Hello EEworld!         SW_Tx_UART_PutCRLF();         SW_Tx_UART_PutString("count(hex): ");         SW_Tx_UART_PutHexInt(cnt);         SW_Tx_UART_PutChar('(');         SW_Tx_UART_PutHexByte((uint8)cnt);         SW_Tx_UART_PutChar(')');         SW_Tx_UART_PutCRLF();         cnt++;         CyDelay(SEND_INTERVAL);         SW_Tx_UART_PutCRLF();     } } 复制代码 字符数组需要修改为字符的ASCII码,字符转ASCII码可以找个转换工具来辅助查找,如我随便在网上搜的在线转换工具: 另外还要根据数组的长度修改DATAARR_LEN的值,不然报错哦。 修改后,下载,观察串口输出,一切正常,如下图:

  • 发表了日志: 【CY8CKIT-149 PSoC 4100S测评】+UART串口使用

  • 2018-11-28
  • 回复了主题帖: 【CY8CKIT-149 PSoC 4100S测评】+PWM分析与使用(上)

    (下篇)地址:http://bbs.eeworld.com.cn/thread-1061508-1-1.html

  • 2018-11-27
  • 回复了主题帖: 【CY8CKIT-149 PSoC 4100S测评】+PWM分析与使用(下)

    上面的嵌入视频貌似看的不是很明显,可以来这里看一下原视频http://v.youku.com/v_show/id_XMzkzODkyMDU1Mg==.html?spm=a2hzp.8244740.0.0。 可以看到左侧的LED亮度较低,右侧中间的LED亮度较高,右上角的为原程序中亮度渐变的LED。

  • 发表了主题帖: 【CY8CKIT-149 PSoC 4100S测评】+PWM分析与使用(下)

    上个帖子PWM分析与使用(上)对官方的PWM例程进行了分析,这篇我们在例程上进行修改实验。 点开cysch文件,在右边的列表中找到PWM模块,它位于Digital分类中,选中名称可将其拖动到左侧原理图中。 双击该模块,调一下占空比,如下图,先改为25535,注意下面波形的变化。 然后添加两个输出引脚,如下图,位于Ports and Pins分类中,将其分别接到PWM的line和line_n上。 我们不使用中断,直接让端口接收PWM的固定占空比波形,另外LED也不必画出,因为输出端口处已经有信号了。 时钟可以和上面的共用一个,可以通过左侧工具栏的导线将各个模块连接起来。 接下来切换到Pins文件来配置端口信息,如下图,可以看到右上角自动显示出刚添加的两个端口,注意此时左侧列表中还没有与新加端口对应的代码文件(后面编译时才会自动生成)。 通过Port一列的下拉列表可以手动分配端口号,如下图: 接下来先编译一下,Oh,出现如下的错误:'clock' requires connection 时钟需要连接? 再切换到cysch文件看一下,好像是线没有真正连接到模块上,删掉线,放大观看连接处的具体位置,重新连接一下。 再次编译,竟然又出现另外的错误。。。如下图,Pin Error,错误文件为cydwr文件。 切换到cydwr文件,也就是端口配置文件,如下图,可以看到端口分配处的警告,大概是选用这个PWM后只可以使用某些特定的引脚。 观察板子上各LED的端口号以及软件中可用的端口号,选择可用的,如下图,最终我选择了P1.4和P5.5,这两个正好可以在板子上找到对应的LED。 再次编译,终于成功!另外也可以看到在左侧的列表里自动生成了端口与PWM模块对应的代码文件。 虽然编译成功了,但我们还需要最后一步:手动修改主程序。 修改也很简单,观察原来的主程序后,发现只需要增加一行PWM_1的启动函数即可,如下图: 最后就是再次编译,下载观察实验现象了,如下图,可以看到原来的LED照常亮度渐变,新加的两个LED也亮了,但好像看不出来PWM的作用(有条件的可以用示波器测一下波形)。 这样,我们再改一下占空比,改为5535,如下图,这下应该就比较明显了,line的低电平时间很长,line_n的高电平时间很长,这样就会使一个LED较亮,另一个LED较暗。 修改后,编译,下载运行,效果和预想的一样,来看演示视频: $('flv_jFm').innerHTML=(mobileplayer() ? "" : AC_FL_RunContent('width', '500', 'height', '375', 'allowNetworking', 'internal', 'allowScriptAccess', 'never', 'src', 'https://player.youku.com/player.php/sid/XMzkzODkyMDU1Mg==.html/v.swf', 'quality', 'high', 'bgcolor', '#ffffff', 'wmode', 'transparent', 'allowfullscreen', 'true'));

最近访客

< 1/4 >

统计信息

已有94人来访过

  • 芯币:533
  • 好友:1
  • 主题:21
  • 回复:55
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言