找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 暖西夏
打印 上一主题 下一主题
收起左侧

STC8G1K08单片机adc采集问题

  [复制链接]
41#
ID:998702 发表于 2021-12-30 20:41 来自手机 | 只看该作者
wjw7680 发表于 2021-9-11 13:29
郑重道歉,由于建立STC工程的时失误没有添加启动文件“STARTUP.A51”文件,导致硬件仿真时候出现如下问题。 ...

还是不行啊,我这有这个starup.a51的文件啊。还是提示连接不到设备
回复

使用道具 举报

42#
ID:1011407 发表于 2022-3-18 21:07 | 只看该作者
xmsj 发表于 2021-12-30 20:41
还是不行啊,我这有这个starup.a51的文件啊。还是提示连接不到设备

请问解决了吗,我的也是加了startup.a51文件也还是不行,本来是可以了的,结果发现是软件仿真,到后面切换成硬件仿真还是不行
回复

使用道具 举报

43#
ID:975054 发表于 2022-3-27 23:48 | 只看该作者
近期用到了二路ADC电压检测,很正常稳定,没有什么问题的,设置要正确.
精简代码如下:
ADCCFG = 0x2f;                    //设置ADC时钟为系统时钟/2/16 ,右对齐;
    P_SW2 |= 0x80;                          //访问扩展RAM区域寄存器(ADCTIM),需先将P_SW2的BIT7设置为1,才可正常读写; 手册后面P_SW2 &= 0x7f释放P_SW2非必要已删除没问题!
    ADCTIM = 0x30;                    //设置ADC时序控制2A~3F,采样时间:0A~1F,ok; 用复位默认值0X2A(0010,1010)可省2句(已验证可以但暂未采用),注意低5位SMPDUTY一定不能设置小于A(01010B);
                                              //2、P32ADC10:测VTP1(BAT1一半分压值);  3句合并ok!20220305;                             
    ADC_CONTR = 0xCA;                 //BAT1:复位值000x,0000;打开ADC电源(B7:1)、启动AD转换(B6:1)、选通道A(P32);
    delay_ms(1);                                  //ADC模块电源打开后需等待约1ms等ADC电源稳定后再让ADC工作?? 20220327增加;
    _nop_(),_nop_();                          //参考手册空操作2次; ADC模块电源打开后需等待约1ms等ADC电源稳定后再让ADC工作??
    while (!(ADC_CONTR & 0x20));      //查询ADC完成标志;  手册:检测工作约耗时1mS;
    ADC_CONTR &= ~0x20;               //清完成标志;
    ADC_CONTR &= 0x7F;                          //ADC转换完即断电更省电;            之前放PD改放这里测完即关省时即省电20220305;ok
    res = (ADC_RES << 8) | ADC_RESL;  //读取ADC结果(右对齐:高2位低8位,前面自动补0);
    BAT1 = (int)(3300L*res/1024L+17L);//计算监测电压mV;特别注意数据类型后面带L(因I易混淆)!及VDD3.3V参考电压稳定性;修正值:+29L;OK20220309;+17L;OK20220327;
回复

使用道具 举报

44#
ID:975054 发表于 2022-4-22 23:50 | 只看该作者
wulin 发表于 2021-6-1 20:26
这是STC8头文件里的相关部分,你重复定义并且是错的。
//ADC 特殊功能寄存器
sfr ADC_CONTR   =   0xbc ...

就是就是!重复定义!搞复杂了还不行的。
回复

使用道具 举报

45#
ID:688692 发表于 2022-4-23 00:26 来自手机 | 只看该作者
if((ADC_CONTR & 0x20) == 1)PC_OFF = 1;        //点亮一个LED
回复

使用道具 举报

46#
ID:688692 发表于 2022-4-23 00:28 来自手机 | 只看该作者
显然是被编译器优化掉了。一个8位的寄存器,跟常数0x20运算,结果还是8位,而且结果不可能等于1,坏就坏在这个等于1了,你写不等于0就好了。if((ADC_CONTR & 0x20) == 1)PC_OFF = 1;        //点亮一个LED
回复

使用道具 举报

47#
ID:373562 发表于 2022-5-31 01:18 | 只看该作者
帖子很有用,正好遇到8G1K的ADC问题了,标记一下
回复

使用道具 举报

48#
ID:824490 发表于 2022-5-31 09:25 | 只看该作者
Y_G_G 发表于 2021-9-8 09:07
仿真?我现在都还不会用那个软件,倒是Multisim用得多,也就这玩意仿真是最接近实际结果的
就单片机而言,没 ...

某原子的那款迷你型的可以考虑一下,日常的开发DIY是够用了。不贵,也一次烧烤5人份的费用。
回复

使用道具 举报

49#
ID:614527 发表于 2023-5-17 23:02 | 只看该作者
wwh2382 发表于 2021-9-4 21:53
STC8G1K08没有adc,有adc的是STC8G1K08a,型号后面带a

STC8G1K08  20脚的亲测有ADC,不过目前读取到的只有8位ADC数据
回复

使用道具 举报

50#
ID:975054 发表于 2023-5-24 18:43 | 只看该作者
18701931930 发表于 2021-6-1 13:25
没有遇到你说的情况,参考下我的:

//P3.5电压采集

nop_();
  _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_(); //ADC启动后,必须要延时 33.1776MHZ 10个nop大约是337.7ns

究竟几个nop()? 我一个都没有也基本正常,手册范例是2个,又说整个转换过程约1ms......我醉了,呵呵一起喝醉
回复

使用道具 举报

51#
ID:975054 发表于 2023-5-24 18:47 | 只看该作者
188610329 发表于 2021-9-6 15:08
ADC_CONTR = 0x82;  //打开AD转换电源,选择AD的第二通道
ADC_CONTR |= 0x40;  //启动AD转换

我一直STC8G1K08(20脚或带A8脚)也是打开电源,选择通道,启动转换三合一了:  ADC_CONTR  = 0xC2;  
回复

使用道具 举报

52#
ID:975054 发表于 2023-5-24 19:10 | 只看该作者
Y_G_G 发表于 2021-9-6 22:45
P_SW2|=0x7f;??这是干嘛使的?
不应该是P_SW2&=0x7f;的吗?
P3M1=0x00;

P_SW2 &=0x7f;??这是干嘛使的?  不应该是P_SW2&=0x7f;的吗?
禁止访问XSRF用的:一般无需禁止! BIT7=0禁止,所以确实应该用&=;
P_SW2 |= 0x80;   //XSRF!访问XSRF先BIT7=1; 统一放前无需归零(有外扩64K扩展RAM时才需要); 目标设置PDATA,新手册建议全用XDATA快!待研究?

   
P3M1=0x00;
P3M0=0x00;??这又是干嘛?传统端口不一定能点亮LED的,运气好的会亮,运气不好就不亮,除非你有上拉电阻
现在的超亮小LED串大电阻一般用于小东西指示一下也够了,不过一般都上拉用灌电流大.
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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