|
|
View previous topic :: View next topic |
Author |
Message |
sniffer
Joined: 01 Apr 2010 Posts: 5
|
picKit 2 UART tool dsPIC33 |
Posted: Thu Apr 01, 2010 3:45 pm |
|
|
I am starting up a project with dsPICFJ128GP802 and I've made all the basic connections. I'm using PIC Kit 2 to power it up and the first thing I wanted to do is to use PICKit 2 UART tool to send a character to the UART screen. Here's my code:
Code: |
#include <33fj128gp802.h>
#fuses HS, NOWDT, PR_PLL, NOPUT
#use delay (clock=20000000)
#use rs232(baud=9600, XMIT=PIN_B0, RCV=PIN_B1, ERRORS)
void main()
{
while(1)
{
putc('n');
output_toggle(PIN_B4);
delay_ms(2000);
}
} |
I have an LED connected to pin B4 and its doing the toggle correctly.
Here is what I'm getting in the UART Tool screen
Quote: | ?????????
RX: FD
RX: FD
RX: FD
RX: FD |
The ? is when I select the ASCII mode and RX: FD is in Hex mode. Does anyone have an idea on why I am getting the '?' instead of 'n' ? It's the same no matter what character or number I put. Thanks in advance.
My compiler version is PCD 4.084, 57706. |
|
|
sniffer
Joined: 01 Apr 2010 Posts: 5
|
picKit 2 UART tool dsPIC33 (SOLVED) |
Posted: Mon Apr 05, 2010 6:24 pm |
|
|
I had the fuse setting wrong. I should have used PR instead of PR_PLL. Changed it and now its working. |
|
|
sniffer
Joined: 01 Apr 2010 Posts: 5
|
|
Posted: Mon Apr 05, 2010 9:12 pm |
|
|
I'm having another simple problem and I also connected MAX233 and used a serial cable instead of using PIC Kit's UART tool because I didnt trust the tool very much, but I am still having the problem.
Code: |
#include <33fj128gp802.h>
#fuses HS, NOWDT, PR, NOPUT
#use delay (clock=20M)
#use rs232(baud=9600, XMIT=PIN_B7, RCV=PIN_B6, ERRORS)
void main()
{
while(TRUE)
{
printf("Hello");
delay_ms(2000);
}
} |
On the Serial Port Monitor, what's happening is that "Hello" is being displayed only once when the program initially runs and then the program does nothing. However, if I print "Hel" or any other 3 characters then the program works fine as intended. As soon as I try to print 4 or more characters it doesn't work. I had this problem with PICKit's UART tool as well which is why I switched to a regular serial port instead. Any clues on what may be causing this odd behavior?
The PIC runs at 3.3v and MAX233 is powered up with 5V, I've connected output of MAX233 to PIC's 5V tolerable pins B6 and B7. |
|
|
sniffer
Joined: 01 Apr 2010 Posts: 5
|
|
Posted: Tue Apr 06, 2010 8:23 pm |
|
|
I tried to see if I could find anything from the .lst file. I noticed that the generated code are similar when I have printf("Hel") or printf("He"). But when I have printf("Hell") or more than 4 characters, then the .lst file is different.
I have pasted parts of the .lst file below for all 3 cases, could anyone please recompile my code using a different PCD compiler and see if you get the same kind of code for the 3 cases?
For printf("He):
Code: |
.................... while(TRUE)
.................... {
.................... printf("He");
00244: MOV.B #48,W0L
00246: MOV.B W0L,801
00248: CALL 200
0024C: MOV.B #65,W0L
0024E: MOV.B W0L,801
00250: CALL 200
.................... delay_ms(2000);
00254: MOV #7D0,W0
00256: CALL 224
.................... }
0025A: GOTO 244
.................... } |
For printf("Hel"):
Code: |
.................... while(TRUE)
.................... {
.................... printf("Hel");
00244: MOV.B #48,W0L
00246: MOV.B W0L,801
00248: CALL 200
0024C: MOV.B #65,W0L
0024E: MOV.B W0L,801
00250: CALL 200
00254: MOV.B #6C,W0L
00256: MOV.B W0L,801
00258: CALL 200
.................... delay_ms(2000);
0025C: MOV #7D0,W0
0025E: CALL 224
.................... }
00262: GOTO 244
.................... } |
For printf("Hell"):
Code: |
.................... while(TRUE)
.................... {
.................... printf("Hell");
00256: MOV #0,W1
00258: MOV W1,W0
0025A: CALL 200
0025E: INC W1,W1
00260: MOV.B W0L,801
00262: CALL 212
00266: MOV #3,W0
00268: CPSGT W1,W0
0026A: BRA 258
.................... delay_ms(2000);
0026C: MOV #7D0,W0
0026E: CALL 236
.................... }
00272: GOTO 256 |
Please let me know if you need more parts of the code. Thanks. |
|
|
Rohit de Sa
Joined: 09 Nov 2007 Posts: 282 Location: India
|
|
Posted: Thu Apr 08, 2010 9:29 pm |
|
|
My speculation: It looks like for 3 of less characters the compiler stores the characters 'inline'. #48, #65, and #6C correspond to 'H', 'e', and 'l'. For more than 3 characters, the code becomes more compact if the compiler creates a loop and accesses successive characters stored elsewhere.
Rohit |
|
|
gpsmikey
Joined: 16 Nov 2010 Posts: 588 Location: Kirkland, WA
|
|
Posted: Wed Dec 22, 2010 2:12 pm |
|
|
Quote: | I'm using PIC Kit 2 to power it up and the first thing I wanted to do is to use PICKit 2 UART tool |
Not sure if this applies here, but in a somewhat older readme for the PICkit2, on using the UART Tool I just came across, I found the following comment:
Quote: | IMPORTANT CONNECTION NOTES:
PICkit2 cannot supply Vdd when using the UART Tool. The PICkit 2 Vdd pin MUST be connected to the target UART Vdd or it will NOT work |
I just happened across this in doing some research on the UART tool also
http://ww1.microchip.com/downloads/en/DeviceDoc/PICkit%202%20Readme%20v2-40.txt
mikey _________________ mikey
-- you can't have too many gadgets or too much disk space !
old engineering saying: 1+1 = 3 for sufficiently large values of 1 or small values of 3 |
|
|
|
|
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
|