3650|1

1243

帖子

19

TA的资源

五彩晶圆(初级)

楼主
 

15、Beaglebone外围电路设计第四周:数据的无线采集和显示效果 [复制链接]

活动眼看就要结束了!!感觉好多东西还没实现!

1、计划要加上Zigbee模块来实现无线的通讯!,由于时间来不及了!所以选择了我较为擅长的nRF24l01无线模块:
NRF24L01功能使用文档.pdf (650.05 KB, 下载次数: 29)
这个无线模块我已经用过N次了!几乎每次活动我都会使用它!所以也没啥可说的!驱动程序和手册网上太多太多了!所以程序的移植较为简单,半天搞定!

2、数据采集端,我使用了MSP-EXP430FR5739开发板,采集了板载的加速度数值,并用过计算得到板子的水平倾角!以及板载的热敏电阻测得的温度值,另外还添加了超声波模块用来测距!采集端的程序和硬件都是原来做过的的,可以节省好多时间!采集端的详细介绍可看我的帖子:
https://bbs.eeworld.com.cn/viewthread.php?tid=324229

3,显示界面在前面的基础上做了些优化处理和小的调整:
这里主要讲讲我是怎样用Beaglebone实现数据的不断更新的!
我在之前的基础上,加入许多新的画布控件,目的是为了进行数据显示的刷新和表盘背景的刷新!
//用于刷新数据的画布(CANVAS_STYLE_FILL用法)

Canvas(g_sT, 0, 0, 0, &g_s35_480x272x24Display, 98, 80,
       50, 20, CANVAS_STYLE_FILL | CANVAS_STYLE_OUTLINE | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_LEFT, ClrWhite,ClrWhite, ClrBlack,
       &g_sFontCH16, 0, 0, 0);

Canvas(g_sL, 0, 0, 0, &g_s35_480x272x24Display, 98, 140,
       50, 20, CANVAS_STYLE_FILL | CANVAS_STYLE_OUTLINE | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_LEFT, ClrWhite,ClrWhite, ClrBlack,
       &g_sFontCH16, 0, 0, 0);

Canvas(g_sN, 0, 0, 0, &g_s35_480x272x24Display, 98, 200,
       50, 20, CANVAS_STYLE_FILL | CANVAS_STYLE_OUTLINE | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_LEFT, ClrWhite,ClrWhite, ClrBlack,
       &g_sFontCH16, 0, 0, 0);

Canvas(g_sX, 0, 0, 0, &g_s35_480x272x24Display, 317, 90,
       110, 20, CANVAS_STYLE_FILL | CANVAS_STYLE_OUTLINE | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_LEFT, ClrWhite,ClrWhite, ClrBlack,
       &g_sFontCH16, 0, 0, 0);

Canvas(g_sY, 0, 0, 0, &g_s35_480x272x24Display, 317, 140,
       110, 20, CANVAS_STYLE_FILL | CANVAS_STYLE_OUTLINE | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_LEFT, ClrWhite,ClrWhite, ClrBlack,
       &g_sFontCH16, 0, 0, 0);

Canvas(g_sZ, 0, 0, 0, &g_s35_480x272x24Display, 317, 190,
       110, 20, CANVAS_STYLE_FILL | CANVAS_STYLE_OUTLINE | CANVAS_STYLE_TEXT | CANVAS_STYLE_TEXT_LEFT, ClrWhite,ClrWhite, ClrBlack,
       &g_sFontCH16, 0, 0, 0);

//三个表盘刷新
Canvas(g_sAll, 0, 0, 0, &g_s35_480x272x24Display, 0, 70,
       480, 108, CANVAS_STYLE_FILL | CANVAS_STYLE_IMG, ClrWhite,0,0,
       0, 0, g_Acceleration, 0);
//单个表盘刷新
Canvas(g_sSingle, 0, 0, 0, &g_s35_480x272x24Display, 80, 70,
       320, 161, CANVAS_STYLE_FILL | CANVAS_STYLE_IMG, ClrWhite,0,0,
       0, 0, g_Accsingle, 0);

我在这里将表盘的背景从大的画布取消,转而放在较小的画布上,便于背景的刷新!

玩过nRF24l01的朋友都知道,他拥有一个IRQ引脚,我将与其相接的管脚设置为外部中断,低电平触发中断:
//初始化引脚
  RF_Pin_Init();


    /* Configure the INTC to receive GPIO Interrupts. */
    GPIOINTCConfigure();

        /*
    ** Ensable interrupt generation on detection of a logic HIGH or
    ** LOW levels.
    */
    GPIOIntTypeSet(RF_PORT,TP_IRQ,
                   GPIO_INT_TYPE_LEVEL_LOW);//IRQ变低产生中断

      /*
    ** Disable interrupt generation on detection of a rising or a
    ** falling edge.
    */
    GPIOIntTypeSet(RF_PORT,TP_IRQ,
                   GPIO_INT_TYPE_NO_EDGE);

    /* Enable interrupt for the specified GPIO Input Pin. */
    GPIOPinIntEnable(RF_PORT,
                     GPIO_INT_LINE_1,TP_IRQ);


其中:/*** This function configures the Interrupt Controller (INTC) to receive
** GPIO Interrupt.
*/
static void GPIOINTCConfigure(void)
{
    /* Initialize the ARM Interrupt Controller. */
    IntAINTCInit();

// This function configures the Interrupt Controller (INTC) to receive GPIO Interrupt
        /* Register the Interrupt Service Routine(ISR). */
    IntRegister(SYS_INT_GPIOINT1A, GPIOIsr);

    /* Set the priority for the GPIO0 system interrupt in INTC. */
    IntPrioritySet(SYS_INT_GPIOINT1A, 0, AINTC_HOSTINT_ROUTE_IRQ);

    /* Enable the GPIO0 system interrupt in INTC. */
    IntSystemEnable(SYS_INT_GPIOINT1A);
}


void RF_Pin_Init(void)
{
          /* Enabling functional clocks for GPIO1 instance. */
    GPIO1ModuleClkConfig();

    GPIOModuleEnable(RF_PORT);
    //选择引脚模式
    GPIO1PinMuxSetup(TP_CS);
    GPIO1PinMuxSetup(TP_CE);
    GPIO1PinMuxSetup(TP_SCK);
    GPIO1PinMuxSetup(TP_MOSI);
    GPIO1PinMuxSetup(TP_MISO);
    GPIO1PinMuxSetup(TP_IRQ);

    /* Resetting the GPIO module. */
    GPIOModuleReset(RF_PORT);

    /* Setting the GPIO pin as an output pin. */
    GPIODirModeSet(RF_PORT,TP_CS,GPIO_DIR_OUTPUT);

    GPIODirModeSet(RF_PORT,TP_CE,GPIO_DIR_OUTPUT);

    GPIODirModeSet(RF_PORT,TP_SCK,GPIO_DIR_OUTPUT);

    GPIODirModeSet(RF_PORT,TP_MOSI,GPIO_DIR_OUTPUT);

    GPIODirModeSet(RF_PORT,TP_MISO,GPIO_DIR_INPUT);

    GPIODirModeSet(RF_PORT,TP_IRQ,GPIO_DIR_INPUT);
           
        CE_OFF();    // 待机模式
        CSN_ON();   // SPI禁止
        SCK_OFF();   // SPI时钟信号低
}


进而我可以将刷屏的命令全部放在中断子函数中处理:
static void GPIOIsr(void)
{
    /* Check the Interrupt Status of the IRQ pin. */
    if(GPIOPinIntStatus(RF_PORT,
                        GPIO_INT_LINE_1,
                        TP_IRQ) & (1 << TP_IRQ))
    {
            //nRF24L01_RxPacket(RxBuf);  //读取数据
                if(nRF24L01_RxPacket(RxBuf))
                {


              if(g_ulPanel==2)//表盘刷屏
              {

                  WidgetPaint((tWidget *)&g_sAll);
               }

              if(g_ulPanel==3||g_ulPanel==4||g_ulPanel==5)//表盘刷屏

              {

                  WidgetPaint((tWidget *)&g_sSingle);
               }


             if(g_ulPanel==0)//表盘刷屏
              {

              WidgetPaint((tWidget *)&g_sT);
              WidgetPaint((tWidget *)&g_sL);
              WidgetPaint((tWidget *)&g_sN);
              WidgetPaint((tWidget *)&g_sX);
              WidgetPaint((tWidget *)&g_sY);
              WidgetPaint((tWidget *)&g_sZ);


                }

                }  
         SPI_RW(FLUSH_RX);  //清空接收缓冲
         SetRx_Mode();       
        /* Clear the Interrupt Status of the GPIO Card Detect pin. */
        GPIOPinIntClear(RF_PORT,
                        GPIO_INT_LINE_1,
                        TP_IRQ);
    }//尽量减少时间
}

而在主循环中,我则是对收到的数据进行相应准换和处理,并显示出来!这里比较简单,大家可以看我的那个MSP430的例程,两者处理方式类似!

4、图片展示:
发送与接受:

实时变化数据:

模拟的表盘:


5、测试视频:


6、活动感想:
不出意外的话,在活动结束前,我是不能在有什么作为了!!这次活动的时间较为紧张,但是却很充实!
我原来并未接触过此类的处理器!感觉压力很大!一步步走来,克服了一个又一个的硬件和软件问题!!虽然很辛苦但是我乐在其中!
当然除了我自己的去积极查阅资料解决问题以外,讨论群里的大侠们给了我很大的帮助和启发!这里真心谢谢你们!!!也要感谢maylove关于活动详情的耐心解答!!

最后,希望可以有更多的人来玩这块板子!希望我可以进一步利用这款开发板!希望我们的论坛越办越好!!
BY:在论坛的大家庭里成长的小菜鸟:anananjjj。

最新回复

太酷了~  详情 回复 发表于 2012-10-30 22:52
点赞 关注
 

回复
举报

2776

帖子

413

TA的资源

五彩晶圆(中级)

沙发
 
太酷了~
个人签名
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【干货上新】电源解决方案和技术第二趴 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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

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

北京市海淀区中关村大街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
快速回复 返回顶部 返回列表