Motivation

In meiner Bastelkiste liegen viele Integrierte Schaltungen (IC) herum. Neue unbenutzte, schon einmal in einem Projekt benutzt, ausgelötet, … Aber funktionieren die noch?

Die meisten sind Logik-ICs. Die sollte man doch mit einem μC einfach testen können.

Foto des Aufbaus

In­halts­ver­zeich­nis

Motivation

Übersicht

Anleitung

Hardware

Implementierung

Download

Verbesserungsideen / Fehler

Software

Hardware

Erweiterungen

LED-Test


Übersicht

Mit dem IC-Tester können überprüft werden:

Ein Windows-PC dient zur Erfassung der IC-Daten, der Testvorschriften und der Testdurchführung. Er steuert über die serielle Schnittstelle einen μC an, der für die Einstellung der logischen Pegel am zu überprüfenden IC sorgt, diese auch wieder ausliest und zurück an den PC sendet. Die eingelesen Werte werden vom PC mit den Erwartungswerten verglichen.

Einen μC mit genügend I/O-Pins zur Ansteuerung der 28-Pins der ZIF-Fassung habe ich nicht gefunden. Aber es gibt I/O-Expander, die sich zur Port-Erweiterung nutzen lassen. Mit einem MCP23017 habe ich  schon einmal gearbeitet. Der stellt 16 GPIO zur Verfügung, die per I²C angesteuert werden. Zwei Stück dieses Typs werden von einem Arduino Nano angesteuert (aber ... s. Verbesserungsideen).

Die Details zu diesem Projekt sind recht umfangreich. Darum habe ich sie auf mehrere Seiten aufgeteilt:

Anleitung

Programmbedienung

I²C-Testsequenzen

Hardware

Schaltung

Implementierung

Datenaustausch zwischen PC und Arduino

Projektstruktur

Download

Die Projekt-Sourcen zum Download (VS 2022, Net 6.0).

Verbesserungsideen / Fehler

Software

  1. Testschritt-Editor: Bei den Testschritten wäre es sinnvoll, wenn man sie verschieben könnte.
  2. Die Erkennung, ob Daten geändert wurden, erfolgt nicht immer korrekt.
  3. Der Speicherort und Name für die Datenbank sind fest codiert, sollten aber eingestellt werden können, z.B. per Kommandozeilen-Parameter.
  4. Die Parameter ComPortNameFilter und ComPortSerialNo  sind fest codiert, sollten aber eingestellt werden können.
  5. Über die Built-In-LED des Arduino könnte der Betriebszustand angezeigt werden.
  6. Die IC-Test-Definitionen werden als XML-Datei abgelegt. Dies geschieht mit Hilfe eines DataContractSerializer. Die XML-Datei benötigt viel Speicherplatz. Vielleicht ist es sinnvoller einen binäre Speicherform zu wählen. Andererseits ist Speicherplatz von einigen MB auf modernen Systemen kein wirkliches Problem. Man verliert aber die Möglichkeit die Datenbank in Augenschein zu nehmen.
    Der DataContractSerializer hat die unangenehme Eigenschaft, dass in der XML-Datei die einzelnen Felder in einer bestimmten Reihenfolge stehen müssen. Diese ändert sich, wenn die Felder umbenannt werden. Es reicht also nicht, die Felder in der XML-Datei umzubenennen um sie wieder lesbar zu machen.
  7. Die Listen besitzen die Länge NumberOfPins. Das bedeutet immer eine Umrechnung auf die 28 Pins der Testfassung. Dies führt auch zu Problemen, wenn die Anzahl Pins nachträglich geändert werden muss. Vielleicht ist es einfacher mit einem festen Feld zu arbeiten.

Hardware

  1. Der Logik-Pegel HIGH liegt bei 5 V. Die MCP23017 können auch mit 3,3 V betrieben werden. Den Arduino Nano, (d.h. der ATmega328p als auch der CH340) laufen ebenfalls mit 3,3 V. Den Arduino umzubauen wird wahrscheinlich etwas zu aufwändig. Da es aber nur fünf Datenleitungen und die Versorgungsspannung gibt, sollte man über Pegelwandler nachdenken.
  2. Der MCP23017 ist recht empfindlich was die I²C-Frequenz angeht. Deshalb wurde die I²C-Schnittstelle für das zu testende IC separat über Software-I²C-Schnittstelle bedient. Die wiederum ist nicht so exakt wie die Hardware-Schnittstelle. Wahrscheinlich wäre es besser gewesen die SPI-Variante MSP21S17 zu wählen.
  3. Der MCP23017 ändert seinen Output für eine Bank direkt nach Empfang des zugehörigen Bytes über die I²C-Schnitstelle. Daraus folgt, dass die 28 Pins des Testsockels nicht gleichzeitig, sondern nacheinander in vier Blöcken gesetzt werden ([1..8], [21..28], [9..14], [15..20]). Bei statischen ICs, wie z.B. einem NAND-Gatter, ist das kein Problem. Bei dynamischen ICs, wie z.B. einem Flip-Flop, muss darauf geachtet werden, dass das Takt-Signal erst dann erfolgt, wenn die Datenleitungen den korrekten Wert besitzen. Besser wäre wohl ein I/O-Expander wie den PCA9698 o.ä. zu verwenden. Der hat zum einem 40 I/O-Pins und man kann einstellen, dass die Pins erst nach vollständiger Übertragung aller Bits gesetzt werden. Solch ein Chip (TSSOP56, Raster 0,5 mm) lässt sich natürlich schwer löten. Bestückte Breakout-Board gibt es. Aber es gibt viele ZIF-Adapter für das TSSOP56-Format.
  4. Die Arduino-Pins als auch die Pins des ZIF-Sockels sind mit einer Buchsenleiste versehen. Dazu gibt es je eine Buchsenleiste für +5V und GND. Das ist nicht gut gelöst. Es ist nicht möglich, einen z.B. einen Widerstand vom ZIF-Sockel direkt an +5V oder GND zu schalten. Besser wäre es gewesen, auf jeder Seite des ZIF-Sockels je eine Leiste für beide Potentiale anzubringen. Dabei sollten gefärbte Buchsenleisten verwendet werden. Also etwa so:

    Optimierung Buchsenleisten  Farbige Buchsenleisten

  5. Die Software-I²C-Schnittstelle ist nur über Pins A0 und A1 auf der 15-poligen Buchsenleiste neben dem Arduino erreichbar. Da kann man schnell einmal in das falsche Loch stecken. Besser wäre es, wenn diese Pins separat von den anderen abgesetzt zur Verfügung ständen und entsprechend gekennzeichnet wären.

Erweiterungen

LED-Test

Funktionieren sie noch, welche Farbe?

Multimeter liefern meist entweder nicht genügend Strom oder eine zu geringe Spannung. Außerdem erwischt man immer zuerst die falsche Polung.

multi-bauteile-testerMit Multi-Bauelemente-Testern kann man dies gut machen, hat aber den Nachteil, dass jedes Bauteil nur einzeln getestet werden kann: Bauteil einspannen, Knopf drücken, warten ...

Mit einem Arduino kann man zwei Pins wechselseitig umpolen. Eine funktionierende LED leuchtet somit unabhängig von der Polung. Die AVRs haben eine interne Strombegrenzung auf 25 mA, so dass man noch nicht einmal einen Vorwiderstand benötigt.

Der einfache (standalone) Code:

/*
 Name:		LED-Test.ino
 Created:	21.12.20227
 Author:	Ulli
*/

bool toggle = false;

void setup() {
   pinMode(2, OUTPUT);
   pinMode(3, OUTPUT);

}

void loop() {
   toggle = !toggle;
   digitalWrite(2, toggle);
   digitalWrite(3, !toggle);
   delay(10);
}