4284|1

425

帖子

4

TA的资源

纯净的硅(初级)

楼主
 

【沁恒试用】精简手机系统设计 #1 [复制链接]

  本帖最后由 北方 于 2019-7-10 13:55 编辑

精简手机系统设计

1、概述

精简手机系统设计是基于8051单片机沁恒CH549L和安可信A9G数据通讯模块开放的精简手机。

2、实现的功能

能够实现精简通讯和实时位置追踪功能。

 

3、实现的逻辑和原理

3.1 采用CH549和安可信A9G数据通讯模块通过UART口进行数据通讯和连接,连接采用的是标准的AT命令。

在CH549的开发中,使用了touchKey,ADC, GPIO,UART等多个资源,经过选择和调试,项目能够完整运行。其中CH549提供了UART0,UART1,UART2和UART3均测试,其中UART2和ouchkey的ADC有冲突,UART1在touchkey init中也有冲突,需要调整。

开发板连接如下图

 

本项目选择了UART0,可以在一个端口同时被板载USB-ttl转换,从desktop上也可以获取at通讯的信号,如下图

 

3.2 项目初步调试的代码如下,大部分是touchkey范例的参照。

#include ".\Public\CH549.H"
#include ".\Public\DEBUG.H"
#include ".\TouchKey\TouchKey.H"
#pragma  NOAREGS
UINT16 PowerValue[16];                                                         
volatile UINT16 Press_Flag = 0;                                                
UINT8C CPW_Table[16] = { 30,30,30,30, 30,30,30,30,                             
                         30,30,30,30, 30,30,30,30,
                       };



UINT16 ABS(UINT16 a,UINT16 b)
{
    if(a>b)
    {
        return (a-b);
    }
    else
    {
        return (b-a);
    }
}

void LED_Port_Init(void)
{
    P2 |= (0xF<<2);                                                          //默认熄灭
    P2_MOD_OC &= ~(0xF<<2);
    P2_DIR_PU |= (0xF<<2);
}


void LED_Control(UINT8 LEDx,UINT8 status)
{
    if(LEDx>3)
    {
        return;
    }
    if(status)                                                                //点亮
    {
        P2 &= ~(1<<(2+LEDx));
    }
    else                                                                      //熄灭
    {
        P2 |= (1<<(2+LEDx));
    }
}
//主函数
void main()
{
    UINT8 ch;
    UINT16 value;
    UINT16 err;                                                                //触摸模拟变化差值
    CfgFsys( );                                                                //CH549时钟选择配置
    mDelaymS(20);
    mInitSTDIO( );                                                             //串口0初始化
    printf("TouchKey demo start ...\n");
    LED_Port_Init();
    TouchKey_Init();
    Press_Flag = 0;                        
    for(ch = 8; ch!=12; ch++)
    {
        PowerValue[ch] = TouchKeySelect( ch,CPW_Table[ch] );
        printf("%d ",PowerValue[ch] );
    }
    printf("\n");
    while(1)
    {
        /* 按键检测 */
        for(ch = 8; ch!=12; ch++)
        {
            value = TouchKeySelect( ch,CPW_Table[ch] );
            err = ABS(PowerValue[ch],value);
            if( err > DOWM_THRESHOLD_VALUE )                                  
            {
                if((Press_Flag & (1<<ch)) == 0)                                
                {
                    printf("ch %d pressed,value:%d\n",(UINT16)ch, value);
                    /* 点灯处理 */
                    LED_Control(ch-8,1);
                }
                Press_Flag |= (1<<ch);
            }
            else if( err < UP_THRESHOLD_VALUE )                                
            {
                if(Press_Flag & (1<<ch))                                     
                {
                    Press_Flag &= ~(1<<ch);
                    printf("ch %d up,value:%d\n",(UINT16)ch, value);
                    LED_Control(ch-8,0);
                }
            }
        }
    }
}

 

其中,这里对于GPIO的访问是直接调用ch549.h中对于sbit P2的定义访问寄存器的方法,效率很高。

 

3.3 预留三维运动传感器的连接接口继续开发。

4. 补充说明

4.1 开发工具,推荐的开发需要keil C51,这样可以按照手册的方法添加芯片库。用开源SDCC也可以,不过只能使用标准MCS51的外设,不推荐。

4.2 程序下载比上一次的CH554评测增加了一个板载开关ON/OFF,非常方便,避免了反复插拔USB线的可能,同时USB下载速度有了明显提高,这样从keil直接下载也没有很大区别了。这个WCHISPtools可以开放接口,作为第三方程序在keil中直接调用,进一步提高效率。

 

4.3 实时操作系统,采用FREERTOS需要8k左右的内存,更重要的是data数据区只有256字节,在运行中受限更明显,不宜采用。RTX tiny小于1k可以使用,不过调试使用需要更熟悉时钟,不如用轮询的polling方式更简单直接。自己直接算时钟周期,其实也效果不错。

4.4 引用范例的head文件要仔细对代码,尤其是复用的引脚和中断的配置,需要列表后使用,避免冲突。

4.5 安可信的A9G资料在参见https://wiki.ai-thinker.com/gprs/a9g/boards,CH549L的芯片原理连接如下图。

引脚配置使用时需要对照使用。

 

5、小结

本设计可以实现一个便携手机的功能。这个设计过程中,

- 完整测试了多个适合8051的实时操作系统如RTX tiny, FreeRTOS,经测试均不适合本项目,也就没有采用。

- 在多个端口的同时使用中,多次发生重复定义和接口重复的过程,加深了对CH549L的了解。

 



此内容由EEWORLD论坛网友北方原创,如需转载或用于商业用途需征得作者同意并注明出处

761049136.jpg (76.33 KB, 下载次数: 0)

761049136.jpg

捕获.PNG (54.44 KB, 下载次数: 0)

捕获.PNG

捕获.PNG (43.71 KB, 下载次数: 0)

捕获.PNG

最新回复

实现电话按键拨号了么   详情 回复 发表于 2019-7-10 17:00
点赞 关注
 
 

回复
举报

305

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

实现电话按键拨号了么

个人签名单价1元含税的USB和Touchkey单片机CH551G已大批量出货,试样QQ:1258305301
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表