CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

2 lines of code, where did I go wrong? hyperterminal

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Nick
Guest







2 lines of code, where did I go wrong? hyperterminal
PostPosted: Tue Jul 13, 2004 10:14 pm     Reply with quote

below is my code. I am trying to a printf out to hyperterminal. My settings are 9600, 8-N-1, no flow control. This is what I'm getting

"�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-
#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'
-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%
'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%"




I have a pic16f876 running a HS 20mhz ceramic resontator. I know this setup works because I have a different bin file created with a different compiler and it works fine. All I did was reprogram the chip with the CCS compiler and code.




code below:


#include <16F876.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

void main() {

while(1)
{

printf("Sampling:");
}

}
Guest








PostPosted: Tue Jul 13, 2004 11:04 pm     Reply with quote

I tried it with a 20MHz xtal and it was OK.
Perhaps your resonator is a bit off frequency - the tolerance on them is typically about 0.5% compared to a crystal worst case of about 100ppm or 0.01%.
Nick
Guest







PostPosted: Tue Jul 13, 2004 11:13 pm     Reply with quote

thanks for the info, I guess I could try at a lower speed, 2400 didnt work either.
Guest








PostPosted: Tue Jul 13, 2004 11:55 pm     Reply with quote

I have a 20 MHz Ceramic Resonator ECS ZTT. Is it a bad brand?


I use the settings HS, is that correct?
GDetienne



Joined: 20 Sep 2003
Posts: 47
Location: Brussel - Belgium

View user's profile Send private message

PostPosted: Wed Jul 14, 2004 1:38 am     Reply with quote

Could you try the same code with a Xtal of 4 Mhz ?
I had the same printing with a Xtal of 20 and 16 Mhz.

The fault was the PIC. I had one 16F876-4 and not a 16F876-20.

Regard.
Nick
Guest







PostPosted: Wed Jul 14, 2004 1:57 am     Reply with quote

the pic says on the outside

pic16f876-20/sp does that mean its for 20mhz only?

Nick
adimotz
Guest







PostPosted: Wed Jul 14, 2004 2:11 am     Reply with quote

Maybe you need to use a MAX232 (which is an inverter) between PIC and PC comm port.
GDetienne



Joined: 20 Sep 2003
Posts: 47
Location: Brussel - Belgium

View user's profile Send private message

PostPosted: Wed Jul 14, 2004 2:23 am     Reply with quote

pic16f876-20/sp is a version for maximum 20 Mhz Xtl, it's OK.

Try with 4 Mhz Xtl and with a MAX 232.
Ttelmah
Guest







Re: 2 lines of code, where did I go wrong? hyperterminal
PostPosted: Wed Jul 14, 2004 3:12 am     Reply with quote

Nick wrote:
below is my code. I am trying to a printf out to hyperterminal. My settings are 9600, 8-N-1, no flow control. This is what I'm getting

"�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-
#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'
-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%
'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%'-#1�Y=%"




I have a pic16f876 running a HS 20mhz ceramic resontator. I know this setup works because I have a different bin file created with a different compiler and it works fine. All I did was reprogram the chip with the CCS compiler and code.




code below:


#include <16F876.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

void main() {

while(1)
{

printf("Sampling:");
}

}


When you say you have tried it with other code, was there anything at all 'different' (for instance a different PC!). I have had a suprising number of problems recently, with PC's, having 'off frequency' com ports...
Now looking a the data 'stream' (the actual bit pattern being received, versus the one that should be sent), gives (for the word 'Sampling:'):
011001010010000110010110110000001110000110110010010110001110110011100110001011100

and for the string "1�Y=%'-#":
010001100011010001010011010010111100010100100011111000011100100010110100011000100

Now normally in a situation like yours, you can look along these patterns to see if they 'align' anywhere, or have common features. The big things that 'leap' out, are that the top pattern has six consecutive '0' bits about 1/3rd the way along. Even if the clock timings were well off, this pattern should be visible as either 5 or 7 consecutive 0 bits in the resulting string. Yet this appears nowhere...

However there is a sort of 'similarity', in the two sections:
0000001110000
000111110000
(about ten characters latter in the second string), which looks the sort of pattern that is seen, if the timing is off by a significant percentage.
Is it possible that the original code was 'tweaked' to compensate for a timing component that is relatively inaccurate?. If you have a scope, you should be able to see/measure the shortest pulse in the data stream. This would give the 'bit time', and should be 104uSec. If this is not the case, then you have found the problem.
If the timing is 'off frequency', then trying a lower rate, won't help, since the percentage error would remain constant...

Best Wishes
Nick
Guest







PostPosted: Wed Jul 14, 2004 4:05 am     Reply with quote

Thanks for all the help, I dont have a scope at home, but at school I have access to one. I dont have a the Max232 installed, would that give me all this problem? The previous code I wrote was in CC5X and it was a software rs232 printf function and I didnt need a max232 with it. Could the built-in hardware rs232 implementation need it?

Nick
Guest








PostPosted: Wed Jul 14, 2004 4:14 am     Reply with quote

You definitely need it. The RS232 spec has -3V to -12V for the 'mark' and +3V to +12V for the 'space'.
Laptops cheat a bit here I think, that's probably why you got away with it before, right?
Ttelmah
Guest







PostPosted: Wed Jul 14, 2004 7:10 am     Reply with quote

Nick wrote:
Thanks for all the help, I dont have a scope at home, but at school I have access to one. I dont have a the Max232 installed, would that give me all this problem? The previous code I wrote was in CC5X and it was a software rs232 printf function and I didnt need a max232 with it. Could the built-in hardware rs232 implementation need it?

Nick

Aargh!.
Yes...
RS232, has a standard, where a '1', is transmitted as a -ve voltage, and a '0', as a positive voltage. Line drivers like the MAX232, invert the signals. So the PIC gives a +ve logic '1', and a 0v logic 0, and the Max232 inverts this to meet the RS232 specs. The hardware UART, _requires_ this inversion.
You can generate 5v logic 'psuedo' RS232 (it doesn't meet the signalling requirements of the standard), using 'software serial', but not with the hardware port.
This would definately cause your problem...

Best Wishes
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group