找回密码
 立即注册
查看: 301|回复: 3

8G1K08如何检测输入信号是高/低电平还是连续方波

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-02-27 22:09:00

2

主题

2

回帖

76

积分

注册会员

积分
76
发表于 2024-9-15 18:13:51 | 显示全部楼层 |阅读模式
本帖最后由 DebugLab 于 2024-9-16 16:43 编辑

大家好,
如标题,现在需要根据IO口输入是高电平,低电平,还是方波,来决定另一个IO需要输出什么。
举例:
假设P30/P31口检测到输入高电平,则P55输出低电
P30输入高电平,P31输入低电平,则P55输出高电平
P30输入电平,P31输入1Hz方波,则P55输出5Hz方波
P30输入低电平,P31输入1Hz方波,则P55输出10Hz方波
如果只是检测P31输入高低电平,则比较简单,现在加入了一个方波,感觉有点复杂了,不知道代码怎么写了。



请大佬指点迷津。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:460
  • 最近打卡:2025-05-03 07:38:35
已绑定手机
已实名认证

110

主题

2224

回帖

5470

积分

版主

积分
5470
发表于 2024-9-15 20:15:03 | 显示全部楼层
如果你要采样1hz的方波,那么采样检测就要比1hz要高,比如说使用2hz以上的采样,或者直接使用边沿检测
但是,判断时间需要比1hz的周期要长,至少要2s(两个方波才能判断,或者三个跳变沿),否则在检测到方波之前,就会先执行一次电平的判断了
检测方式很简单,通过设定一个倒计时的超时定时器,如果超时定时器到零前改变了电平就是方波,没改变就是普通电平,每次改变电平后重新开始倒计时
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-02-27 22:09:00

2

主题

2

回帖

76

积分

注册会员

积分
76
发表于 2024-9-15 23:25:10 | 显示全部楼层
王*** 发表于 2024-9-15 20:15
如果你要采样1hz的方波,那么采样检测就要比1hz要高,比如说使用2hz以上的采样,或者直接使用边沿检测
但是 ...

P31有三种状态,高电平、低电平、方波
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:294
  • 最近打卡:2025-03-06 09:25:41

8

主题

318

回帖

1835

积分

金牌会员

积分
1835
发表于 2024-9-16 14:35:48 | 显示全部楼层
  1. void main()
  2. {
  3.         u16 SqureWaveCkh = 0;
  4.         u16 SqureWaveOut = 0;
  5.         while(1)
  6.         {
  7.                 if(Flag1ms)//1ms标志位
  8.                 {
  9.                         Flag1ms=0;
  10.                         if(P31 != P31_Old)//电平变化
  11.                         {
  12.                                 SqureWaveCkh = 0;
  13.                                 SqureWaveEn = 1;
  14.                         }else{
  15.                                 if(SqureWaveCkh<500)
  16.                                 {
  17.                                         SqureWaveCkh++;
  18.                                         if(SqureWaveCkh==500)
  19.                                                 SqureWaveEn = 0;
  20.                                 }
  21.                         }
  22.                         P31_Old = P31;
  23.                         if(SqureWaveEn)
  24.                         {
  25.                                 if(P30)
  26.                                 {
  27.                                         if(++SqureWaveOut>=2500)
  28.                                         {
  29.                                                 SqureWaveOut = 0;
  30.                                                 P55 = !P55;
  31.                                         }
  32.                                 }else{
  33.                                         if(++SqureWaveOut>=5000)
  34.                                         {
  35.                                                 SqureWaveOut = 0;
  36.                                                 P55 = !P55;
  37.                                         }
  38.                                 }
  39.                         }else{
  40.                                 P55 = !P31;
  41.                                 SqureWaveOut = 0;                               
  42.                         }
  43.                 }
  44.         }
  45. }
复制代码
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-4 06:00 , Processed in 0.332333 second(s), 71 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表