差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
adc数模转换模块 [2017/06/28 17:35] anran [Verilog代码] |
adc数模转换模块 [2020/01/18 21:42] (当前版本) gongyu |
||
---|---|---|---|
行 1: | 行 1: | ||
- | ======基于STEP FPGA的PCF8591的ADC(I2C)功能驱动====== | + | ### 基于STEP FPGA的PCF8591的ADC(I2C)功能驱动 |
- | 本节将和大家一起使用FPGA驱动底板上的PCF8591的ADC采样(I2C)功能。 | + | 本节将和大家一起使用[[FPGA]]驱动底板上的PCF8591的[[ADC]]采样([[I2C]])功能。 |
- | + | --- | |
- | ====硬件说明==== | + | #### 硬件说明 |
- | ------- | + | PCF8591是集成了4路[[ADC]]和1路[[DAC]]的芯片,使用[[I2C]]总线通信。 |
- | PCF8591是集成了4路ADC和1路DAC的芯片,使用I2C总线通信。 | + | |
\\ | \\ | ||
- | I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件,然后主机接收从器件发送的数据,最后由主机终止接收过程。这里不做过多的讲解,硬件连接如下: | + | [[I2C]]总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件,然后主机接收从器件发送的数据,最后由主机终止接收过程。这里不做过多的讲解,硬件连接如下: |
{{ :i2c总线框架.jpg?800 |}} | {{ :i2c总线框架.jpg?800 |}} | ||
\\ | \\ | ||
行 14: | 行 13: | ||
{{ :pcf8591硬件连接.jpg?1000 |}} | {{ :pcf8591硬件连接.jpg?1000 |}} | ||
\\ | \\ | ||
- | 本设计中FPGA作为I2C主设备,PCF8591作为I2C从设备,从设备的地址由固定地址和可编程地址组成,我们的外设底板已将可编程地址A0、A1、A2接地,所以7位地址为7'h48,加上最低位的读写控制,所以给PCF8591写数据时的寻址地址为8'h90,对PCF8591读数据时的寻址地址为8'h91。如下 | + | 本设计中FPGA作为[[I2C]]主设备,PCF8591作为[[I2C]]从设备,从设备的地址由固定地址和可编程地址组成,我们的外设底板已将可编程地址A0、A1、A2接地,所以7位地址为7'h48,加上最低位的读写控制,所以给PCF8591写数据时的寻址地址为8'h90,对PCF8591读数据时的寻址地址为8'h91。如下 |
{{ :pcf8591_i2c地址.jpg?800 |}} | {{ :pcf8591_i2c地址.jpg?800 |}} | ||
\\ | \\ | ||
行 26: | 行 25: | ||
{{ :pcf8591_adc时序.jpg?1000 |}} | {{ :pcf8591_adc时序.jpg?1000 |}} | ||
\\ | \\ | ||
- | 通过上面的介绍大家应该对如何驱动PCF8591进行ADC采样有了整体的概念,还有一些细节就是I2C通信的时序明细,如下图 | + | 通过上面的介绍大家应该对如何驱动PCF8591进行[[ADC]]采样有了整体的概念,还有一些细节就是[[I2C]]通信的时序明细,如下图 |
{{ :pcf8591_时序控制.jpg?800 |}} | {{ :pcf8591_时序控制.jpg?800 |}} | ||
{{ :pcf8591_时序控制2.jpg?800 |}} | {{ :pcf8591_时序控制2.jpg?800 |}} | ||
- | ====Verilog代码==== | + | --- |
- | ------ | + | #### Verilog代码 |
<code verilog> | <code verilog> | ||
// -------------------------------------------------------------------- | // -------------------------------------------------------------------- | ||
行 222: | 行 221: | ||
</code> | </code> | ||
- | + | --- | |
- | ====小结==== | + | #### 小结 |
- | ------ | + | 本节主要为大家讲解了使用[[I2C]]驱动PCF8591的[[ADC]]功能的原理及软件设计,需要大家掌握的同时自己创建工程,通过整个设计流程,生成[[FPGA]]配置文件加载测试。 |
- | 本节主要为大家讲解了UART通信的原理及软件设计,需要大家掌握的同时自己创建工程,通过整个设计流程,生成FPGA配置文件加载测试。 | + | |
\\ | \\ | ||
如果你对Diamond软件的使用不了解,请参考这里:[[lattice_diamond的使用|Diamond的使用]]。 | 如果你对Diamond软件的使用不了解,请参考这里:[[lattice_diamond的使用|Diamond的使用]]。 | ||
- | ====相关资料==== | + | --- |
- | ------ | + | #### 相关资料 |
- | \\ | + | 使用[[STEP-MXO2第二代]]的PCF8591的[[ADC]]驱动程序: 后续会有下载连接 待更新 |
- | 使用[[STEP-MXO2第二代]]的UART通信程序: 后续会有下载连接 待更新 | + | |
\\ | \\ | ||
- | 使用[[STEP-MAX10]]的UART通信程序: 后续会有下载连接 待更新 | + | 使用[[STEP-MAX10]]的PCF8591的[[ADC]]驱动程序: 后续会有下载连接 待更新 |
\\ | \\ |