矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
楼主: gxg0000

用DDS数字频率合成技术打造多功能收音机测量仪

  [复制链接]
     
 楼主| 发表于 2020-5-9 15:45:05 | 显示全部楼层
18831723466 发表于 2020-5-7 21:46
郭老师的电子造诣深不可测啊,数模通吃

谢谢

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2020-5-17 13:57:48 | 显示全部楼层
郭老师:用了第3版的app后,PCF8574A的硬件就可以不修改了,1602屏可以点亮了吗?

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-5-17 16:49:08 | 显示全部楼层
dyb788 发表于 2020-5-17 13:57
郭老师:用了第3版的app后,PCF8574A的硬件就可以不修改了,1602屏可以点亮了吗?

可以点亮
回复 支持 反对

使用道具 举报

     
发表于 2020-5-19 09:03:45 | 显示全部楼层
很不错,学习了

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2020-5-19 09:26:11 | 显示全部楼层
这么好的技术贴才发现!太好了

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2020-5-20 12:54:33 | 显示全部楼层
不错,不错,学习了。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2021-6-6 14:27:08 | 显示全部楼层
单片机与上位机串口的通信程序,单片机接收数据为中断方式,连续接收12字节,向上位机发送数据为随机方式。

  1. /**********************************************************************
  2. *   USART异步通信
  3. *   数据位8、停止位1、比特率38400,CPU主频16MHZ
  4. ***********************************************************************/
  5. #include<avr/interrupt.h>
  6. #include "ad9850.h"
  7. unsigned char control;                          //仪器控制码(外部可以使用)
  8. unsigned long f_start=407000;                  //扫频开始频率4字节(默认407Khz扫频开始, 返回PC480字节)
  9. unsigned long step=200;                          //步进2字节(默认频率间隔200Hz, 扫频结束503Khz)
  10. unsigned int delay=700;                          //步进延时(默认700us)
  11. unsigned char db=97;                                //衰减倍率1字节(默认增益"a","b","c","d","e")
  12. unsigned char p=50;                                        //A/D通道选择(PC0:频谱仪、PC1:5.12v档、PC2:2.56v档、PC3:Q表)
  13. /*********************************************************************
  14. *        USART 初 始 化                               
  15. **********************************************************************/
  16. void uart_init(void)                                //波特率38400(不可调),fosc=16M
  17. {       
  18. UCSRC = 0x86;                                                //异步,8位加1位停止,无校验位
  19. UBRRL = 0x19;
  20. UBRRH = 0x0;                                                //波特率设置        
  21. UCSRB = 0x98;                                                //RXC发送使能
  22. }
  23. /*********************************************************************
  24. *        发 送 函 数                               
  25. **********************************************************************/
  26. void uart_send(unsigned char data)
  27. {
  28. while (!(UCSRA & (1<<UDRE)));                //="0",等待(=1表示空)
  29. UDR = data;
  30. while (!(UCSRA & (1<<TXC)));                //="1",发完跳出
  31. UCSRA |= (1<<TXC);                                        //发送完毕,手动置位(如果是中断发送 会自动置位)
  32. }
  33. /*********************************************************************
  34. *        USTAR 中 断 函 数
  35. *        接受数据结束中断请求
  36. **********************************************************************/
  37. unsigned char m;                                        //扫频设置接收字节数
  38. unsigned long n;
  39. unsigned long a1,a2,a3;                        //接收字节缓存
  40. ISR(USART_RXC_vect)                       
  41. {       
  42.         UCSRB &=~ (1<<7);                                  //关串口中断
  43.         n=UDR;
  44.         if(m==0)
  45.         {
  46.                 if(n==56)                                        //扫频参数传输头"8"标记判断?
  47.                 {
  48.                         m=10;                                        //连续接收10字节
  49.                         f_start=0;                                //清除以前的设置值
  50.                         step=0;       
  51.                         delay=0;
  52.                         control=n;        //仪表功能选择       
  53.                 }
  54.                 else
  55.                 {
  56.                         control=n;        //设别码暂存("0"扫频仪,"1,2"频率计,"3"高频Q表,"4"简易声谱仪,"5"频率发生器DDS设置,"6"扫频设置/暂停,"8"扫频参数传输头标记,"9"有载Q表)       
  57.                         if((control==49)|(control==50))
  58.                                 ad9850_wr_serial(0x0,1000);                //输出1000赫兹标准频率,供频率计标定
  59.                         if(control==53)
  60.                                 ad9850_wr_serial(0x0,f_start);         //同步修改DDS频率发生器
  61.                 }
  62.         }
  63.         else
  64.         {
  65.                 switch(m)                                                        //扫频参数传输
  66.                 {
  67.                         case 10: a1=n; break;                                                                                       
  68.                         case 9: a2=n; break;                                                               
  69.                         case 8:        a3=n; break;                        //缓存在a1:3                                                       
  70.                         case 7:       
  71.                                         f_start+=a1;
  72.                                         f_start+=a2<<8;
  73.                                         f_start+=a3<<16;
  74.                                         f_start+=n<<24;                        //合并开始频率f_start       
  75.                         break;                                               
  76.                         case 6:        a1=n; break;                                                                               
  77.                         case 5:       
  78.                                         step+=a1;
  79.                                         step+=n<<8;                         //合并步进step
  80.                         break;                                                               
  81.                         case 4:        a1=n; break;                                                       
  82.                         case 3:       
  83.                                         delay+=a1;
  84.                                         delay+=n<<8;                         //合并步进延时delay
  85.                         break;       
  86.                         case 2:        db=n; break;                        //衰减倍率
  87.                         case 1:        p=n; break;                                //A/D通道选择
  88.                 }       
  89.                 m--;
  90.         }                                                               
  91.         UCSRB |= (1<<7);                                                 //使能串口中断
  92. }
复制代码
回复 支持 反对

使用道具 举报

     
发表于 2021-6-8 20:14:37 | 显示全部楼层
这个全套要多少成本?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-4-28 03:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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