![]() |
Forum Index : Microcontroller and PC projects : How to put pauses in a COM port?
Author | Message | ||||
Grogster![]() Admin Group ![]() Joined: 31/12/2012 Location: New ZealandPosts: 9588 |
Hi everyone. I have a serial stream I need to send using a MM170 chip, to a PICAXE based receiver unit. The 170 is too fast for the PICAXE and seems to be confusing the receiver, as all I get are garbled comms. Both are 2400 baud. Works perfectly with the PICAXE chip driving the RF module, but as soon as you put the MM on it, the message is garbled. Looking at the data stream with a logic analyser, I can see that the PICAXE is adding some native pauses in the datastream, as it build it based on what inputs it is getting. These delays are in the area of 4-6ms, but are just idle-high nothings in the data stream. THIS MATCHES WITH THE PICAXE RECEIVER, as it WAITS for the prescribed data before doing anything else, so you send the qualifier, and then the bytes. The PICAXE receiver sits there and waits for the qualifier, then inputs the data bytes. That all takes a few ms of time, and by that time, the MM170 has streamed the data past the point that the PICAXE is ready for it. I am having a HUGE amount of difficulty trying to replicate these delays in the MM, as the serial output buffer simply won't let me insert any delays in the data, and EVERYTHING is streamed out of the buffer one byte after another. The PICAXE receiver is missing data in other words, and when the it looks at the data stream again, it is in the middle of a byte(as sent from the MM), and all you then end up with is rubbish. Is there any way to insert pauses into the serial going OUT of the MM? The next thing I will try, is closing the serial port, waiting 5ms or so, and then reopening it to send the next bit of data. I can't think of anything other then that. I can change the design so that it uses an SOIC 08M PICAXE instead of the SSOP MM170, but I liked the idea of using the MM. ![]() Does anyone have any clever suggestions? Smoke makes things work. When the smoke gets out, it stops! |
||||
TassyJim![]() Guru ![]() Joined: 07/08/2011 Location: AustraliaPosts: 6269 |
The method that has worked for some is to configure the MM with 2 stop bits. That gives the required delay without you doing anything more. Edit : only works for COM1 Jim VK7JH MMedit |
||||
Grogster![]() Admin Group ![]() Joined: 31/12/2012 Location: New ZealandPosts: 9588 |
Hey, I think you are on to something there, Jim! ![]() A test resulted in PERFECT reception on the PICAXE receiver, if I changed the COM port command to: "COM1:2400,S2" I will now try the original code and see what happens, but this is a good sign. ![]() EDIT: Yep, it now works fine with the original code set to S2. Before, all I was getting was gobbledegook. Thanks Jim - nice thinking. ![]() Smoke makes things work. When the smoke gets out, it stops! |
||||
Geoffg![]() Guru ![]() Joined: 06/06/2011 Location: AustraliaPosts: 3282 |
Another possibility is to use the CFunction SerialOut function included in the Micromite firmware zip. That is not buffered so you could send one character, pause for a few mSec, etc. Come to think of it, you could do that with the normal serial comms. Send one character, pause 6mS, send the next, etc. At 2400 baud it takes 4mS for one character to clear the buffer so that would put 2mS between characters. Geoff Geoff Graham - http://geoffg.net |
||||
Grogster![]() Admin Group ![]() Joined: 31/12/2012 Location: New ZealandPosts: 9588 |
Another good idea. Thanks. ![]() Never actually thought of doing it one character at a time in a loop - should have thought of that, but didn't. ![]() Smoke makes things work. When the smoke gets out, it stops! |
||||
TassyJim![]() Guru ![]() Joined: 07/08/2011 Location: AustraliaPosts: 6269 |
I forget who did the 'nice thinking', all I did was the 'nice remembering' The problem was solved here some time ago. Geoff: I think it would be a good addition to the micromite manual. Jim VK7JH MMedit |
||||
Bill.b![]() Senior Member ![]() Joined: 25/06/2011 Location: AustraliaPosts: 235 |
Are you using N2400 or T2400 baud rate in the picaxe or invert the comms in the 170 program. I have communicated with a picaxe OK with T2400. This program sends text messages to a 14m2 (AXE134) OLED display. [code] OPEN "COM1:2400, INV, S2" as #1 pause 30 Print #1,chr$(254) + chr$(1); pause 30 Print #1,chr$(254) + chr$(128); ' or 192 for line 2 Print #1,"Hello world "; Print #1,chr$(254) + chr$(192); ' Print #1,"What a great Day"; Print #1,chr$(254) + chr$(148); ' Print #1,"to be alive"; [/code] Bill In the interests of the environment, this post has been constructed entirely from recycled electrons. |
||||
Grogster![]() Admin Group ![]() Joined: 31/12/2012 Location: New ZealandPosts: 9588 |
Both are T comms. I note you are also using the S2 option though, Bill.... Smoke makes things work. When the smoke gets out, it stops! |
||||
Bill.b![]() Senior Member ![]() Joined: 25/06/2011 Location: AustraliaPosts: 235 |
The comms on sample above is N2400 for the 14m2 (Standard for the picaxe AXE 133 OLED driver). Bill In the interests of the environment, this post has been constructed entirely from recycled electrons. |
||||
![]() |
![]() |
The Back Shed's forum code is written, and hosted, in Australia. | © JAQ Software 2025 |