矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 10383|回复: 37

我的第一台DSP收音机(AKC6955)

[复制链接]
     
发表于 2020-1-14 08:47:22 | 显示全部楼层 |阅读模式
本帖最后由 gdbin001 于 2020-1-14 10:34 编辑

记得我做收音机还是在读小学时,用一个二极管接一条长长的电线再接一个耳机,几乎听不到什么东西。但是觉得很神奇,想知道得更多些,从此爱上电子技术。当然那时候也喜欢航模什么的,超喜欢一本杂志是《中学科技》,还有《电子世界》《无线电》,里面介绍了很多电子知识。可能因为看多了,很多电路方面的原理都是自己悟出来的。装的第一台7管收音机是在读高二时,在杂志上看到有黄河741套件,就买回来装了。想想是三十年 前了的事情了。当时听到收音响起来有多激动。
重新想起收音机是几个月前的事。不知道为什么,只是突然想听收音机了,就在网上搜相关资料。之前看到的数字收音都只是加了数字显示功能。收音电路部分还是模拟的,并没有什么吸引我的。但看到DSP收音后才知道,原来通信技术真的发展到软件通信阶段了。基本上所有功能都通过单片机运算实现,已经成了一台计算机了,真太神奇了。这又激起了我的兴趣。想着自己装一台,再自己定制界面,没事再改改程序,好爽啊。在矿坛里看到sudywolf大牛的帖子,所有资料都共享出来,太好了,非常感谢这些无私的人。只是sudywolf大牛当时给出的是触摸屏控制的代码。我手头只有按键和1602。完全用他的代码不行。就根据他给出的资料改成现在这个样子。用着感觉挺好。以后还可以再增加功能,很好玩。先发出来给大家看看。
代码也发出来,只有2个文件,有需要可以下载参考。里面有注释,很好懂。功能不多,只有向前搜台,音量增减。可以断续增加其他功能下去。


补充内容 (2020-7-23 10:59):
第3页有更新

现在的样子

现在的样子

和老收音机合个影

和老收音机合个影

My6955.zip

6.07 KB, 下载次数: 333

评分

6

查看全部评分

     
发表于 2020-2-18 03:52:56 | 显示全部楼层
本帖最后由 sudywolf 于 2020-2-18 04:12 编辑
jssgn 发表于 2020-2-12 19:46
大师 就是大师,我也是在这几天闲的无事,把您的原程序尤其是这段话"结构体struct 用于区分寄存器的各个字 ...


谬赞了 过誉了

事实上在低速硬件以及对实时要求不高的硬件操作的时候 使用结构体对寄存器操作很方便

在需要高速的时候 代码执行效率上就远不如位操作了 比方做视频音频软解压的时候 这也就是为什么国内很有名的正点原子的STM32提供两个版本的库(当然更牛艾克斯的是用汇编)。

这个方法能使代码很清晰 可读性加强 在某些工业级代码 也常常使用




目前我天朝正全民抗疫 祝愿诸位都身体健康

天佑我中华 中国必胜!

回复 支持 1 反对 0

使用道具 举报

     
 楼主| 发表于 2020-1-14 18:53:49 | 显示全部楼层
超级飞马 发表于 2020-1-14 16:02
akc6599连用3支,做了5个板子,造了一堆辣鸡,以前玩单片机小制做不管是时钟万年历蓝牙小车比这个复杂都是 ...

5个板子?1个就折腾得够呛了。矿坛就是牛人多。要我早趴下了。快乐来自折腾。
回复 支持 1 反对 0

使用道具 举报

     
发表于 2020-1-14 10:42:12 | 显示全部楼层
我没看中你的DSP收音机,倒是看中了你那台老收音机
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-1-14 10:58:01 | 显示全部楼层
被你打击到了
回复 支持 反对

使用道具 举报

     
发表于 2020-1-14 15:54:19 来自手机 | 显示全部楼层
6955搞的我哭得心都有了,我没用arduino,开始用的mega8用fastavr编程m8换了几只程序重写了几遍就是不响。改用pic16f876,picbasic pro编程先开始也不响后来不用编译器自带封装好的的i2c语句,自己写软i2c功能。响了但连FM都全是噪声灵敏度低加了9018的高放也没用,32.768khz晶振动不动停振要手碰一下才好。换了n个不同地方买来的晶振谐振电容从22p到33p都试着换了一遍不行啊。把我打击的郁闷极了,akc4926可是一装就响啊。
回复 支持 反对

使用道具 举报

     
发表于 2020-1-14 16:02:54 来自手机 | 显示全部楼层
akc6599连用3支,做了5个板子,造了一堆辣鸡,以前玩单片机小制做不管是时钟万年历蓝牙小车比这个复杂都是自己写代码画电路焊板子除错调试没像这次费劲折腾还失败。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-1-14 18:49:52 | 显示全部楼层
超级飞马 发表于 2020-1-14 15:54
6955搞的我哭得心都有了,我没用arduino,开始用的mega8用fastavr编程m8换了几只程序重写了几遍就是不响。 ...

你会那么多平台,厉害。我只有羡慕的份了。我只会Arduino,还不太熟练。向你学习。
回复 支持 反对

使用道具 举报

     
发表于 2020-1-14 20:52:56 | 显示全部楼层
我重新写了个版本 不过没有测试过哈哈 有兴趣可以试试

这个版本可以只用按钮(只用按钮的时候 没办法用我的Touch Screen 因为脚不够  不知道能不能改造一下 用于你的显示器)


注意 akc6955.ino 里面的代码 写的时候用了预编译定义  有些技巧性的写法 修改的时候注意 容易语法出错

akc6955_v2a.zip

7.63 KB, 下载次数: 851

回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-1-14 21:19:26 | 显示全部楼层
sudywolf 发表于 2020-1-14 20:52
我重新写了个版本 不过没有测试过哈哈 有兴趣可以试试

这个版本可以只用按钮(只用按钮的时候 没办法用我 ...

谢谢大牛。要是有Scan&Save功能就更好了。我下载下来看看。
回复 支持 反对

使用道具 举报

     
发表于 2020-1-14 21:22:38 | 显示全部楼层
gdbin001 发表于 2020-1-14 21:19
谢谢大牛。要是有Scan&Save功能就更好了。我下载下来看看。

要保存的话需要加存储芯片或者SD Uno 资源估计不够

而且 一旦要保存数据 就涉及到 读 改 删 三个操作 (甚至加上排序)  程序比较麻烦 所以偷懒没做
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-1-14 21:53:56 | 显示全部楼层
sudywolf 发表于 2020-1-14 21:22
要保存的话需要加存储芯片或者SD Uno 资源估计不够

而且 一旦要保存数据 就涉及到 读 改 删 三个操作  ...

是的。我做了不太成功,主要是读出到指定频率后调谐有些不准,声音时有时无。补充一点。读你的程序感觉受益匪浅,对枚举和共同体的实践应用有了深刻理解,因为之前觉得这两个东西用处不大。现在发现在单片机里很有用,尤其是共同体还能涉及到位操作,以前只懂得左移右移,现在就直接操作,很棒的感觉。还有那个层层嵌套的?:,刚开始看得头晕,看明白后发现很有用。
回复 支持 反对

使用道具 举报

     
发表于 2020-1-15 01:20:11 | 显示全部楼层
本帖最后由 sudywolf 于 2020-1-15 01:40 编辑
gdbin001 发表于 2020-1-14 21:53
是的。我做了不太成功,主要是读出到指定频率后调谐有些不准,声音时有时无。补充一点。读你的程序感觉受 ...


拙作对您有帮助就好 哈哈

自定义频率不准 要看浮点数是否正确 调试的时候Adruino可以很方便串口打印出来

我本人是做软件的 对硬件了解不多 一开始也老是点不亮 做程序部分倒是胸有成竹

AKC6955类的收音机芯片其实很好编程 主要原理就是 在程序中做一个 寄存器的镜像映射表 根据用户操作 按键 旋钮之类 将其转化成寄存器数值的变化 收音机芯片内置功能会根据寄存器变化做出相应的动作 并改变 相应的寄存器的值用于读出 指示操作结果
所有的操作完后 要保证 单片机的寄存器表的所有值 和收音机寄存器表的所有值 同步 一致 镜像映射



寄存器操作 和 你提到的存台相比要简单得多 因为没有 建立 删除操作 只有 读取和写入


AK6955是普通DSP收音机芯片的优秀国产产品 作为单片机入门 是很好的一个东西


回复 支持 反对

使用道具 举报

     
发表于 2020-1-15 01:51:27 | 显示全部楼层
本帖最后由 sudywolf 于 2020-1-15 02:58 编辑
gdbin001 发表于 2020-1-14 21:53
是的。我做了不太成功,主要是读出到指定频率后调谐有些不准,声音时有时无。补充一点。读你的程序感觉受 ...


这里面其实是三个技巧

结构体struct 用于区分寄存器的各个字段 这样在单片机段操作寄存器值的时候 程序含义比移位更清晰 而且自动除错(不用担心溢出或者移位太多太少) 这个技巧值得推广

不过使用本技巧的时候有两个地方要注意 尤其是在移植代码到别的系统时
1: 某些编译器 在变量声明的时候 初始值有可能是乱的 需要单独做初始化
例如:union.reg0 reg0 reg0.value=0xXX

2: 某些编译器不控制溢出 这样可能会在8位对齐的时候需要加上 attribute packed之类的选项 甚至在赋值的时候需要自己压缩
例如 reg0.mute=0xXX & 0x01





寄存器声明的共同体union 加上 两个MACRO(宏) setReg / getReg 在读写收音机寄存器的时候 更快 程序更清晰(而且读的时候各个字段自动取值对齐)

至于大量?:嵌套 是有点装X 哈哈  因为代码可读性大大降低 不过执行速度更快


回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-1-15 08:15:38 | 显示全部楼层
本帖最后由 gdbin001 于 2020-1-15 08:16 编辑
sudywolf 发表于 2020-1-15 01:51
这里面其实是三个技巧

结构体struct 用于区分寄存器的各个字段 这样在单片机段操作寄存器值的时候  ...


是的。那个位域操作真的很棒,给我的印象最深刻。setreg和getreg开始我不明白,感觉多此一举,后来在程序里面用时才发现很方便。多个?:嵌套,我感觉可以省掉保存中间结果的变量,可以节省存储空间。还有那些高大上的公式,感觉你就是通信专家。开始不知道从哪来的,后来才发现是从信道频率关系里变形来的,哈哈。总之学到很多东西。再次感谢。
回复 支持 反对

使用道具 举报

     
发表于 2020-2-11 00:37:03 | 显示全部楼层
随着年轻人的加入,论坛里做DSP收音机的人多起来了;模拟部分再借鉴前辈们的经验,相信可以做出很好的收音机。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

蒙公网安备 15040402000005号

GMT+8, 2024-3-29 21:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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