通过使用多功能且高速的端口扩展器,提升您的MCU的I/O功能,该扩展器非常适合对电源敏感的应用场景
A
A
硬件概览
它是如何工作的?
Expand 18 Click 基于 NXP 的 PCAL9714,这是一款超低电压转换的 14 位 SPI I/O 扩展器。该板为各种微控制器(MCU)系列提供了 I/O 扩展,能够以最少的连接要求增加额外的 GPIO(通用输入/输出)引脚。它通过 SPI 接口工作,因此与多种 MCU 兼容。其超低电压接口支持与工作电压低至 1.1V 的 MCU 直接通信,同时可与不同电压水平的 I/O 设备进行接口。这种 I/O 扩展解决方案特别适合需要与传感器、按键、键盘等输入设备进行接口的任务,同时确保功耗和引脚使用保持在最低水平。Expand 18 Click 中使用的 PCAL9714 具有集成的电平转换功能,在具有混合电源的系统中提供了极大的灵活性。它需要两个独立的电源:一个用于逻辑侧,另一个用于核心电路。逻辑侧可以通过 VCC SEL 跳线选择由 3.3V 或 5V mikroBUS™ 电源轨供电,而核心电路可以从 3.3V mikroBUS™ 电源轨或连接到 VEXT 引脚的外部电源
供电,支持 1.65V 到 5V 的电压。核心电路电源通过 VDDP SEL 跳线进行调节,以确保针对不同应用需求的最佳电压管理。Expand 18 Click 通过 4 线 SPI 接口与主 MCU 通信,支持最高 5MHz 的时钟频率,确保高效且可靠的数据传输。除了 SPI 接口外,板上还包括一个低电平有效的 RST 引脚,以便在超时或操作问题时重置 PCAL9714。上电复位将寄存器恢复为默认状态并重新初始化 SPI 状态机,而 RST 引脚则允许在不需要完全断电的情况下进行相同的重置过程。PCAL9714 还集成了 Agile I/O 功能,增强了 I/O 的功能。这些功能包括可编程输出驱动强度、可锁定输入、可编程上拉和下拉电阻、可屏蔽中断、中断状态寄存器,以及可配置的开漏或推挽输出。此外,Agile I/O Plus 还提供按电平或边缘指定的中断,并能够单独清除中断而不影响其他事件。当输入状态与相应的输入端口寄存器状态发生变化时,中断(INT)引脚被
触发,提醒主 MCU 该变化。上电时,所有 I/O 都配置为输入。不过,主 MCU 可以轻松地将其重新配置为输入或输出,只需写入相应的 I/O 配置位即可。每个 I/O 的数据存储在相应的输入或输出寄存器中,输入端口寄存器的极性可以通过极性反转寄存器反转,从而无需外部逻辑门。可编程上拉和下拉电阻进一步减少了对离散元件的需求。扩展器输出提供 25mA 的灌电流能力,能够直接驱动 LED,同时保持低功耗。此外,PCAL9714 还具有一个用于 SPI 总线地址编程的硬件引脚,通过 ADDR SEL 跳线访问,最多允许四个设备共享同一个 SPI 总线。该 Click 板™ 可以在 3.3V 或 5V 逻辑电压水平下运行,选择通过 VCC SEL 跳线进行。这使得 3.3V 和 5V 的 MCU 都能正确使用通信线路。此外,该 Click 板™ 还配备了易于使用的函数库和示例代码,可作为进一步开发的参考。
功能概述
开发板
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 开发板提供了扩展能力,使其成为连接性、物联网和通用应用中快速原型设计的绝佳选择。
微控制器概述
MCU卡片 / MCU

建筑
PIC32
MCU 内存 (KB)
2048
硅供应商
Microchip
引脚数
100
RAM (字节)
524288
你完善了我!
配件
Wire Jumpers Male to Female (15 cm length, 10pcs) 是一套高质量的跳线,专为简化原型设计和测试而设计。每根跳线长15厘米,一端为公头连接器,另一端为母头连接器,方便在面包板或其他电子项目中轻松连接组件。该套装包含十根不同颜色的跳线,便于电路中的清晰识别和组织。这些跳线非常适合DIY项目、设置和其他电子应用,在需要快速、可靠连接的场合下提供了理想的解决方案。
使用的MCU引脚
mikroBUS™映射器
“仔细看看!”
Click board™ 原理图

一步一步来
项目组装
实时跟踪您的结果
应用程序输出
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”替换为要显示的参数。

软件支持
库描述
该库包含 Expand 18 Click 驱动程序的 API。
关键功能:
expand18_set_pin_direction
- 此函数设置所选引脚的方向。expand18_set_all_pins_value
- 此函数设置所有输出引脚的值。expand18_read_port_value
- 此函数读取所选端口输入引脚的值。
开源
代码示例
完整的应用程序代码和一个现成的项目可以通过NECTO Studio包管理器直接安装到NECTO Studio。 应用程序代码也可以在MIKROE的GitHub账户中找到。
/*!
* @file main.c
* @brief Expand 18 Click example
*
* # Description
* This example demonstrates the use of Expand 18 click board by setting and reading
* the ports state.
*
* The demo application is composed of two sections :
*
* ## Application Init
* Initializes the driver and performs the click default configuration which sets
* the port 0 as output and the port 1 as input with pull-down enabled.
*
* ## Application Task
* Sets the pins of the port 0 and then reads the status of both ports and
* displays the results on the USB UART approximately once per second.
*
* @author Stefan Filipovic
*
*/
#include "board.h"
#include "log.h"
#include "expand18.h"
static expand18_t expand18;
static log_t logger;
void application_init ( void )
{
log_cfg_t log_cfg; /**< Logger config object. */
expand18_cfg_t expand18_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.
expand18_cfg_setup( &expand18_cfg );
EXPAND18_MAP_MIKROBUS( expand18_cfg, MIKROBUS_1 );
if ( SPI_MASTER_ERROR == expand18_init( &expand18, &expand18_cfg ) )
{
log_error( &logger, " Communication init." );
for ( ; ; );
}
if ( EXPAND18_ERROR == expand18_default_cfg ( &expand18 ) )
{
log_error( &logger, " Default configuration." );
for ( ; ; );
}
log_info( &logger, " Application Task " );
}
void application_task ( void )
{
uint8_t port_value = 0;
for ( uint16_t pin_num = EXPAND18_PIN_0_MASK; pin_num <= EXPAND18_PIN_7_MASK; pin_num <<= 1 )
{
expand18_set_all_pins_value( &expand18, pin_num );
expand18_read_port_value( &expand18, EXPAND18_PORT_0, &port_value );
log_printf( &logger, " Status port 0 (output): 0x%.2X\r\n", ( uint16_t ) port_value );
expand18_read_port_value( &expand18, EXPAND18_PORT_1, &port_value );
log_printf( &logger, " Status port 1 (input) : 0x%.2X\r\n\n", ( uint16_t ) port_value );
Delay_ms( 1000 );
}
}
int main ( void )
{
/* Do not remove this line or clock might not be set correctly. */
#ifdef PREINIT_SUPPORTED
preinit();
#endif
application_init( );
for ( ; ; )
{
application_task( );
}
return 0;
}
// ------------------------------------------------------------------------ END