找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2100|回复: 4
收起左侧

使用单片机+ADC芯片TLC5615时输出正弦波的频率提高不上去

[复制链接]
ID:898834 发表于 2021-8-31 15:11 | 显示全部楼层 |阅读模式
求大佬指点为什么我程序这样写最终得到的正弦波频率只有几百赫兹

单片机源程序如下:
#include <stc8.h>          //基准电压是2.515V
#define uint8 unsigned char
#define uint16 unsigned int


sbit CS = P2^4;       //片选
sbit SCLK = P2^2;       //时钟
sbit DIN = P2^0;       //数据入口

uint16 code tosin[256]={
0x1FF,0x20C,0x218,0x225,0x231,0x23E,0x24A,0x256,0x263,0x26F,0x27B,0x287,0x293,0x29F,0x2AB,0x2B7
,0x2C3,0x2CE,0x2DA,0x2E5,0x2F0,0x2FB,0x306,0x311,0x31B,0x326,0x330,0x33A,0x343,0x34D,0x357,0x360
,0x369,0x371,0x37A,0x382,0x38A,0x392,0x39A,0x3A1,0x3A8,0x3AF,0x3B6,0x3BC,0x3C2,0x3C8,0x3CD,0x3D3
,0x3D8,0x3DC,0x3E1,0x3E5,0x3E8,0x3EC,0x3EF,0x3F2,0x3F5,0x3F7,0x3F9,0x3FB,0x3FC,0x3FD,0x3FE,0x3FE
        
,0x3FE,0x3FE,0x3FE,0x3FD,0x3FC,0x3FB,0x3F9,0x3F7,0x3F5,0x3F2,0x3EF,0x3EC,0x3E8,0x3E5,0x3E1,0x3DC
,0x3D8,0x3D3,0x3CD,0x3C8,0x3C2,0x3BC,0x3B6,0x3AF,0x3A8,0x3A1,0x39A,0x392,0x38A,0x382,0x37A,0x371
,0x369,0x360,0x357,0x34D,0x343,0x33A,0x330,0x326,0x31B,0x311,0x306,0x2FB,0x2F0,0x2E5,0x2DA,0x2CE
,0x2C3,0x2B7,0x2AB,0x29F,0x293,0x287,0x27B,0x26F,0x263,0x256,0x24A,0x23E,0x231,0x225,0x218,0x20C
        
,0x1FF,0x1F2,0x1E6,0x1D9,0x1CD,0x1C0,0x1B4,0x1A8,0x19B,0x18F,0x183,0x177,0x16B,0x15F,0x153,0x147
,0x13B,0x130,0x124,0x119,0x10E,0x103,0x0F8,0x0ED,0x0E3,0x0D8,0x0CE,0x0C4,0x0BB,0x0B1,0x0A7,0x09E
,0x095,0x08D,0x084,0x07C,0x074,0x06C,0x064,0x05D,0x056,0x04F,0x048,0x042,0x03C,0x036,0x031,0x02B
,0x026,0x022,0x01D,0x019,0x016,0x012,0x00F,0x00C,0x009,0x007,0x005,0x003,0x002,0x001,0x000,0x000
        
,0x000,0x000,0x000,0x001,0x002,0x003,0x005,0x007,0x009,0x00C,0x00F,0x012,0x016,0x019,0x01D,0x022
,0x026,0x02B,0x031,0x036,0x03C,0x042,0x048,0x04F,0x056,0x05D,0x064,0x06C,0x074,0x07C,0x084,0x08D
,0x095,0x09E,0x0A8,0x0B1,0x0BB,0x0C4,0x0CE,0x0D8,0x0E3,0x0ED,0x0F8,0x103,0x10E,0x119,0x124,0x130
,0x13B,0x147,0x153,0x15F,0x16B,0x177,0x183,0x18F,0x19B,0x1A8,0x1B4,0x1C0,0x1CD,0x1D9,0x1E6,0x1F2 };


void DA_Conver(uint16 DA_Value)   //进行DA转换,输入十位DA值,十六位数据,高四位无效,认为0000                                                                                                                        //低二位为00
{
        uint8 i;
        DA_Value <<= 6;
        CS =0;                  //片选DA芯片,低电平有效
        SCLK = 0;               //片选低电平, 时钟为上升沿时开始传送数据
        for(i=0;i<12;i++)        //从高位到地位依次发送     
        {                                    
                DIN = (bit)(DA_Value & 0x8000);   
                SCLK = 1;                        
                DA_Value <<= 1;  // 一位一位的进行传输               
                SCLK = 0;
        }
        CS = 1;     // 关闭芯片,CS的上升沿和下降沿只有在clk为低的时候才有效
        SCLK = 0;                             
}

void main()
{         
        uint16 j;
        
        P2M0=0x00;
        P2M1=0x00;
        
        while(1)
        {
                for(j=0;j<255;j++)
                {
                        DA_Conver(tosin[j]); //输出正弦波
                }
        }
}
回复

使用道具 举报

ID:161164 发表于 2021-8-31 17:07 | 显示全部楼层
你在一个周期内要处里比较/位移/IO输出等动作 256x12 = 3072次
假设你是用主频12Mhz 1T的单片机
每次动作耗时1us
一个周期耗时3.072ms => 269Hz
很正常啊~
回复

使用道具 举报

ID:898834 发表于 2021-10-17 19:52 | 显示全部楼层
lkc8210 发表于 2021-8-31 17:07
你在一个周期内要处里比较/位移/IO输出等动作 256x12 = 3072次
假设你是用主频12Mhz 1T的单片机
每次动作 ...

那有什么方法能够把频率提上去吗
回复

使用道具 举报

ID:401564 发表于 2021-10-18 09:28 | 显示全部楼层
几个月了哥们,还在折腾这个?
TLC5615本身的刷新频率就只有1.21MHZ,你分成256次,最高的频率也就是4.72KHZ,加上这还是串行通讯,输出的频率也就只能是这么高了
想要提高就要用DAC900E这样的并口DAC
回复

使用道具 举报

ID:898834 发表于 2021-10-19 21:18 | 显示全部楼层
Y_G_G 发表于 2021-10-18 09:28
几个月了哥们,还在折腾这个?
TLC5615本身的刷新频率就只有1.21MHZ,你分成256次,最高的频率也就是4.72KHZ, ...

好吧,之前这个问题一直搁置了,这几天找资料记起来了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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