# Useful / useless electronic components

#### Motanache

Joined Mar 2, 2015
540
What components have purchased and proved useful / useless?

I have a Raspberry Pi and was not helpful. It is still very popular.
I did not understand why.

At the same price as Raspberry Pi you can buy a tablet. It has in addition touch display, WiFi, battery.
And a better processor.

Raspberry Pi say that is made for automation. Has those ports GPIO.
But anyway those pins can be switched at to small speed that a simple USB device that would have solved the problem.

#### Robin Mitchell

Joined Oct 25, 2009
819
@Motanache I totally understand where you are coming from. I can't see the point of a Pi and instead use PICs!
The most useless thing I bought was an EEPROM programmer. It was useless not because I did not need it but because it only did serial EEPROMS (head banging against the wall). I needed a parallel EEPROM programmer!

The most useless component I have bought where these Schottky rectifier diodes which have turned out to be useless as I stupidly did not check the max reverse voltage. When I connected it up in my AC rectifier circuit it went boom!

The second most useless part I got were these ferrite beads. Why did I buy them???? Who knows! But they are pointless (for my needs anyway).

#### AlbertHall

Joined Jun 4, 2014
12,190
Back in the dawn of time I bought a UV EEPROM eraser. It also did windowed PICs. Very shortly thereafter flash chips arrived and the eraser was consigned to the back of a cupboard and I haven't found any use for it since.

#### DickCappels

Joined Aug 21, 2008
9,520
I don't think I ever bought useless parts -sooner or later just about everything comes in handy, but it took a long time to learn not to buy very many memory chips can controllers because you can count of price drops and obsolescensce.

@AlbertHall in the countryside around here people run UV lamps over tubs of water. Insects buzz around and by morning there are plenty of bugs floating in the tubs. Some are valuable enough to sell, most of them end up in a skillet on the kitchen stove. Protein is where you find it.

#### Robin Mitchell

Joined Oct 25, 2009
819
@AlbertHall in the countryside around here people run UV lamps over tubs of water. Insects buzz around and by morning there are plenty of bugs floating in the tubs. Some are valuable enough to sell, most of them end up in a skillet on the kitchen stove. Protein is where you find it.
I wanted to say "eeew groosss" but then I thought about it. That food is considered nasty because that's what we are taught from a young age. When you think about it (from the perspective that insects are an acceptable food source), the idea of a UV bulb and tub of water sounds like the "free energy" of food!

#### joeyd999

Joined Jun 6, 2011
4,625
I don't think I ever bought useless parts -sooner or later just about everything comes in handy...
I should let you peruse my superfluous parts cabinet...I think you'd have a field day.

#### MrChips

Joined Oct 2, 2009
27,702
I paid $400 for a 5¼" floppy drive. I haven't worked it into one of my projects yet. I have to work through my supply of 8" floppy drives first. #### joeyd999 Joined Jun 6, 2011 4,625 I paid$400 for a 5¼" floppy drive. I haven't worked it into one of my projects yet.
Does it look like this?

#### nsaspook

Joined Aug 27, 2009
10,713
What components have purchased and proved useful / useless?

I have a Raspberry Pi and was not helpful. It is still very popular.
I did not understand why.

At the same price as Raspberry Pi you can buy a tablet. It has in addition touch display, WiFi, battery.
And a better processor.

Raspberry Pi say that is made for automation. Has those ports GPIO.
But anyway those pins can be switched at to small speed that a simple USB device that would have solved the problem.
I completely disagree about the Raspberry Pi. The simple fact is it takes actual programming skills to make the RPi into something more than a tablet. The RPi3 is a very powerful embedded programming platform at the low-level hardware level but most people don't want to invest the time or effort to use it in the most efficient bit fiddling manner. If your task needs are at the level of a 8 or 16-bit PIC then the RPi is the wrong platform. I've designed several control systems that use the RPi with custom Linux software for DAQ rates of up to 500,000 16-bit samples a second using external SPI interfaces while also running the standard Linux user package.

You can toggle a gpio at around 25 MHz and easily bit bang at 2.5 at near bare-metal in the Linux kernel context.

Last edited:

#### ronv

Joined Nov 12, 2008
3,770

#### crutschow

Joined Mar 14, 2008
31,137
At the same price as Raspberry Pi you can buy a tablet.
You are mixing apples and oranges.
A Raspberry Pi is a small general purpose computer with multiple types of I/O that can be programmed for many different tasks.
A tablet is very limited as to what it can do as compared to the Pi.
But if the tablet does all that you need, then a Pi would make no sense.

#### Motanache

Joined Mar 2, 2015
540
You can toggle a gpio at around 25 MHz and easily bit bang at 2.5 at near bare-metal in the Linux kernel context.
A PIC32 can run at 200MHz
Four pulses per instruction.
If you need 2 instructions to read a port and save it's value, you can make Logic analyzer at 25MS / s

https://www.raspberrypi.org/forums/viewtopic.php?f=37&t=7696

"110ns seemed pretty slow for a 700MHz CPU in a tight loop to me, but I guess the GPIO and counter accesses may be over pretty slow buses"

10MS/s

#### Motanache

Joined Mar 2, 2015
540
If so useful is Raspberry Pi I wanted to sell it.
But the price for it second hand dropped more.

I would like to try to solder wires close to the processor. To use somehow databus as port.

#### nsaspook

Joined Aug 27, 2009
10,713
A PIC32 can run at 200MHz
Four pulses per instruction.
If you need 2 instructions to read a port and save it's value, you can make Logic analyzer at 25MS / s

https://www.raspberrypi.org/forums/viewtopic.php?f=37&t=7696

"110ns seemed pretty slow for a 700MHz CPU in a tight loop to me, but I guess the GPIO and counter accesses may be over pretty slow buses"

10MS/s
The problem is Linux is NOT a realtime OS with bare-metal access to GPIO at the user level. At the kernel level you can have direct memory-mapped register level access like in PIC32 running bare-metal supervisor level. The PIC32 is a microcontroller designed and optimized for bit-banging I/O and the BCM2835 is more of a SOC supervisor designed to handle PIC32 type controllers in an OS context. They have overlapping but not directly competing universes.

RPi Kernel driver GPIO example code:
C:
/*
* pullUpDownCtrl:
* Control the internal pull-up/down resistors on a GPIO pin
* The Arduino only has pull-ups and these are enabled by writing 1
* to a port when in input mode - this paradigm doesn't quite apply
* here though.
****************************************************************************
*/

static void pullUpDnControl(struct comedi_device *dev, int32_t pin, int32_t pud)
{
struct daqgert_private *devpriv = dev->private;
int32_t *pinToGpio = devpriv->pinToGpio;

pin = pinToGpio [pin];
iowrite32(pud & 3, (__iomem uint32_t*) dev->mmio + GPPUD);
udelay(5);
iowrite32(1 << (pin & 31), (__iomem uint32_t*) dev->mmio
+ gpioToPUDCLK [pin]);
udelay(5);

iowrite32(0, (__iomem uint32_t*) dev->mmio + GPPUD);
udelay(5);
iowrite32(0, (__iomem uint32_t*) dev->mmio + gpioToPUDCLK [pin]);
udelay(5);
}

/*
* pinMode:
* Sets the mode of a pin to be input, output
************************************************************
*/

static void pinModeGpio(struct comedi_device *dev,
int32_t pin,
int32_t mode)
{
int32_t fSel, shift;

pin &= 63;
fSel = gpioToGPFSEL [pin];
shift = gpioToShift [pin];

if (mode == INPUT) /* Sets bits to zero = input */
& ~(7 << shift),
(__iomem uint32_t*) dev->mmio + fSel);
else
if (mode == OUTPUT)
& ~(7 << shift)) | (1 << shift),
(__iomem uint32_t*) dev->mmio + fSel);
}

static void pinModeWPi(struct comedi_device *dev,
int32_t pin,
int32_t mode)
{
struct daqgert_private *devpriv = dev->private;
int32_t *pinToGpio = devpriv->pinToGpio;

pinModeGpio(dev, pinToGpio [pin & 63], mode);
}

/*
* digitalWrite:
* Set an output bit
*****************************************************************
*/

static void digitalWriteWPi(struct comedi_device *dev,
int32_t pin,
int32_t value)
{
struct daqgert_private *devpriv = dev->private;
int32_t *pinToGpio = devpriv->pinToGpio;

pin = pinToGpio [pin & 63];
if (value == LOW)
iowrite32(1 << (pin & 31), (__iomem uint32_t*) dev->mmio
+ gpioToGPCLR [pin]);
else
iowrite32(1 << (pin & 31), (__iomem uint32_t*) dev->mmio
+ gpioToGPSET [pin]);
}

static void digitalWriteGpio(struct comedi_device *dev,
int32_t pin,
int32_t value)
{

pin &= 63;
if (value == LOW)
iowrite32(1 << (pin & 31), (__iomem uint32_t*) dev->mmio
+ gpioToGPCLR [pin]);
else
iowrite32(1 << (pin & 31), (__iomem uint32_t*) dev->mmio
+ gpioToGPSET [pin]);
}

/*
* Read the value of a given Pin, returning HIGH or LOW
*******************************************************************
*/

int32_t pin)
{
struct daqgert_private *devpriv = dev->private;
int32_t *pinToGpio = devpriv->pinToGpio;

pin = pinToGpio [pin & 63];
if ((ioread32((__iomem uint32_t*) dev->mmio + gpioToGPLEV [pin])
& (1 << (pin & 31))) != 0)
return HIGH;
else
return LOW;
}

int32_t pin)
{

pin &= 63;
if ((ioread32((__iomem uint32_t*) dev->mmio + gpioToGPLEV [pin])
& (1 << (pin & 31))) != 0)
return HIGH;
else
return LOW;
}

/*
* piBoardRev:
* Return a number representing the hardware revision of the board.
* Revision is currently 1,2 or 3. -1 is returned on error.
SRRR MMMM PPPP TTTT TTTT VVVV

S scheme (0=old, 1=new)
R RAM (0=256, 1=512, 2=1024)
M manufacturer (0='SONY',1='EGOMAN',2='EMBEST',3='UNKNOWN',4='EMBEST')
P processor (0=2835, 1=2836)
T type (0='A', 1='B', 2='A+', 3='B+', 4='Pi 2 B', 5='Alpha', 6='Compute Module')
V revision (0-15)

1010 0010 0001 0000 0100 0001
SRRR MMMM PPPP TTTT TTTT VVVV

S=1 new scheme
R=2 1024 MB
M=2 EMBEST
P=1 2836
T=4 Pi 2 B
V=1 1
*********************************************************************
*/

static int32_t piBoardRev(struct comedi_device *dev)
{
struct daqgert_private *devpriv = dev->private;
int32_t r = -1, nscheme = 0;
static int32_t boardRev = -1;

if (boardRev != -1) /* skip if already detected */
return boardRev;

if (devpriv->RPisys_rev & 0x80000000)
dev_info(dev->class_dev, "over-volt bit set\n");
if (devpriv->RPisys_rev & 0x800000) {
nscheme = 1;
r = devpriv->RPisys_rev & 0xf;
dev_info(dev->class_dev, "RPi new scheme rev %x, "
"serial %08x%08x, new rev %x\n",
devpriv->RPisys_rev, system_serial_high,
system_serial_low, r);
} else {
r = devpriv->RPisys_rev & 0xff;
dev_info(dev->class_dev, "RPi old scheme rev %x, "
"serial %08x%08x\n",
devpriv->RPisys_rev, system_serial_high,
system_serial_low);
}

if (nscheme) {
switch (r) {
case 1:
boardRev = 3;
break;
case 2:
boardRev = 3;
break;
default:
boardRev = -1;
}
} else {
switch (r) {
case 2:
case 3:
boardRev = 1;
break;
case 0:
case 1:
boardRev = -1;
break;
default:
boardRev = 2;
}
}

dev_info(dev->class_dev, "driver gpio board rev %i\n",
boardRev);
dio_conf = boardRev; /* set module param */

return boardRev;
}

Last edited:

#### AlbertHall

Joined Jun 4, 2014
12,190
I am just designing a circuit where I needed a 1mA constant current so I was thinking about the standard single transistor version when I remembered something from about 30 years ago. Didn't I have some 1mA constant current 'diodes' from way back when?
Yes I did: five off J505
That's the problem with junk. You never know when you will need it.

#### OBW0549

Joined Mar 2, 2015
3,566
That's the problem with junk. You never know when you will need it.
Yes, you do: you'll need it right after you've thrown it away.

#### nsaspook

Joined Aug 27, 2009
10,713
Yes, you do: you'll need it right after you've thrown it away.
Exactly. We have this guy who has the special talent to junk exactly the part that will be needed a few weeks later. I wish the guy could pick lotto numbers.

Last edited:

#### GopherT

Joined Nov 23, 2012
8,009
Same when we discontinue products in our portfolio. The best way to get rid of dead inventory is to announce that it is discontinued - poof, it is gone. Sometimes we have to make an extra "final" batch.