|
发表于 22-6-2010 08:56 AM
|
显示全部楼层
回复 60# xin777_88
for(i=0;c!='0';i++)concept是对的。我说的0 是 0 不是'0'.
我相信你visual basic program最后有send '0'.暂时不说这个。不是大问题。只要你的string没有'0'即可。
while(PIR1bits.RCIF==0);
这个过后的那个开关括号{}是不需要的。虽然没有问题。不过看起来怪怪。不readable.
program 次序弄好来。 尤其是indent.
参考54楼。我帮你修改过后的code
你的program加一点comments.没有的话很难明白。 好像58楼这样。
主要问题:
你知道那里出现问题吗?现在你的pc -> mcu. mcu-> pc.少了几个bytes.
到底是pc software error,还是mcu receive error,还是mcu send error还是pc receive error? |
|
|
|
|
|
|
|
楼主 |
发表于 22-6-2010 01:19 PM
|
显示全部楼层
本帖最后由 xin777_88 于 22-6-2010 01:23 PM 编辑
回复 61# fritlizt
for(i=0;c!='0';i++)concept是对的。我说的0 是 0 不是'0'.我明白你的意思,问题是当我放0时电脑送不到所以我在想应该是rcreg会store last value 意思说它跳不出for loop所以我就在visual basic那里send 0, 然后在mcu coding那里 放for(i=0;c!='0';i++),只有这样写电脑才能收到。我也有尝试过放过'\0'可是也是不能。对了想问您在59 楼的"可以利用\r\n" \r\n是什么意思?
- for(i=0;c!='0';i++)
- {
- while(PIR1bits.RCIF==0);//等到收到data维持。
- c = RCREG; //收到的data都是存在RCREG
- save(i)=c; //把data 收在array
- }
- i--; //不要把0显示在电脑(可是不知道还是会显示)
- for( q=0;q<=i;q++)
- {
- sendtx(save[q]); //把data送回电脑
- }
复制代码
至于为什么会收到单数而已,我已经解决了是我的transmit coding 出现问题。
这样写才对,我之前已经颠倒了(可以到60楼看)
- void sendtx(unsigned char c)
- {
- while(PIR1bits.TXIF==0); //发送完就跳出这个while loop
- TXREG=c;
- }
复制代码
上方就是改了transmit coding后的result。
还有一个问题就是不知道为什么我已经放 i-- 了,可是那可0还是会被发送到电脑? |
|
|
|
|
|
|
|
发表于 22-6-2010 02:26 PM
|
显示全部楼层
回复 62# xin777_88
其实我试图引导你找出问题。在那种情况下, 你会有哪几种可能性
虽然你解决了问题,不过真正的原因不是那个。。
真正的原因是因为pic18f4520 TXIF不会即时反映TXREG的情况。请参考datasheet usart篇, transmit部分:
TXIF is also not cleared immediately upon loading TXREG, but
becomes valid in the second instruction cycle following
the load instruction. Polling TXIF immediately following a
load of TXREG will return invalid results.
所以你load txreg过后不可以直接read txif,要等一个instruction cycle.
不过你把秩序调转业可以。这样更好。
关于你的 0。那一支铅笔,一张纸。人工loop你就懂发生什么事情了。 |
|
|
|
|
|
|
|
发表于 1-7-2010 11:00 PM
|
显示全部楼层
以前diploma的时候senior有做过了。那时Wireless在正式demo的时候无法超作因为他们 用FM的。Freq 太过靠近手机和当天的磁场太高导致interference。。所以做wireless的应该要考虑到这一点。 |
|
|
|
|
|
|
|
发表于 2-7-2010 02:37 PM
|
显示全部楼层
回复 64# fayelife2007
没错。 很多都用fm。你的wireless modem.bluetooth等。
所以要做到像这类型的device,有interference也没关系。
单靠FM来modulate你的data是不行的。
使用software stack是一种选择。可能还有其他方法。就要看你用什么方法来解决这个问题。
在这方面, miwi还不错。电话在旁边还不会引起什么问题。不过我到没试过在wireless modem附近会有什么问题。两者都用2.4ghz band的frequency. |
|
|
|
|
|
|
|
发表于 2-7-2010 03:05 PM
|
显示全部楼层
回复 65# fritlizt
不是我啦!已经是很久的事了。。
无法负担得起那么昂贵的project因为都是Self-funded 的。
那FM好像是800MHz多而已,很靠近手机的频率。
因为弄的时候没问题所以他们也没有多考虑这方面的事情了。 |
|
|
|
|
|
|
|
楼主 |
发表于 4-7-2010 01:27 PM
|
显示全部楼层
回复 63# fritlizt
现在我真要把全部都integrate 起来。可是在我要把binary存在rom array(program memory)时, 不懂为什么debuger 说有syntax error - rom const char DECODE[][] =
- {
- {'A',0x80, 0x88, 0x88, 0x88, 0x80, 0xFF},
- {'B',0x00, 0x6E, 0x6E, 0x6E, 0x91, 0xFF},
- {'C',0x00, 0x7E, 0x7E, 0x7E, 0xBD, 0xFF},
- {'D',0x00, 0x7E, 0x7E, 0x7E, 0x81, 0xFF},
- {'E',0x00, 0x6E, 0x6E, 0x6E, 0x6E, 0xFF},
- {'F',0x00, 0x6F, 0x6F, 0x6F, 0x7F, 0xFF},
- {'G',0x81, 0x7E, 0x7E, 0x76, 0xB1, 0xFF},
- {'H',0x00, 0xEF, 0xEF, 0xEF, 0x00, 0xFF},
- {'I',0x7E, 0x7E, 0x00, 0x7E, 0x7E, 0xFF},
- {'J',0x79, 0x7E, 0x7E, 0x01, 0x7F, 0xFF}...
- };
复制代码
要怎样才可以把我的a to z binary data 存起来呢?由于ram 不够大,所以我的想法是把他们存在rom. |
|
|
|
|
|
|
|
发表于 4-7-2010 01:59 PM
|
显示全部楼层
回复 67# xin777_88
error msg是什么?每一次当其他人是神。。。。。。
还有之前的问题是什么? 解决了吗?请update以后可以帮到其他人。 |
|
|
|
|
|
|
|
楼主 |
发表于 4-7-2010 03:10 PM
|
显示全部楼层
回复 68# fritlizt
还有之前的问题是什么? 解决了吗?请update以后可以帮到其他人。
你是指0的问题?就跟着你讲的去做啊,拿纸拿笔做人工loop咯,发现应该要i=i-2,而不是i=i-1咯。我以为这是简单问题所以没有回复。
transmitter--(wireless)-->receiver--(uart)-->display board.
现在要做的是display board 的coding把之前写的coding(上几楼)和scrolling message 的 coding 合在一起.意思是说,display board收到一个ASCII code message时,它要负责把这些ASCII code message转换成binary code. 所以我要先把A到Z的binary code存在program memory,然后在利用compare的方式把user要的 message 存在array在把他们送到dot matrix.
error msg是什么?
我没有说error msg我是说当我把一系咧binary data存在program memory时,不知道为什么debug后,说有syntax error
- rom const char DECODE[][] =
- {
- {'A',0x80, 0x88, 0x88, 0x88, 0x80, 0xFF},
- {'B',0x00, 0x6E, 0x6E, 0x6E, 0x91, 0xFF},
- {'C',0x00, 0x7E, 0x7E, 0x7E, 0xBD, 0xFF},
- {'D',0x00, 0x7E, 0x7E, 0x7E, 0x81, 0xFF},
- {'E',0x00, 0x6E, 0x6E, 0x6E, 0x6E, 0xFF},
- {'F',0x00, 0x6F, 0x6F, 0x6F, 0x7F, 0xFF},
- {'G',0x81, 0x7E, 0x7E, 0x76, 0xB1, 0xFF},
- {'H',0x00, 0xEF, 0xEF, 0xEF, 0x00, 0xFF},
- {'I',0x7E, 0x7E, 0x00, 0x7E, 0x7E, 0xFF},
- {'J',0x79, 0x7E, 0x7E, 0x01, 0x7F, 0xFF}
- };
复制代码 |
|
|
|
|
|
|
|
发表于 5-7-2010 01:59 PM
|
显示全部楼层
回复 69# xin777_88
那一行有syntax error?array那边检查看看
[][],c language不允许multidimensional with每个array有不同的size. |
|
|
|
|
|
|
|
楼主 |
发表于 3-8-2010 10:30 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 23-8-2010 01:59 PM
|
显示全部楼层
回复 71# xin777_88
3.84v还是有点危险。 一般是pic input high是0.7.Vcc. Vcc = 5v 0.7. Vcc = 3.7v.
3.84只是高一点罢了。你怎么用你的transistor? 可以画出来吗? resistor value?
附近有没有2.4ghz 得咚咚? 比如说bluetooth mouse, wireless router等等。 试试看其他channel.你用什么channel?
visual basic可以detect你的电脑有多少comport. 然后list出来。 |
|
|
|
|
|
|
|
楼主 |
发表于 19-10-2010 08:26 AM
|
显示全部楼层
fritlizt非常感谢你九个月的帮忙哦。我的fyp做到了。也可以无限的发出message。之前的问题都解决了,问题不是出在距离而是我的coding问题。在此感谢帮过我的人。谢了。 |
|
|
|
|
|
|
|
发表于 19-10-2010 08:58 AM
|
显示全部楼层
fritlizt非常感谢你九个月的帮忙哦。我的fyp做到了。也可以无限的发出message。之前的问题都解决了,问题不 ...
xin777_88 发表于 19-10-2010 08:26 AM
要不要分享一下你之前的问题,做一个总结, 让以后看帖的人受益? |
|
|
|
|
|
|
| |
本周最热论坛帖子
|