揭开这款紧凑型附加板的神奇之处,它结合了旋转输入控制和动态LED照明,为用户带来引人入胜的体验。
A
A
硬件概览
它是如何工作的?
Rotary O Click 基于德州仪器的两个74HC595 SPI可配置8位移位寄存器。结合高品质的旋转编码器EC12D1564402,您可以在设计中添加一个精确的输入旋钮。EC12D1564402增量式旋转编码器周围环绕着16个橙色LED灯,单次旋转被划分为15个离散步骤(与电位器不同,旋转编码器可以连续旋转)。这个Click board™是构建各种需要精确输入的人机界面(HMI)应用的理想解决方案,同时也能为任何应用增添一些有趣的视觉效果。如前所述,这个Click board™使用的是ALPS的
EC12D1564402,一个带有按键的15脉冲增量旋转编码器。这种编码器具有独特的机械规格(其内部开关的去抖时间降至2ms)并且可以承受多达30,000次的切换周期。支持的去抖电路允许在触发输出之前接触稳定。74HC595通过标准的SPI接口控制围绕编码器的环状LED,最大频率为5MHz。旋转编码器时,它在两个mikroBUS™线路上输出A和B信号(相互失相),即mikroBUS™插座的AN和PWM引脚,以及通过mikroBUS™插座的中断线输出的按键接触。74HC595还具有通过RST
mikroBUS™线使用的复位功能。最后,Rotary O Click使用了Diodes Incorporated的74LVC1T45,这是一个单比特双电源电平转换收发器,具有三态输出,用于旋转编码器电压逻辑转换。这个Click board™可以通过PWR SEL跳线选择使用3.3V或5V逻辑电压水平,从而适用于3.3V和5V兼容的MCU。此外,这个Click board™还配备了一个包含易于使用的函数和示例代码的库,可作为进一步开发的参考。
功能概述
开发板
PIC18F57Q43 Curiosity Nano 评估套件是一款尖端的硬件平台,旨在评估 PIC18-Q43 系列内的微控制器。其设计的核心是包含了功能强大的 PIC18F57Q43 微控制器(MCU),提供先进的功能和稳健的性能。这个评估套件的关键特点包括一个黄 色用户 LED 和一个响应灵敏的机械用户开关,提供无
缝的交互和测试。为一个 32.768kHz 水晶振荡器足迹提供支持,确保精准的定时能力。套件内置的调试器拥有一个绿色电源和状态 LED,使编程和调试变得直观高效。此外,增强其实用性的还有虚拟串行端口 (CDC)和一个调试 GPIO 通道(DGI GPIO),提供广泛的连接选项。该套件通过 USB 供电,拥有由
MIC5353 LDO 调节器提供支持的可调目标电压功能,确保在 1.8V 至 5.1V 的输出电压范围内稳定运行,最大输出电流为 500mA,受环境温度和电压限制。
微控制器概述
MCU卡片 / MCU

建筑
PIC
MCU 内存 (KB)
128
硅供应商
Microchip
引脚数
48
RAM (字节)
8196
你完善了我!
配件
Curiosity Nano Base for Click boards 是一款多功能硬件扩展平台,专为简化 Curiosity Nano 套件与扩展板之间的集成而设计,特别针对符合 mikroBUS™ 标准的 Click 板和 Xplained Pro 扩展板。这款创新的基板(屏蔽板)提供了无缝的连接和扩展可能性,简化了实验和开发过程。主要特点包括从 Curiosity Nano 套件提供 USB 电源兼容性,以及为增强灵活性而提供的另一种外部电源输入选项。板载锂离子/锂聚合物充电器和管理电路确保电池供电应用的平稳运行,简化了使用和管理。此外,基板内置了一个固定的 3.3V 电源供应单元,专用于目标和 mikroBUS™ 电源轨,以及一个固定的 5.0V 升压转换器,专供 mikroBUS™ 插座的 5V 电源轨,为各种连接设备提供稳定的电力供应。
使用的MCU引脚
mikroBUS™映射器
“仔细看看!”
Click board™ 原理图

一步一步来
项目组装
软件支持
库描述
这个库包含了ROTARY O Click驱动程序的API。
关键函数:
rotaryo_generic_transfer- ROTARY数据传输函数rotaryo_turn_on_led_by_data- 根据数据打开LED的函数rotaryo_turn_on_led_by_position- 根据位置打开LED的函数
开源
代码示例
完整的应用程序代码和一个现成的项目可以通过NECTO Studio包管理器直接安装到NECTO Studio。 应用程序代码也可以在MIKROE的GitHub账户中找到。
/*!
* @file main.c
* @brief Rotary O Click example
*
* # Description
* The demo application controls led on Click with rotory on board
*
* The demo application is composed of two sections :
*
* ## Application Init
* Initializes SPI driver, set initial states,
* set RST logic high and performs device configuration.
*
* ## Application Task
* Show functionality of Rotary O Click, rotating and turn on/off led's,
* using the SPI interface
*
* @note
* In order to use all of the Clicks functionality, pull down INT pin.
*
* @author Stefan Ilic
*
*/
#include "board.h"
#include "log.h"
#include "rotaryo.h"
static rotaryo_t rotaryo;
static log_t logger;
static uint8_t start_status;
static uint8_t old_state;
static uint8_t new_state;
static uint8_t old__rot_state;
static uint8_t new_rotate_state;
static uint8_t led_state;
static uint16_t led_data;
void application_init ( void ) {
log_cfg_t log_cfg; /**< Logger config object. */
rotaryo_cfg_t rotaryo_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.
rotaryo_cfg_setup( &rotaryo_cfg );
ROTARYO_MAP_MIKROBUS( rotaryo_cfg, MIKROBUS_1 );
err_t init_flag = rotaryo_init( &rotaryo, &rotaryo_cfg );
if ( init_flag == SPI_MASTER_ERROR ) {
log_error( &logger, " Application Init Error. " );
log_info( &logger, " Please, run program again... " );
for ( ; ; );
}
log_info( &logger, " Application Task " );
led_data = 0x0001;
old_state = 0;
new_state = 1;
old__rot_state = 0;
new_rotate_state = 1;
}
void application_task ( void ) {
rotaryo_turn_on_led_by_data( &rotaryo, led_data );
// Push button
if ( rotaryo_button_push( &rotaryo ) ) {
new_state = 1;
if ( new_state == 1 && old_state == 0 ) {
old_state = 1;
led_state = ( led_state + 1 ) % 5;
if ( led_state == 4 ) {
for ( old_state = 0; old_state < 17; old_state++ ) {
rotaryo_turn_on_led_by_data( &rotaryo, 0xAAAA );
Delay_ms ( 100 );
rotaryo_turn_on_led_by_data( &rotaryo, 0x5555 );
Delay_ms ( 100 );
}
for ( old_state = 0; old_state < 17; old_state++ ) {
rotaryo_turn_on_led_by_position( &rotaryo, old_state );
Delay_ms ( 100 );
}
led_state = 0;
led_data = rotaryo_get_led_data( led_state );
}
else {
led_data = rotaryo_get_led_data( led_state );
}
}
}
else {
old_state = 0;
}
// Rotate Clockwise and CounterClockwise
if ( rotaryo_get_eca_state( &rotaryo ) == rotaryo_get_ecb_state( &rotaryo ) ) {
old__rot_state = 0;
start_status = rotaryo_get_eca_state( &rotaryo ) && rotaryo_get_ecb_state( &rotaryo );
}
else {
new_rotate_state = 1;
if ( new_rotate_state != old__rot_state ) {
old__rot_state = 1;
if ( start_status != rotaryo_get_eca_state( &rotaryo ) ) {
led_data = ( led_data << 1 ) | ( led_data >> 15 );
}
else {
led_data = ( led_data >> 1 ) | ( led_data << 15 );
}
}
}
}
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
额外支持
资源
类别:旋转编码器



































