找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 6003|回复: 5

NXT S4 RS485端口ROBOTC测试程序

  [复制链接]
发表于 2014-1-19 19:36:20 | 显示全部楼层 |阅读模式
      今天对NXT的S4 High Speed 端口进行了测试,测试设备为PC+USB串口+MAX1483,在波特率460800及以下收发均正常,波特率921600下乱码,由于测试设备的原因没有办法确定哪里出问题,等有机会搞两台NXT测试看看。
      由于NXT的S4 High Speed 端口是工作半双工模式,测试发送请将接收部分注释掉。

RS485_test.zip

1.17 KB, 下载次数: 11

NXT S4 RS485端口ROBOTC测试程序

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2014-1-20 09:44:15 | 显示全部楼层

485-TTL电平转换图奉上(附件):

另外:
1,485是半工的,发送与接收的管理在使用“伪自动流向管理”后,是可以当成TTL口直接用的,如果楼主确信使用自动数据流向,速率在57600下我是试过的,误码率很小很小.......
2,你使用的速率好高啊,如此高的速率,最好要使用绞线和终端电阻了.......
485-ttl.jpg
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2014-1-20 12:26:37 | 显示全部楼层
谢谢,自动数据流向控制设计的好巧妙啊,我只是做了测试,还没想好怎么用。如果扩展低速设备还是I2C方便。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2014-1-20 12:50:55 | 显示全部楼层
不明觉厉..
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2014-6-6 10:46:14 | 显示全部楼层
本帖最后由 blackblue 于 2014-6-12 09:39 编辑

楼主还来么?

1,能否帮我看看,ROBOTCFOR NXT有没有可以用的中断(硬件中断,比如串口中断什么的)?
2,另,nxtReadRawHS能不能用它写出类似ARDUINO一样的Serial.read()一样的,一个字节一个字节读的功能来,我试了几次均不灵光.......
3,发一个刚写的,ARDUINO与NXT 485有线的通讯程序,里面有注释的(验证定长字节浮点数串口传送与还原)
/*
Data Source Format: 8 bytes, the first four are "ROLL" floating point format; After four is the angular velocity, but also floating point format;
Each frame of data is 8 bytes, the rate is less than 7.5 to 8ms refresh;
485 port transfer, BAND = 115200;*115200 = 1ms can transmit 14 bytes
Operation: first NXT host sends "#" signal. After the device is connected to port 4 received loopback 8 bytes of data.

"while (true)" Time cycle time needed to "dt", to be written .....
"dt" time to control at 10ms or less (target);
ROBOTC FOR NXT hardware interrupt is still not available, it is not good .....

Write time :2014-5-4 Author: Jack Lu
Note:Code must be run in the robotc 3.6.2 or higher
*/

//
void rs485_init()
{
        nxtEnableHSPort();
        nxtSetHSBaudRate(115200);
        nxtHS_Mode = hsRawMode;
        wait10Msec(50);
}
/*//Mandatory for ROBOTC invalid pointer type, abandoned
float ByteToFloat(unsigned char* byteArry)
  {
    return *((float*)byteArry);
  }
*/

task main()
{
        ubyte ASK[1]=0x23;
        bool sign=true;
        unsigned char Re_buf[8],roll[4],omiga[4];
        int len=0,i=0;
        float angle,x_speed;
        memset(&Re_buf, 0, 8); //Formatting the memory array
        memset(&roll, 0, 4);
        memset(&omiga, 0, 4);

        rs485_init();

        while(true)
        {
                while(sign)   //Serial data transmission start
                {
                 nxtWriteRawHS(&ASK[0],1);
                 wait1Msec(1);
                 sign=false; }

           if (sign==false)
                  {

                while( nxtGetAvailHSBytes()<8){
                wait1Msec(1); }

                len =  nxtGetAvailHSBytes(); //"len" variable is when debug can easily see nxtGetAvailHSBytes () return value.
                if (len==8)  nxtReadRawHS(&Re_buf[0], len);

                for ( i=0;i<8;i++)  //8 bytes of data split,In fact, you can add the parity bit, here is the test, so there is no use parity
                {
                  if (i<4) roll = Re_buf;
                  if (i>=4) omiga[i-4] = Re_buf;
                }
                 sign=true;
                 }

         memcpy(&angle,&roll[0],sizeof(angle));  //4 bytes from memory copy UNSIGNED CHAR array and pointer types into FLOAT
         memcpy(&x_speed,&omiga[0],sizeof(x_speed));

         nxtDisplayTextLine(0, "Stat Test");
   nxtDisplayTextLine(1, "-------------------");
   nxtDisplayTextLine(3, "%f",angle);
         nxtDisplayTextLine(5, "%f",x_speed);
        
        // do somtings
  }
}
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2014-6-10 19:11:27 | 显示全部楼层
blackblue 发表于 2014-6-6 10:46
楼主还来么?

1,能否帮我看看,ROBOTCFOR NXT有没有可以用的中断(硬件中断,比如串口中断什么的)?

我对ROBOTC FOR NXT也不熟悉,好像没有硬件中断。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

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

本版积分规则

QQ|手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-4-24 19:05 , Processed in 0.092060 second(s), 25 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

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