久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2449|回復(fù): 5
收起左側(cè)

求助:msp430f149+24c02,IIC總線已通,但是24c02調(diào)不通。

[復(fù)制鏈接]
ID:601868 發(fā)表于 2019-9-4 21:18 | 顯示全部樓層 |閱讀模式
最近做了個(gè)項(xiàng)目,要用到MSP430f149+24c02,還有一個(gè)數(shù)碼管顯示模塊,用的tm1650,用的也是iic總線。
同樣的配置,tm1650可以通,但是24c02,死活回不來數(shù)據(jù)。
用示波器看了sda和scl和的波形也是正常的。
已經(jīng)調(diào)了好幾天了,還是通不了。

麻煩大家?guī)蛶兔。看看問題出在哪里了。
0.png
這個(gè)電路調(diào)不通。



main函數(shù)



#include <msp430f249.h>
#include "msp430type.h"
#include "system.h"
#include "delay.h"
#include "led.h"
#include "key.h"

#include "iic.h"
#include "eeprom.h"



//要寫入到24c02的字符串?dāng)?shù)組
u8 String[]={"452aASz*67895"};//一個(gè)字符占用一個(gè)字節(jié),再加個(gè)結(jié)束符\n
#define SIZE sizeof(String)//自動(dòng)計(jì)算字符個(gè)數(shù)
u8 24c02_data ;
//主函數(shù)
void main(void)
{
    u8 temp[SIZE];
   
    Wdt_Off();//關(guān)閉看門狗
    Clock_Init();//系統(tǒng)時(shí)鐘初始化
    Led_Init();//led燈初始化
    Key_Init();//按鍵初始化
    Uart0_Init();//串口0初始化 波特率9600
    TFT_Init();//TFT初始化
    IIC_Init();//IIC總線初始化



    //檢查24C02是否存在   
    if(EEPROM_24C02_Check())  {LED_H;Delay_ms(200);}
   
   Write_Eeprom_OneData(0,150);//寫單個(gè)數(shù)字
     24c02_data  = Read_Eeprom_OneData(0);
  if(24c02_data == 150)
    {
     LED_H;Delay_ms(200);
    LED_L;Delay_(200);
    }   

   
    while(1)
    {
     ;
    }
}



iic.h
//模擬IIC總線底層驅(qū)動(dòng)文件

#include <msp430f149.h>
#include "delay.h"
#include "iic.h"


//IIC_SDA方向輸出
void IIC_SDAOut(void)
{
    P5DIR |= (1<<1);//設(shè)置為輸出
}

//IIC_SDA方向輸入
void IIC_SDAIn(void)
{
    P5DIR &= ~(1<<1);//設(shè)置為輸入
}

//IIC初始化
void IIC_Init(void)
{
    P5SEL &= 0xf9;//設(shè)置P5.1,P5.2IO口為普通I/O模式
    P5DIR |= 0x06;//設(shè)置P5.1,P5.2IO口方向?yàn)檩敵?br />     P5OUT |= 0x06;//初始設(shè)置P5.1,P5.2IO為高電平
    IIC_SDA_H;
    IIC_SCL_H;
    Delay_us(5);
}

//起始信號(hào)函數(shù)
void IIC_Start(void)
{
    IIC_SDAOut();
    IIC_SDA_H;
    IIC_SCL_H;
    Delay_us(5);
    IIC_SDA_L;
    Delay_us(5);
}

//停止信號(hào)函數(shù)
void IIC_Stop(void)                       
{
    IIC_SDAOut();
    IIC_SDA_L;
    Delay_us(5);
    IIC_SCL_H;
    Delay_us(5);
    IIC_SDA_H;
    Delay_us(5);
}

//應(yīng)答函數(shù)
void IIC_Ack(void)
{
    u8 time = 220;

    IIC_SDAIn();
    IIC_SCL_H;
    Delay_us(5);
    while(IIC_SDA_D && time --);//等待從機(jī)返回低電平應(yīng)答信號(hào)
    IIC_SCL_L;
    Delay_us(5);
}

//非應(yīng)答函數(shù)
void IIC_NoAck(void)
{
    IIC_SDAOut();
    IIC_SDA_H;
    Delay_us(5);
    IIC_SCL_H;
    Delay_us(5);
    IIC_SCL_L;
    Delay_us(5);
}

//寫字節(jié)函數(shù)
void Write_IIC_byte(u8 Data)
{
    u8 i;

    IIC_SDAOut();
    IIC_SCL_L;
    for(i=0; i<8; i++)
    {
        if(Data & 0x80)
        {
            IIC_SDA_H;
        }
        else
        {
            IIC_SDA_L;
        }
        Data <<= 1;
        Delay_us(5);
        IIC_SCL_H;
        Delay_us(5);
        IIC_SCL_L;
        Delay_us(5);
    }
    IIC_SDA_H;
    Delay_us(5);   
}

//讀字節(jié)函數(shù)
u8 Read_IIC_byte(void)
{
    u8 i, byte=0;

    IIC_SDAIn();
    IIC_SCL_L;
    Delay_us(5);
    for(i=0; i<8; i++)
    {
        IIC_SCL_H;
        Delay_us(5);
        byte <<= 1;
        if(IIC_SDA_D) byte ++;
        Delay_us(5);
        IIC_SCL_L;
        Delay_us(5);
    }
    return byte;
}
回復(fù)

使用道具 舉報(bào)

ID:601868 發(fā)表于 2019-9-4 21:18 | 顯示全部樓層
由于長(zhǎng)度不足。
iic.c


//模擬IIC總線底層驅(qū)動(dòng)文件

#include <msp430f249.h>
#include "delay.h"
#include "iic.h"


//IIC_SDA方向輸出
void IIC_SDAOut(void)
{
    P5DIR |= (1<<1);//設(shè)置為輸出
}

//IIC_SDA方向輸入
void IIC_SDAIn(void)
{
    P5DIR &= ~(1<<1);//設(shè)置為輸入
}

//IIC初始化
void IIC_Init(void)
{
        P5SEL &= 0xf9;//設(shè)置P5.1,P5.2IO口為普通I/O模式
        P5DIR |= 0x06;//設(shè)置P5.1,P5.2IO口方向?yàn)檩敵?br />         P5OUT |= 0x06;//初始設(shè)置P5.1,P5.2IO為高電平
        IIC_SDA_H;
        IIC_SCL_H;
        Delay_us(5);
}

//起始信號(hào)函數(shù)
void IIC_Start(void)
{
    IIC_SDAOut();
        IIC_SDA_H;
        IIC_SCL_H;
        Delay_us(5);
        IIC_SDA_L;
        Delay_us(5);
}

//停止信號(hào)函數(shù)
void IIC_Stop(void)                                          
{
    IIC_SDAOut();
        IIC_SDA_L;
        Delay_us(5);
        IIC_SCL_H;
        Delay_us(5);
        IIC_SDA_H;
        Delay_us(5);
}

//應(yīng)答函數(shù)
void IIC_Ack(void)
{
        u8 time = 220;

    IIC_SDAIn();
        IIC_SCL_H;
        Delay_us(5);
        while(IIC_SDA_D && time --);//等待從機(jī)返回低電平應(yīng)答信號(hào)
        IIC_SCL_L;
        Delay_us(5);
}

//非應(yīng)答函數(shù)
void IIC_NoAck(void)
{
    IIC_SDAOut();
        IIC_SDA_H;
        Delay_us(5);
        IIC_SCL_H;
        Delay_us(5);
        IIC_SCL_L;
        Delay_us(5);
}

//寫字節(jié)函數(shù)
void Write_IIC_byte(u8 Data)
{
        u8 i;

    IIC_SDAOut();
        IIC_SCL_L;
        for(i=0; i<8; i++)
        {
                if(Data & 0x80)
                {
                        IIC_SDA_H;
                }
                else
                {
                        IIC_SDA_L;
                }
                Data <<= 1;
                Delay_us(5);
                IIC_SCL_H;
                Delay_us(5);
                IIC_SCL_L;
                Delay_us(5);
        }
        IIC_SDA_H;
        Delay_us(5);       
}

//讀字節(jié)函數(shù)
u8 Read_IIC_byte(void)
{
        u8 i, byte=0;

    IIC_SDAIn();
        IIC_SCL_L;
        Delay_us(5);
        for(i=0; i<8; i++)
        {
                IIC_SCL_H;
                Delay_us(5);
                byte <<= 1;
                if(IIC_SDA_D) byte ++;
                Delay_us(5);
                IIC_SCL_L;
                Delay_us(5);
        }
        return byte;
}
回復(fù)

使用道具 舉報(bào)

ID:601868 發(fā)表于 2019-9-4 21:20 | 顯示全部樓層
eeprom.c

//EEPROM-24c02底層驅(qū)動(dòng)文件

#include <msp430f249.h>
#include "delay.h"
#include "iic.h"
#include "eeprom.h"


//EEPROM容量
//- 24C02, 256 X 8 (2K bits)
//- 24C04, 512 X 8 (4K bits)
//- 24C08, 1024 X 8 (8K bits)
//- 24C16, 2048 X 8 (16K bits)
//- 24C32, 4096 X 8 (32K bits)
//- 24C64, 8192 X 8 (64K bits)

//在EEPROM-24c02指定地址寫入一個(gè)數(shù)據(jù)
//Addr:寫入數(shù)據(jù)的目的地址 0~255 for AT24C02
//Data:要寫入的數(shù)據(jù)
void Write_Eeprom_OneData(u8 Addr,u8 Data)
{
        IIC_Start();
        Write_IIC_byte(WriteCom);        //寫命令
        IIC_Ack();
        Write_IIC_byte(Addr);
        IIC_Ack();
        Write_IIC_byte(Data);
        IIC_Ack();
        IIC_Stop();       
        Delay_ms(10);//等待EEPROM寫入數(shù)據(jù)完成
}

//在EEPROM-24c02指定地址讀出一個(gè)數(shù)據(jù)
//Addr:開始讀數(shù)的目的地址 0~255 for AT24C02
//Data:讀到的數(shù)據(jù)
u8 Read_Eeprom_OneData(u8 Addr)
{
        u8 Data;

        IIC_Start();
        Write_IIC_byte(WriteCom);        //寫命令
        IIC_Ack();
        Write_IIC_byte(Addr);
        IIC_Ack();

        IIC_Start();
        Write_IIC_byte(ReadCom);        //讀命令
        IIC_Ack();
        Data = Read_IIC_byte();
        IIC_NoAck();
        IIC_Stop();
       
        return Data;               
}

//檢查EEPROM-24c02是否正常
//返回1:檢測(cè)成功,返回0:檢測(cè)失敗
//EEPROM-24c02的最后一個(gè)地址(255)來存儲(chǔ)標(biāo)志字
u8 EEPROM_24C02_Check(void)
{
        u8 temp;
       
        IIC_Init();//初始化IIC總線
        temp = Read_Eeprom_OneData(255);//先讀取數(shù)據(jù)          
        if(temp == 8) return 1;                  
        else
        {
                Write_Eeprom_OneData(255,8);//24C02的255位置第一次寫入數(shù)據(jù)
            temp = Read_Eeprom_OneData(255);          
                if(temp == 8) return 1;//讀取數(shù)據(jù)成功
        }
       
        return 0;                                                                                          
}

//在EEPROM-24c02里面的指定地址開始寫入0~4294967295的數(shù)據(jù)
//Addr:開始寫入的地址;Data:數(shù)據(jù)
//一個(gè)數(shù)據(jù)占用EEPROM-24c02四個(gè)地址
void Write_Eeprom_LenData(u16 Addr,u32 Data)
{         
        u8 t;

        for(t=0; t<4; t++)
        {
                Write_Eeprom_OneData(Addr+t,(Data>>(8*t))&0xFF);
        }                                                                                                    
}

//在EEPROM-24c02里面的指定地址開始讀出0~4294967295的數(shù)據(jù)
//Addr:開始讀出的地址 Data:數(shù)據(jù)
//該函數(shù)用于讀出32bit的數(shù)據(jù)
u32 Read_Eeprom_LenData(u16 Addr)
{         
        u8 t;
        u32 Data;
        for(t=0; t<4; t++)
        {
                Data <<= 8;
                Data += Read_Eeprom_OneData(Addr+4-t-1);                                            
        }
        return Data;                                                                                                    
}

//在EEPROM-24c02里面的指定地址開始寫入指定個(gè)數(shù)的字符串
//Addr:開始寫入的地址 對(duì)24c02為0~255;Buf:數(shù)據(jù)數(shù)組首地址;Num:要寫入數(shù)據(jù)的個(gè)數(shù)
void Write_Eeprom_NubStr(u16 Addr,u8 *Buf,u16 Num)
{
        while(Num --)
        {
                Write_Eeprom_OneData(Addr,*Buf);
                Addr ++;
                Buf ++;
        }
}

//在EEPROM-24c02里面的指定地址開始讀出指定個(gè)數(shù)的字符串
//Addr:開始讀出的地址 對(duì)24c02為0~255;Buf:數(shù)據(jù)數(shù)組首地址;Num:要讀出數(shù)據(jù)的個(gè)數(shù)
void Read_Eeprom_NubStr(u16 Addr,u8 *Buf,u16 Num)
{
        while(Num)
        {
                *Buf ++= Read_Eeprom_OneData(Addr ++);       
                Num --;
        }
}
回復(fù)

使用道具 舉報(bào)

ID:601868 發(fā)表于 2019-9-4 22:41 | 顯示全部樓層
問題解決了,在網(wǎng)上重新找了個(gè)圖。給電源個(gè)接了一個(gè)104電容,給SDA和SCL接了兩個(gè)10k的上拉電阻。搞定了。
回復(fù)

使用道具 舉報(bào)

ID:138097 發(fā)表于 2019-9-5 08:02 | 顯示全部樓層
24c02_data  = Read_Eeprom_OneData(0);
這個(gè)是上電讀EE吧,試試在讀數(shù)據(jù)的前后各加20ms的延時(shí)
回復(fù)

使用道具 舉報(bào)

ID:601868 發(fā)表于 2019-9-6 16:20 | 顯示全部樓層
whx.000 發(fā)表于 2019-9-5 08:02
24c02_data  = Read_Eeprom_OneData(0);
這個(gè)是上電讀EE吧,試試在讀數(shù)據(jù)的前后各加20ms的延時(shí)

謝謝了,問題已經(jīng)解決了。給sda和sdl加上10k的上拉電阻,在電源和gnd之間加一個(gè)104.就好了。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美在线视频网站 | 国产激情在线观看 | 国产欧美一区二区三区在线播放 | 国产在线精品免费 | 国产日韩欧美精品一区二区 | 亚洲成人a v | 日韩精品在线播放 | 啪一啪在线视频 | 欧美日韩精品在线一区 | 91精品一区二区三区久久久久 | 久久精品国产一区 | 91视频日本| 亚洲国产精品成人 | 中文字幕视频在线观看免费 | 亚洲一区中文字幕 | 亚洲人的av | 久久久久久毛片免费观看 | 男人影音 | 午夜免费网 | 国产精品久久 | 亚洲精选一区 | 在线观看视频一区 | 91精品国产综合久久小仙女图片 | 欧美日韩精品在线一区 | 欧美一区二区三区视频在线观看 | 精品欧美乱码久久久久久 | 成人乱人乱一区二区三区软件 | av天天澡天天爽天天av | 亚洲午夜电影 | 成人网av| 成人亚洲视频 | 国产精品久久久久久久久久东京 | 亚洲精品久久久久久一区二区 | 成人国产精品久久久 | 国产欧美日韩精品一区 | 日韩视频在线播放 | 国产精品3区 | 亚洲欧美日韩在线不卡 | 中文二区| www.日韩 | 国产午夜精品久久久 |