Here are some questions that someone may ask about the PIC. I try to present this information in question-answer form to be easier to remember.

 

What are the differences between PIC16F84 and PIC16F84A?

The main difference is that the PIC16F84 oscillator can run up to 10 MHz whereas the PIC16F84A oscillator can run up to 20 MHz. See this document for more extensive information.

Microchip company releases documents on the migration of different PIC microcontrollers and spots the differences between them. Dependent on your microcontroller, you must look if there is such a document for more extensive information.

 

What are the differences between PIC16C84 and PIC16F84?


PIC16C84 is the old version (was phased out 1998) and PIC16F84 is the new version.

It doesn't matter whether you buy PIC16C84 or PIC16F84, as long as you set power-up timer to ON instead of OFF when you program PIC16F84. If your programming utility has a special option for PIC16F84 which you want to use, then power-up timer is toggled automatically and therefore you should of course set power-up timer to OFF like you normally would.

Clarification:
If your PIC is a PIC16C84 then set device type = 16C84 and set power-up timer (P.U.T.) to OFF
If your PIC is a PIC16F84 then set device type = 16C84 and P.U.T. to ON
or set device type = 16F84 and P.U.T. to OFF

You might now ask why we don't just tell everyone to always set power-up timer to OFF and set "device type" to the type which the chip actually is. That would be less confusing, wouldn't it? Well, the reason is that an older version of PIP-02 (1.14) handled device type 16F84 incorrectly, therefore you had to use the 16C84 setting and instead compensate for that by altering power-up timer manually. Also, some programming utilities only have a setting for device type 16C84, not 16F84.

Why did Microchip invert power-up timer in PIC16F84? Well, that's the question everyone is asking, but I have never heard a good explanation...

PIC16F84 has 28 more bytes of data memory. This means it would be possible to make HEX files which would take advantage of the bigger memory (such HEX files would then only work on 16F84 and not on the old 16C84). However, it has been a year singe 16F84 was released, and all HEX files today are still made for 16C84, which means that they work on both 16C84 and 16F84. It seems as if the difference is so small that developers don't want to bother using these few extra bytes and thereby cause problems for users of 16C84 cards... Some HEX files are released as "16C84" or "16F84", but the only difference is the way power-up timer has been SUGGESTED (i.e. the way it is selected by default, when the HEX file is loaded). The extra 28 bytes are not utilised in the 16F84 version.

PIC16F84 has a code-protect function that is impossible to bust using one of those old PIC-programmers with built-in PIC buster. However, it has been reported that other methods can be used to steal the code from a code protected PIC16F84. If you have two PIC16F84 programmed with the same software, and 150 UK Pounds, professional crackers can get the software extracted from a code protected PIC16F84.

F in 16F84 stands for "flash", which is due to the technique used in the memory. Both memory types can be reprogrammed in the same way. The only important advantage with flash memory is that flash sounds cooler than CMOS. :-)

Microchip prefers everyone to buy 16F84 because it is cheaper to manufacture. In small amounts, 16C84 is a lot more expensive. Microchip have threatened to stop 16C84 production many times, but they haven't done so yet...

Apart from these differences, some similarities between these PICs are that no special programmer is required, no special PCB is required (both PICs are pin-compatible) and no special HEX files are required.

 

Why do some programmers use embedded firmware and some others don't?

Some programmers use microcontrollers with embedded firmware in them. In such cases, the microcontroller is the one that handles the communication with the slave device (the device that needs to be programmed). This way is more reliable in terms of communication errors in comparison to using directly a port of a PC.

Depending on the protocol used in programming the device, some times it is absolutely necessary to use a microcontroller in the programmer.
For example, the Atmel AT89S52 requires a MASTER SPI interface as the programmer, which is not available in a USB port. Despite this, it could be adapted with a parallel or serial port without the need for another microcontroller.

 

Can I use a crystal oscillator module instead of a crystal resonator?

Yes you can. The picture below shows a typical example. A small 10nF decoupling capacitor could be added from the +V to GND near the crystal oscillator module but this is not mandatory. You also need to change the microcontroller configuration settings in your programming software, to use an external oscillator instead of a crystal. Also note, some crystal oscillator modules have an enable pin, so you have to deal with it, if this is the case.

 

What does "Program verify" exactly do?

Most programming software include a "Program verify" option. Program verification assumes you have already programmed your PIC using a program that you have loaded into your programming software buffer. All program verification does is: it reads the program that has been burned into the PIC and it compares it with the program that is loaded into the buffer of the programming software, to find any differences. Program verification ensures that the data written in the PIC is an exact copy of the data shown in the programming software buffer.