|
|
View previous topic :: View next topic |
Author |
Message |
vpan
Joined: 31 Oct 2008 Posts: 14
|
communication problem |
Posted: Wed Nov 19, 2008 2:04 pm |
|
|
I want to communicate with a pc through rs232 and pic 16f628 and crystal 4Mhz at 19200 and works fine. When I replace the crystal with one at 20Mhz it doesn't work. I put a pic 16f877 too and it has the same results. Is there anything else I have to do to make it work ?
(when a make the change with the crystal I correct the code too)
The circuit is made on PCB.
My purpose is to make it work at 115200 (20MHz XT) but I see that I can't do it nor at 19200.
It's probably not going to work right ?
Any ideas ? |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Nov 19, 2008 2:17 pm |
|
|
What does that mean ?
Quote: | when I make the change with the crystal I correct the code too. |
Does that mean you change the #use delay() statement to this ?
Code: | #use delay(20000000) |
Post your compiler version. |
|
|
RLScott
Joined: 10 Jul 2007 Posts: 465
|
Re: communication problem |
Posted: Wed Nov 19, 2008 2:20 pm |
|
|
vpan wrote: | ...16f628 and crystal 4Mhz at 19200 and works fine....When I replace the crystal with one at 20Mhz it doesn't work....(20MHz XT) ... |
For 20 MHz you cannot use the XT oscillator configuration. You must use the HS configuration. _________________ Robert Scott
Real-Time Specialties
Embedded Systems Consulting |
|
|
Guest
|
|
Posted: Wed Nov 19, 2008 2:30 pm |
|
|
Your loading capacitors may also be wrong for a 20 MHz crystal. Check the Microchip data sheet and the crystal manufacturers recommendation.
HTH - Steve H. |
|
|
vpan
Joined: 31 Oct 2008 Posts: 14
|
|
Posted: Wed Nov 19, 2008 2:31 pm |
|
|
thanks both of you...
my compiler version is 4.057
i did all necessary corrections
when i connect 20MHz i have wrong results!
on 4 MHz everything is fine! |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
|
vpan
Joined: 31 Oct 2008 Posts: 14
|
|
Posted: Wed Nov 19, 2008 2:47 pm |
|
|
Code: | #include <16F628.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use RS232(baud=19200, xmit=PIN_b2, rcv=PIN_b1)
#byte PORTA=0x05
#byte PORTB= 0x06
//#byte PORTC= 0x07
#define button PIN_A4
#define del 1
int i=0;
int16 sine[20]={0,100,190,262,309,325,309,262,190,100,
0,-100,-190,-262,-309,-325,-309,-262,-190,
-100};
void main(){
set_tris_a(0x1f);
set_tris_b(0x02);
//set_tris_c(0x02);
while (TRUE) {
while(input(button)){;}
for(i=0;i<=19;++i){
delay_ms(del);
printf ("A %ld\n",sine[i]);}
}} |
there is my code, the comments reported at 16f877
for 4MHz the only change is
#fuses XT,#use delay(clock=4000000) |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Nov 19, 2008 3:10 pm |
|
|
It works for me. I installed vs. 4.057. I installed a 16F628 on my
PicDem2-Plus board, with a 20 MHz crystal. I jumpered pin B2 to C6
so it would connect the Tx pin on the 16F628 to the MAX232 on the board.
I added a '\r' to your printf statement so it would do a carriage return
after each line. I configured HyperTerminal for 19200 baud, N, 8, 1,
with no handshaking. This is what I get:
Quote: |
A 0
A 100
A 190
A 262
A 309
A 325
A 309
A 262
A 190
A 100
A 0
A -100
A -190
A -262
A -309
A -325
A -309
A -262
A -190
A -100 |
----
Edit: Corrected the Tx pin number to C6.
Last edited by PCM programmer on Thu Nov 20, 2008 1:15 am; edited 1 time in total |
|
|
pvol
Joined: 10 Oct 2008 Posts: 46 Location: GREECE
|
|
Posted: Thu Nov 20, 2008 1:11 am |
|
|
Do you have any ideas why don't work for me?
I have 2 crystals and I change them both, but get the same result!
What must I do ? |
|
|
Ttelmah Guest
|
|
Posted: Thu Nov 20, 2008 3:29 am |
|
|
The most likely problem is the loading capacitance, or general layout of the board.
Higher frequency crystals, will generally become more critical of errors here, and will probably want a lower capacitance. The manufacturer will give a loading spec for the crystal. Say, something like 20pF. Now the normal crystal layout, with the capacitor between the oscin, and oscout pins, and two capacitors one from each pin to ground, gives the approximation:
Cl = ((C*C)/2C+Cs)
Where 'Cl' is the load capacitance wanted, 'C' if the value of each of the two added capacitors, and 'Cs', is the stray capacitance from the PCB tracks, and IC pins. Now, _provided_ you have the crystal placed close to the chip, whith nice short leads, and no ground plane round the capacitor pins, a typical value for 'Cs', will be perhaps 5 to 6pF (normally 3pF for the PIC itself, and aout the same for the board). Cl, will be from the manufacturers data for your crystals, and might be anything from perhaps 18pF to 40pF. 18 to 20pF, is perhaps typical for a 20MHz crystal.
Solving for 'C', you get:
C = (Cl - Cs)*2
So for a 20MHz cystal, with 5pF for stray capacitance and a crystal requiring 18pF load, you get:
C = (18 - 5) *2 = 26pF
Commonly 27pF is used for this configuration.
However visualise instead, using a 'proto' board, with 15pF capacitance between each track block, or a PCB, laid out with a ground plane tight round the crystal legs, giving a simiular capacitance. The leg capacitance of the PIC adds to this, so you get (for the required capacitors):
C = (18 - (15+3)) * 2 = 0pF....
Put perhaps33pF capacitors in the circuit, and the crystal is seeing 35pF, rather than the 18pF, it wants. If the 4MHz crystal, is a design wanting perhaps 27pF, it works, but the 20MHz crystal, is too far out of spec, and the gain falls below the critical value to maintain oscillation...
My guess would be that the board you are using, and the capacitors you have fitted, are giving much too high a capacitance for the higher frequency crystal.
Best Wishes |
|
|
Rohit de Sa
Joined: 09 Nov 2007 Posts: 282 Location: India
|
|
Posted: Thu Nov 20, 2008 4:26 am |
|
|
For most of my quick and dirty prototyping I don't use stabilizing capacitors at all. I know its not good electrical practice, but I've never had a problem to date. Most of my prototyping is done on solderless breadboards with 32kHz-20MHz crystals.
Once I finish prototyping, I solder on the appropriate stabilizing capacitors.
My advice is - double check your circuit for other problems as well. One of the most common mistakes I used to make was interchanging the RX-TX lines. I also used to often forget to connect Vss of the microcontroller to ground. I know these are trivial mistakes, but they happen. Try out a simple LED flashing program. If that works then you can eliminate errors 2 and 3.
Rohit |
|
|
Ttelmah Guest
|
|
Posted: Thu Nov 20, 2008 5:14 am |
|
|
'stabilizing capacitors'?!....
Talking about the _loading_ capacitors for the crystal. These are not 'stabilising capacitors', but a critical part of the resonant circuit.
If you are not fitting these, the odds are that if it works, it is because the stray capacitance on the prototype is high enough to get close to the required value. On the overtone crystals used at these frequencies, unless you get into the right 'order', the oscillator risks running on the wrong overtone, if at all...
A small change, just drifts the frequency a little, and on fundamental crystals, you can go a surprising 'way' before the gain drops too far, but on some overtone crystals, the 'commonest' effect is to start oscillating at a lower overtone. However particularly with small crystals, the gain drops rapidly as you move away from the correct loading, and the oscillator not working is quite common.
Best Wishes |
|
|
Rohit de Sa
Joined: 09 Nov 2007 Posts: 282 Location: India
|
|
Posted: Thu Nov 20, 2008 5:23 am |
|
|
Quote: | 'stabilizing capacitors'?! | My bad Quote: | if it works, it is because the stray capacitance on the prototype | Yes, I guess you are right about this.
Rohit |
|
|
arunb
Joined: 08 Sep 2003 Posts: 492 Location: India
|
RE: |
Posted: Thu Nov 20, 2008 6:00 am |
|
|
I always had communication trouble with 20 Mhz crystals on 16F877, I am not sure why, but I think they have something to do with
1. selecting the right capacitors
2. quality of the crystal (I am just guessing here)
In any case the problem was so severe that I replaced them with 16 Mhz ones.
Are you sure the PIC is working with the 20 Mhz crystal, you could toggle an output port high & low in the program and then use a scope to check whether the port is toggling.
thanks
arunb |
|
|
vpan
Joined: 31 Oct 2008 Posts: 14
|
|
Posted: Thu Nov 20, 2008 3:34 pm |
|
|
Problem solved!! Thanks to all of you guys!
I change C1 and C2 to 15pf
re-warm some connections, shorted some wires
and now it's work! |
|
|
|
|
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
|