第九期了,这期比较简单,继续学习~~
2018-09-11 21:10
《测控电路》习题完整参考答案(第九章)
2017-05-07 11:41
Sklearn 与 TensorFlow 机器学习实用指南——第九章习题答案
2020-05-13 13:28
第九届全国大学生电子设计竞赛获奖作品选编资料来自网络
2018-12-22 16:46
本帖最后由 fd19635 于 2014-4-11 14:41 编辑 第七份年度研究揭示,到2020年数字宇宙将增长10倍;带传感器功能的“物件”产生的数据占10%。 2014年4月9日,北京
2014-04-11 14:39
本帖最后由 michael_llh 于 2016-8-10 17:10 编辑 MSP430教程之九 上次一讲中我们说到了定时器的两种写法,一种是利用寄存器进行书写的,另外一种是利用官方库函数
2015-12-01 00:06
独立按键消抖实验B实验目的: 1.复习按键的设计2.用模块化设计的方式实现每次按下按键0,4个LED显示状态以二进制加法格式加1,每次按下按键1,4个LED显示状态以二进制加法格式减1实验平台:芯航线FPGA核心板实验原理: 在上一讲中设计并验证了独立按键的消抖,这里基于上一讲的按键消抖模块来实现一个加减法计数器,并以此学习模块化的设计方式。 在设计过程中,相对大一点的工程经常通常不会写在一个设计文件中,通常会针对不同的功能设计出不同的子文件,最后在顶层文件中进行例化。基于本讲其模块的划分如图9-1所示。图9-1 顶层模块端口图实验步骤: 这里先编写led_ctrl,从图9-1可得出其端口列表如下。这里需要进行根据两个按键的状态来进行计数器的加减。计数器的初值为4’b0000,这里当按键0按下即计数器加一计数器变为4’b0001,由开发板上的led灯电路图可知,led灯为低电平点亮,此时就会出现led0-led3分别为亮亮亮暗,为了更直观的显示效果对输出数据进行取反,这样led的数据就会变为暗暗暗亮,与正常的思路相符合。图9-2 led灯电路图这样各个独立的模块即编写完成,下面开始顶层文件的设计。进行分析和综合直至没有错误以及警告。这时可以打开Quartus II软件中的RTL Viewer,查看模块间的连接。如图9-4所示,与设计的顶层模块端口图一样,因此可以看出顶层文件例化正确。图9-4 顶层模块RTL视图为了测试仿真编写测试激励文件,这里由于调用了两个按键进行仿真,因此需要将前一讲设计的按键仿真模型进行改写,加入使能信号press,即press上升沿时就执行一次输出key,其中任务task press_key部分是不变的。如果不改写调用的两个仿真模型会同时执行,就导致出错。新建key_led_top_tb.v文件输入以下内容并保存到testbench文件夹下,再次进行分析和综合直至没有错误以及警告。以下内容除了生成了时钟以及复位信号,还模拟了按键0按下释放两次以及按键1按下释放两次的过程。这样整体的代码就如下所示。设置好仿真脚本后进行功能仿真,可以看到如图9-5所示的波形文件。每当按键0按下时计数器led_r则会加一,按键1按下后计数器led_r则会减一。图9-5 功能仿真波形图分配引脚后全编译无误后下载工程到开发板中。也看到与之对应的现象,即为设计无误。至此,实现了一个简单的模块化设计,并进行了仿真与板级验证。小梅哥芯航线电子工作室关于学习资料,小梅哥系列所有能够开放的资料和更新(包括视频教程,程序代码,教程文档,工具软件,开发板资料)都会发布在我的云分享。(记得订阅)链接:http://yun.baidu.com/share/home?uk=402885837&view=share#category/type=0
2016-12-27 23:46
本帖最后由 kkhkbb 于 2018-3-19 09:01 编辑 一、概述ADC简介ADC是A/D转换部件,单片机不能直接处理模拟量,所以需要ADC将模拟量转换为数字量后,在进行处理。在使用单片机进行模拟数据处理的过程中,ADC至关重要。ADC以下几种类型:积分型:积分型AD工作原理是将输入电压转换成时间(脉冲宽度信号)或频率(脉冲频率),然后由定时器/计数器获得数字值。逐次比较型:逐次比较型AD由一个比较器和DA转换器通过逐次比较逻辑构成,从MSB开始,顺序地对每一位将输入电压与内置DA转换器输出进行比较,经n次比较而输出数字值。其电路规模属于中等。 并行比较型/串并行比较型:并行比较型AD采用多个比较器,仅作一次比较而实行转换,又称FLash(快速)型。Σ-Δ(Sigma delta)调制型:Σ-Δ型AD由积分器、比较器、1位DA转换器和数字滤波器等组成。电容阵列逐次比较型:电容阵列逐次比较型AD在内置DA转换器中采用电容矩阵方式,也可称为电荷再分配型。压频变换型:压频变换型(Voltage-Frequency Converter)是通过间接转换方式实现模数转换的。 二、硬件电路图9_0 ARM 电源监测ADC使用图在iCore3双核心开发板中,使用了个ADC进行电源监控分配如下表所示:[tr=transparent][tr=transparent]ADC选用[/tr][tr=transparent]监测内容[/tr][/tr][tr=transparent]ADC1-14通道5V电压[/tr][tr=transparent]ADC1-15通道输入电流[/tr][tr=transparent]ADC3-15通道1.2V电压[/tr][tr=transparent]ADC3-4通道3.3V电压[/tr][tr=transparent]ADC3-5通道2.5V电压[/tr]表9_0 ARM 电源监测ADC使用分配表三、实验原理使用ADC的5个通道,分别监测5种电源信息,使用程序进行相应的转换后,使用putty串口工具将采集到电源信息打印到PC机屏幕上,了解开发板的电源状态。 电压监控硬件连接示意图:图9_1电压监测硬件连接图由上图可知:VCC =(1 + R1 / R2)*ADC_IN;故知:VCC = (1 + 49.9K / 10K)*ADC_IN = 6*ADC_IN;其他电源监控同理可得:D3V3 = 2*ADC_IN; A2V5 =2*ADC_IN; D1V2 =ADC_IN。电流监控硬件连接示意图如下图:图9_2电流监测硬件连接图 由 ZXCT1009F 的原理可知:ADC_IN = 0.01 * (VCC - LOAD)*R2; 通过 R1 的电流:I = 100 *ADC_IN /R2 /R1; 带入 R2 = 10K,R1 = 0.02:得出:I =ADC_IN / 2;四、源代码主函数//--------------------------- Include ---------------------------//#include "..\include\led.h"#include "..\include\main.h"#include "..\include\usart.h"#include "..\include\adc.h"#include "..\fwlib\inc\stm32f4xx_gpio.h"//---------------------------- Define ---------------------------////-------------------------- Variable ---------------------------////--------------------- Function Prototype ----------------------////--------------------------- Function --------------------------///** Name : main* Description: ---* Author: ysloveivy.** History* --------------------* Rev: 0.00* Date : 11/21/2015* * create.* --------------------*/int main(void){int i;//初始化led.initialize();LED_RED_ON;usart4.initialize(115200);adc.initialize();usart4.printf("\x0c");//清屏usart4.printf("\033[1;32;40m");//设置终端字体为绿色usart4.printf("\r\n\r\nhello! I am iCore3!\r\n\r\n\r\n");while(1){ for(i = 0;i < 10000000;i++); //ADC 监控电源 for(i = 0;i < 5;i++){adc.read(i); } //打印系统供电电压, usart4.printf(" [V] %4.2fV, ",adc.value[0] * 6); usart4.printf("[I] %3.0fmA , ",adc.value[1] / 2* 1000.); usart4.printf("[1.2V] %4.2fV, ",adc.value[2]); usart4.printf("[3.3V] %4.2fV, ",adc.value[3] * 2); usart4.printf("[2.5V] %4.2fV\r",adc.value[4] * 2);}}五、实验现象iCore3 双核心板红色 LED 常亮, 串口一直向终端输出电源监控的数据。图9_3实验效果图六、代码包下载 网盘:http://pan.baidu.com/s/1o7wSEO6
2018-03-17 09:33
点击学习>>《龙哥手把手教你学LabVIEW视觉设计》视频教程LabVIEW编程九大技巧电子版本,在此与大家一起分享一下!
2014-02-13 09:57
本帖最后由 kjfd 于 2015-9-21 09:52 编辑 芯灵思开发板INIT守护进程本章主要讲的是芯灵思开发板init守护进程,首先我们来看一下init进程源码的位置,他是放在:system/core/init/init.c ,当我们编译完生成init应用程序后,他会放在:/init下,init是内核起来之后,所启动的第一个进程,我们先将开发板和我们的pc机用USB线连接在一起,然后我们切换到cmd命令下,使用adb命令查看电脑有没有连接到我们的设备我们看到有一个设备,20140723就是我们的开发板设备,然后用adb shell命令登录到我们的设备然后用ls -l 来详细查看一下这些文件,我们会看到我们的init守护进程然后用ps看一下我们系统中跑的所有程序我们可以看到这个PID是1的程序就是我们的init进程,这个init进程就负责创建所有的服务,并且守护我们整个系统,那我们再来看一下init进程所做的主要工作首先init是我们系统启动的第一个应用程序,第二他会根据安卓的一些需求,来自己创建一些目录、挂载一些分区,第三就是解析我们的启动脚本,将我们的一些服务,变量等全部解析出来,解析完之后就会根据这些东西来启动服务,执行相关的命令,启动服务之后,他就会在这里守护这些服务,这就是init进程所做的主要事情。下面我们来看一下我们的init进程的源代码,首先找到入口函数在代码执行过程中,我们会首先清除umask,请、清umask主要就是为了解决我们在后边创建文件时的权限问题,第二步呢,就是在我们的根目录下创建一些临时的文件,但是当我们断电之后这些文件就会消失,创建完之后他会挂载一些分区,在创建完这些目录之后,他会尝试在我们的dev目录下创建一个booting文件,创建完之后就会关闭掉,就是为了尝试下在dev下有写权限 然后我们看一下init所做的主要工作首先是klog_init(),他呢就是将log重定向到我们的/proc/kmsg中kmsg其实就是我们内核log信息的一个输出目录,而我们的klog_init()将我们应用程序的log重定向到了我们的kmsg中,我们来看一下是如何实现的首先呢他是创建了一个/dev/kmsg的节点,创建之后打开,打开之后我们把文件描述符保存起来,klog是一个全局的,然后下面有一个klog_write()函数,这个函数是供给其他的一些函数调用的,这个函数呢会调用一个写函数,会写到我们的klog_fd中,下面我们通过adb来看一下kmsg ,首先登陆设备 adb shell然后cat /proc/kmsg 看完之后我们ctrl+c退出来,在登上去,再看一下,你会发现这个就会变成空的,因为我们这个只能看一次,所以说我们要是在想查看启动信息的话,就只能重启我们的设备了,这就是klog_init()所做的事情,以及我们如何在init.c中添加打印调试信息下面我们来看一下property_init(),他呢主要是初始化一些环境变量,我们暂时先不看他我们第三个函数式get_hardware_name()这个函数主要是得到我们的硬件信息和硬件版本这个函数主要是传了两个参数进去,一个hardware,另一个就是revision,他做的事情就是打开cpuinfo,得到我们的硬件版本,我们在adb下看一下我们的CPUinfo,看下他的CPU信息我们可以看到我们的硬件信息、版本信息、串号、还有CPU的一些信息,这就是get_hardware_name()所做的一些事情我们再来看一下process_kernel_cmdline()函数,它主要是解析我们内核的启动参数,即uboot启动的时候所带的参数,我们来看一下他所做的事情我们所传的的启动内核信息他是在/proc/cmdline这个文件中,我们会把它读到import_kernel_nv中,然后我们会把传的一些参数给他设置到boot_props中,我们来看一下我们的cmdline的具体内容,我们切到adb下这个就是启动的时候uboot给内核传的一个参数,我们所使用的串口、波特率的一些信息就会显示出来,还有首先启动的init进程等下面我们再来property_load_boot_defaults()函数,它主要是导入我们的默认环境变量我们在这里就会导入我们的PROP_PATH_RAMDISK_DEFAULT而这个文件就是根目录下的/default.prop我们切到adb下来看一下这个文件的主要内容他在这里会有一些简单的环境变量的设置最后我们来看一下get_kernel_cmdline_partitions()函数,这个是为了得到系统的分区,并且创建相关的链接,我们来看一下这个函数他首先会在/dev目录下创建一个block,而且创建一个block/by-name目录,然后他会读取我们的/proc/cmdline,读取完之后他会根据cmdline所传的信息将我们的partitions给读出来,然后我们来看一下cmdline在里边会有一个partitions的一个字符串,字符串后边会有一个bootloader@mmcblk0p2.....0p1一直到最后,我们来看一下他是如何来解析这个字符串的,他所解析的内容就是将我们前面的名字和我们block分区一一对应起来在我们的/dev目录下创建一个block/by-name ,比如我们解析的是我们的boot,那么这个boot分区就会和他后面所对应的mmcblk0p2一一对应起来,然后创建了一个软连接,这样的话我们每一个分区和我们分区的名字就能够对应起来,我们来看一下我们的block/by-name在这个目录下呢,他就创建了这几个软连接,每个软连接都对应了我们的/dev/block/mmcblk的一个分区给映射起来了,这样的话我们就知道,我们每一个分区所对应的名字是什么,这就是get_kernel_cmdline_partitions()函数所做的事情了
2015-09-14 17:09