Many Arduinos are based on the Atmega 328 P chip. Note that P. If you buy raw chips be sure the P is present. When you look up “Atmega328” at a site like Digikey the P and non-P versions are side by side and you might just go for the cheaper one without noticing the difference. You will be sucking persimmons if you’re missing the P. I am now a relative and reluctant expert about working around missing Ps. One might say I’m P‘ing into a pot with information I wish I didn’t have. Actually, it was many months ago that I accidentally bought some P-challenged Atmega328 chips. But it was only today that I realized I was down to the bottom of the barrel and forced to replace a P with a non-P in an Arduino Uno, and that situation can best be spelled PO.
THIS CHIP BELOW IS THE Atmega328P YOU WANT:
THIS CHIP ABOVE IS THE Atmega328 CHIP YOU DO NOT WANT. Notice how you can’t read the markings? That’s an accidental hint about which is the correct part, but also indicative of the apparent conspiracy the chip makers are involved in to make sure non-machines (i.e. us) can’t read the markings in ordinary conditions. Both chips were close to flat, but the bottom one was obviously not flat (or tilted with respect to the light source) enough!!!
Postscript: Making a 328 chip run in an Uno is a total Pain. I should probably document that some place to save the next person some trouble. However once it’s done the fact that it’s the “wrong chip” is no longer visible if you’re using the bootloader to program it.
3 thoughts on “Friends Don’t Let Friends Buy P-poor Atmega328 chips”
I made this mistake just last month and ordered ATMEGA1284 chips without the “P”. Can’t get the boot loader on them as the device signature is different. Thanks for this warning.
I use non-P chips all the time. Well maybe not all the time, but frequently enough. The only difference that I’m aware of (besides the signature) is very slightly lower power consumption in sleep states, and brownout resets are handled a little differently. Getting the bootloader on it should just mean a different parameter or or avrdude.conf entry, but after that, it should work.
Hi Jon. This blog thing wasn’t written for you. 🙂 You’re an embedded engineer who uses the Atmel Factory IDE. For you a lot of the time there is very little difference between one Atmega/ATTiny family member and another with respect to programming. And, as you say, sometimes the “non-P” chip vs P spec differences are important to take into account and take advantage of (if in no other way, the difference in cost).
But beginners constrained by use of the Arduino IDE don’t have it so good. Adding an entry to avrdude.conf is part of the solution, but not all of it (there’s the very poorly documented file boards.txt and changing either of these files requires privileges, use of an editor, etc).
So there’s a lot of room for a in-depth treatment of this subject, and I can see how it would appear to be a non-issue to you.