数码之家

标题: 探索用arduino 和 esp8266 输出1MHz以上方波的代码 [打印本页]

作者: kindzhon    时间: 2024-4-18 15:48
标题: 探索用arduino 和 esp8266 输出1MHz以上方波的代码
本帖最后由 kindzhon 于 2024-4-19 17:33 编辑

开始用esp32做一个频率计,但没有信号源,有8266,就想着8266的CPU有80MHz和160MHz,输出个几MHz应该没问题,后来发现arduino还是很坑的,

试了N种办法都不行,timer1定时器加中断,digitalWriteFast.h里的digitalToggleFast,都最快只能达到250KHz,于是只能在国外论坛上找,终于发现了这个方法,https://forum.arduino.cc/t/arduino-esp8266-faster-direct-port-write/407251/7
ESP8266加arduino直接编译就好,你可以适当增减下面两个语句
  1.   WRITE_PERI_REG( 0x60000304, myPinBit );
  2.   WRITE_PERI_REG( 0x60000308, myPinBit );
复制代码
增加一组频率就增加,减少一组频率就减少,对,你没看错,就是这样的。
CPU 80MHz
GPIO2输出
1.0653MHz        11组
3.0474MHz        55组
4.0843MHz      121组
完整的4MHz代码如下:[attach]2089542[/attach]


  1. #define myPin 2
  2. #define myPinBit (1<<myPin)

  3. void setup() {
  4.   pinMode(myPin, OUTPUT);
  5. }

  6. void loop() {
  7.   //CPU 80MHz GPIO2输出 1.0653MHz 11组 3.0474 55组 4.084 121组
  8.   os_intr_lock();
  9.   WRITE_PERI_REG( 0x60000304, myPinBit );
  10.   WRITE_PERI_REG( 0x60000308, myPinBit );
  11.   WRITE_PERI_REG( 0x60000304, myPinBit );
  12.   WRITE_PERI_REG( 0x60000308, myPinBit );
  13.   WRITE_PERI_REG( 0x60000304, myPinBit );
  14.   WRITE_PERI_REG( 0x60000308, myPinBit );
  15.   WRITE_PERI_REG( 0x60000304, myPinBit );
  16.   WRITE_PERI_REG( 0x60000308, myPinBit );
  17.   WRITE_PERI_REG( 0x60000304, myPinBit );
  18.   WRITE_PERI_REG( 0x60000308, myPinBit );
  19.   WRITE_PERI_REG( 0x60000304, myPinBit );
  20.   WRITE_PERI_REG( 0x60000308, myPinBit );
  21.   WRITE_PERI_REG( 0x60000304, myPinBit );
  22.   WRITE_PERI_REG( 0x60000308, myPinBit );
  23.   WRITE_PERI_REG( 0x60000304, myPinBit );
  24.   WRITE_PERI_REG( 0x60000308, myPinBit );
  25.   WRITE_PERI_REG( 0x60000304, myPinBit );
  26.   WRITE_PERI_REG( 0x60000308, myPinBit );
  27.   WRITE_PERI_REG( 0x60000304, myPinBit );
  28.   WRITE_PERI_REG( 0x60000308, myPinBit );
  29.   WRITE_PERI_REG( 0x60000304, myPinBit );
  30.   WRITE_PERI_REG( 0x60000308, myPinBit );
  31.     WRITE_PERI_REG( 0x60000304, myPinBit );
  32.   WRITE_PERI_REG( 0x60000308, myPinBit );
  33.   WRITE_PERI_REG( 0x60000304, myPinBit );
  34.   WRITE_PERI_REG( 0x60000308, myPinBit );
  35.   WRITE_PERI_REG( 0x60000304, myPinBit );
  36.   WRITE_PERI_REG( 0x60000308, myPinBit );
  37.   WRITE_PERI_REG( 0x60000304, myPinBit );
  38.   WRITE_PERI_REG( 0x60000308, myPinBit );
  39.   WRITE_PERI_REG( 0x60000304, myPinBit );
  40.   WRITE_PERI_REG( 0x60000308, myPinBit );
  41.   WRITE_PERI_REG( 0x60000304, myPinBit );
  42.   WRITE_PERI_REG( 0x60000308, myPinBit );
  43.   WRITE_PERI_REG( 0x60000304, myPinBit );
  44.   WRITE_PERI_REG( 0x60000308, myPinBit );
  45.   WRITE_PERI_REG( 0x60000304, myPinBit );
  46.   WRITE_PERI_REG( 0x60000308, myPinBit );
  47.   WRITE_PERI_REG( 0x60000304, myPinBit );
  48.   WRITE_PERI_REG( 0x60000308, myPinBit );
  49.   WRITE_PERI_REG( 0x60000304, myPinBit );
  50.   WRITE_PERI_REG( 0x60000308, myPinBit );
  51.   WRITE_PERI_REG( 0x60000304, myPinBit );
  52.   WRITE_PERI_REG( 0x60000308, myPinBit );
  53.     WRITE_PERI_REG( 0x60000304, myPinBit );
  54.   WRITE_PERI_REG( 0x60000308, myPinBit );
  55.   WRITE_PERI_REG( 0x60000304, myPinBit );
  56.   WRITE_PERI_REG( 0x60000308, myPinBit );
  57.   WRITE_PERI_REG( 0x60000304, myPinBit );
  58.   WRITE_PERI_REG( 0x60000308, myPinBit );
  59.   WRITE_PERI_REG( 0x60000304, myPinBit );
  60.   WRITE_PERI_REG( 0x60000308, myPinBit );
  61.   WRITE_PERI_REG( 0x60000304, myPinBit );
  62.   WRITE_PERI_REG( 0x60000308, myPinBit );
  63.   WRITE_PERI_REG( 0x60000304, myPinBit );
  64.   WRITE_PERI_REG( 0x60000308, myPinBit );
  65.   WRITE_PERI_REG( 0x60000304, myPinBit );
  66.   WRITE_PERI_REG( 0x60000308, myPinBit );
  67.   WRITE_PERI_REG( 0x60000304, myPinBit );
  68.   WRITE_PERI_REG( 0x60000308, myPinBit );
  69.   WRITE_PERI_REG( 0x60000304, myPinBit );
  70.   WRITE_PERI_REG( 0x60000308, myPinBit );
  71.   WRITE_PERI_REG( 0x60000304, myPinBit );
  72.   WRITE_PERI_REG( 0x60000308, myPinBit );
  73.   WRITE_PERI_REG( 0x60000304, myPinBit );
  74.   WRITE_PERI_REG( 0x60000308, myPinBit );
  75.     WRITE_PERI_REG( 0x60000304, myPinBit );
  76.   WRITE_PERI_REG( 0x60000308, myPinBit );
  77.   WRITE_PERI_REG( 0x60000304, myPinBit );
  78.   WRITE_PERI_REG( 0x60000308, myPinBit );
  79.   WRITE_PERI_REG( 0x60000304, myPinBit );
  80.   WRITE_PERI_REG( 0x60000308, myPinBit );
  81.   WRITE_PERI_REG( 0x60000304, myPinBit );
  82.   WRITE_PERI_REG( 0x60000308, myPinBit );
  83.   WRITE_PERI_REG( 0x60000304, myPinBit );
  84.   WRITE_PERI_REG( 0x60000308, myPinBit );
  85.   WRITE_PERI_REG( 0x60000304, myPinBit );
  86.   WRITE_PERI_REG( 0x60000308, myPinBit );
  87.   WRITE_PERI_REG( 0x60000304, myPinBit );
  88.   WRITE_PERI_REG( 0x60000308, myPinBit );
  89.   WRITE_PERI_REG( 0x60000304, myPinBit );
  90.   WRITE_PERI_REG( 0x60000308, myPinBit );
  91.   WRITE_PERI_REG( 0x60000304, myPinBit );
  92.   WRITE_PERI_REG( 0x60000308, myPinBit );
  93.   WRITE_PERI_REG( 0x60000304, myPinBit );
  94.   WRITE_PERI_REG( 0x60000308, myPinBit );
  95.   WRITE_PERI_REG( 0x60000304, myPinBit );
  96.   WRITE_PERI_REG( 0x60000308, myPinBit );
  97.     WRITE_PERI_REG( 0x60000304, myPinBit );
  98.   WRITE_PERI_REG( 0x60000308, myPinBit );
  99.   WRITE_PERI_REG( 0x60000304, myPinBit );
  100.   WRITE_PERI_REG( 0x60000308, myPinBit );
  101.   WRITE_PERI_REG( 0x60000304, myPinBit );
  102.   WRITE_PERI_REG( 0x60000308, myPinBit );
  103.   WRITE_PERI_REG( 0x60000304, myPinBit );
  104.   WRITE_PERI_REG( 0x60000308, myPinBit );
  105.   WRITE_PERI_REG( 0x60000304, myPinBit );
  106.   WRITE_PERI_REG( 0x60000308, myPinBit );
  107.   WRITE_PERI_REG( 0x60000304, myPinBit );
  108.   WRITE_PERI_REG( 0x60000308, myPinBit );
  109.   WRITE_PERI_REG( 0x60000304, myPinBit );
  110.   WRITE_PERI_REG( 0x60000308, myPinBit );
  111.   WRITE_PERI_REG( 0x60000304, myPinBit );
  112.   WRITE_PERI_REG( 0x60000308, myPinBit );
  113.   WRITE_PERI_REG( 0x60000304, myPinBit );
  114.   WRITE_PERI_REG( 0x60000308, myPinBit );
  115.   WRITE_PERI_REG( 0x60000304, myPinBit );
  116.   WRITE_PERI_REG( 0x60000308, myPinBit );
  117.   WRITE_PERI_REG( 0x60000304, myPinBit );
  118.   WRITE_PERI_REG( 0x60000308, myPinBit );
  119.     WRITE_PERI_REG( 0x60000304, myPinBit );
  120.   WRITE_PERI_REG( 0x60000308, myPinBit );
  121.   WRITE_PERI_REG( 0x60000304, myPinBit );
  122.   WRITE_PERI_REG( 0x60000308, myPinBit );
  123.   WRITE_PERI_REG( 0x60000304, myPinBit );
  124.   WRITE_PERI_REG( 0x60000308, myPinBit );
  125.   WRITE_PERI_REG( 0x60000304, myPinBit );
  126.   WRITE_PERI_REG( 0x60000308, myPinBit );
  127.   WRITE_PERI_REG( 0x60000304, myPinBit );
  128.   WRITE_PERI_REG( 0x60000308, myPinBit );
  129.   WRITE_PERI_REG( 0x60000304, myPinBit );
  130.   WRITE_PERI_REG( 0x60000308, myPinBit );
  131.   WRITE_PERI_REG( 0x60000304, myPinBit );
  132.   WRITE_PERI_REG( 0x60000308, myPinBit );
  133.   WRITE_PERI_REG( 0x60000304, myPinBit );
  134.   WRITE_PERI_REG( 0x60000308, myPinBit );
  135.   WRITE_PERI_REG( 0x60000304, myPinBit );
  136.   WRITE_PERI_REG( 0x60000308, myPinBit );
  137.   WRITE_PERI_REG( 0x60000304, myPinBit );
  138.   WRITE_PERI_REG( 0x60000308, myPinBit );
  139.   WRITE_PERI_REG( 0x60000304, myPinBit );
  140.   WRITE_PERI_REG( 0x60000308, myPinBit );
  141.     WRITE_PERI_REG( 0x60000304, myPinBit );
  142.   WRITE_PERI_REG( 0x60000308, myPinBit );
  143.   WRITE_PERI_REG( 0x60000304, myPinBit );
  144.   WRITE_PERI_REG( 0x60000308, myPinBit );
  145.   WRITE_PERI_REG( 0x60000304, myPinBit );
  146.   WRITE_PERI_REG( 0x60000308, myPinBit );
  147.   WRITE_PERI_REG( 0x60000304, myPinBit );
  148.   WRITE_PERI_REG( 0x60000308, myPinBit );
  149.   WRITE_PERI_REG( 0x60000304, myPinBit );
  150.   WRITE_PERI_REG( 0x60000308, myPinBit );
  151.   WRITE_PERI_REG( 0x60000304, myPinBit );
  152.   WRITE_PERI_REG( 0x60000308, myPinBit );
  153.   WRITE_PERI_REG( 0x60000304, myPinBit );
  154.   WRITE_PERI_REG( 0x60000308, myPinBit );
  155.   WRITE_PERI_REG( 0x60000304, myPinBit );
  156.   WRITE_PERI_REG( 0x60000308, myPinBit );
  157.   WRITE_PERI_REG( 0x60000304, myPinBit );
  158.   WRITE_PERI_REG( 0x60000308, myPinBit );
  159.   WRITE_PERI_REG( 0x60000304, myPinBit );
  160.   WRITE_PERI_REG( 0x60000308, myPinBit );
  161.   WRITE_PERI_REG( 0x60000304, myPinBit );
  162.   WRITE_PERI_REG( 0x60000308, myPinBit );
  163.     WRITE_PERI_REG( 0x60000304, myPinBit );
  164.   WRITE_PERI_REG( 0x60000308, myPinBit );
  165.   WRITE_PERI_REG( 0x60000304, myPinBit );
  166.   WRITE_PERI_REG( 0x60000308, myPinBit );
  167.   WRITE_PERI_REG( 0x60000304, myPinBit );
  168.   WRITE_PERI_REG( 0x60000308, myPinBit );
  169.   WRITE_PERI_REG( 0x60000304, myPinBit );
  170.   WRITE_PERI_REG( 0x60000308, myPinBit );
  171.   WRITE_PERI_REG( 0x60000304, myPinBit );
  172.   WRITE_PERI_REG( 0x60000308, myPinBit );
  173.   WRITE_PERI_REG( 0x60000304, myPinBit );
  174.   WRITE_PERI_REG( 0x60000308, myPinBit );
  175.   WRITE_PERI_REG( 0x60000304, myPinBit );
  176.   WRITE_PERI_REG( 0x60000308, myPinBit );
  177.   WRITE_PERI_REG( 0x60000304, myPinBit );
  178.   WRITE_PERI_REG( 0x60000308, myPinBit );
  179.   WRITE_PERI_REG( 0x60000304, myPinBit );
  180.   WRITE_PERI_REG( 0x60000308, myPinBit );
  181.   WRITE_PERI_REG( 0x60000304, myPinBit );
  182.   WRITE_PERI_REG( 0x60000308, myPinBit );
  183.   WRITE_PERI_REG( 0x60000304, myPinBit );
  184.   WRITE_PERI_REG( 0x60000308, myPinBit );
  185.     WRITE_PERI_REG( 0x60000304, myPinBit );
  186.   WRITE_PERI_REG( 0x60000308, myPinBit );
  187.   WRITE_PERI_REG( 0x60000304, myPinBit );
  188.   WRITE_PERI_REG( 0x60000308, myPinBit );
  189.   WRITE_PERI_REG( 0x60000304, myPinBit );
  190.   WRITE_PERI_REG( 0x60000308, myPinBit );
  191.   WRITE_PERI_REG( 0x60000304, myPinBit );
  192.   WRITE_PERI_REG( 0x60000308, myPinBit );
  193.   WRITE_PERI_REG( 0x60000304, myPinBit );
  194.   WRITE_PERI_REG( 0x60000308, myPinBit );
  195.   WRITE_PERI_REG( 0x60000304, myPinBit );
  196.   WRITE_PERI_REG( 0x60000308, myPinBit );
  197.   WRITE_PERI_REG( 0x60000304, myPinBit );
  198.   WRITE_PERI_REG( 0x60000308, myPinBit );
  199.   WRITE_PERI_REG( 0x60000304, myPinBit );
  200.   WRITE_PERI_REG( 0x60000308, myPinBit );
  201.   WRITE_PERI_REG( 0x60000304, myPinBit );
  202.   WRITE_PERI_REG( 0x60000308, myPinBit );
  203.   WRITE_PERI_REG( 0x60000304, myPinBit );
  204.   WRITE_PERI_REG( 0x60000308, myPinBit );
  205.   WRITE_PERI_REG( 0x60000304, myPinBit );
  206.   WRITE_PERI_REG( 0x60000308, myPinBit );
  207.     WRITE_PERI_REG( 0x60000304, myPinBit );
  208.   WRITE_PERI_REG( 0x60000308, myPinBit );
  209.   WRITE_PERI_REG( 0x60000304, myPinBit );
  210.   WRITE_PERI_REG( 0x60000308, myPinBit );
  211.   WRITE_PERI_REG( 0x60000304, myPinBit );
  212.   WRITE_PERI_REG( 0x60000308, myPinBit );
  213.   WRITE_PERI_REG( 0x60000304, myPinBit );
  214.   WRITE_PERI_REG( 0x60000308, myPinBit );
  215.   WRITE_PERI_REG( 0x60000304, myPinBit );
  216.   WRITE_PERI_REG( 0x60000308, myPinBit );
  217.   WRITE_PERI_REG( 0x60000304, myPinBit );
  218.   WRITE_PERI_REG( 0x60000308, myPinBit );
  219.   WRITE_PERI_REG( 0x60000304, myPinBit );
  220.   WRITE_PERI_REG( 0x60000308, myPinBit );
  221.   WRITE_PERI_REG( 0x60000304, myPinBit );
  222.   WRITE_PERI_REG( 0x60000308, myPinBit );
  223.   WRITE_PERI_REG( 0x60000304, myPinBit );
  224.   WRITE_PERI_REG( 0x60000308, myPinBit );
  225.   WRITE_PERI_REG( 0x60000304, myPinBit );
  226.   WRITE_PERI_REG( 0x60000308, myPinBit );
  227.   WRITE_PERI_REG( 0x60000304, myPinBit );
  228.   WRITE_PERI_REG( 0x60000308, myPinBit );
  229.    WRITE_PERI_REG( 0x60000304, myPinBit );
  230.   WRITE_PERI_REG( 0x60000308, myPinBit );
  231.   WRITE_PERI_REG( 0x60000304, myPinBit );
  232.   WRITE_PERI_REG( 0x60000308, myPinBit );
  233.   WRITE_PERI_REG( 0x60000304, myPinBit );
  234.   WRITE_PERI_REG( 0x60000308, myPinBit );
  235.   WRITE_PERI_REG( 0x60000304, myPinBit );
  236.   WRITE_PERI_REG( 0x60000308, myPinBit );
  237.   WRITE_PERI_REG( 0x60000304, myPinBit );
  238.   WRITE_PERI_REG( 0x60000308, myPinBit );
  239.   WRITE_PERI_REG( 0x60000304, myPinBit );
  240.   WRITE_PERI_REG( 0x60000308, myPinBit );
  241.   WRITE_PERI_REG( 0x60000304, myPinBit );
  242.   WRITE_PERI_REG( 0x60000308, myPinBit );
  243.   WRITE_PERI_REG( 0x60000304, myPinBit );
  244.   WRITE_PERI_REG( 0x60000308, myPinBit );
  245.   WRITE_PERI_REG( 0x60000304, myPinBit );
  246.   WRITE_PERI_REG( 0x60000308, myPinBit );
  247.   WRITE_PERI_REG( 0x60000304, myPinBit );
  248.   WRITE_PERI_REG( 0x60000308, myPinBit );
  249.   WRITE_PERI_REG( 0x60000304, myPinBit );
  250.   WRITE_PERI_REG( 0x60000308, myPinBit );
  251.   
  252.   
  253.   
  254.   os_intr_unlock();
  255. }
复制代码
有空再发用ESP32测量1Hz-50MHz的代码。




作者: adminismk    时间: 2024-4-18 15:56
那么问题来了,,你这个所谓的“方波”的上升沿究竟多少,稳定性咋样????
作者: kindzhon    时间: 2024-4-18 16:05
adminismk 发表于 2024-4-18 15:56
那么问题来了,,你这个所谓的“方波”的上升沿究竟多少,稳定性咋样???? ...

俺比较穷,没好示波器,请兄弟帮忙测测?谢谢啦
作者: 人艰不拆了    时间: 2024-4-18 16:11
什么叫11组,55组,121组?
作者: kindzhon    时间: 2024-4-18 16:12
人艰不拆了 发表于 2024-4-18 16:11
什么叫11组,55组,121组?

这两句为一组:
  WRITE_PERI_REG( 0x60000304, myPinBit );
  WRITE_PERI_REG( 0x60000308, myPinBit );
作者: 小陆    时间: 2024-4-18 16:17
esp8266那么烂,连个pwm都输出不了吗
作者: 人艰不拆了    时间: 2024-4-18 16:19
kindzhon 发表于 2024-4-18 16:12
这两句为一组:
  WRITE_PERI_REG( 0x60000304, myPinBit );
  WRITE_PERI_REG( 0x60000308, myPinBit ); ...

这两句什么意思,输出一个跳变电平?
作者: kindzhon    时间: 2024-4-18 16:26
人艰不拆了 发表于 2024-4-18 16:19
这两句什么意思,输出一个跳变电平?

对,相当于IO高低电平翻转一次。
作者: 人艰不拆了    时间: 2024-4-18 16:28
kindzhon 发表于 2024-4-18 16:26
对,相当于IO高低电平翻转一次。

关键是频率稳定不稳定
作者: alloystorm    时间: 2024-4-18 16:52
kindzhon 发表于 2024-4-18 16:26
对,相当于IO高低电平翻转一次。

非硬件输出方波有风险,当你的处理器执行其他某些耗资源任务的时候,IO有可能反应不过来导致输出方波占空比会有差异,是否出问题看系统调度情况、主频、方波频率。
作者: bboroo    时间: 2024-4-18 17:04
应该是用了外置的库吧?
作者: kindzhon    时间: 2024-4-18 19:01
bboroo 发表于 2024-4-18 17:04
应该是用了外置的库吧?

这个真没有
作者: inthsunshine    时间: 2024-4-18 19:09
几块钱的si5351不香吗?最高到200MHz
作者: liuhaob    时间: 2024-4-19 08:42
比较复杂
作者: kindzhon    时间: 2024-4-19 09:30
inthsunshine 发表于 2024-4-18 19:09
几块钱的si5351不香吗?最高到200MHz

8266才三四元钱,si5351能既输出方波,又能wifi吗,又当mcu?
作者: inthsunshine    时间: 2024-4-19 09:34
本帖最后由 inthsunshine 于 2024-4-19 10:35 编辑
kindzhon 发表于 2024-4-19 09:30
8266才三四元钱,si5351能既输出方波,又能wifi吗,又当mcu?

小学语文都没过关,还这么杠,呵呵,当我没说吧


作者: sunbester    时间: 2024-4-19 10:09
话说555能到多大频率?
作者: 南天音乐    时间: 2024-4-19 11:32
直接在loop里写whie(1)行不行
作者: kindzhon    时间: 2024-4-19 12:32
inthsunshine 发表于 2024-4-19 09:34
小学语文都没过关,还这么杠,呵呵,当我没说吧

我的标题就是“用arduino 和 esp8266 输出”,讲的就是通用ESP8266 wifi模块用arduino输出1M以上的方波,是多用途的SOC或者MCU,而不是专用模块,限定语非常清楚。这是探讨这个特定的8266以前无法解决用arduino代码输出超过125KHz的问题,手头上有8266的人不少,能输出个1M以上的信号源它不香吗?
老牌计算机硕士,可能没你这文学大师水平高,但我想我的意思表达的还是很清楚的。
作者: tomyluo    时间: 2024-4-19 13:12
这个方波是不均匀的吧?感觉效果应该是这样的,每组代码产生一个脉冲,loop循环的时候有间隙时间不输出脉冲,代码组数多了,脉冲就多了,间隙时间一样,但是比例减小,所以表现为频率升高?
[attach]2090464[/attach]



作者: meteor2003x    时间: 2024-4-19 13:18
这代码不就是直接写寄存器吗?
作者: inthsunshine    时间: 2024-4-19 14:24
本帖最后由 inthsunshine 于 2024-4-19 15:27 编辑
kindzhon 发表于 2024-4-19 12:32
我的标题就是“用arduino 和 esp8266 输出”,讲的就是通用ESP8266 wifi模块用arduino输出1M以上的方波, ...

还把老牌硕士都搬出来了? 这是单片机板块,不知道一个学软件的在单片机领域有什么优越感还大言不惭,还停留在到处抄代码

先把底层硬件和软件搞明白再来吹吧,不好意思本人电子通信科班出身。。。不是文学专业

再对你的主题提个醒,这种纯软件产生的波形,最好示波器看下波形,很多时候出来并不是你想象的规范方波,如果最基本的方波都不能做到规范,那基本没价值,这不是什么自以为是的捷径,而是歧路

作者: kindzhon    时间: 2024-4-19 17:50
本帖最后由 kindzhon 于 2024-4-19 17:56 编辑
inthsunshine 发表于 2024-4-19 14:24
还把老牌硕士都搬出来了? 这是单片机板块,不知道一个学软件的在单片机领域有什么优越感还大言不惭,还停 ...

如果不是你说我是小学语文水平,我也不用搬什么硕士啊。
我穷啊,没示波器,拜托您这电子通讯专家测一下,再给个评价呗?
另外,我确实不懂,计算机专业就一定是软件?通信专业就比计算机专业更懂单片机?
还有抄代码有啥不对?如果都不对,这世界要开源干啥?你不抄代码,难道你从恐龙时代自己完成计算机的建造么?你编的程序,驱动、库、系统、IDE都是自己写的?
我遇到的团难,找到了解决的办法,分享给可能同样遇到问题的人,又有何不对?论坛不就是分享做法和想法的地方么?

作者: inthsunshine    时间: 2024-4-19 18:43
本帖最后由 inthsunshine 于 2024-4-19 18:47 编辑
kindzhon 发表于 2024-4-19 17:50
如果不是你说我是小学语文水平,我也不用搬什么硕士啊。
我穷啊,没示波器,拜托您这电子通讯专家测一下, ...

想让我帮你测,就以你这种态度,你觉得可能吗? 呵呵

分享? 自己都没测试波形未经验证就拿出来分享,你这是分享? 我只不过提醒你一下这种方法不可取,不如用几块的时钟芯片靠谱,你还以为自己找到什么捷径?即使要用单片机软件产生波形,也要配合片上外设实现,比如定时器产生PWM,或者其它可靠的方式,而不是靠端口的电平变化来实现

通信专业,电子线路是基础你不知道吗? 光电路就学了一年,电子线路(线性和非线性)也学了一年,你知道电路和电子线路课程什么区别吗?就不说什么单片机了,信号与系统,数字通信,卫星通信多了去的课程,你真以为硬件这行有这么好深入的? 哈哈哈,
如果大学不做好基础,那读大学干嘛,高中毕业就懂得到处搜索别人的代码,为什么现在ic到处飞的时代,大学课程还在学二极管三极管原理微变等效模型各种公式推导?

作者: amo73    时间: 2024-4-19 22:30
tomyluo 发表于 2024-4-19 13:12
这个方波是不均匀的吧?感觉效果应该是这样的,每组代码产生一个脉冲,loop循环的时候有间隙时间不 ...

看楼主的代码,输出波形显然就是你发的这种
作者: mmxx2015    时间: 2024-4-20 09:11
说下我的看法,方波是50%占空比的矩形波,如果对频率、占空比要求比较高,用软件产生高频方波是比较困难的,除非CPU只干产生方波这件事,如果要求不高,如调光,频率、占空比片一点也能用。高频矩形波输出还涉及IO翻转速率、电路分布电容问题,即使软件及时地翻转IO状态,实际输出的可能是类似锯齿波的波形。
作者: 2361656471    时间: 2024-4-30 19:09
用手机web显示波形延迟咋样
作者: ahyu99    时间: 2024-5-1 09:04
这个是个思路。不过一般人还可能真用不上那么高的频率。
作者: kindzhon    时间: 2024-5-3 21:34
本帖最后由 kindzhon 于 2024-5-3 21:35 编辑
inthsunshine 发表于 2024-4-19 18:43
想让我帮你测,就以你这种态度,你觉得可能吗? 呵呵

分享? 自己都没测试波形未经验证就拿出来分享,你 ...

啥叫帮我测?你要说这方波不好,你测出来结果才能证明你说的没错啊?你没测过有什么好说的?
你还真以为我没测过?我开始就说过定时器达不到1MHz,你看都没看清楚还说啥啊?
你只知道摆你的通信专业学了啥课,你知道计算机专业学了啥么?我问的是通信专业就比计算机专业更懂单片机?通信专业和计算机专业最大的区别应该是模和数的关系,数也不是不学电子线路,但微机原理数肯定比模学的深。这里单片机跟数的关系更大,和模没有太大关系。
而且这里设定的探讨的问题和方向非常窄,定语是用 arduino 和 esp8266输出1MHz 以上的方波,你大学学再多专业课,里面也没有 arduino 和 esp8266吧?这到是软件层面的,估计你没有学编译原理,看不懂人家老外讨论的转换成汇编语言后的精妙之处在哪,更不知道 arduino 本身的局限性,和 esp8266如何被限制的,不像 rtos sdk 下那么容易使用定时器和 PWM。所以估计8266的 arduino 编程你都不会,更不要说解决这样的难题了,有本事你编个更好的程序出来。
还有,退一万步说,你怎么知道输出这个1MHz 以上的方波是干啥用的呢?如果人家本来就只是要的是频率,精度本来就没要求那么高呢?我拿我手里有的板子就能解决我的问题,我干吗非要去另买一块模块呢?我要精度更高的一样有,ESP32的那个帖子也发了,你可以去看。
而且讨论问题就讨论问题,我最讨厌别人不好好说话,阴阳怪气的人身攻击,这里是公共场所,请注意起码的礼貌,不然对不起你的科班出身噢。

作者: inthsunshine    时间: 2024-5-3 22:42
本帖最后由 inthsunshine 于 2024-5-3 23:28 编辑
kindzhon 发表于 2024-5-3 21:34
啥叫帮我测?你要说这方波不好,你测出来结果才能证明你说的没错啊?你没测过有什么好说的?
你还真以为我 ...

我玩的东西比这复杂多了,这个我还真看不上眼因为没啥意义,一看你就是硬件盲



作者: kindzhon    时间: 2024-5-6 09:23
inthsunshine 发表于 2024-5-3 22:42
我玩的东西比这复杂多了,这个我还真看不上眼因为没啥意义,一看你就是硬件盲

我不会说你软件盲,反正你不懂,又来人身攻击,懒得和你扯了。




欢迎光临 数码之家 (https://www.mydigit.cn/) Powered by Discuz! X3.4