123
返回列表 发新帖

[DAC] 做DAC?拥抱STM8单片机……吧

[复制链接] 查看: 19484|回复: 58

27

主题

1

好友

484

积分

业余侠客 当前离线

Rank: 4

UID
787724
帖子
422
精华
0
经验
484 点
金钱
394 ¥
注册时间
2015-3-20
 楼主| 发表于 2021-6-23 22:56 | 显示全部楼层
xjsman1 发表于 2021-6-21 17:25
可怜的单片机,被LZ开始用了1秒钟以后就废掉了。至少单片机是变砖了。如果I2C上来个干扰,得了,还得重新上 ...

I2C有上拉电阻,很难被干扰。
你要是觉得单片机偷懒,想让它多干活,单片机普遍还有时间中断功能,就是先活跃关机,保留时钟运行,时钟计数器运行到一个特定的数值再唤醒,这个时间间隔可以是us级,很多闪动的状态指示灯就是用这个办法做成的。

22

主题

2

好友

635

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
210559
帖子
648
精华
0
经验
635 点
金钱
641 ¥
注册时间
2010-6-12
发表于 2021-6-23 23:19 | 显示全部楼层
不错哈,正需要这样的教程

21

主题

3

好友

641

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
859978
帖子
636
精华
0
经验
641 点
金钱
601 ¥
注册时间
2019-3-7
发表于 2021-6-24 11:24 | 显示全部楼层
本帖最后由 xjsman1 于 2021-6-24 11:27 编辑
丰年好大雪 发表于 2021-6-23 22:56
I2C有上拉电阻,很难被干扰。
你要是觉得单片机偷懒,想让它多干活,单片机普遍还有时间中断功能,就是 ...


用时间中断做别的任务不是很好。有非常大的缺点,就是中断函数运行时间太长。如果碰到有中断优先的单片机还好,如果碰到没有中断优先的单片机,会严重影响其它中断的运行。正确的做法是在时基中断里立时间标志,在外面大循环里设置时间寄存器。如果资源强的单片机,可以用RT-OS,但是要会移植,而且非常精通汇编才行。涉及到寄存器任务切换的保存问题,所以要精通汇编。光会C语言是不够的。像STM8这样的弱鸡,即没中断优先,资源又小。只能用我说的第一种方法。

27

主题

1

好友

484

积分

业余侠客 当前离线

Rank: 4

UID
787724
帖子
422
精华
0
经验
484 点
金钱
394 ¥
注册时间
2015-3-20
 楼主| 发表于 2021-6-24 14:51 来自手机端 | 显示全部楼层
STM8是有中断优先级的,有个ITC控制器可以配置一下。不过还是看你完成什么样的工作,控制个DAC,外加两个按钮,一个旋转编码器,实在不需要搞这么复杂。

1

主题

0

好友

457

积分
     

业余侠客 当前离线

Rank: 4

UID
196963
帖子
467
精华
0
经验
457 点
金钱
453 ¥
注册时间
2010-4-30
发表于 2021-6-28 11:00 | 显示全部楼层
如果不是做产品讲究成本低话,建议使用既大众化、又便宜,且功能强大的STM32系列的芯片

4

主题

0

好友

46

积分

注册会员 当前离线

Rank: 2

UID
837331
帖子
42
精华
0
经验
46 点
金钱
38 ¥
注册时间
2017-8-26
发表于 2021-7-1 23:20 | 显示全部楼层
楼主提了一个很好的问题,现在很多的硬件都需要软件控制才能工作好,其控制逻辑并不复杂,但同学们硬件做久了,对软件单片机发怵。我这里建议大家可以学另一个ARM公司出的软件mbed, 相较楼主的更容易入门且不需要管理单片机的初始化一堆设置,有简单的C基础即可,用来控制一个DAC, 功放等非常简单,且mbed不挑mcu, 程序基本不改就可以几家mcu能用。非常推荐!!

下面的例程控制一个mcu I/O使LED灯闪

#include "mbed.h"

DigitalOut myled(LED1);

int main()
{
  
    // Blink LED
    while(1) {
        myled = 1;          // set LED1 pin to high      

         wait(0.5);
         myled = 0;          // set LED1 pin to low     

    }
}

32

主题

5

好友

6673

积分

贵宾 当前在线

Rank: 3Rank: 3

UID
48179
帖子
8115
精华
0
经验
6673 点
金钱
6571 ¥
注册时间
2008-7-17
发表于 2021-7-2 14:47 | 显示全部楼层
我听过最好听的用DSP56001.

20

主题

1

好友

413

积分

业余侠客 当前离线

Rank: 4

UID
216179
帖子
366
精华
0
经验
413 点
金钱
389 ¥
注册时间
2010-7-1
发表于 2022-1-11 12:35 | 显示全部楼层
您好,
看了大佬您的DAC软控教程,深有感触。
自己正在捣鼓ES9038Q2M,软控方面实在不会,可以请您有偿代设计程序吗?
联系方式已经私信过去了,谢谢!

2

主题

0

好友

247

积分

业余侠客 当前离线

Rank: 4

UID
618788
帖子
256
精华
0
经验
247 点
金钱
243 ¥
注册时间
2013-9-19
发表于 2022-1-11 13:19 | 显示全部楼层
感谢楼主分享

1

主题

0

好友

457

积分
     

业余侠客 当前离线

Rank: 4

UID
196963
帖子
467
精华
0
经验
457 点
金钱
453 ¥
注册时间
2010-4-30
发表于 2022-1-13 16:53 | 显示全部楼层
xmlhifi 发表于 2021-6-23 18:35
以前学校老师教的是汇编语言

学校教汇编应该是30多年前的是吧,记得最早学汇编是85年左右的时候   

18

主题

0

好友

61

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
941304
帖子
475
精华
0
经验
61 点
金钱
42 ¥
注册时间
2022-1-5
发表于 2022-1-13 19:15 | 显示全部楼层
dygyl 发表于 2021-6-28 11:00
如果不是做产品讲究成本低话,建议使用既大众化、又便宜,且功能强大的STM32系列的芯片

确实32系列的资料更多一些,只可惜现在价格太逆天了

7

主题

0

好友

193

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
1085381
帖子
252
精华
0
经验
193 点
金钱
179 ¥
注册时间
2023-12-12
发表于 2024-1-5 15:14 | 显示全部楼层
  1. main程序源码给大家看看。

  2. #define stm8s003
  3. #include <stm8s.h>
  4. #include <stm8s003f3p.h>
  5. #include <stm8s_i2c.h>
  6. #include <stm8s_clk.h>
  7. #include <stm8s_gpio.h>

  8. #define AK4497AD 0x20

  9. void delay_100ms(void)
  10. {
  11.   unsigned char i,j;

  12.   for(i=0;i<255;i++)//2*255个指令周期

  13.     for(j=0;j<255;j++);//2*255个指令周期

  14. }

  15. void Mute_release(void)
  16. {
  17.   //PD_ODR_ODR4 = 1;
  18.   PD_ODR = 0xFF;

  19. }

  20. uint8_t I2C_Write(uint8_t address,uint8_t data)

  21. {
  22.         while(I2C_GetFlagStatus( I2C_FLAG_BUSBUSY));
  23.   
  24.         I2C_GenerateSTART( ENABLE);//开启I2C1  
  25.         while(!I2C_CheckEvent( I2C_EVENT_MASTER_MODE_SELECT));/*EV5,主模式*/  
  26.   
  27.         I2C_Send7bitAddress(AK4497AD, I2C_DIRECTION_TX );//器件地址 -- 默认0xD0  
  28.         while(!I2C_CheckEvent( I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));  
  29.   
  30.         I2C_SendData(address);//寄存器地址  
  31.         while (!I2C_CheckEvent( I2C_EVENT_MASTER_BYTE_TRANSMITTED));  
  32.   
  33.         I2C_SendData(data);//发送数据  
  34.         while (!I2C_CheckEvent( I2C_EVENT_MASTER_BYTE_TRANSMITTED));  
  35.         I2C_AcknowledgeConfig(ENABLE);  
  36.   
  37.         I2C_GenerateSTOP( ENABLE);//关闭I2C1总线
  38. }

  39. void Sys_Init(void)
  40. {
  41.         CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
  42.         I2C_Cmd(DISABLE);
  43.         GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_OUT_OD_LOW_FAST);
  44.         I2C_Init(100000, 0xA0, I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, 0x08);
  45.         I2C_Cmd(ENABLE);

  46. }

  47. int main( void )
  48. {
  49.         Sys_Init();

  50.   delay_100ms();
  51.         delay_100ms();
  52.         delay_100ms();
  53.         delay_100ms();
  54.         delay_100ms();
  55.    I2C_Write(0x01,0x02);//CS4398替换成0x02,0x10 --IIS 24bit;
  56.    I2C_Write(0x08,0x0C);//CS4398替换成0x08,0x00 --清零开始工作;
  57.    I2C_Write(0x00,0x9F);
  58.         delay_100ms();
  59.   Mute_release();
  60. while(1);
  61. }

  62. #ifdef USE_FULL_ASSERT  
  63. void assert_failed(u8* file, u32 line)  
  64. {  
  65.   while (1)  
  66.   {  
  67.   }  
  68. }  
  69. #endif  
复制代码

1

主题

0

好友

7

积分

注册会员 当前离线

Rank: 2

UID
1087847
帖子
6
精华
0
经验
7 点
金钱
5 ¥
注册时间
2024-1-8
发表于 2024-1-8 21:11 | 显示全部楼层
不会编程,了学习一下。谢谢

7

主题

3

好友

554

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
793062
帖子
549
精华
0
经验
554 点
金钱
529 ¥
注册时间
2015-5-23
发表于 2024-1-8 23:27 | 显示全部楼层
进口单片机也敢用,你是真的心大。DIY玩玩就好,做产品千万别用,现在卖3块钱不到的STM32F103RBT6在2021年8月份,公司进货被哄抬到150块一片,导致项目直接夭折,一次怕到老。能用国产芯片解决的问题,打死也不用进口芯片!特别是美国芯片,哪怕是在国内生产的也不用。

27

主题

1

好友

484

积分

业余侠客 当前离线

Rank: 4

UID
787724
帖子
422
精华
0
经验
484 点
金钱
394 ¥
注册时间
2015-3-20
 楼主| 发表于 2024-1-8 23:37 | 显示全部楼层
本帖最后由 丰年好大雪 于 2024-1-8 23:38 编辑
xdming 发表于 2024-1-8 23:27
进口单片机也敢用,你是真的心大。DIY玩玩就好,做产品千万别用,现在卖3块钱不到的STM32F103RBT6在2021年8 ...


疫情第一年哄抬单片机价格,直接让国内厂家全部转向国产替代,STM32、STM8都有国产替代,比如GD32什么的,ST意法今年疯狂在国内搞公关,可惜没人理他,北京昆仑饭店演说会现场的餐点都没人吃。 不过目前我司已经基本舍弃了这些玩意,低端8位就是STC8G,高端32位用ESP32/8266用到起飞,还有一体化片载wifi模块,活活爽死。

至于国内同行在搞什么,可以说的有一个,就是国内音频厂家已经舍弃了什么该死的音响线材、高清蓝牙的限制。未来智能化、分布化HIFI设备需要更大的频宽,因此使用WIFI模块重新编解码,将2.4G频率利用起来,用WIFI的带宽+高清蓝牙块传输协议,来做真·无损音频信号传输,才是未来的方向。

7

主题

3

好友

554

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
793062
帖子
549
精华
0
经验
554 点
金钱
529 ¥
注册时间
2015-5-23
发表于 2024-1-8 23:38 | 显示全部楼层
xmlhifi 发表于 2021-6-23 18:35
以前学校老师教的是汇编语言

我也是,可惜当年实操的机会很少,只学了个半桶水。直到多年以后传奇外挂被管方封禁,作为挂B的我,因为没了外挂用,就凭着那一点点汇编基础开始用Delphi自己写外挂,后来工作需要又拿起C51.

7

主题

3

好友

554

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
793062
帖子
549
精华
0
经验
554 点
金钱
529 ¥
注册时间
2015-5-23
发表于 2024-1-8 23:56 | 显示全部楼层
dygyl 发表于 2022-1-13 16:53
学校教汇编应该是30多年前的是吧,记得最早学汇编是85年左右的时候

90年代也是教汇编的,我是93年在学校学的汇编。全校就只有几十台单板机,基本没有实操机会。没接触过编程的人直接学汇编感觉就像是在学外星人的语言现在的学生基本都是先学C,再学C51,然后再学51汇编,基本就是水到渠成。

1

主题

0

好友

139

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
1081993
帖子
152
精华
0
经验
139 点
金钱
137 ¥
注册时间
2023-11-6
发表于 2024-1-9 14:33 | 显示全部楼层
现在单片机是非常普及了,可以搞啊。

1

主题

0

好友

15

积分

注册会员 当前离线

Rank: 2

UID
887948
帖子
16
精华
0
经验
15 点
金钱
13 ¥
注册时间
2020-10-16
发表于 2024-2-22 10:04 | 显示全部楼层
软控确实是好东西,努力了一段时间,完全没摸到门。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc.

返回顶部