打印
[STM32]

关于32板子控制573点亮LED灯问题

[复制链接]
1410|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stm32板上连接了4个74hc573 控制32个红绿发光二极管   代码输入时能做到红绿一起亮一起灭   单独绿色一起亮灭也可以做到 但是红色灯一起亮灭的时候第一组绿灯也跟着亮   测得LE电压除了第一组锁存器有时是高电平有时是低  其余3组LE都是低电平  电压表测量时会引起灯乱闪  灭着的灯也能亮起, 想问这是硬件的问题还是代码写的问题?[img][/img]

相关帖子

沙发
杀狱磊|  楼主 | 2019-2-22 11:36 | 只看该作者
这是原理图

使用特权

评论回复
板凳
杀狱磊|  楼主 | 2019-2-22 11:37 | 只看该作者
这是原理图

使用特权

评论回复
地板
efen| | 2019-2-22 11:50 | 只看该作者
你这个方案太差了,使用SN3236一个芯片搞掂,电阻都省了还可以调光

使用特权

评论回复
5
6688hyc| | 2019-2-22 12:58 | 只看该作者

这是原理图?

使用特权

评论回复
6
杀狱磊|  楼主 | 2019-2-22 13:52 | 只看该作者

https://bbs.21ic.com/icview-2627952-1-1.html 我发了个新帖 大佬帮忙看下问题所在想了几天了

使用特权

评论回复
7
wjlhhhhhh| | 2019-7-3 19:26 | 只看该作者
efen 发表于 2019-2-22 11:50
你这个方案太差了,使用SN3236一个芯片搞掂,电阻都省了还可以调光

大神请教个问题可以吗 我现在一直再调3236 可是一直调不通,不知道问题在哪

使用特权

评论回复
8
ningling_21| | 2019-7-4 10:26 | 只看该作者
wjlhhhhhh 发表于 2019-7-3 19:26
大神请教个问题可以吗 我现在一直再调3236 可是一直调不通,不知道问题在哪 ...

硬件没问题?

使用特权

评论回复
9
efen| | 2019-7-4 14:42 | 只看该作者
wjlhhhhhh 发表于 2019-7-3 19:26
大神请教个问题可以吗 我现在一直再调3236 可是一直调不通,不知道问题在哪 ...

硬件没问题的话看看每个通道有没使能

使用特权

评论回复
10
wjlhhhhhh| | 2019-7-4 15:33 | 只看该作者

我都换了4 5个芯片了 ,都是点不亮,是不是软件问题?

使用特权

评论回复
11
wjlhhhhhh| | 2019-7-4 15:36 | 只看该作者
efen 发表于 2019-7-4 14:42
硬件没问题的话看看每个通道有没使能

怎么看那一路有没有使能?对寄存器配置模拟的i2c  发指令没反应,咋测试是软件还是硬件问题呀?请教

使用特权

评论回复
12
ningling_21| | 2019-7-4 16:47 | 只看该作者
wjlhhhhhh 发表于 2019-7-4 15:33
我都换了4 5个芯片了 ,都是点不亮,是不是软件问题?

首先测 一下对应的管脚有没受程序的控制

使用特权

评论回复
13
wjlhhhhhh| | 2019-7-4 16:54 | 只看该作者
ningling_21 发表于 2019-7-4 16:47
首先测 一下对应的管脚有没受程序的控制

没有收控制         LED_WriteOneByte(0x78,0x01,0x96);
                        delay_ms(100);
                        LED_WriteOneByte(0x78,0x25,0x01);
                                        delay_ms(100);
                        LED_WriteOneByte(0x78,0x26,0x01);
我这样发的指令这是 打开第一个灯  对不对?

使用特权

评论回复
14
wjlhhhhhh| | 2019-7-4 16:57 | 只看该作者
ningling_21 发表于 2019-7-4 16:47
首先测 一下对应的管脚有没受程序的控制

帮忙看下 这个i2c有问题呢没?




void delay_us(__IO uint32_t nTime)
{               
    u16 i=0;   
    while(nTime--)   
    {   
        i=10;  //×Ô¼º¶¨Òå      
        while(i--);      
    }                                         
}

void I2C_INIT_1(void)
{
       
       
       
        GPIO_InitTypeDef        GPIO_InitStructure;
          /* GPIOC Periph clock enable */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  /* Configure PA5 and PA7 in output pushpull mode */
  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_4|GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
       
       
//        I2C_SCL_H;
//        I2C_SDA_H;
        GPIO_SetBits(GPIOA,GPIO_Pin_4);
        GPIO_SetBits(GPIOA,GPIO_Pin_5);
}


void I2C_SDA_OUT(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;       
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
}

void I2C_SDA_IN(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;       
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
//        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
}

//²úÉúÆðʼÐźÅ
void I2C_Start(void)
{
    I2C_SDA_OUT();
       
        I2C_SDA_H;
        I2C_SCL_H;
        delay_us(5);
        I2C_SDA_L;
        delay_us(6);
        I2C_SCL_L;
}

//²úÉúÍ£Ö¹ÐźÅ
void I2C_Stop(void)
{
   I2C_SDA_OUT();

   I2C_SCL_L;
   I2C_SDA_L;
   I2C_SCL_H;
   delay_us(6);
   I2C_SDA_H;
   delay_us(6);
}

//Ö÷»ú²úÉúÓ¦´ðÐźÅACK
void I2C_Ack(void)
{
   I2C_SCL_L;
   I2C_SDA_OUT();
   I2C_SDA_L;
   delay_us(2);
   I2C_SCL_H;
   delay_us(5);
   I2C_SCL_L;
}

//Ö÷»ú²»²úÉúÓ¦´ðÐźÅNACK
void I2C_NAck(void)
{
   I2C_SCL_L;
   I2C_SDA_OUT();
   I2C_SDA_H;
   delay_us(2);
   I2C_SCL_H;
   delay_us(5);
   I2C_SCL_L;
}
//µÈ´ý´Ó»úÓ¦´ðÐźÅ
//·µ»ØÖµ£º1 ½ÓÊÕÓ¦´ðʧ°Ü
//                  0 ½ÓÊÕÓ¦´ð³É¹¦
uint8_t I2C_Wait_Ack(void)
{
        uint8_t tempTime=0;

        I2C_SDA_IN();

        I2C_SDA_H;
        delay_us(1);
        I2C_SCL_H;
        delay_us(1);

        while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4))
        {
                tempTime++;
                if(tempTime>250)
                {
                        I2C_Stop();
                        return 1;
                }         
        }

        I2C_SCL_L;
        return 0;
}
//I2C ·¢ËÍÒ»¸ö×Ö½Ú
void I2C_Send_Byte(uint8_t txd)
{
        uint8_t i=0;

        I2C_SDA_OUT();
        I2C_SCL_L;//À­µÍʱÖÓ¿ªÊ¼Êý¾Ý´«Êä

        for(i=0;i<8;i++)
        {
                if((txd&0x80)>0) //0x80  1000 0000
                        I2C_SDA_H;
                else
                        I2C_SDA_L;

                txd<<=1;
                I2C_SCL_H;
                delay_us(2); //·¢ËÍÊý¾Ý
                I2C_SCL_L;
                delay_us(2);
        }
}

//I2C ¶ÁÈ¡Ò»¸ö×Ö½Ú

uint8_t I2C_Read_Byte(uint8_t ack)
{
   uint8_t i=0,receive=0;

   I2C_SDA_IN();
   for(i=0;i<8;i++)
   {
                   I2C_SCL_L;
                delay_us(2);
                I2C_SCL_H;
                receive<<=1;
                if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4))
                   receive++;
                delay_us(1);       
   }

           if(ack==0)
                   I2C_NAck();
        else
                I2C_Ack();

        return receive;
}





void LED_WriteOneByte(uint8_t DEVID,uint8_t addr,uint8_t dt)
{
        I2C_Start();
        printf("dtÊý¾ÝÊÇ£º%d\r\n",dt);
        printf("addrÊý¾ÝÊÇ£º%d\r\n",addr);
       
                I2C_Send_Byte(DEVID);
                I2C_Wait_Ack();


        //I2C_Wait_Ack();
        I2C_Send_Byte(addr);//Ë«×Ö½ÚÊÇÊý¾ÝµØÖ·µÍλ               
                                                        //µ¥×Ö½ÚÊÇÊý¾ÝµØÖ·µÍλ
        I2C_Wait_Ack();

        I2C_Send_Byte(dt);
        I2C_Wait_Ack();
        I2C_Stop();

        delay_ms(10);
}

使用特权

评论回复
15
ningling_21| | 2019-7-4 20:48 | 只看该作者
wjlhhhhhh 发表于 2019-7-4 16:57
帮忙看下 这个i2c有问题呢没?

可以用示波器观察一下数据线和时钟线的波形

使用特权

评论回复
16
wjlhhhhhh| | 2019-7-4 22:00 | 只看该作者
ningling_21 发表于 2019-7-4 20:48
可以用示波器观察一下数据线和时钟线的波形

波形有,我把sn3236芯片焊掉,也有波形正常吗

使用特权

评论回复
17
ningling_21| | 2019-7-4 22:29 | 只看该作者
wjlhhhhhh 发表于 2019-7-4 22:00
波形有,我把sn3236芯片焊掉,也有波形正常吗

正常

使用特权

评论回复
18
ningling_21| | 2019-7-5 08:49 | 只看该作者
wjlhhhhhh 发表于 2019-7-4 22:00
波形有,我把sn3236芯片焊掉,也有波形正常吗

波形符合3236的时序要求不

使用特权

评论回复
19
wjlhhhhhh| | 2019-7-5 10:40 | 只看该作者
本帖最后由 wjlhhhhhh 于 2019-7-5 10:42 编辑
ningling_21 发表于 2019-7-5 08:49
波形符合3236的时序要求不

C:\Users\wjl\Desktop\1302754385.jpg

C:\Users\wjl\Desktop\464053226.jpg


大神帮我看下 我感觉像是对的啊

464053226.jpg (410.93 KB )

464053226.jpg

1302754385.jpg (371.17 KB )

1302754385.jpg

使用特权

评论回复
20
wjlhhhhhh| | 2019-7-5 10:43 | 只看该作者
ningling_21 发表于 2019-7-5 08:49
波形符合3236的时序要求不

LED_WriteOneByte(0x78,0x01,0x96); 我发的这条指令

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

15

帖子

1

粉丝