一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 623|回复: 0
收起左侧

[其他综合] [开源+探讨] G2553与12864OLED+DS2784库仑计

[复制链接]
发表于 2022-3-12 17:08 | 显示全部楼层 |阅读模式
一直以来喜欢430的低功耗特性最近折腾了个MSP430G2与DS2784的库伦计,代码在已经调通的18B20基础上参照别人的51半成品+数据手册下编写,但是目前读取数据不正确,不知道有没有感兴趣的伙伴一起看看?

代码中添加了判断1wire是否正常连接的检测逻辑,绿灯正常红灯未接入。
IMG_20220312_164654[1].jpg IMG_20220312_165354[1].jpg

正常连接后经过分位运算得到的值:
IMG_20220312_164647[1].jpg

其中温度 容量 电压来自2784读取数值,ADC来自G2553自带ADC从P1.1检测到运算得出的实际值。

该项目在CCS 10.4下开发
主循环:
截图202203121702319817.png

DS2784 数据读取
/*读取数据值并转换-----------------------------------------------------------*/
//温度,放大了10倍,单位是度
unsigned int get_temperature(void)
{
    unsigned char MSB,LSB,pos_neg;
    unsigned int Temp;
    DS_Init();
    DS_write_byte(Skip_ROM);
    DS_write_byte(Read_data);
    DS_write_byte(TEMPMSB);
        copy_data_ds2784(TEMPMSB);
        __delay_cycles(10000);
        recall_data_ds2784(TEMPMSB);

    LSB=DS_read_byte();
    MSB=DS_read_byte();
    //MSB = read_byte_data(TEMPMSB);

    /*n=((raw[TEMPMSB]<<8)|(raw[TEMPLSB]))>>5;
    Temp=(n*10)/8;*/

    Temp = MSB;
    if(MSB&0x80)//放电此时是负数,则为补码
    {
        pos_neg = 0; //正数
    }
    else
    {
        pos_neg = 1; //负数
    }

    Temp >>=8;
    __delay_cycles(450);
    LSB = read_byte_data(TEMPLSB);


    Temp |= LSB<<5;
    Temp = Temp&0x7fe0;
   if( pos_neg == 0 )//算出原码
    {
        Temp =(~(Temp-1))&0x7fe0;
        Temp = Temp*12.5;
        //return Temp|0x8000;
       return Temp;//
    }

    Temp = Temp*0.125;

    return Temp;
}
//得到电压
int get_voltage(void)
{
    DS_Init();
    DS_write_byte(Skip_ROM);
    DS_write_byte(Read_data);
    DS_write_byte(VOLTMSB);
     /*copy_data_ds2784(VOLTMSB);
     __delay_cycles(10000);
     recall_data_ds2784(VOLTMSB);*/

    unsigned char v_h,v_l;
    unsigned int voltage,volt;

    v_h=DS_read_byte();
    v_l=DS_read_byte();
    volt=v_h;
    volt<<=8;
    volt=volt | v_l;
    volt>>=5;
    voltage= volt*(4.88);
    return voltage;

}


//得到剩余的电量,电量是mah
unsigned int get_RAAC(void)
{

       DS_Init();
                   DS_write_byte(Skip_ROM);
                   DS_write_byte(Read_data);
                   DS_write_byte(RAACMSB);
                       copy_data_ds2784(RAACMSB);
                       __delay_cycles(1000);
                       recall_data_ds2784(RAACMSB);
    unsigned char MSB,LSB;
    unsigned int accumulate;
    MSB = read_byte_data(RAACMSB);
    accumulate = MSB;
    accumulate <<=8;
    __delay_cycles(10000);
    LSB = read_byte_data(RAACLSB);
    accumulate |= LSB;

    //accumulate = accumulate*1.6;

    return accumulate;
}



//显示数据
void LCD_data_display(int t_x, int s_x, int v_x)
//void LCD_data_display(int v_x,int s_x,int d_x)
{
    unsigned int a;
    a=t_x; //温度
    LCD_P8x16Str_sel(33,0,a/100%10+16);
    LCD_P8x16Str_sel(40,0,a/10%10+16);
    LCD_P8x16Str(47,0,".");//小数点
    LCD_P8x16Str_sel(54,0,a%10+16);

    a=s_x; //容量
       LCD_P8x16Str_sel(70,0,a/10000%10+16);
       LCD_P8x16Str_sel(78,0,a/1000%10+16);
       LCD_P8x16Str_sel(85,0,a/10%10+16);
       LCD_P8x16Str_sel(92,0,a%1+16);

    a=v_x;
    LCD_P8x16Str_sel(33,2,a/10000%10+16);
            LCD_P8x16Str_sel(40,2,a/1000%10+16);
            LCD_P8x16Str_sel(47,2,a/100%10+16);
            LCD_P8x16Str_sel(54,2,a/10%10+16);
            LCD_P8x16Str_sel(61,2,a%10+16);

}

详细代码参看附件内容

OLED.zip (142.21 KB, 下载次数: 2)

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-7 17:48 , Processed in 0.048173 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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