65.9K
CodeProject 正在变化。 阅读更多。
Home

Microchip PIC 16F1455 USB 堆栈 (第二部分)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.93/5 (28投票s)

2014年10月23日

CPOL

5分钟阅读

viewsIcon

49390

downloadIcon

5236

本文将继续介绍 Microchip PIC 16F1455 的 HID USB 堆栈以及在 Windows 平台上与之通信的方式。

引言

本文将继续介绍 Microchip PIC16F1455 的 HID USB 堆栈以及在 Windows 平台上与之通信的方式。要查看第一部分,请单击此处 此处

背景

第一部分中,我演示了如何使用 Microchip PIC 16F1455 构建和编程一个通用的 HID 设备,以及如何使用一组用 C# 编写的组件与 Windows 进行通信。

本文将展示如何将该芯片用作键盘、鼠标以及所有这些功能集成在一个混合设备中,涵盖以下内容:

  1. 创建具有按键和“Num Lock”状态 LED 的 HID 键盘
  2. 创建 HID 鼠标
  3. 创建一台芯片上集成了通用 HID、键盘和鼠标的混合设备。

所有代码均在 MPLAB-X 2.10 和编译器 XC8 v1.30 下编写。

使用代码

键盘

首先,我们将从键盘开始。设置完全相同,因此相同的原理图和设计也适用。我们将要更改的是芯片上的固件。

下载以下文件

  1. 16F1455Keyboard.zip       -> 这是 MPLABX 项目。
  2. 16F1455KeyboardHex.zip -> 这是编译后的 Hex 文件。

构建项目或使用 hax 文件并将其烧录到芯片中。

编程后将其连接到计算机。

这是我的情况: 

这是我在设备管理器中找到的

按下按钮将模拟键盘上的“A”键,并且行为与真实键盘完全相同,具有重复等功能。最简单的测试方法是使用记事本。LED 反映 Num Lock 的当前状态。要进行测试,请检查设备上的 num lock 状态是否与您的键盘上的状态相同,然后按键盘上的按键,看看我们的设备是否能反映这些更改。

鼠标

现在是时候玩转鼠标了。设置完全相同,因此相同的原理图和设计也适用。我们将要再次更改芯片上的固件。

下载以下文件

  1. 16F1455Mouse.zip       -> 这是 MPLABX 项目。
  2. 16F1455MouseHex.zip -> 这是编译后的 Hex 文件。

构建项目或使用 hax 文件并将其烧录到芯片中。

编程后将其连接到计算机。

这是我的情况: 

这是我在设备管理器中找到的

按下按钮将模拟鼠标右键单击。要进行测试,只需将鼠标指向某物,然后按下设备上的按钮。这将像单击右键一样弹出上下文菜单。在此示例中,LED 没有用途,因此它会一直亮着。

混合设备

这才是真正的乐趣所在。设置完全相同,因此相同的原理图和设计也适用,但这是本文中最后一次更改芯片上的固件。

下载以下文件

  1. 16F1455HidKeyboardMouse.zip        -> 这是 MPLABX 项目。
  2. 16F1455HidKeyboardMouseHex.zip  -> 这是编译后的 Hex 文件。
  3. USB16F1455HidTest.zip                     -> 这是 Windows 端的 Visual Studio 项目。

构建项目或使用 hax 文件并将其烧录到芯片中。

编程后将其连接到计算机。

这是我的情况: 



这是我在设备管理器中找到的

请注意 Windows 如何“知道”这是一个多接口设备。MI_00 分配给第一个端点,它是我们的通用 HID,键盘和鼠标分别获得它们的 ID MI_01 和 MI_02。

此图像显示它们在设备管理器下多么整洁。

您还可以在设备和打印机下找到它。

并像任何其他鼠标和键盘一样调整其属性。

此时,我们可以在单个芯片上拥有三个设备,并且可以同时使用和与它们中的任何一个或所有设备进行交互。为了快速演示,让我们启动我们的 Windows 测试程序。获取状态按钮仍然只告诉设备发送其当前状态,但切换 LED,虽然它仍然切换 LED,但方式根本不同。实际上,设备会接收命令并模拟其键盘接口上的 Num Lock 键按下。这会更改主机上所有连接键盘的 Numlock,从而使主机更新所有连接的键盘(包括我们设备的键盘接口)的新状态,然后设备根据接收到的更新设置 LED 并通过 HID 接口报告新状态。这有点曲折,但非常适合我们的测试。最后要测试的部分是 PIC 上的按钮。当 numlock LED 亮起时,它将模拟键盘接口上的 A 键;当 numlock 熄灭时,它将模拟鼠标接口上的右键单击,并且在所有情况下都会向 HID 报告。

我认为这很好地演示了所有接口的使用以及它们之间的交互。

关注点

混合设备是我编写的最后一个模型,在编写软件的过程中,我借鉴了其他三个模型的大量代码,主要是为了将它们放在一起,并且在此过程中,我发现基础堆栈仍然远非完美。我不得不作弊并修复“Usb,c”中的各种部分才能使其正常工作,放弃了我最初设计整个东西时的一些自动化方法。我相信,迟早我将拥有一个非常好的统一基础,适用于任何设备类型,其中只需替换“UsbDescriptors.h”而无需更改任何其他内容,就可以制作出任何所需的设备。任何有经验的眼睛和精通 C 的人都能几乎立即发现这些。

我希望这仍然是一个很好的例子,展示了我们如何玩弄这些芯片并从中获得乐趣。

© . All rights reserved.