本帖最后由 zoologist 于 2022-3-6 11:58 编辑
去年最火爆的就是芯片了,我在21年4月购买的 MAX3421芯片还只要16.6元
而今天再点进去查看报价已经达到了 130 (咨询下来预期50左右):
于是萌发了制作一个能够多次复用模块的想法,简单的说设计足够小的 PCB 然后将芯片焊接在上面,将必要的引脚引出,使其成为一个“模块”。 电路图设计如下:
为了保证体积足够小,使用了贴片式晶振,这个晶振有4个引脚,分别是2个 GND ,1个XO 一个XI;尺寸是 3.2x2.5mm 厚度是 0.7mm,因此这种封装也被称作SMD3225-4P。
PCB 设计如下:
为了尽量缩减体积,上面只保留必要的5个电容,同时选用 0603封装的,不得不承认,0603封装能够极大方便布线。
焊接完成后,我们就可以在 FireBeetle 上进行测试了: 首先,FireBeetle VCC 给USB 母头供电,同时共地,其余引脚连接如下:
之后就可以直接使用 USB Host Shield 2.0 的库了,比如运行 \USBHIDBootMouse.ino 这个示例:
- #include <hidboot.h>
- #include <usbhub.h>
-
- // Satisfy the IDE, which needs to see the include statment in the ino too.
- #ifdef dobogusinclude
- #include <spi4teensy3.h>
- #endif
- #include <SPI.h>
-
- class MouseRptParser : public MouseReportParser
- {
- protected:
- void OnMouseMove (MOUSEINFO *mi);
- void OnLeftButtonUp (MOUSEINFO *mi);
- void OnLeftButtonDown (MOUSEINFO *mi);
- void OnRightButtonUp (MOUSEINFO *mi);
- void OnRightButtonDown (MOUSEINFO *mi);
- void OnMiddleButtonUp (MOUSEINFO *mi);
- void OnMiddleButtonDown (MOUSEINFO *mi);
- };
- void MouseRptParser::OnMouseMove(MOUSEINFO *mi)
- {
- Serial.print("dx=");
- Serial.print(mi->dX, DEC);
- Serial.print(" dy=");
- Serial.println(mi->dY, DEC);
- };
- void MouseRptParser::OnLeftButtonUp (MOUSEINFO *mi)
- {
- Serial.println("L Butt Up");
- };
- void MouseRptParser::OnLeftButtonDown (MOUSEINFO *mi)
- {
- Serial.println("L Butt Dn");
- };
- void MouseRptParser::OnRightButtonUp (MOUSEINFO *mi)
- {
- Serial.println("R Butt Up");
- };
- void MouseRptParser::OnRightButtonDown (MOUSEINFO *mi)
- {
- Serial.println("R Butt Dn");
- };
- void MouseRptParser::OnMiddleButtonUp (MOUSEINFO *mi)
- {
- Serial.println("M Butt Up");
- };
- void MouseRptParser::OnMiddleButtonDown (MOUSEINFO *mi)
- {
- Serial.println("M Butt Dn");
- };
-
- USB Usb;
- USBHub Hub(&Usb);
- HIDBoot<USB_HID_PROTOCOL_MOUSE> HidMouse(&Usb);
-
- MouseRptParser Prs;
-
- void setup()
- {
- Serial.begin( 115200 );
- #if !defined(__MIPSEL__)
- while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
- #endif
- Serial.println("Start");
-
- if (Usb.Init() == -1)
- Serial.println("OSC did not start.");
-
- delay( 200 );
-
- HidMouse.SetReportParser(0, &Prs);
- }
-
- void loop()
- {
- Usb.Task();
- }
复制代码
电路图和PCB下载(立创EDA)
|