使用可编程 I/O 1-Wire 开关,将您的设备控制提升到一个新的水平 - 这是一种轻松实现远程切换和感知设备的方法。
A
A
硬件概览
它是如何工作的?
1-Wire Switch Click 基于 Analog Devices 的 DS2413,这是一款双通道可寻址开关。DS2413 将两个可编程 I/O 引脚和一个完全功能的 1-Wire 接口集成在一个封装中,确保 PIO 输出更改无误。PIO 输出配置为开漏,工作电压高达 28V(在最终应用中提供高水平的容错能力),最大导通电阻为 20Ω。通过监测其可编程 I/O 引脚的电压,DS2413 允许您读取负载的状态,在这种配置中,这个按钮的状态作为输入,而输出状态通过标记为 OUT 的红色 LED 进行视觉检测。DS2413 的电源通
过 1-Wire 总线寄生供电,1-Wire 总线系统具有一个总线控制器和一个或多个外围设备。考虑到这一点,此 Click board™ 具有一个额外的未填充头,可以连接其他外部 1-Wire 设备,从而在一个控制器上形成一条具有多个外围设备的线。DS2413 还具有 64 位长的注册号,保证唯一识别。在多路复用 1-Wire 网络环境中,该编号用于寻址设备,其中多个设备位于公共 1-Wire 总线上并独立操作。如前所述,1-Wire Switch Click 使用 1-Wire 接口与 MCU 通信,根据定义,该接口只需一条数据
线(和地线)即可与 MCU 通信。1-Wire 通信线被路由到标记为 I/O SEL 的 SMD 跳线,允许将 1-Wire 通信路由到 mikroBUS™ 插座的 GP0 引脚或 GP1 引脚。这些引脚分别标记为与 SMD 跳线位置相同,使所需引脚的选择简单明了。此 Click board™ 可以在 3.3V 或 5V 逻辑电压水平下运行,通过 VCC SEL 跳线选择。这样,3.3V 和 5V 的 MCU 都可以正确使用通信线路。此外,该 Click board™ 配备了包含易于使用的函数和示例代码的库,可作为进一步开发的参考。
功能概述
开发板
Flip&Click PIC32MZ 是一款紧凑型开发板,设计为一套完整的解决方案,它将 Click 板™的灵活性带给您喜爱的微控制器,使其成为实现您想法的完美入门套件。它配备了一款板载 32 位 PIC32MZ 微控制器,Microchip 的 PIC32MZ2048EFH100,四个 mikroBUS™ 插槽用于 Click 板™连接,两个 USB 连接器,LED 指示灯,按钮,调试器/程序员连接器,以及两个与 Arduino-UNO 引脚兼容的头部。得益于创
新的制造技术,它允许您快速构建具有独特功能和特性的小工具。Flip&Click PIC32MZ 开发套件的每个部分都包含了使同一板块运行最高效的必要组件。此外,还可以选择 Flip&Click PIC32MZ 的编程方式,使用 chipKIT 引导程序(Arduino 风格的开发环境)或我们的 USB HID 引导程序,使用 mikroC、mikroBasic 和 mikroPascal for PIC32。该套件包括一个通过 USB 类型-C(USB-C)连接器的干净且调
节过的电源供应模块。所有 mikroBUS™ 本身支持的 通信方法都在这块板上,包括已经建立良好的 mikroBUS™ 插槽、用户可配置的按钮和 LED 指示灯。Flip&Click PIC32MZ 开发套件允许您在几分钟内创建新的应用程序。它由 Mikroe 软件工具原生支持,得益于大量不同的 Click 板™(超过一千块板),其数量每天都在增长,它涵盖了原型制作的许多方面。
微控制器概述
MCU卡片 / MCU
建筑
PIC32
MCU 内存 (KB)
2048
硅供应商
Microchip
引脚数
100
RAM (字节)
524288
使用的MCU引脚
mikroBUS™映射器
“仔细看看!”
原理图
一步一步来
项目组装
实时跟踪您的结果
通过调试模式的应用程序输出
1. 一旦代码示例加载完成,按下 "DEBUG" 按钮将启动构建过程,并将其编程到创建的设置上,然后进入调试模式。
2. 编程完成后,IDE 中将出现一个带有各种操作按钮的标题。点击绿色的 "PLAY" 按钮开始读取通过 Click board™ 获得的结果。获得的结果将在 "Application Output" 标签中显示。
软件支持
库描述
该库包含 1-Wire Switch Click 驱动程序的 API。
关键功能:
c1wireswitch_set_pio_state
- 1-Wire Switch 写入特定可编程 I/O 状态功能c1wireswitch_get_pio_state
- 1-Wire Switch 读取特定可编程 I/O 状态功能c1wireswitch_get_pio_latch_state
- 1-Wire Switch 读取可编程 I/O 锁存状态功能
开源
代码示例
这个示例可以在 NECTO Studio 中找到。欢迎下载代码,或者您也可以复制下面的代码。
/*!
* @file main.c
* @brief 1-Wire Switch Click Example.
*
* # Description
* This library contains API for 1-Wire Switch Click driver.
* The library initializes and defines the 1-Wire bus drivers to
* write and read data for state programmable I/O,
* as well as the default configuration.
*
* The demo application is composed of two sections :
*
* ## Application Init
* Initializes the driver and performs default configuration and sets
* the PIO A to OFF and PIO B to ON state.
*
* ## Application Task
* This example demonstrates the use of the 1-Wire Switch Click board by changing the PIO A state,
* which is controlling the LED, every time the state of PIO B changes.
* Change on the PIO B happens when the button is pushed.
*
* @author Stefan Ilic
*
*/
#include "board.h"
#include "log.h"
#include "c1wireswitch.h"
static c1wireswitch_t c1wireswitch;
static log_t logger;
static uint8_t state = 0;
void application_init ( void )
{
log_cfg_t log_cfg; /**< Logger config object. */
c1wireswitch_cfg_t c1wireswitch_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.
c1wireswitch_cfg_setup( &c1wireswitch_cfg );
C1WIRESWITCH_MAP_MIKROBUS( c1wireswitch_cfg, MIKROBUS_1 );
if ( ONE_WIRE_ERROR == c1wireswitch_init( &c1wireswitch, &c1wireswitch_cfg ) )
{
log_error( &logger, " Communication init." );
for ( ; ; );
}
if ( C1WIRESWITCH_ERROR == c1wireswitch_default_cfg ( &c1wireswitch ) )
{
log_error( &logger, " Default configuration." );
for ( ; ; );
}
c1wireswitch_set_pio_state( &c1wireswitch, C1WIRESWITCH_PIOA_OFF, C1WIRESWITCH_PIOB_ON );
log_info( &logger, " Application Task " );
}
void application_task ( void )
{
uint8_t pio_a = 0;
uint8_t pio_b = 0;
c1wireswitch_get_pio_state( &c1wireswitch, &pio_a, &pio_b );
if ( pio_b == C1WIRESWITCH_PIOB_OFF )
{
if ( state == 0 )
{
c1wireswitch_set_pio_state( &c1wireswitch, C1WIRESWITCH_PIOA_ON, C1WIRESWITCH_PIOB_ON );
log_printf( &logger, " Button is pressed, LED is ON. \r\n " );
state = 1;
}
else
{
c1wireswitch_set_pio_state( &c1wireswitch, C1WIRESWITCH_PIOA_OFF, C1WIRESWITCH_PIOB_ON );
log_printf( &logger, " Button is pressed, LED is OFF. \r\n " );
state = 0;
}
Delay_ms( 100 );
}
Delay_ms( 100 );
}
void main ( void )
{
application_init( );
for ( ; ; )
{
application_task( );
}
}
// ------------------------------------------------------------------------ END