分享PSoC3技术开发和应用资料下载.pdf
《分享PSoC3技术开发和应用资料下载.pdf》由会员分享,可在线阅读,更多相关《分享PSoC3技术开发和应用资料下载.pdf(64页珍藏版)》请在冰点文库上搜索。
LED14_Write(0xFB);
LED14_Write(0xF7);
LED58_Write(0xFE);
LED58_Write(0xFD);
LED58_Write(0xFB);
LED58_Write(0xF7);
然后我们使用下载程序就能看到LED在闪烁。
总结下,上面通过图形和文本编程语言结合,先是使用CREAT生成API函数,然后再调用这些函数,构造自己的功能。
博客地址http:
/PSoC技术开发和应用按键检测技术开发和应用按键检测KEY(三)(三)今天我们的任务是实现按键检测,按下时LED1亮,释放是LED1灭。
我们先看看按键连接原理图,是连到P15_3端口上,默认是低电平。
然后我们配置KEY为数字输入,初始为0,带下拉。
LED为数字输出,初始1,带上拉。
/0,而LED初始为1,所以要使用到NOT非门取反,连线如下:
最后配置好端口,编译下载。
下面是最早结合文本编程,后面有更加简单的方法。
/PSoC技术开发和应用串口显示技术开发和应用串口显示COM(四)(四)串口是普遍采用的通信接口,在计算机到处可见,又称DB9口。
今天我们介绍使用PSOC3的串口与电脑通信。
首先我们任意分配任意分配串口的引脚,这里我们设置串口的RXD对应P5_2,TXD对应P5_0。
好在开发板都把引脚连出来了。
首先我们放置UART模块到顶层设计图中,根据参考说明配置如下图,选择FULL模式,配置通信的波特率,其他默认就好了。
然后配置RXD和TXD端口属性如下:
/http:
/API函数。
下面我们根据里面的API函数构造输出字符串的功能。
(以前beta2.0版本出现的问题就是不支持中文显示,只好都写成英文,现在的5.0可以支持中文显示)主函数如下voiddelay(uint16num)while(num-);
voidputs(uint8*s)while(*s)UART_PutChar(*s+);
UART_PutChar(r);
UART_PutChar(n);
voidmain()/*Placeyourinitialization/startupcodehere(e.g.MyInst_Start()*/UART_Start();
for(;
)/*Placeyourapplicationcodehere.*/UART_PutChar(0x88);
puts(WelcometothePSOCandnon-networktechnologyandapplicationcommunities);
puts(http:
/PSoC技术开发和应用技术开发和应用LUP构造移位器(五)构造移位器(五)针对PSoC3包含的众多数字模块和模拟模块,Cypress提供了集成开发环境PSoCCreator。
PSoCCreator将硬件资源抽象成了众多的功能模块(Component),每个模块实现一种基本功能,例如PWM模块,I2C模块,基本与门,中断响应模块,输入输出管脚等等。
设计者像绘制原理图一样,选择适当模块,将其输入输出与其他模块连接,然后通过每个模块提供的图形化配置向导设置模块参数,之后编写适当的软件代码,即可实现所需功能。
这种模块化的设计方法令设计者能够将更多精力集中在实现应用的功能上,而无需关注许多底层硬件配置细节。
今天我们就使用LUP(lookuptable查表)新建一个4位移位器,使得4个LED逐一闪烁。
1首先新建一个工程,再如下图所示新建一个元件:
2选择LUP并且设置其属性博客地址http:
/按照图中连续,组成移位器,并且设置连线属性4属性设置为bit博客地址http:
/添加输入输出端口,并且生成模型6生成后的效果图7最后使用我们制作好的4位移位器,加入时钟和KEY/LED端口。
8编译生成代码,下载到开发板上,我们看到4个LED循环闪烁,按下KEY复位到初始状态了。
/PSoC技术开发和应用技术开发和应用PWM控制控制LED亮度亮度(六)(六)我们今天就使用PWM控制开发板上LED灯的亮度。
脉冲宽度调制(PWM),是英文“PulseWidthModulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。
简单一点,就是对脉冲宽度的控制。
PSOC3的PWM介绍:
定时器/计数器/PWM外设是一种16位的专用外设,能够提供三种最常用的嵌入式外设功能。
几乎所有嵌入式系统都会使用定时器、计数器和PWM的某种组合。
此PSoC器件系列中包含四个定时器、计数器和PWM实例,此外,还可以根据需要在通用数字模块(UniversalDigitalBlock,UDB)中实例化更多、更高级的定时器、计数器和PWM。
PSoCCreator允许设计人员选择他们所需要的定时器、计数器和PWM功能。
该工具集能够利用大多数可用的最优资源。
借助通过DSI路由连接的输入和输出信号,定时器/计数器/PWM外设可从多个时钟源中进行选择。
借助DSI路由,可以通过DSI访问至任何器件引脚及任何内部数字信号的输入和输出连接。
四个实例中的每一个都具有比较输出、终端计数输出(可选互补比较输出)和可编程中断请求线。
定时器/计数器/PWM可配置为自由运行、单触发或受使能输入控制。
该外设具有定时器复位和捕获输入,以及控制电压比较器输出的非同步停止输入。
该外设全面支持16位捕获。
定时器/计数器/PWM功能包括:
16位定时器/计数器/PWM(仅限递减计数)可选时钟源PWM电压比较器(可针对LT、LTE、EQ、GTE、GT进行配置)在启动、复位和到达终端计数时重新加载周期在到达终端计数、比较结果为真或捕获时生成中断动态计数器读操作定时器捕获模式置为使能信号模式时开始计数自由运行模式单触发模式(在设定的时间长度结束后停止)带死区的互补PWM输出PWM输出非同步停止输入1首先我们放置PWM模块,并设置属性如下:
/分配好端口,我们在main.c加入下面代码voidmain()uint16led0pwmval=0;
uint8dir=1;
/*Placeyourinitialization/startupcodehere(e.g.MyInst_Start()*/PWM1_Start();
/*CYGlobalIntEnable;
*/*Uncommentthislinetoenableglobalinterrupts.*/for(;
)/*Placeyourapplicationcodehere.*/delay(50000);
if(dir)led0pwmval+;
/变亮模式elseled0pwmval-;
/变暗模式if(led0pwmval150)dir=0;
if(led0pwmval=0)dir=1;
PWM1_WriteCompare(led0pwmval);
/更新比较值博客地址http:
/PSoC技术开发和应用按键中断技术开发和应用按键中断ISR(七)(七)今天我们学习下按键中断控制LED亮灭,首先我把版本升级到PSOCcreatorbeta4.1,现在最新出来5.0,正在下载。
1首先我们放置数字输入端口,设置别名KEY,并设置属性。
2设置上升沿中断博客地址http:
/放置中断图标,并连线4修改下代码voidmain()/*Placeyourinitialization/startupcodehere(e.g.MyInst_Start()*/isr_key_Start();
/中断使能函数CYGlobalIntEnable;
/开全局中断for(;
)/*Placeyourapplicationcodehere.*/LED1_Write
(1);
/主函数使得灯灭然后在中断函数里加入是LED翻转的代码CY_ISR(isr_key_Interrupt)LED1_Write(LED1_Read();
/中断使得LED翻转编译后,下载后按下KEY后灯能够亮.出现的问题只会中断一次,后面就没反应了。
清除中断_ClearInterrupt();
/PSoC技术开发和应用按键中断修改(七)技术开发和应用按键中断修改(七)今天看了下论坛里高人的例程,重新修改了下,能够实现按键中断控制LED亮灭。
首先放置这些模块,并设置中断为上升沿然后在主函数里main.c代码为:
#includeCY_ISR_PROTO(waveGen);
voidmain()/*Placeyourinitialization/startupcodehere(e.g.MyInst_Start()*/CYGlobalIntEnable;
/*Uncommentthislinetoenableglobalinterrupts.*/isr_key_Start();
isr_key_SetVector(waveGen);
LED1_Write
(1);
)/*Placeyourapplicationcodehere.*/博客地址http:
/yourInterruptcodehere.*/*#STARTISR_1_Interrupt*/if(LED1_Read()LED1_Write(0);
elseLED1_Write
(1);
/*#END*/3.19-分享我的分享我的PSoC技术开发和应用液晶显示技术开发和应用液晶显示LCD1602(八)(八)我们先看看PSOC关于LCD的介绍:
PSoC液晶显示屏(LCD)驱动器系统是一种高度可配置的外设,能够使PSoC直接驱动众多LCD显示屏。
所有电压都在芯片上生成,从而消除了对外部组件的需求。
借助高达1/16的复用率,CY8C38系列LCD驱动器系统可以驱动多达736个段。
此外,PSoCLCD驱动器模块在设计时还充分考虑了便携器件的省电要求,能够采用不同的LCD驱动模式和断电模式来达到省电的目的。
PSoCCreator提供了一个LCD段驱动组件。
借助组件向导,能够轻松灵活地配置LCD资源。
您可以指定段引脚和公用引脚以及其他选项。
软件能够根据必要的规范对器件进行配置,这得益于PSoC器件固有的可编程性。
今天我们就实现字符型LCD的模块,显示英文字符串。
首先我们放置模块,并打开帮助文档:
/我们按照文档叙述的连接方式3然后在main函数写入:
voidmain()/*Placeyourinitialization/startupcodehere(e.g.MyInst_Start()*/LCD_1602_Start();
LCD_1602_Position(0,0);
LCD_1602_PrintString(PSOCandLCD1602);
LCD_1602_Position(1,0);
LCD_1602_PrintString();
/PSoC技术开发和应用模数转换技术开发和应用模数转换ADC(九)(九)CY8C38器件包含一个DeltaSigmaADC。
此ADC能够提供差分输入、高分辨率和卓越的线性度,是音频信号处理和测量应用的绝佳ADC选择。
转换器的正常操作是16位,48ksps。
ADC可以配置为以180sps或更低的数据速率输出20位分辨率。
在时钟频率固定的情况下,可以牺牲分辨率来换取更快的数据速率。
今天我们就采集一个电位器的电压,并显示到LCD1602上。
首先我们放置ADC模式:
设置为连续模式,精度先设置为8位,输入范围为VSS到VDD。
/连接效果图,显示当前电压2.3V主函数的代码:
#include#include#definevdda5.0/外界参考电压为5Vvoidmain()uint8ADC1_value=0;
floatfVolts=0;
uint8outputStr12;
/*Placeyourinitialization/startupcodehere(e.g.MyInst_Start()*/LCD_1602_Start();
/Example);
LCD_1602_Position(1,9);
LCD_1602_PrintString(V);
*/*Uncommentthislinetoenableglobalinterrupts.*/ADC1_Start();
ADC1_StartConvert();
/开始转换for(;
)/*Placeyourapplicationcodehere.*/ADC1_IsEndConversion(ADC1_WAIT_FOR_RESULT);
ADC1_value=ADC1_GetResult8();
fVolts=ADC1_value*vdda/255;
sprintf(outputStr,%f,fVolts);
LCD_1602_PrintString(outputStr);
3.21-分享我的分享我的PSoC技术开发和应用电压数模转换技术开发和应用电压数模转换VDAC(十)(十)CY8C38部件包含多达四个数模转换器(DAC)。
每个DAC都为8位,可针对电压或电流输出进行配置。
DAC支持CapSense、电源供电调节和波形生成。
每个DAC都具有以下特性:
可在255个步长范围内调节的电压或电流输出可编程步长大小(范围选择)八位校准,能够更正25%的增益误差针对电流输出的源和接收器选项电流输出的转换速率为8Msps电压输出的转换速率为1Msps本质上是单调的对于电压DAC(VDAC),电流DAC输出会通过电阻路由。
VDAC可以使用两个范围,即0到1.024V以及0到4.096V。
在电压模式下,连接到DAC输出的任何负载都应该是纯容性负载(VDAC的输出不会被缓冲)。
对于电压DAC(VDAC),电流DAC输出会通过电阻路由。
我们就做一个简单的电压输出,然后去测量电压的值1放置并配置电压模块博客地址http:
/主函数设置输出200,换算为实际电压200/2561.024=0.8Vvoidmain()/*StartVDAC*/VDAC8_1_Start();
/*Setthevalue200inVDACdataregister*/VDAC8_1_SetValue(200);
/200/256*1.024=0.8Vwhile
(1);
3实际测试的确输出0.8V博客地址http:
/PSoC技术开发和应用电流数模转换技术开发和应用电流数模转换IDAC(十一)(十一)电流DAC(IDAC)可针对以下范围进行配置:
0到32A、0到256A,以及0到2.048mA。
IDAC可配置为源或接收器电流。
我们就使用IDAC控制LED的亮度,模块的框图如下:
我们按照下面配置电流为输入模式。
/代码:
voiddelay(uint16num)while(num-);
voidmain()uint8current=0;
uint8buf3;
/*StarttheLCDcomponent*/LCD_Char_1_Start();
/*ClearLCDDisplay*/LCD_Char_1_ClearDisplay();
/*StarttheIDACcomponent*/IDAC8_1_Start();
/*SetstheIDACfullscalerangeto255A*/IDAC8_1_SetRange(I