Zigbee网关 cc2530 zstack添加1602驱动

原创 2015年11月17日 18:08:41

1602的驱动已经写好了,Zigbee网关 CC2530驱动1602显示屏,但是发现不怎么稳定,走了很多弯路,一直以为是自己的指令没有用好,最后实在没辙放出了大招,用逻辑分析仪查看波形,发现波形很乱,尤其是E的下降沿之后的延迟时间非常短,因此简单的进行了修改


修改的主要位置是函数

 void LCD_en_write(void)  
 {                       //EN由高电平跳变到低电平时液晶使能  
 LCD1602_EN=1;  
 delay_nus(40);  
 LCD1602_EN=0;  
 delay_nus(40);  
 
 }  

主要添加了延迟,虽然这里写的是40us,但是用逻辑分析仪查看已经超过1ms了,无所谓了,好用就行

不过现在也有一个问题,就是由于没用rw,任何线上了干扰都被1602认为是有效的数据或者指令,所以在再次复位的时候有时候乱码,这个没办法解决,除非把rw加上

现在想办法把1602挂在zstack上面,

首先应该在初始化函数

void ZigbeeGateWay_Init( uint8 task_id )

里面添加1602初始化函数

#ifndef APP_UIP
 
  lcd1602_init();
  LCD_init();
  LCD_PutStr("Hello,World!",12,1); 
  
#endif

呵呵,起的名称不太好,自己知道意思就行了

添加完了,在合适的位置更新1602的显示就行了,我放到这个函数里面

void ZigbeeGateWay_MessageMSGCB( afIncomingMSGPacket_t *pkt )

本来是用串口打印调试信息的,现在1602也同时打印调试信息

  LCD_PutStr(pkt->cmd.Data,pkt->cmd.DataLength,2);
  HalUARTWrite(HAL_UART_PORT,"RF receive:",11);
  HalUARTWrite(HAL_UART_PORT,pkt->cmd.Data,pkt->cmd.DataLength);
  HalUARTWrite(HAL_UART_PORT,"\r\n",2);

对了函数

 void LCD_PutStr(unsigned char *DData,int length, int pos)  //pos表示字符显示位置,0~31  
 {   
    unsigned char i = 0;   
    LCD_write_command(0x01); //清屏 
    delay_nms(5);  

    if(pos==2)  
    {   
      //LCD_en_write();
       LCD_write_command(0xc0);
       delay_nms(5);    
    }   
    while(i < length)  
    {      
        LCD_write_data(DData[i++]);  
        //length --;
    }  
 
 }

内容被我改成了上面的样子,因为最初我觉得数组指令相互掺杂着可能是造成乱码的原因,找到原因了也没改回来,就这么用吧

一切准备好,下载发现根本就没有显示

非常奇怪,同样的源码,放在不同的工程现象怎么会不一样呢?百思不得其解,继续放大招,逻辑分析仪,发现延迟根本不起作用了,本来写的是延迟5ms,结果波形显示400多us。

想到这里想到了一个原因就是编译器给优化了,改变优化选项


选择low,重新生成下载发现成功了,有图为证:



解说:点击ledall闪烁摁钮,控制台发送字符串

{"From":"PC","Addr":"16FE","Type":"Command","Content":"LEDALLFLASH05"}

该字符串通过服务器转发到zigbee网关,zigbee网关经过解析将content内容转发给短地址为16FE的终端,将命令LEDALLFLASH05转发给终端

改天没什么事情 的时候再改一改android上位机,改成用手机远程遥控的。

工具下载请参考 web.nenewind.com

当然像这种类操作系统的程序,大量的延迟是不应该的,应该利用定时器的功能,把延迟的时间交给操作系统去处理其他的事情。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

zigbee网关 CC2530 zstack用手机控制1602显示

在zigbee工程里面ZigbeeGateWay.h增加一个CLUSTERID #define ZIGBEEGATEWAY_LCD_UPDATE_CLUSTERID 9 这样CLUSTERID的...

zigbee网关 zstack CC2530添加iic温度传感器lm75a

lm75a已经裸机驱动起来,下一步准备添加在zstack中zigbee网关 cc2530裸机驱动温度传感器LM75A 把iic.c, iic.h, lm75a.c, lm75a.h拷贝到zigbeeG...

zigbee网关 CC2530 zstack用手机控制12864(支持汉字)显示

参考zigbee网关 CC2530 zstack用手机控制1602显示程序,在1602的工程基础上修改 添加12864驱动文件,首先将原先的1602的驱动移除掉,将zigbee网关 cc2530...

zigbee网关 cc2530裸机驱动温度传感器LM75A

LM75A,数字温度传感器,IIC接口,读取简单,只需要读取2个寄存机的值就可计算出来温度 手里里有个贴片的LM75A,在一块废弃的pcb板上利用0805电阻脚把lm75a的sda和scl脚...

zigbee网关 cc2530终端裸机串行驱动12864(字库ST7920)

由于CC2530终端的IO端口很紧张,所以驱动12864屏幕采用串行驱动,接法很简单,只需要三根线 首先将PSB引脚接地,使12864处于串口模式;更简单的接法CS引脚都可以省略,直接将CS接到5...

ZigBee(CC2530,ZSTACK)透传示例

使用ZSTACK进行透传是非常简单的一件事,ZSTACK协议栈已经封装好了函数,方便调用。   本例的透传是指CC2530通过串口接收数据,然后原封不动地通过无线数据包发送出去。无线数据包收到的数据...

zigbee单播丢包测试(CC2530,ZSTACK)

之前写过一个zigbee数据测试,由于当时对zigbee理解的很浅,所以写的代码丢包严重。最近为了提高数据传输的可靠性,改进了一下通信的方式,结果还不错。   之前:协调器+普通终端节点,协调器广播...

Zigbee网关 上电时Zstack串口乱码

Zstack定义定义宏ZTOOL_P1的时候,系统开机的时候回输出一串乱码, 用16进制显示试试 乱码的十六进制字符串是  FE 06 41 80 01 02 00 02 04 00 C2...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)