Advantages of Arduino Uno over PIC18F4550

And you get this friendly community as a resource to help you out.

And many many library's where others have done all the hard work for you for free

The AVR also has better (well more useful) hardware timers (PWM, counters, interrupts etc).

Hardware wise the two chips aren't that different. The real difference is having GCC on one side vs one-C-dialect-per-(costly)-compiler on the other.

IIRC there's an arduino-like board which uses PIC mcus. Don't know what development environment / compiler they require though.

There's a board called the "USB Bit-whacker" that is very close to the Arduino in concept. Plugs into USB and has a bootloader for downloading code.

Arduino has the high-quality C/C++ compiler, and the simplified IDE, and targets a different audience.

I wonder - does the Arduino/avr compiler do optimizations?

Also, I've used Microchip free MPLAB and the free C compiler for the PIC24 chips, and MPLAB
is much more difficult to get setup properly than the Arduino IDE, and sometimes you go around
in circles trying to figure out certain things, like how the darn directories and path connections
work. Much higher learning curve.

Also, with MPLAB you usually need a chip programmer like the PICKIT2, whereas Arduinos all
come pre-programmed with bootloaders so you don't need a programmer.

Also, with Arduino, you have many functions, like I2C, SPI, Serial, on and on, already written,
whereas you have to do all that stuff yourself for PICs. There are some libraries for the PICs
around, but I found them to be almost inscrutable to try and use.

To put it into historical perspective, Arduinos are as easy to use as the original Parallax Basic
Stamps, whereas using PICs is more like buying the raw chips Parallax used to make the
Stamps, and you pretty much have to do everything yourself.

I started playing with micro controllers about one year ago. I originally planned to buy a couple of pic chips. Until I took a good look at the software/libraries available and compared it to Arduino. The learning curve for pics is a lot steeper. I'm sticking to Arduino/AVR, if you outgrow the Arduino IDE you can always use your favourite editor and use gcc-avr to compile your programs.
This very forum also played a big role. I know there is always someone willing to help when I get stuck. I have learned a lot just by reading the programming section.

I wonder - does the Arduino/avr compiler do optimizations?

The arduino platform just uses an AVR adapted GNU GCC open source compiler which is an independent open souce group/project, and yes it offers several levels of optimization.

http://gcc.gnu.org/

Lefty

I shouldn't think GCC itself would have many optimizations, as those are usually added on
for the specific chip architectures the compiler is running on. So maybe the AVR GCC people
added them on.

I believe the Microchip C compilers are also based upon GCC, so they give away the non-optimized
versions, but they charge a lot for the versions they optimized in house for their own chips. But
this may all be scuttle-butt too.

All in all, however, for most applications, I doubt that most people really need to worry about this.

I'm sticking to Arduino/AVR, if you outgrow the Arduino IDE you can always use your favourite editor and use gcc-avr to compile your programs.

The other thing about Arduino is, there is an easy pathway when you need more processing power,
with boards like the DUE and misc 3rd party boards that use 32-bit processors, but which still use
the Arduino environment.

I believe the Microchip C compilers are also based upon GCC,

This is interesting. Do you have any links ? Thanks.

oric_dan(333):
I wonder - does the Arduino/avr compiler do optimizations?

Yes.

(Take a look at some disassembled output if you don't believe me...)

tuxduino:

I believe the Microchip C compilers are also based upon GCC,

This is interesting. Do you have any links ? Thanks.

This page says "GNU-based, open source code (except PIC18)".

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en536656

CrossRoads:
And you get this friendly community as a resource to help you out.

I don't think you can overstate how useful that is, especially for those wading into hobby electronics with microcontrollers for the first time. The scale of the community, and the associated mass of tutorials & libraries & instructables & online/printed support documentation has been crucial to me. Hard to believe 13 months ago I didn't even know the name Arduino - the community leg-up is the difference.

Having said that, it's probably not the best place to get an unbiased and balanced response to the OP's question :slight_smile:
Geoff

The PIC24, PIC30, PIC33 (all 16bit cpus) use a gcc-based compiler.
The PIC32 (32bit MIPS-core cpu) uses a gcc-based compiler. (and has an Arduino-like board and environment available in the form of the "ChipKit" products.)
Both of those can use free C compilers that produce reasonably good code. The MIPS CPU in particular has been supported outside of the Microchip range for quite a long time; it would be difficult to get it to produce bad code.

The PIC10, PIC12, PIC16, and PIC18 8-bit CPUs use an entirely different compiler. The free version from Microchip, for these CPUs, rather than being code-size limited like many free compiler versions, instead turns off optimization. ALL optimization; examples of spectacularly bad code have been posted. (I don't understand it. Microchip has other examples of quite reasonable behavior (in particular, their IDE runs on Windows, Mac, and Linux.) I have heard (but not confirmed) that the free USB code that microchip provides does not fit in the target CPU when compiled with the free compiler, for example.

I shouldn't think GCC itself would have many optimizations

You would be wrong. Many things can be optimized well above the specifics of code generation for any particular CPU. And I gather that one of the strengths of gcc is that they have implemented an abstraction of a cpu that makes it easy to add new CPUs and "instantly" get reasonable code. (In this case it doesn't matter much, because the 8-bit PIC architecture is SO far NOT compatible with that abstraction, and (essentially) could not possible be supported by gcc at all.)

Has anyone tried using an Arduino to program a PIC microchip?

It looks like you did no research before adding your question to this topic.

There are some current Topics on this subject including one in this Microcontrollers section.

...R

Robin2:
It looks like you did no research before adding your question to this topic.

There are some current Topics on this subject including one in this Microcontrollers section.

...R

I actually tried, but the word "pic" is just too widely used to find anything worthwhile... But I guess from your response this is possible. I've never worked with PIC chips, and in fact, only started using / programming Arduino's about 2 months ago. This is all very new to mew and I thought I'd try out the PIC route as well and was wondering if I could use an Arduino to program a PIC chip

I had assumed you would see this Topic PIC uC - Microcontrollers - Arduino Forum without any searching.

It did take me a while to find the other Topic I had in mind (and I only found it because I had a vague recollection that I had commented on it PIC micro-controller vs Arduino - Microcontrollers - Arduino Forum. This one probably has more useful info.

The Arduino search tool is useless. Use Google and confine it to site:arduino.cc

In short there seem to be plenty of opportunites to use PICs and whether you should or not is more a matter of religion. Personally I don't care, but the Arduino system is easy to use so I don't have any immediate need to try the PIC alternatives.

...R

Well i know which one i'd go with, but the Uno is useful for quick prototyping and has a larger community, I do prefer MPLab overall as it's a one stop IDE covering the whole Microchip range, right now though im playing with rasp pi, GPIO's are limited but when combined with an atmega328 as an i2c slave it works well