初学者
10 分钟

使用DS28E17和PIC32MZ2048EFM100弥合I2C通信和1-Wire接口之间的差距

简化布线并扩展I2C设备在您的项目中的覆盖范围

1-Wire I2C click with Curiosity PIC32 MZ EF

已发布 6月 25, 2024

点击板

1-Wire I2C click

开发板

Curiosity PIC32 MZ EF

编译器

NECTO Studio

微控制器单元

PIC32MZ2048EFM100

允许传统上通过I2C通信的设备通过1-Wire接口连接和互动。

A

A

硬件概览

它是如何工作的?

1-Wire I2C Click基于DS28E17,这是来自Analog Devices的一款1-Wire到I2C主桥。该桥支持15Kbps和77Kbps的1-Wire协议,并具有分组化的I2C数据负载。工厂编程的唯一64位1-Wire ROM ID为最终设备提供了不可更改的序列号,从而允许多个DS28E17设备与1-Wire网络中的其他设备共存,并可以单独访问,而不影响其他设备。1-Wire I2C Click允许

与复杂的I2C设备进行通信,如显示器、ADC、DAC、传感器等。该桥仅支持与一个I2C设备的1-Wire通信。1-Wire I2C Click使用1-Wire接口作为桥梁到标准的2-Wire I2C接口,以与主机MCU通信。您可以通过OW SEL跳线选择One-Wire输入引脚,其中OW1路由到mikroBUS™插座的模拟引脚,并默认设置。您也可以通过RST引脚重置桥。I2C设备可

以通过4引脚螺丝端子连接。这个Click board™只能在3.3V逻辑电压级别下操作。在使用具有不同逻辑电平的MCU之前,板子必须进行适当的逻辑电压级别转换。此外,这个Click board™还配备了一个包含功能和示例代码的库,可以作为进一步开发的参考。

1-Wire I2C click hardware overview image

功能概述

开发板

Curiosity PIC32 MZ EF 开发板是一个完全集成的 32 位开发平台,特点是高性能的 PIC32MZ EF 系列(PIC32MZ2048EFM),该系列具有 2MB Flash、512KB RAM、集成的浮点单元(FPU)、加密加速器和出色的连接选项。它包括一个集成的程序员和调试器,无需额外硬件。用户可以通过 MIKROE 

mikroBUS™ Click™ 适配器板扩展功能,通过 Microchip PHY 女儿板添加以太网连接功能,使用 Microchip 扩展板添加 WiFi 连接能力,并通过 Microchip 音频女儿板添加音频输入和输出功能。这些板完全集成到 PIC32 强大的软件框架 MPLAB Harmony 中,该框架提供了一个灵活且模块化的接口

来应用开发、一套丰富的互操作软件堆栈(TCP-IP、USB)和易于使用的功能。Curiosity PIC32 MZ EF 开发板提供了扩展能力,使其成为连接性、物联网和通用应用中快速原型设计的绝佳选择。

Curiosity PIC32MZ EF double side image

微控制器概述 

MCU卡片 / MCU

default

建筑

PIC32

MCU 内存 (KB)

2048

硅供应商

Microchip

引脚数

100

RAM (字节)

524288

使用的MCU引脚

mikroBUS™映射器

1-Wire Data IN/OUT
RPB4
AN
Reset
RA9
RST
NC
NC
CS
NC
NC
SCK
NC
NC
MISO
NC
NC
MOSI
Power Supply
3.3V
3.3V
Ground
GND
GND
1-Wire Data IN/OUT
RPE8
PWM
NC
NC
INT
NC
NC
TX
NC
NC
RX
NC
NC
SCL
NC
NC
SDA
NC
NC
5V
Ground
GND
GND
1

“仔细看看!”

Click board™ 原理图

1-Wire I2C click Schematic schematic

一步一步来

项目组装

Curiosity PIC32MZ EF front image hardware assembly

从选择您的开发板和Click板™开始。以Curiosity PIC32 MZ EF作为您的开发板开始。

Curiosity PIC32MZ EF front image hardware assembly
GNSS2 Click front image hardware assembly
Prog-cut hardware assembly
GNSS2 Click complete accessories setup image hardware assembly
Curiosity PIC32 MZ EF MB 1 Access - upright/background hardware assembly
Necto image step 2 hardware assembly
Necto image step 3 hardware assembly
Necto image step 4 hardware assembly
Necto image step 5 hardware assembly
Necto image step 6 hardware assembly
Curiosity PIC32 MZ EF MCU Step hardware assembly
Necto No Display image step 8 hardware assembly
Necto image step 9 hardware assembly
Necto image step 10 hardware assembly
Debug Image Necto Step hardware assembly

实时跟踪您的结果

应用程序输出

1. 应用程序输出 - 在调试模式下,“应用程序输出”窗口支持实时数据监控,直接提供执行结果的可视化。请按照提供的教程正确配置环境,以确保数据正确显示。

2. UART 终端 - 使用UART Terminal通过USB to UART converter监视数据传输,实现Click board™与开发系统之间的直接通信。请根据项目需求配置波特率和其他串行设置,以确保正常运行。有关分步设置说明,请参考提供的教程

3. Plot 输出 - Plot功能提供了一种强大的方式来可视化实时传感器数据,使趋势分析、调试和多个数据点的对比变得更加直观。要正确设置,请按照提供的教程,其中包含使用Plot功能显示Click board™读数的分步示例。在代码中使用Plot功能时,请使用以下函数:plot(insert_graph_name, variable_name);。这是一个通用格式,用户需要将“insert_graph_name”替换为实际图表名称,并将“variable_name”替换为要显示的参数。

软件支持

库描述

这个库包含了1-Wire I2C Click驱动的API。

关键功能:

  • c1wirei2c_reset_device - 通过切换RST引脚状态来重置设备

  • c1wirei2c_write_data - 该功能用于在不以停止完成事务的情况下,向I2C从设备地址并写入1-255字节

  • c1wirei2c_read_data_stop - 该功能用于在一次事务中从I2C从设备地址并读取1-255字节

开源

代码示例

完整的应用程序代码和一个现成的项目可以通过NECTO Studio包管理器直接安装到NECTO Studio 应用程序代码也可以在MIKROE的GitHub账户中找到。

/*!
 * @file main.c
 * @brief 1-Wire I2C Click Example.
 *
 * # Description
 * This example demonstrates the use of 1-Wire I2C click board by reading
 * the temperature measurement from connected Thermo 4 click board.
 *
 * The demo application is composed of two sections :
 *
 * ## Application Init
 * Initializes the driver and performs the click default configuration.
 *
 * ## Application Task
 * Reads the temperature measurement from connected Thermo 4 click board and
 * displays the results on the USB UART once per second.
 *
 * @author Stefan Filipovic
 *
 */

#include "board.h"
#include "log.h"
#include "c1wirei2c.h"

// Thermo 4 device settings
#define DEVICE_NAME                "Thermo 4 click"
#define DEVICE_SLAVE_ADDRESS       0x48
#define DEVICE_REG_TEMPERATURE     0x00
#define DEVICE_TEMPERATURE_RES     0.125f

static c1wirei2c_t c1wirei2c;
static log_t logger;

void application_init ( void ) 
{
    log_cfg_t log_cfg;  /**< Logger config object. */
    c1wirei2c_cfg_t c1wirei2c_cfg;  /**< Click config object. */

    /** 
     * Logger initialization.
     * Default baud rate: 115200
     * Default log level: LOG_LEVEL_DEBUG
     * @note If USB_UART_RX and USB_UART_TX 
     * are defined as HAL_PIN_NC, you will 
     * need to define them manually for log to work. 
     * See @b LOG_MAP_USB_UART macro definition for detailed explanation.
     */
    LOG_MAP_USB_UART( log_cfg );
    log_init( &logger, &log_cfg );
    log_info( &logger, " Application Init " );

    // Click initialization.
    c1wirei2c_cfg_setup( &c1wirei2c_cfg );
    C1WIREI2C_MAP_MIKROBUS( c1wirei2c_cfg, MIKROBUS_1 );
    if ( ONE_WIRE_ERROR == c1wirei2c_init( &c1wirei2c, &c1wirei2c_cfg ) ) 
    {
        log_error( &logger, " Communication init." );
        for ( ; ; );
    }
    
    if ( C1WIREI2C_ERROR == c1wirei2c_default_cfg ( &c1wirei2c ) )
    {
        log_error( &logger, " Default configuration." );
        for ( ; ; );
    }
    
    log_info( &logger, " Application Task " );
}

void application_task ( void ) 
{
    float temperature = 0;
    uint8_t reg_data[ 2 ] = { 0 };
    uint8_t reg_addr = DEVICE_REG_TEMPERATURE;
    if ( ( C1WIREI2C_OK == c1wirei2c_write_data ( &c1wirei2c, DEVICE_SLAVE_ADDRESS, &reg_addr, 1 ) ) && 
         ( C1WIREI2C_OK == c1wirei2c_read_data_stop ( &c1wirei2c, DEVICE_SLAVE_ADDRESS, reg_data, 2 ) ) )
    {
        temperature = ( ( ( int16_t ) ( ( ( uint16_t ) reg_data[ 0 ] << 8 ) | 
                                                       reg_data[ 1 ] ) ) >> 5 ) * DEVICE_TEMPERATURE_RES;
        log_printf( &logger, "\r\n%s - Temperature: %.3f degC\r\n", ( char * ) DEVICE_NAME, temperature );
    }
    else
    {
        log_error( &logger, "%s - no communication!\r\n", ( char * ) DEVICE_NAME );
    }
    Delay_ms( 1000 );
}

int main ( void ) 
{
    application_init( );
    
    for ( ; ; ) 
    {
        application_task( );
    }

    return 0;
}

// ------------------------------------------------------------------------ END

额外支持

资源

喜欢这个项目吗?

'购买此套件' 按钮会直接带您进入购物车,您可以在购物车中轻松添加或移除产品。