本帖最后由 随风飘扬2020 于 2021-8-8 21:33 编辑

      首先感谢本次活动的主板方,大联大和面包板给予本次测评机会。本次主要想开发一个会议上的多功能键盘鼠标录音笔集成与一起的设备。而本次提供的板子已经做到了大部分功能,所以我在得到官方的源码之后,改动很小的,实现了一些简单功能。我想这也是大联大这种方案提供商给下游客户做简化开发,可以让产品快速成型。首先我先看开发板。
1.jpg
       板子是大联大旗下世平集团提供的。具体的设计文件可以到世平的官网上拿到。
2.jpg
3.jpg
板子的整体外观构型就类似鼠标,不过在其上面还有一个拓展板,是16位的矩阵按键,这样方便我们自己定义键盘的一些简单键盘功能按键。这部分代码后面有所改动,所以可以看后面测试部分。
4.png
看到核心芯片部分,使用的是LPC55S26JBD100。从这里我可以知道此芯片是100脚的,NXP家的芯片每个也都有自己的例程,可以去官网构建,不过此芯片没有官方的开发板。所以一些例程还得参照别的板子来弄。后续学习需要可以自行去官网上看。不过前面也说过,此板大联大已经有完全好的例程了。所以上手还是比较快的。稍微吐槽下的就是我收到板子,芯片应该由于某种原因在SMT的时候脚歪了,就是我标记的红色地方。收到时还有焊接痕迹。对于强迫症的我来说,我又重新拆了焊接了一遍。
5.jpg
底部是一个亚克力板子,固定方式是用的热熔胶,关键亚克力上也有配合上面的板子的螺丝孔,为了省钱用热熔胶吗?那么板子部分就介绍到这里了。
下面看下原理图吧。
6.png
首先鼠标部分是使用的PWM3389这个是很多鼠标上都用的模块。也是很多做电竞外设鼠标厂商使用的。此芯片是SPI接口,速度上还是可以的。
7.png
板子周围一圈都是RGB的氛围灯,也是可以编程控制颜色和亮度的。同样是SPI接口。
8.png
音频芯片是采用的SA8900,是台湾的盛威先进提供的,对于此芯片的资料就是比较少了。其数据手册上也是没有写此芯片寄存器和配置。官方提供的是USB的音频传输。麦克风的功能就没有体现出来了。我想如果有比较完善的手册可以看看麦克风和喇叭输出能不能同步,直接采集到的模拟信号传输出来,相当于扩音器了。这样整板功能又增加了。
       下面说下我改动的代码部分。以及稍微的演示。
9.png
首先我是注释掉了下面的USB数据上传的键值,改成了其ISA4516的模式控制。这样就可以按键控制灯的变化了。
本次做了四种模式,可以来回切换。
效果如下:
1628429490119.gif
一种是单纯的颜色,一种是是呼吸灯的效果,一种是炫彩灯。
11.png
都是在main结尾的demo函数中修改的。
  1. int index_wave[300] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4,
  2. 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15,
  3. 16, 16, 17, 18, 18, 19, 20, 20, 21, 22, 23, 24, 25, 25, 26, 27, 28, 30, 31, 32, 33, 34, 36, 37, 38, 40, 41, 43, 45, 46, 48, 50, 52,
  4. 54, 56, 58, 60, 62, 65, 67, 70, 72, 75, 78, 81, 84, 87, 90, 94, 97, 101, 105, 109, 113, 117, 122, 126, 131, 136, 141, 146, 152, 158,
  5. 164, 170, 176, 183, 190, 197, 205, 213, 221, 229, 238, 247, 255, 255, 247, 238, 229, 221, 213, 205, 197, 190, 183, 176, 170, 164, 158,
  6. 152, 146, 141, 136, 131, 126, 122, 117, 113, 109, 105, 101, 97, 94, 90, 87, 84, 81, 78, 75, 72, 70, 67, 65, 62, 60, 58, 56, 54, 52, 50,
  7. 48, 46, 45, 43, 41, 40, 38, 37, 36, 34, 33, 32, 31, 30, 28, 27, 26, 25, 25, 24, 23, 22, 21, 20, 20, 19, 18, 18, 17, 16, 16, 15, 15, 14,
  8. 14, 13, 13, 12, 12, 11, 11, 10, 10, 10, 9, 9, 9, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3,
  9. 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
  10. //***********************************************************************
  11. //*                                                    DECLARE                                                        *
  12. //***********************************************************************
  13. void isa4516_demo(void)
  14. {
  15.                      switch(isa4516_mode)
  16.                      {
  17.                             case 0:
  18.                                    r_c = 0x01 * 255 ;
  19.                                    b_c = 0x00 * 0 ;
  20.                                    g_c = 0x00 * 0 ;
  21.                             break ;
  22.                             case 1:
  23.                                    r_c = 0x00 * 0 ;
  24.                                    b_c = 0x01 * 255;
  25.                                    g_c = 0x00 * 0 ;
  26.                             break ;
  27.                             case 2:
  28.                                    r_c = 0x00 * 0 ;
  29.                                    b_c = 0x00 * 0;
  30.                                    g_c = 0x01 * 255 ;
  31.                             break ;
  32.                             case 3:
  33.                                    r_c = 0x00 * index_wave[b_value] ;
  34.                                    b_c = 0x01 * index_wave[b_value] ;
  35.                                    g_c = 0x00 * index_wave[b_value] ;
  36.                             break ;
  37.                             case 4:
  38.                                    r_c = 0x01 * test1 ;
  39.                                    b_c = 0x02 * test1 ;
  40.                                    g_c = 0x00 * test1 ;
  41.                             break ;
  42.                             case 5:
  43.                                    r_c = 0x00 * test1 ;
  44.                                    b_c = 0x02 * test1 ;
  45.                                    g_c = 0x00 * test1 ;
  46.                             break ;
  47.                             case 6:
  48.                                    r_c = 0x00 * test1 ;
  49.                                    b_c = 0x02 * test1 ;
  50.                                    g_c = 0x01 * test1 ;
  51.                             break ;
  52.                             case 7:
  53.                                    r_c = 0x00 * test1 ;
  54.                                    b_c = 0x02 * test1 ;
  55.                                    g_c = 0x02 * test1 ;
  56.                             break ;
  57.                             case 8:
  58.                                    r_c = 0x00 * test1 ;
  59.                                    b_c = 0x01 * test1 ;
  60.                                    g_c = 0x02 * test1 ;
  61.                             break ;
  62.                             case 9:
  63.                                    r_c = 0x00 * test1 ;
  64.                                    b_c = 0x00 * test1 ;
  65.                                    g_c = 0x02 * test1 ;
  66.                             break ;
  67.                             case 10:
  68.                                    r_c = 0x01 * test1 ;
  69.                                    b_c = 0x00 * test1 ;
  70.                                    g_c = 0x02 * test1 ;
  71.                             break ;
  72.                             case 11:
  73.                                    r_c = 0x02 * test1 ;
  74.                                    b_c = 0x00 * test1 ;
  75.                                    g_c = 0x02 * test1 ;
  76.                             break ;
  77.                             default :
  78.                                    isa4516_mode = 4 ;
  79.                                    break ;
  80.                      }
  81.                      test+=2 ;
  82.                      b_value++;
  83.                      if(b_value == 300)
  84.                      {
  85.                             b_value = 0;
  86.                      }
  87.                      if(isa4516_mode >= 4)
  88.                             {
  89.                                    test1++ ;
  90.                                    if(test1 == 13)
  91.                                    {
  92.                                           test1 = 0 ;
  93.                                           isa4516_mode++;
  94.                                    }
  95.                             }
  96.                      if(test == 26)
  97.                      {
  98.                             test = 0 ;
  99. //                          test1 = 2;
  100.                            
  101.                            
  102.                      }
  103.                      isa4516_demo_set (test);
  104. }
12.png
接着看,我们需要支持PPT的一些常用功能,所以需要修改下键值的匹配,PPT主要是需要放映,加上上翻页和下翻页,还有退出功能。目前放映我是修改了buff[1]的数据和buff[3]的数据,因为涉及到shift键和F5键配合。
BYTE1 -- 特殊按键
       |--bit0:   Left Control是否按下,按下为1  
       |--bit1:   Left Shift  是否按下,按下为1  
       |--bit2:   Left Alt    是否按下,按下为1  
       |--bit3:   Left GUI(Windows键) 是否按下,按下为1  
       |--bit4:   Right Control是否按下,按下为1   
       |--bit5:   Right Shift 是否按下,按下为1  
       |--bit6:   Right Alt   是否按下,按下为1  
       |--bit7:   Right GUI   是否按下,按下为1
对于buff[1]的数据解释为上面的。
13.png
代码中是这样的。符合所述。
此演示会在后续的视频演示中可以看到。
那么说下本次测试的心得,首先本次是在官方的基础上修改的,省去了很多找驱动代码的麻烦,但是官方也其实留了点东西,USB库是封装成lib的,而且有的芯片数据手册给的也不是很全。有官方的例程开发起来非常快,后续想要修改成自己的还需要去NXP官网找下资料不全USB库这方面的问题。本次体验暂时先这样,后续有心得继续分享。