IIC驱动 IO模拟

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

QPSK

STV0903 TUNER STV6110 驱动设计

1.IIC 理论

MEGA128 模拟IIC时序控制QPSK 中的STV0903 STV6110

STV0903 STV6110 连接图

IIC时序理论

先看下STV0903写时序图

1)起总线

先将SCL、SDA拉高,然后维持SCL为高先将SDA拉低参考代码如下:void Start(void)

{

SBI(PORTD,SAA7113_DA TA);

SBI(PORTD,SAA7113_CLK);

IIC_delay();

CBI(PORTD,SAA7113_DA TA);

IIC_delay();

CBI(PORTD,SAA7113_CLK);

IIC_delay();

}

2)停总线

先将SCL、SDA拉低,然后先拉高SCL,维持SCL为高时拉高SDA

参考代码:

void Stop(void)

{

CBI(PORTD,SAA7113_DA TA);

CBI(PORTD,SAA7113_CLK);

IIC_delay();

SBI(PORTD,SAA7113_CLK);

IIC_delay();

SBI(PORTD,SAA7113_DA TA);

IIC_delay();

}

3)写总线

在写总线时将SDA设置为输出,参考代码:

void write_byte(unsigned char data)

{

uchar m,tmp;

SBI(SAA7113_DDR,SAA7113_DA TA);

for(m = 0; m < 8; m++)

{

if(data & 0x80)

SBI(PORTD,SAA7113_DA TA);

else

CBI(PORTD,SAA7113_DA TA);

IIC_delay();

SBI(PORTD,SAA7113_CLK);

IIC_delay();

data = data<<1;

CBI(PORTD,SAA7113_CLK);

}

IIC_delay();

saa7113_ack();

IIC_delay();

}

4)应答

应答由被控制芯片回应过来,在此时SDA应该设置为输入等待ACK, 在CLK第九个脉冲时,CLK为高电平,而SDA为一个低电平在表示收到器件的一个ACK应答。。

参考代码:

void saa7113_ack()

{

uchar tmp,m;

CBI(DDRD,SAA7113_DA TA);

SBI(PORTD,SAA7113_CLK);

for(m=0;m<10;m++)

{

IIC_delay();

tmp = PIND;

tmp &=0x02;

if(tmp == 0)

break;

}

CBI(PORTD,SAA7113_CLK);

SBI(DDRD,SAA7113_DA TA);

}

5)读时序

读芯片的数据时SDA应该设置为输入,

参考代码:

uchar read_byte(void)

{

uchar m;

uchar tmp1 = 0;

uchar tmp2 = 0;

CBI(SAA7113_DDR,SAA7113_DA TA);//输入

for(m = 0; m < 8; m++)

{

CBI(PORTD,SAA7113_CLK);

IIC_delay();

SBI(PORTD,SAA7113_CLK);

IIC_delay();

tmp1 = PIND; //sda 所在管脚

tmp1 &= 0x02;

if(0x02 == tmp1)

tmp2 = ((tmp2 << 1) | 1);

else

tmp2 = ((tmp2 << 1) & 0xfe);

CBI(PORTD,SAA7113_CLK);

}

IIC_delay();

saa7113_ack();

return(tmp2);

}

STV0903 and STV6110

通过STV0903来控制STV6110 当STV0903能正常读写时,先是打开I2CRPT控制寄存器用示波器测量SCL、SDA引脚观测波形,再测STV6110波形,如果STV6110波形出现脉冲宽度不等,则可能是SCLT 延迟于SCL,通过配置寄存器去掉延迟。如果波形变化比较多出现多种波形,而且脉冲有时与SDA对准出现不标准,则可能是设置STV6110的时候速度不对。。

开发所遇到的问题:

1)IIC时序不对,在示波器上看哪出波形不对则修改哪处,观察到的波形就是我们模拟的波形,注意转折点SDA的输入输出。

2)STV6110波形不对,比如SCL为高时,SDA不能确定是高还是低。。则是STV6110速度设置问题。I2C repeater速度设置不对,我们设置为010我们的repeater是16MHZ,而datasheet上是(that is, 135 MHz);

3)不标准波形如下所示。

如上波形:不好认为是010 还是111 ,这种波形我认为是不标准波形。

相关文档
最新文档