MEGA128接TLC5618模出芯片,示波器观测到时钟,数据,片选都正常,但是万用表却测不到模出
#define TLC_SCLK_1 PORTB|=0x02 //B1#define TLC_SCLK_0 PORTB&=~0x02 //B1
#define TLC_DIN_1 PORTB|=0x04 //B2
#define TLC_DIN_0 PORTB&=~0x04 //B2
#define TLC_CS0_1 PORTB|=0x20 //B5
#define TLC_CS0_0 PORTB&=~0x20 //B5
#define TLC_CS1_1 PORTB|=0x40 //B6
#define TLC_CS1_0 PORTB&=~0x40 //B6
void port_init(void)
{
DDRF= 0xff;
PORTF = 0xff;;
}
void TLC_5618(unsigned int voltage0_da,unsigned int Voltage1_da)
{
unsigned char i,j;
unsigned char Hibyte , Lobyte;
unsigned char Hibyte0 , Lobyte0;
unsigned char voltage00_da, Voltage01_da;
Hibyte = voltage0_da / 256;
Lobyte = voltage0_da %256;
Hibyte = Hibyte | 0x10;
Hibyte0 = Voltage01_da / 256;
Lobyte0 = Voltage01_da %256;
Hibyte0 = Hibyte | 0x80;
TLC_SCLK_0;
TLC_CS0_0;//将U17CS置为0;
TLC_CS1_1;
for (i=0; i<8; i++)
{
TLC_SCLK_1;
if (Hibyte & 0x80)
TLC_DIN_1;
else
TLC_DIN_0;
NOP();
TLC_SCLK_0;
Hibyte <<= 0x01;
}
for (j=0; j<8; j++)
{
TLC_SCLK_1;
if (Lobyte & 0x80)
TLC_DIN_1;
else
TLC_DIN_0;
NOP();
TLC_SCLK_0;
Lobyte <<= 0x01;
}
for (i=0; i<8; i++)
{
TLC_SCLK_1;
if (Hibyte0 & 0x80)
TLC_DIN_1;
else
TLC_DIN_0;
NOP();
TLC_SCLK_0;
Hibyte0 <<= 0x01;
}
for (j=0; j<8; j++)
{
TLC_SCLK_1;
if (Lobyte0 & 0x80)
TLC_DIN_1;
else
TLC_DIN_0;
NOP();
TLC_SCLK_0;
Lobyte0 <<= 0x01;
}
TLC_SCLK_1;
TLC_CS0_0;
TLC_CS1_0;
}
void main(void)
{
port_init();
while (1)
{
TLC_5618(819,1025);
}
} 哪位大侠知道? 我用TLC5617也出现类似问题。请问你调出来了吗? 有谁知道的回答一下呀~我也遇到类似的问题
#include "DA.h"
void Global_Delay_Us(unsigned int n);
//DA GPIOE OUT 输出!!
#defineGPIOE_Mode_Out_DA(All){ \
GPIO_InitTypeDef GPIO_InitStructure;\
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 |GPIO_Pin_12; \
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; \
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; \
GPIO_Init(GPIOA, &GPIO_InitStructure); \
}
///*-------------------这是第一种宏定义方法-----------------------------------*/
//#define CS_538_1 GPIOB->BSRR=GPIO_Pin_3 // GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7
//#define CS_538_0 GPIOB->BRR =GPIO_Pin_3 //
//
//#define DIN_538_1 GPIOB->BSRR=GPIO_Pin_4 //
//#define DIN_538_0 GPIOB->BRR =GPIO_Pin_4 //
//
//#define SCLK_538_1 GPIOB->BSRR=GPIO_Pin_6 //
//#define SCLK_538_0 GPIOB->BRR =GPIO_Pin_6 //
/*-------------------这是第二种宏定义方法-----------------------------------*/
#defineDIN_538_0 GPIO_WriteBit(GPIOA, GPIO_Pin_10,Bit_RESET)
#defineDIN_538_1 GPIO_WriteBit(GPIOA, GPIO_Pin_10,Bit_SET)
#defineSCLK_538_0 GPIO_WriteBit(GPIOA, GPIO_Pin_11,Bit_RESET)
#defineSCLK_538_1 GPIO_WriteBit(GPIOA, GPIO_Pin_11,Bit_SET)
#defineCS_538_0GPIO_WriteBit(GPIOA, GPIO_Pin_12,Bit_RESET)
#defineCS_538_1GPIO_WriteBit(GPIOA, GPIO_Pin_12,Bit_SET)
#define DA_DATAOUT GPIOA->ODR //ODR 端口输出的数据寄存器//GPIO_Write(GPIOE, date) //PD--(LCD)D0~D7
/*****************************************************************
函数名称:void DA_GPIOE_Output(void)
输入参数:NULL
输出参数:dat
函数功能:向电阻网络输出DA的值 12位的DA的数值有4096个值 所以dat的
值可以从0变到4096
*******************************************************************/
void DA_GPIOE_Output(unsigned int dat)
{
unsigned long date;
float dattt;
dattt=(dat/3.3)*1000;
date=dattt*4096;
date=date<<4;
GPIOE_Mode_Out_DA(All);
DA_DATAOUT=0xffff;
}
//MAX538
void Delay_538(unsigned int t)
{
while(t--);
}
/*****************************************************************
函数名称:void DAC_538(unsigned int dat)
输入参数:NULL
输出参数:dat
函数功能:538的驱动程序
*******************************************************************/
void DAC_538(unsigned int dat)
{
unsigned int volt;
unsigned char i;
volt=dat|0x1000;
GPIOE_Mode_Out_DA(All);
SCLK_538_0;
CS_538_0;
Global_Delay_Us(5);
for(i=0;i<16;i++)
{
SCLK_538_1;
Global_Delay_Us(5);
if(volt&0x8000)
DIN_538_1;
else
DIN_538_0;
SCLK_538_0;
Global_Delay_Us(5);
volt<<=1;
}
CS_538_1;
SCLK_538_1;
Global_Delay_Us(5);
}
/*****************************************************************
函数名称:
输入参数:NULL
输出参数:
函数功能:
*******************************************************************/
void DA_Output_Date(unsigned int dat)
{
static float voltage;
float date;
voltage=4.16;
date=(float)dat/1000*voltage/4096;
DAC_538((unsigned int)dat);
} 一次传16位就OK啦,问题出在片选段
页:
[1]