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 support@ccsinfo.com

problems setting clock on 18F2550

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







problems setting clock on 18F2550
PostPosted: Wed Jun 28, 2006 9:29 pm     Reply with quote

Hey,

hopefully someone can help me figure out what's going on with this problem..

I just started using the 18F2550 (I've been using the PCH compiler with MPLAB 7.0 and the ICD2), and I'm having problems setting the clockrate on the chip. I have an olimex development board with a 20Mhz crystal.

Attempting to run the following code fails (nothing happens):
Code:

#include <18F2550.h>
#fuses HS, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock=8000000)

void main()
{

while(1)             
  {
   delay_ms(100);
   output_high(PIN_A0);
   delay_ms(100);
   output_low(PIN_A0);
  }

}


whereas, if I specify the 18F2520.h file, and use #INTRC -- it blinks the led...
Code:

#include <18F2520.h>
#fuses INTRC, NOWDT, NOLVP
#use delay(clock=8000000)


void main()
{

while(1)             
  {
   delay_ms(100);
   output_high(PIN_A0);
   delay_ms(100);
   output_low(PIN_A0);
  }

}


I've tried specifying 20Mhz, as well as 8Mhz clockrates. fuse INTRC doesn't seem to be specified for 18F2550, and with fuse HS the chip just sits there.

Looking at the 18F2550.h file, LP, XT, HS, RC, EC, EC_IO and RC_IO are specified but none seem to work.

Also, the project is set up as a 18F2550 project.

Am I missing something simple?[/code]
epideath



Joined: 07 Jun 2006
Posts: 47

View user's profile Send private message

PostPosted: Wed Jun 28, 2006 11:02 pm     Reply with quote

You could try changing the delay setting to match the crystal you say that is used (20MHz) could be that things are just happening too fast to see.

#use delay(clock=20000000)
instead of
#use delay(clock=8000000)

Regards
sandrewww
Guest







PostPosted: Thu Jun 29, 2006 9:08 am     Reply with quote

yeah, i did try setting the clockdelay to 20000000 but it didn't help. i also looked at the pins on an oscilloscope and it didn't work.

does anyone know why pieces of code on the forum/examples use #HSPLL, but when try to specify it, the compiler complains at me?
rwyoung



Joined: 12 Nov 2003
Posts: 563
Location: Lawrence, KS USA

View user's profile Send private message Send e-mail

PostPosted: Thu Jun 29, 2006 9:14 am     Reply with quote

Did you check the LST file to see if the fuses being programmed match those of the datasheet?
_________________
Rob Young
The Screw-Up Fairy may just visit you but he has crashed on my couch for the last month!
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Thu Jun 29, 2006 1:37 pm     Reply with quote

Post the model number of your Olimex board. Post a link to the
webpage that has the schematic for that board.


Also, you keep putting a '#' in front of fuse settings, in your posts.
There is no '#' symbol in the constants. It's just INTRC or INTRC_IO.
sandrewww
Guest







PostPosted: Thu Jun 29, 2006 8:27 pm     Reply with quote

the schematic for the olimex board is at:
olimex.com/dev/images/pic-p28-sch.gif

yes I know the fuses don't have '#'s in front of them, sorry (I was thinking of the '#fuse' declaration/preproc syntax)

is it possible this is a compiler version problem? I have PCH 3.214.

I tried compiling the code you posted at ccsinfo.com/forum/viewtopic.php?p=62694 but it doesn't work -- the compiler also says that the 'NOBADEN' fuse does not exist.

Quote:
Unknown keyword in #FUSES "NOBADEN"


Maybe you meant it more as an example though..

I haven't been able to verify if the registers are being set correctly (in the .LST file), mainly because I've never set it via the register before and I'm not familiar with the asm/addresses to do it.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Thu Jun 29, 2006 9:50 pm     Reply with quote

Does your Olimex board have the 20 MHz crystal installed ?
The photo on at the following link shows a crystal right below the
28-pin DIP socket. Is it installed on your board ?
http://olimex.com/dev/pic-p28.html

Did the board come with the crystal installed, or did you install it ?

Can you read the frequency markings on the top of the crystal ?
Is it 20 MHz ?

Also, look on the back of the board, near the pads for the crystal.
Can you see two surface-mount capacitors there ?
They should look similar to this:
http://rocky.digikey.com/WebLib/Panasonic/Web%20Photos/MLCC%20%200805%20%20T.6.jpg
asmallri



Joined: 12 Aug 2004
Posts: 1634
Location: Perth, Australia

View user's profile Send private message Send e-mail Visit poster's website

PostPosted: Thu Jun 29, 2006 11:38 pm     Reply with quote

sandrewww wrote:

I tried compiling the code you posted at ccsinfo.com/forum/viewtopic.php?p=62694 but it doesn't work -- the compiler also says that the 'NOBADEN' fuse does not exist.

Quote:
Unknown keyword in #FUSES "NOBADEN"


The keywords are contained in the header file 18F2550.h

For this processor the keyword is NOPBADEN

Also try adding the NOBROWNOUT fuse.

This particular PIC has the embedded USB peripheral and, as a result, it has a different clock structure to the general run of the mill PIC18F. You have specified the HS mode but you also need to configure the prescaler, and select the clock source.
_________________
Regards, Andrew

http://www.brushelectronics.com/software
Home of Ethernet, SD card and Encrypted Serial Bootloaders for PICs!!
sandrewww



Joined: 29 Jun 2006
Posts: 8

View user's profile Send private message

PostPosted: Wed Jul 05, 2006 6:49 pm     Reply with quote

Well,

'NOPBADEN' doesn't work either.

I tried using the fuse setup from a project I found online:
http://www.semifluid.com/PIC18F2550_usb_hid_oscilloscope/18F2550%20USB%20HID%20CRC%20Oscilloscope.c

He used the CCS compiler and same PIC.

However I can't use the following fuses from his code, they aren't in my 18F2550.h file:
VREGEN,CPUDIV1,PLL5,USBDIV

fuses in my .h file:
Code:
Fuses: LP,XT,HS,RC,EC,EC_IO,H4,RC_IO,PROTECT,NOPROTECT,OSCSEN
Fuses: NOOSCSEN,NOBROWNOUT,BROWNOUT,WDT1,WDT2,WDT4,WDT8,WDT16,WDT32
Fuses: WDT64,WDT128,WDT,NOWDT,BORV20,BORV27,BORV42,BORV45,PUT,NOPUT
Fuses: CPD,NOCPD,NOSTVREN,STVREN,NODEBUG,DEBUG,NOLVP,LVP,WRT,NOWRT
Fuses: WRTD,NOWRTD,WAIT,NOWAIT,MCU,CPU,CPU_BB,EMCU,CCP2B3,CCP2C1
Fuses: WRTC,NOWRTC,WRTB,NOWRTB,EBTR,NOEBTR,EBTRB,NOEBTRB,CPB,NOCPB
Fuses: MCLR,NOMCLR,E4_IO,E4_SW_IO,H4_SW,WDT256,WDT512,WDT1024
Fuses: WDT2048,WDT4096,WDT8192,WDT16384,WDT32768,ECCPE,ECCPH,CCP2E7


no mention of PLL modes, or anything. it looks like i'm legitimately missing stuff. anyone know why?

PCM Programmer: yes the crystal is installed, it came that way, 20mhz on the label, capacitors are also installed -- also came that way

Thanks for the responses,
-Andrew
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Wed Jul 05, 2006 10:52 pm     Reply with quote

I took your program and compiled it with PCH vs. 3.249, programmed
it into an 18F4550 and ran it on a PicDem2-Plus board, with a 20 Mhz
crystal. It worked. The 18F4550 is the same as the 18F2550 that
you're using, except that it's in a 40-pin package instead of 28-pin.
Code:

#include <18F4550>
#fuses HS, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock=20000000)

void main()
{

while(1)             
  {
   delay_ms(100);
   output_high(PIN_A0);
   delay_ms(100);
   output_low(PIN_A0);
  }

}


I don't have your version of the compiler to test (PCH vs. 3.214).
Since you have such an early version, it's possible that the start-up
code isn't properly configuring Port A for digital i/o. You can test
this by adding the lines shown in bold below. Those lines will
configure all analog pins for digital i/o. See if this makes it work.
Quote:

#include <18F4550>
#fuses HS, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock=20000000)

#byte ADCON1 = 0xFC1

void main()
{

// Set Analog pins to all be digital i/o.
ADCON1 = 0x0F;

while(1)
{
delay_ms(100);
output_high(PIN_A0);
delay_ms(100);
output_low(PIN_A0);
}

}


With regard to the missing fuses, your version of the compiler is fairly old.
Vs. 3.214 came out in early December 2004. They've added a lot more
fuses since then. Here's some of them:
Code:
//////// Fuses: HSPLL,PLL1,PLL2,PLL3,PLL4,PLL5,PLL6,PLL10,PLL12,CPUDIV1
//////// Fuses: CPUDIV2,CPUDIV3,CPUDIV4,USBDIV,NOUSBDIV,VREGEN,NOVREGEN
jb
Guest







PostPosted: Thu Aug 03, 2006 5:53 am     Reply with quote

for use of undefined fuse ( old version ) you have to edit your device in Tools -> Devices editor -> chose it ( pic18f4550 for example) -> Edit
if the fuse is not known for example HSPLL you have to define it in the upper right corner you have a table , ADD the name of the FUSE : for HSPLL write HSPLL , MASK 0F00 ,VALUE 0E00 , CW 1!
that all.

So you can define your own fuse !!

An other way is to download the trial file of ccs compier , install it in an other folder , then copie the new devices.dat into your old folder and still use your old compiler.

It works for me.
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