by Fred Maher
Dear James,
Before I get deep into the programmer you have kindly sent me I'd like to go over the more general topic of programming the 16F877 family.
I'm beginning to think that there is some sort of knowledge problem associated with the 16F877 chip. At first I had mentally assumed my lack of success as due to the typical learning curve. Delving into the atmosphere around this chip, things began to change a little as I realized that the problem was not mine alone and that the help to get you out of the mire was surrounded in mirk. Still even so, there are always two groups, those who have no problem and those who have (with the first timers making up the group in difficulties.)
In the present situation I get the idea that those of us with difficulties are in that state because there is absolutely no support literature on the PROGRAMMING PROCESS and the three ways to achieve this in the case of the chip under consideration.
I've been in touch with a lot of people and frankly it is very much a case of this is my way and it works.
Now as an engineer one of the basic tools when I am working that I use or create is documentation and there aint much of that flying around reference programming the 16F877 and ilk, so I feel that you gurus in the PICLIST should fill the partial vacuum. Also Micro chip has apparently documentation but not very complete.
My particular journey through this information desert has led me to gather together the information available on the PIC itself and then try and build the programmer available using the software available. So let me pass onto you my little hoard of programming savvy.
I just said there were various ways of programming these new generation PICs which are combinations of
Fine now for beginner you need something that is pretty foolproof as the typical start up scene is you blindly do all the things someone ( expert) says you should do and get that first " Hello world "program into the new widget and then proudly show it to your pet dog. You need to see something quickly.
Lets look at METHODS and PORTS then try and talk about which are the most suitable for beginners.
Definitely complicated for a beginner for two reasons.
a) The "program to load the program" concept with the necessary offsets sounds a little daunting for a beginner who wants something which can be programmed directly.
b) You have to program this bootloading program to load the initial program. This sounds even more off-puting and also encloses a logical paradox in the sense ... to get your first program going you need to have a working program...gotcha
This sounds really neat, just a single supply and you are there. Well the hidden snag is that the chip has to be brand new , factory fresh and in the default factory LVP configuration. If you don't get immediate results, get nervous and do an initial erase, which is bad bad bad; or even worse you start fiddling around with the options your programmer software gives you as default, then Murphy's law almost guarantees that you will have set the combination needed to wipe out the factory preinstalled configuration. So rule LVP out for the moment as well
HVP sounds like a retreat into the bad old days when it was the only way, so why chose it? There is one overpowering reason..... YOU CAN CONFIGURE WHAT EVER YOU WANT.. The good news enclosed in that line is that when you put your foot in it, code protect or what have you, then you can rub out and start anew. Get back to square one again so to speak.
So for me this is definitely the way to go to get started.
Now above we have also listed the two common ways to connect your PIC Programmer to your computer, the parallel or the serial port. At this point I should say either will do, however I didn't manage to get a serial port signal to program my PIC but yes I did do it with the signal from the parallel port.
Is there any difference? At first sight no because both load the data bit by bit into the 16F877. However there are some practical things like the serial port offers the possibility of powering the Programmer, the parallel port is very limited in this respect. The serial port also with a slower data transfer and larger output swing will take a bit longer to load the PIC but on the other hand will be more immune to noise and pulse reflections, and you can use a long cable between PC and Programmer.
Has the parallel port then no advantage? Well the noise tolerance is worse, the cable length is more critical but the programming loading can be faster providing the 16F877 can accept its program data with sufficient rapidity.
Anyway I was forced into deciding for the parallel port data transfer because of some gremlin on my serial ports.
Now if the above has been a bit anti-parallel port usage, maybe we can get round the mentioned problems with little effort.
The logical step is to see why the cable length is normally quoted by programmer authorsb as to be something like "not more than one foot" or some other short distance equally horrible as all your junk box cables are 3 meters long.
The IEEE specifications talks about a minimum of 10 meters normal, and up to 30m with precautions , being possible. Well I think 2 metres is a comfortable length and with semi-decent cable should not be too prone to noise capture. The parallel port o/p swings are not 0 to 5V but nearer 0 to 3V. However this in itself is more of an interface problem rather than a noise problem. The possible, and probable reflections need a little working on. Any bit of cable has wires, these wires are transmission lines when things start getting a bit faster. The basic transmission line property is that if you don't terminate in the correct impedance, then the pulse gets reflected back from the load towards the originating transmitter. If the mismatch is really bad, then the wire gets filled up with bouncing pulses all being about the size of the wanted one. The system data transfer gets lost. as it doesn't and can't know the difference between the wanted and the reflected data bits.
The solution is relatively simple as in our case we terminate each line where it enters the programmer with the IEEE specification impedance, which is about 470 ohms. No coils nor capacitors, no coaxial cable just a simple resistor! There is one little practical point to be aware of here. Some parallel port line driver output chips may have a little trouble sourcing the required current. After all the 3V high would mean 6ma per line and to keep costs down they may have used chips that can only drive a load with less current appetite. Well my own compromise here is that most line drivers can source 3ma so lets go less still and use say two milliamps. Then the terminating resistor needed is now increased to 1k5.
Is this enough to avoid the reflections? Well considering that the cable is no more than 2 meters long, yes it is enough protection for that length of cable.
Any other serious parallel port problems? Not really, except avoid running the pc to pcb cable along the mains wiring , though crossing at right angle should not be a problem.
Now although I name names below, I will not try and compare technical merits of each program for the simple reason I'm not qualified to do such a job.
Let's just say there are quite a few software programs on offer for the 16F877 written by famous net names such as:-
All good softwares, and all offering support for existing programming units. Unfortunately I got into a mess trying to adapt these softwares to the programmers I was building. I'm sure they are all good and that given a little time it was just a question of finding the write combination of programmer and software.
Yes I decided to build my own programmer to meet my own beginner needs and at the same time be capable of flexible operation. So the basic specification was very simple, just two little mods to the BJHV programmer, basically
The parallel port pins used depend obviously on the pins the programming software uses. So initially this was a little open as I tried various softwares. I eventually settled on the winpicprog by Nigel as it has a very useful window for fiddling about with the hardware settings. I was able to find a combination that worked with my BJ programmer
But I was by now building the programmer with one of those little battery eliminators that you plug directly into the wall socket and give you a selectable range of DC voltage output. . Now it turned out that the one I selected, a typical taiwan model, offered good filtering and load regulation. I was lucky as I have seen some really grotty products that are just recifiers with almost zero filtering.
Anticipating that sort of poor filtering, I built in two things to the programmer power supply. Good filtering and current limiting. You cab Spice simulate all off the performance , which I did. This power supply bit has to offer a good stabilized 5V dc output, ideally from a monolithic chip such as L7805 in the big metal format for really cool indestructible operation. it did it.
The next part was a little more involved, but not much. I wanted a light to go on when programming was in operation. The circuit shows how. Then there was the little matter of what programming voltage to use. Also how to apply it when needed to the 16F877.
I tried and managed to program the 16F877 with this Vpp voltage anywhere between 9 and 16 V before I read the microchip data sheet again, this time correctly and found to my horror that the absolute maximum voltage was 14V. But nothing had died so I settled on 13V, not that I am superstitious but it seemed about right . I built in a pot to change this stabilized output if a lower /different voltage were to be needed at some future date.
The parallel port data lines were all terminated with as we discussed earlier 1k5 resistors and the 74HCT573 used as a level shifter /buffer did exactly what it was supposed to do, change the 0 to 3V incoming pulses to 0 to 5V for onward routing to the PIC data and clock i/p's.
So that really winds up how to get your little PIC to market with no pain.
So James these are my thoughts on 16F877 programmers. I'd like one of your real experts to fill in the wooly bits and then maybe you could get it up on the beginners help section, because getting help on getting up and running is very sketchy , believe me. I f you want the final programmer theoretical circuit and PCB layout, it is all documented and built and working and at your disposition..
Cheers Fred
David A Cary Says:
Up: PIC Microcontroller Programmers http://massmind.org/techref/microchip/devprogs.htm
double up: PIC Microcontrollers http://massmind.org/techref/microchip
See:
Interested: