提升您的工艺水平,选择我们非凡的旋转解决方案,内置辉煌的 LED 灯环,这是创造力的见证。
A
A
硬件概览
它是如何工作的?
ROTARY R Click基于德州仪器的两个SN74HC595可通过SPI配置的8位移位寄存器,结合高品质的EC12D1564402旋转编码器,使您可以在设计中添加精密输入旋钮。EC12D1564402增量式旋转编码器被16个红色LED灯环围绕,单次旋转被分成15个离散步骤(与电位器相比,旋转编码器可以连续旋转)。这个Click板是构建各种需要精密输入的人机界面应用的理想解决方案,同时也适用于为任何应用添加一些有 趣的视觉效果。正如提到的,这个Click板使
用的是ALPS的EC12D1564402,带有按钮的15脉冲增量式旋转编码器。该编码器具有独特的机械规格(其内部开关的去抖动时间可降低到2毫秒),可以承受多次开关循环,最多可达30,000次。支持去抖动的电路允许接点在输出完全触发之前稳定下来。SN74HC595通过标准SPI接口控制每个LED,这些LED分别位于编码器周围的一个环上,最大频率为5MHz。旋转编码器 时,它在两个mikroBUS™线上输出A和B信号(相位不同),分别是mikroBUS™插座的
AN和PWM引脚,同时按下按钮接点,则通过mikroBUS™插座的中断线输出。SN74HC595还具有通过RST mikroBUS™线的复位功能。这个Click板可以通过PWR SEL跳线选择3.3V和5V逻辑电压电平工作。这样,既能够允许3.3V和5V功能的MCU正确使用通信线路。然而,这个Click板配备了一个包含易于使用的函数和示例代码的库,可作为进一步开发的参考。
功能概述
开发板
EasyPIC v8 是一款专为快速开发嵌入式应用的需求而特别设计的开发板。它支持许多高引脚计数的8位PIC微控制器,来自Microchip,无论它们的引脚数量如何,并且具有一系列独特功能,例如首次集成的调试器/程序员。开发板布局合理,设计周到,使得最终用户可以在一个地方找到所有必要的元素,如开关、按钮、指示灯、连接器等。得益于创新的制造技术,EasyPIC v8 提供了流畅而沉浸式的工作体验,允许在任何情况下、任何地方、任何时候都能访问。
EasyPIC v8 开发板的每个部分都包含了使同一板块运行最高效的必要组件。除了先进的集成CODEGRIP程 序/调试模块,该模块提供许多有价值的编程/调试选项和与Mikroe软件环境的无缝集成外,该板还包括一个干净且调节过的开发板电源供应模块。它可以使用广泛的外部电源,包括电池、外部12V电源供应和通过USB Type-C(USB-C)连接器的电源。通信选项如USB-UART、USB DEVICE和CAN也包括在内,包括 广受好评的mikroBUS™标准、两种显示选项(图形和
基于字符的LCD)和几种不同的DIP插座。这些插座覆盖了从最小的只有八个至四十个引脚的8位PIC MCU的广泛范围。EasyPIC v8 是Mikroe快速开发生态系统的一个组成部分。它由Mikroe软件工具原生支持,得益于大量不同的Click板™(超过一千块板),其数量每天都在增长,它涵盖了原型制作和开发的许多方面。
微控制器概述
MCU卡片 / MCU

建筑
PIC
MCU 内存 (KB)
48
硅供应商
Microchip
引脚数
28
RAM (字节)
3968
使用的MCU引脚
mikroBUS™映射器
“仔细看看!”
Click board™ 原理图

一步一步来
项目组装
软件支持
库描述
这个库包含 ROTARY R Click 驱动程序的 API。
关键功能:
rotaryr_generic_transfer- ROTARY R 数据传输功能。rotaryr_turn_on_led_by_position- 根据位置打开 LED 的功能。rotaryr_button_push- 如果按钮被按下则返回 1,否则返回 0。
开源
代码示例
完整的应用程序代码和一个现成的项目可以通过NECTO Studio包管理器直接安装到NECTO Studio。 应用程序代码也可以在MIKROE的GitHub账户中找到。
/*!
* @file main.c
* @brief Rotary R Click example
*
* # Description
* The demo application controls led on Click with rotary 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 R Click, rotating and turn on/off led's,
* using the SPI interface.
*
* @note
* In orther to use all of the Clicks functionality, pull down INT pin.
*
* @author Stefan Ilic
*
*/
#include "board.h"
#include "log.h"
#include "rotaryr.h"
static rotaryr_t rotaryr;
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. */
rotaryr_cfg_t rotaryr_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.
rotaryr_cfg_setup( &rotaryr_cfg );
ROTARYR_MAP_MIKROBUS( rotaryr_cfg, MIKROBUS_1 );
err_t init_flag = rotaryr_init( &rotaryr, &rotaryr_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 ) {
rotaryr_turn_on_led_by_data( &rotaryr, led_data );
// Push button
if ( rotaryr_button_push( &rotaryr ) ) {
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++ ) {
rotaryr_turn_on_led_by_data( &rotaryr, 0xAAAA );
Delay_ms ( 100 );
rotaryr_turn_on_led_by_data( &rotaryr, 0x5555 );
Delay_ms ( 100 );
}
for ( old_state = 0; old_state < 17; old_state++ ) {
rotaryr_turn_on_led_by_position( &rotaryr, old_state );
Delay_ms ( 100 );
}
led_state = 0;
led_data = rotaryr_get_led_data( led_state );
}
else {
led_data = rotaryr_get_led_data( led_state );
}
}
}
else {
old_state = 0;
}
// Rotate Clockwise and CounterClockwise
if ( rotaryr_get_eca_state( &rotaryr ) == rotaryr_get_ecb_state( &rotaryr ) ) {
old__rot_state = 0;
start_status = rotaryr_get_eca_state( &rotaryr ) && rotaryr_get_ecb_state( &rotaryr );
}
else {
new_rotate_state = 1;
if ( new_rotate_state != old__rot_state ) {
old__rot_state = 1;
if ( start_status != rotaryr_get_eca_state( &rotaryr ) ) {
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
额外支持
资源
类别:旋转编码器

































