jinyi7016

  • 2023-02-20
  • 回复了主题帖: 【颁奖】【开工大吉,抢楼有礼】聊一聊你感兴趣的技术和板子

    已确认,谢谢

  • 2023-02-13
  • 回复了主题帖: 【开工大吉,抢楼有礼】聊一聊你感兴趣的技术和板子

    今年更多关注一下电机驱动方面的知识。  

  • 2023-02-10
  • 回复了主题帖: 瞅了瞅TI官方M0芯片产品图,Flash从8KB到64KB产品都有,这全都面向哪些应用?

    MSP 的芯片,无疑是针对的超低功耗的应用。尤其是现在的可穿戴,但由于 是M0的内核,应用不会是太复杂的产品。 但M0内核与TI自家的MSP内核还是有区别,至于功耗是不是可以超过MSP系列,达到更低,要看最后公布的参数了。 在国产大量ARM单片机厂家如雨后春笋般出现以后,TI是否能在市场上有一席之地,更要看该系列的定位了。 再加上中美贸易现在的关系,虽然此系列还不是高端的,大概率不会有限制,不能保证一定没有影响。

  • 2023-01-11
  • 回复了主题帖: 【先楫HPM6750EVK2】-2原理图分析

    没有FSMC类的外设吗

  • 2022-12-05
  • 回复了主题帖: 【微雪 RP2040双核开发板】LCD 的详细使用

    秦天qintian0303 发表于 2022-12-4 08:12 圆形布局是什么样的,是自己裁剪圆形以外的吗?
    不用,按方形造成,圆形外的不显示

  • 2022-12-03
  • 发表了主题帖: 【微雪 RP2040双核开发板】LCD 的详细使用

    一、硬件: 本开发板可玩性最高的外设,就是这个圆屏了。开发板圆屏的驱动芯片是GC9A01A,屏幕并没有触摸屏,只是一个显示的模组。 分辨率为240RGB×240 dots,内部有129600字节的GRAM。   LCD的电路如下,看定义是IIC的驱动,实际上是SPI的驱动,这个驱动芯片是支持SPI的。 SPI的时钟如下所示,时钟空闲时为低电平,在第一个边沿采样。相应的SPI的参数要配置成匹配的。 其他的控制引脚,如CS,DC,RESET,背光等都是使用的GPIO的功能,这就比较简单了。直接驱动GPIO电平就可以了。 软件: SPI的初始化函数如下,可以看到配置的SPI参数与时序图是一样的。 uint spi_init(spi_inst_t *spi, uint baudrate) { spi_reset(spi); spi_unreset(spi); uint baud = spi_set_baudrate(spi, baudrate); spi_set_format(spi, 8, SPI_CPOL_0, SPI_CPHA_0, SPI_MSB_FIRST); // Always enable DREQ signals -- harmless if DMA is not listening hw_set_bits(&spi_get_hw(spi)->dmacr, SPI_SSPDMACR_TXDMAE_BITS | SPI_SSPDMACR_RXDMAE_BITS); // Finally enable the SPI hw_set_bits(&spi_get_hw(spi)->cr1, SPI_SSPCR1_SSE_BITS); return baud; } GC9A01A支持的写命令、数据、16位数据的函数分别是: static void LCD_1IN28_SendCommand(UBYTE Reg) { DEV_Digital_Write(LCD_DC_PIN, 0); //DEV_Digital_Write(LCD_CS_PIN, 0); DEV_SPI_WriteByte(Reg); //DEV_Digital_Write(LCD_CS_PIN, 1); } /****************************************************************************** function : send data parameter: Data : Write data ******************************************************************************/ static void LCD_1IN28_SendData_8Bit(UBYTE Data) { DEV_Digital_Write(LCD_DC_PIN, 1); //DEV_Digital_Write(LCD_CS_PIN, 0); DEV_SPI_WriteByte(Data); //DEV_Digital_Write(LCD_CS_PIN, 1); } /****************************************************************************** function : send data parameter: Data : Write data ******************************************************************************/ static void LCD_1IN28_SendData_16Bit(UWORD Data) { DEV_Digital_Write(LCD_DC_PIN, 1); //DEV_Digital_Write(LCD_CS_PIN, 0); DEV_SPI_WriteByte(Data >> 8); DEV_SPI_WriteByte(Data); // DEV_Digital_Write(LCD_CS_PIN, 1); }   有了以上几个基本的SPI操作函数,就可以扩展封装一些特定功能的函数了,比如Paint_DrawLine、Paint_DrawCircle、Paint_DrawString_EN、Paint_DrawImage等等。 由于开发板没有SD卡,所以,要显示图片,要先把图片转换成一个C文件里的数组。再使用Paint_DrawImage函数显示。   官方提供转换工具:Image2Lcd2.9   首先要准备一张240*240的图片,如果图片的尺寸不合适,可能导致转换出来的数据不正确,显示时,会有花屏的问题,或是图形变形的可能,所以,最好是把图片剪裁缩小成240*240的。 输出的灰度设置成16位真彩色。 至于扫描模式这些,根据你屏的使用方向,可以进行修改。   虽然准备的是一张正方的图,显示时,是从中心开始,显示一个圆形的区域,其他的区域是不显示的,所以,要设计界面时,要注意图形的位置。 生成的数组为:const unsigned char gImage_hg[115208]={....};注意这里的数组的大小,如果不是这个尺寸的数组,显示时,可能有问题。 在 ImageData.h中进行声明: extern const unsigned char gImage_hg[];   使用如下函数进行图片的显示   Paint_DrawImage(gImage_hg, 0, 0, 240, 240); LCD_1IN28_Display(BlackImage); DEV_Delay_ms(1000);   显示效果如下:          

  • 2022-11-25
  • 回复了主题帖: 【微雪 RP2040双核开发板】电路分析与python开发环境

    大涂涂 发表于 2022-11-23 11:17 对这个圆形屏感兴趣
    也是看中这个圆屏才申请的

  • 回复了主题帖: 【微雪 RP2040双核开发板】ubuntu开发环境

    lugl4313820 发表于 2022-11-25 10:46 这板子还是有玩头。
    其实,如果没有扩展板,板子本身也就是个屏与六轴可玩了

  • 回复了主题帖: 【微雪 RP2040双核开发板】ubuntu开发环境

    Honghuzaitian 发表于 2022-11-25 00:20 挺好,Ubuntu系统还不太会玩,一直用的win系统,不太熟悉linux
    windows下也是可以配置成相同的开发方式,官方也有教程

  • 回复了主题帖: 【微雪 RP2040双核开发板】官方例程运行问题与解决

    nmg 发表于 2022-11-25 14:35 微雪官方给的例程,和开发板不配套?
    可能是SDK版本或是编译器版本不同的原因,毕竟官方提供的可烧写文件是正常的。

  • 发表了主题帖: 【微雪 RP2040双核开发板】官方例程运行问题与解决

    本帖最后由 jinyi7016 于 2022-11-25 14:04 编辑 一、起因 在ubuntu上搭建好开发环境后,编译了官方的例程,但开发板的硬件与官方开发板的差异还是很大的,虽然编译了例程,但几乎没有可以运行运行的例程,所以,就重新编译了官方提供的例程。 文件是RP2040-LCD-1.28.zip,在ubuntu下进行编译。 但是编译好的文件,烧写到开发板上,运行到Paint_DrawImage后,就不再运行,也无法显示while中的六轴数据。 会卡在如下界面:     重新下载官方文件中已经编译好的文件,就可以正常运行,自己编译的就不行。可以确定的是代码没有修改过。 gcc的版本是9.2.1   cmake的版本是3.16.3   猜可能是编译器的问题,知道官方使用的编译环境是哪些版本的。所以,按官方的方法,又在windows下搭建了环境。 重新编译后,一样的结果。 windows的编译时,打开的命令行要是Visual Studio 2019目录下的,运行的命令为: cd E:\workspace_RP2040\pico-sdk-master mkdir build cd build cmake -G "NMake Makefiles" .. nmake 二、查找 通过逐行的排查,发现是Paint_DrawNum函数导致的,如果在while中调用了Paint_DrawNum函数,程序将会卡住。   找到该函数的源码如下,就把数字转换成字符串并显示。 #define ARRAY_LEN 255 void Paint_DrawNum(UWORD Xpoint, UWORD Ypoint, double Nummber, sFONT *Font, UWORD Digit, UWORD Color_Foreground, UWORD Color_Background) { char Str[ARRAY_LEN]; sprintf(Str, "%.*lf", Digit + 1, Nummber); char *pStr = (char *)malloc((strlen(Str)) * sizeof(char)); memcpy(pStr, Str, (strlen(Str) - 1)); *(pStr + strlen(Str) - 1) = '\0'; if (Digit == 0) *(pStr + strlen(Str) - 2) = '\0'; // show Paint_DrawString_EN(Xpoint, Ypoint, (const char *)pStr, Font, Color_Foreground, Color_Background); free(pStr); pStr = NULL; } 由于在程序开始时,在第一屏的显示上,也调用了这个函数,显示了一个flaot的小数,是可以正常的,说明函数本身应该是没有问题的。 但到while中却显示不正常,确实有一些不解。 唯一不同的,就是字号的不同。初始化进的字号是20,while中的字号是16.所以,把while中的字号修改成20再测试时,也是一样的结果。     三、解决   从Paint_DrawNum的源码上看,逻辑应该是没有问题的,在linux也单独测试了这个函数,也是可以正常输出的,那么问题就可能出在交叉编译时,编译器对这个函数的处理上。 如下,是测试进的程序     整个函数上看,唯一可能有问题的就是malloc与free这些涉及到内存处理的函数了,所以,把这个函数修改成如下   #define ARRAY_LEN 255 void Paint_DrawNum(UWORD Xpoint, UWORD Ypoint, double Nummber, sFONT *Font, UWORD Digit, UWORD Color_Foreground, UWORD Color_Background) { #if 1 char Str[ARRAY_LEN]; sprintf(Str, "%.*lf", Digit, Nummber); // char *pStr = (char *)malloc((strlen(Str)) * sizeof(char)); // memcpy(pStr, Str, (strlen(Str) - 1)); // *(pStr + strlen(Str) - 1) = '\0'; // if (Digit == 0) // *(pStr + strlen(Str) - 2) = '\0'; // show Paint_DrawString_EN(Xpoint, Ypoint, (const char *)Str, Font, Color_Foreground, Color_Background); // free(pStr); // pStr = NULL; #endif } 再烧写到开发板上,程序顺利运行。    

  • 2022-11-24
  • 发表了主题帖: 【微雪 RP2040双核开发板】ubuntu开发环境

    上次使用的是python进行开发的,基本上不用配置环境变量,直接就可以使用。 虽然方便,但是所有的代码都集中在一个文件中,看起来有一些长,而且也不好管理。 所以,除了python,还支持C的开发方式,这种开发方式,与平时单片机的开发方式就有一些像了,不过在windows上进行开发,要安装很多的软件,各种环境变量的配置,而且最后的编译也是用的命令,而不是IDE,也很是繁琐,所以,就在虚拟机里配置ubuntu来进行开发。 这里使用的ubuntu版本是20.04 LTS版本。 这里,可以使用pico-setup.sh脚本进行配置。 当然,有时由于网络原因,一些库或是文件下载不下来,可以手动下载下来后,再解压到相应的目录下。   由于我的虚拟机上之前开发,有arm-gcc,如果没有,也要安装。 ubuntu20.04,默认是安装有cmake的,而且版本也合适,也不用安装的。 如果pico-setup.sh脚本运行出错,根据出错信息进行修正。 要添加环境变量到.bashrc 或是.profile中。   export PICO_SDK_PATH="/home/tj/pico/pico-sdk"   环境配置好后,先编译一下example 命令如下 cd /home/xxx/pico/pico-examples mkdir build cd build cmake ../ make 等一会儿,编译完成,说明环境变量配置成功,说明环境变量的配置是没有问题的。   再编译一下官方提供的clock的例程。   把生成的main.uf2下载到开发板上的效果。  

  • 2022-11-21
  • 加入了学习《发帖插入视频1》,观看 加速度计控制LED

  • 2022-11-20
  • 发表了主题帖: 【微雪 RP2040双核开发板】电路分析与python开发环境

    本帖最后由 jinyi7016 于 2022-11-20 15:19 编辑 收到微雪 RP2040双核开发板 ,包装一个小盒子,没有其他配置,只有一块开发板,简洁的很。 从原理图上看,开发板的资源是一些比较基本的外设,有IMU是一个六轴,但并不是一体的六轴芯片,而是两个三轴组合的。其中一个芯片还是比较大的封装的,占用了不少PCB面积。可能是为了降低成本吧。 Flash从原理图上看是W25Q32。 电源部分有三组,一个1.8V,一个3.3V,一个电池芯片。   开发板上没有电源指示灯,插上USB后,过一会儿才会亮屏,担心以为是板子有问题呢。 其实开发板上的阻容是0201的,还有不少的面积,添加个电源LED或是用户LED还是可以放得下的。 引出的排座是1.27mm间隔的,这个间隔平时用的就很少,当然也不可能是一些通用的接口了,所以,要接扩展的话,就比较麻烦了。   去micropython下载RP2040的固件: https://micropython.org/download/rp2-pico/rp2-pico-latest.uf2   按住开发板上的boot按键,再插上USB接口,电脑上会多出来一个RPI-RP2的盘符,将下载的固件,复制到这个盘符里后,开发板将会重新启动,这个固件就算是烧写好了。 软件使用Thonny进行开发 下载安装即可。 下载地址: https://thonny.org/ 打开Thonny,插上开发板,在右下角选择micropython(Raspberry Pi Pico)   之后,可以新建一个py文件,或是打开一个已经有的python代码文件 。   直接点运行,即可在开发板上运行相应的程序。 运行一下官方提供的LCD的例程。   from machine import Pin,I2C,SPI,PWM,ADC import framebuf import time I2C_SDA = 6 I2C_SDL = 7 DC = 8 CS = 9 SCK = 10 MOSI = 11 RST = 12 BL = 25 Vbat_Pin = 29 class LCD_1inch28(framebuf.FrameBuffer): def __init__(self): self.width = 240 self.height = 240 self.cs = Pin(CS,Pin.OUT) self.rst = Pin(RST,Pin.OUT) self.cs(1) self.spi = SPI(1,100_000_000,polarity=0, phase=0,sck=Pin(SCK),mosi=Pin(MOSI),miso=None) self.dc = Pin(DC,Pin.OUT) self.dc(1) self.buffer = bytearray(self.height * self.width * 2) super().__init__(self.buffer, self.width, self.height, framebuf.RGB565) self.init_display() self.red = 0x07E0 self.green = 0x001f self.blue = 0xf800 self.white = 0xffff self.fill(self.white) self.show() self.pwm = PWM(Pin(BL)) self.pwm.freq(5000) def write_cmd(self, cmd): self.cs(1) self.dc(0) self.cs(0) self.spi.write(bytearray([cmd])) self.cs(1) def write_data(self, buf): self.cs(1) self.dc(1) self.cs(0) self.spi.write(bytearray([buf])) self.cs(1) def set_bl_pwm(self,duty): self.pwm.duty_u16(duty)#max 65535 def init_display(self): """Initialize dispaly""" self.rst(1) time.sleep(0.01) self.rst(0) time.sleep(0.01) self.rst(1) time.sleep(0.05) self.write_cmd(0xEF) self.write_cmd(0xEB) self.write_data(0x14) self.write_cmd(0xFE) self.write_cmd(0xEF) self.write_cmd(0xEB) self.write_data(0x14) self.write_cmd(0x84) self.write_data(0x40) self.write_cmd(0x85) self.write_data(0xFF) self.write_cmd(0x86) self.write_data(0xFF) self.write_cmd(0x87) self.write_data(0xFF) self.write_cmd(0x88) self.write_data(0x0A) self.write_cmd(0x89) self.write_data(0x21) self.write_cmd(0x8A) self.write_data(0x00) self.write_cmd(0x8B) self.write_data(0x80) self.write_cmd(0x8C) self.write_data(0x01) self.write_cmd(0x8D) self.write_data(0x01) self.write_cmd(0x8E) self.write_data(0xFF) self.write_cmd(0x8F) self.write_data(0xFF) self.write_cmd(0xB6) self.write_data(0x00) self.write_data(0x20) self.write_cmd(0x36) self.write_data(0x98) self.write_cmd(0x3A) self.write_data(0x05) self.write_cmd(0x90) self.write_data(0x08) self.write_data(0x08) self.write_data(0x08) self.write_data(0x08) self.write_cmd(0xBD) self.write_data(0x06) self.write_cmd(0xBC) self.write_data(0x00) self.write_cmd(0xFF) self.write_data(0x60) self.write_data(0x01) self.write_data(0x04) self.write_cmd(0xC3) self.write_data(0x13) self.write_cmd(0xC4) self.write_data(0x13) self.write_cmd(0xC9) self.write_data(0x22) self.write_cmd(0xBE) self.write_data(0x11) self.write_cmd(0xE1) self.write_data(0x10) self.write_data(0x0E) self.write_cmd(0xDF) self.write_data(0x21) self.write_data(0x0c) self.write_data(0x02) self.write_cmd(0xF0) self.write_data(0x45) self.write_data(0x09) self.write_data(0x08) self.write_data(0x08) self.write_data(0x26) self.write_data(0x2A) self.write_cmd(0xF1) self.write_data(0x43) self.write_data(0x70) self.write_data(0x72) self.write_data(0x36) self.write_data(0x37) self.write_data(0x6F) self.write_cmd(0xF2) self.write_data(0x45) self.write_data(0x09) self.write_data(0x08) self.write_data(0x08) self.write_data(0x26) self.write_data(0x2A) self.write_cmd(0xF3) self.write_data(0x43) self.write_data(0x70) self.write_data(0x72) self.write_data(0x36) self.write_data(0x37) self.write_data(0x6F) self.write_cmd(0xED) self.write_data(0x1B) self.write_data(0x0B) self.write_cmd(0xAE) self.write_data(0x77) self.write_cmd(0xCD) self.write_data(0x63) self.write_cmd(0x70) self.write_data(0x07) self.write_data(0x07) self.write_data(0x04) self.write_data(0x0E) self.write_data(0x0F) self.write_data(0x09) self.write_data(0x07) self.write_data(0x08) self.write_data(0x03) self.write_cmd(0xE8) self.write_data(0x34) self.write_cmd(0x62) self.write_data(0x18) self.write_data(0x0D) self.write_data(0x71) self.write_data(0xED) self.write_data(0x70) self.write_data(0x70) self.write_data(0x18) self.write_data(0x0F) self.write_data(0x71) self.write_data(0xEF) self.write_data(0x70) self.write_data(0x70) self.write_cmd(0x63) self.write_data(0x18) self.write_data(0x11) self.write_data(0x71) self.write_data(0xF1) self.write_data(0x70) self.write_data(0x70) self.write_data(0x18) self.write_data(0x13) self.write_data(0x71) self.write_data(0xF3) self.write_data(0x70) self.write_data(0x70) self.write_cmd(0x64) self.write_data(0x28) self.write_data(0x29) self.write_data(0xF1) self.write_data(0x01) self.write_data(0xF1) self.write_data(0x00) self.write_data(0x07) self.write_cmd(0x66) self.write_data(0x3C) self.write_data(0x00) self.write_data(0xCD) self.write_data(0x67) self.write_data(0x45) self.write_data(0x45) self.write_data(0x10) self.write_data(0x00) self.write_data(0x00) self.write_data(0x00) self.write_cmd(0x67) self.write_data(0x00) self.write_data(0x3C) self.write_data(0x00) self.write_data(0x00) self.write_data(0x00) self.write_data(0x01) self.write_data(0x54) self.write_data(0x10) self.write_data(0x32) self.write_data(0x98) self.write_cmd(0x74) self.write_data(0x10) self.write_data(0x85) self.write_data(0x80) self.write_data(0x00) self.write_data(0x00) self.write_data(0x4E) self.write_data(0x00) self.write_cmd(0x98) self.write_data(0x3e) self.write_data(0x07) self.write_cmd(0x35) self.write_cmd(0x21) self.write_cmd(0x11) time.sleep(0.12) self.write_cmd(0x29) time.sleep(0.02) self.write_cmd(0x21) self.write_cmd(0x11) self.write_cmd(0x29) def show(self): self.write_cmd(0x2A) self.write_data(0x00) self.write_data(0x00) self.write_data(0x00) self.write_data(0xef) self.write_cmd(0x2B) self.write_data(0x00) self.write_data(0x00) self.write_data(0x00) self.write_data(0xEF) self.write_cmd(0x2C) self.cs(1) self.dc(1) self.cs(0) self.spi.write(self.buffer) self.cs(1) class QMI8658(object): def __init__(self,address=0X6B): self._address = address self._bus = I2C(id=1,scl=Pin(I2C_SDL),sda=Pin(I2C_SDA),freq=100_000) bRet=self.WhoAmI() if bRet : self.Read_Revision() else : return NULL self.Config_apply() def _read_byte(self,cmd): rec=self._bus.readfrom_mem(int(self._address),int(cmd),1) return rec[0] def _read_block(self, reg, length=1): rec=self._bus.readfrom_mem(int(self._address),int(reg),length) return rec def _read_u16(self,cmd): LSB = self._bus.readfrom_mem(int(self._address),int(cmd),1) MSB = self._bus.readfrom_mem(int(self._address),int(cmd)+1,1) return (MSB[0] << 8) + LSB[0] def _write_byte(self,cmd,val): self._bus.writeto_mem(int(self._address),int(cmd),bytes([int(val)])) def WhoAmI(self): bRet=False if (0x05) == self._read_byte(0x00): bRet = True return bRet def Read_Revision(self): return self._read_byte(0x01) def Config_apply(self): # REG CTRL1 self._write_byte(0x02,0x60) # REG CTRL2 : QMI8658AccRange_8g and QMI8658AccOdr_1000Hz self._write_byte(0x03,0x23) # REG CTRL3 : QMI8658GyrRange_512dps and QMI8658GyrOdr_1000Hz self._write_byte(0x04,0x53) # REG CTRL4 : No self._write_byte(0x05,0x00) # REG CTRL5 : Enable Gyroscope And Accelerometer Low-Pass Filter self._write_byte(0x06,0x11) # REG CTRL6 : Disables Motion on Demand. self._write_byte(0x07,0x00) # REG CTRL7 : Enable Gyroscope And Accelerometer self._write_byte(0x08,0x03) def Read_Raw_XYZ(self): xyz=[0,0,0,0,0,0] raw_timestamp = self._read_block(0x30,3) raw_acc_xyz=self._read_block(0x35,6) raw_gyro_xyz=self._read_block(0x3b,6) raw_xyz=self._read_block(0x35,12) timestamp = (raw_timestamp[2]<<16)|(raw_timestamp[1]<<8)|(raw_timestamp[0]) for i in range(6): # xyz[i]=(raw_acc_xyz[(i*2)+1]<<8)|(raw_acc_xyz[i*2]) # xyz[i+3]=(raw_gyro_xyz[((i+3)*2)+1]<<8)|(raw_gyro_xyz[(i+3)*2]) xyz[i] = (raw_xyz[(i*2)+1]<<8)|(raw_xyz[i*2]) if xyz[i] >= 32767: xyz[i] = xyz[i]-65535 return xyz def Read_XYZ(self): xyz=[0,0,0,0,0,0] raw_xyz=self.Read_Raw_XYZ() #QMI8658AccRange_8g acc_lsb_div=(1<<12) #QMI8658GyrRange_512dps gyro_lsb_div = 64 for i in range(3): xyz[i]=raw_xyz[i]/acc_lsb_div#(acc_lsb_div/1000.0) xyz[i+3]=raw_xyz[i+3]*1.0/gyro_lsb_div return xyz if __name__=='__main__': LCD = LCD_1inch28() LCD.set_bl_pwm(65535) qmi8658=QMI8658() Vbat= ADC(Pin(Vbat_Pin)) while(True): #read QMI8658 xyz=qmi8658.Read_XYZ() LCD.fill(LCD.white) LCD.fill_rect(0,0,240,40,LCD.red) LCD.text("RP2040-LCD-1.28",60,25,LCD.white) LCD.fill_rect(0,40,240,40,LCD.blue) LCD.text("Waveshare",80,57,LCD.white) LCD.fill_rect(0,80,120,120,0x1805) LCD.text("ACC_X={:+.2f}".format(xyz[0]),20,100-3,LCD.white) LCD.text("ACC_Y={:+.2f}".format(xyz[1]),20,140-3,LCD.white) LCD.text("ACC_Z={:+.2f}".format(xyz[2]),20,180-3,LCD.white) LCD.fill_rect(120,80,120,120,0xF073) LCD.text("GYR_X={:+3.2f}".format(xyz[3]),125,100-3,LCD.white) LCD.text("GYR_Y={:+3.2f}".format(xyz[4]),125,140-3,LCD.white) LCD.text("GYR_Z={:+3.2f}".format(xyz[5]),125,180-3,LCD.white) LCD.fill_rect(0,200,240,40,0x180f) reading = Vbat.read_u16()*3.3/65535*2 LCD.text("Vbat={:.2f}".format(reading),80,215,LCD.white) LCD.show() time.sleep(0.1) 效果如下:          

  • 2022-11-16
  • 回复了主题帖: 测评入围名单:微雪RP2040双核开发板 带圆形LCD屏

    个人信息无误,确认可以完成评测计划

  • 2022-11-14
  • 发表了主题帖: 【行空板 Python编程学习主控板】扩展板测试与WS2812驱动

    由于疫情原因,被封控了,扩展板刚刚收到,micro:bit的连接器,TB买的,一直还没有发货,所以,先不测试了,同时打样的一块WS2812的板子也到了,就连起来测试一下。 这里使用的是行空板上的P22引脚。 我自己的模块都是使用的同向的连接线,但行空板使用的是反向的连接线,画板前没有一一比对,导致扩展板上的引脚定义顺序反了,所以,焊接了一个没有方向的排针来临时测试一下。 先试了一下3.3V电压驱动WS2812,也是可以驱动的,所以就把扩展板上的3.3V与5V先短起来,不给扩展板额外供电。   WS2812扩展板也只先焊接了3个灯来测试。   连接好后,先测量了一下,没有短路的问题,直接插上行空板,正确运行。就可以开始写程序 了。   Mind+中的pinpong库中,是有提供WS2812驱动的,所以,在扩展中选择上WS2812 RBGos就可以了。   之后开始用模块写程序 ,这里的引脚,要使用行空板的一个模块,不能直接填写P22,P22不是micro.bit上默认支持的引脚,会报错的。     连接上行空板,运行程序。结果如下。   可以看到WS2812正常驱动,代码也很简介。之后,把WS2812扩展板焊完成了再测试一下,看行空板上的3.3V能否带起来25个灯,不知道功耗是不是够。 扩展板修改了这个bug,以下是打板文件,当然,也可以再等等,功能测试完成后,再打板。

  • 加入了学习《发帖插入视频1》,观看 led

  • 加入了学习《2022 Digi-Key 物联网创新大赛》,观看 Digi-Key 物联网创新大赛

  • 加入了学习《发帖插入视频1》,观看 RGB2

  • 加入了学习《发帖插入视频1》,观看 RGB1

最近访客

< 1/2 >

统计信息

已有67人来访过

  • 芯积分:1182
  • 好友:1
  • 主题:14
  • 回复:146
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言