Zurück zur Hauptseite

 

Projektstruktur

Verzeichnisse

Arduino-Programm

IC-Pin -> ZIF-Pin

ZIF -> MCP23017-Bank

PC-Programm

Hilfe-Projekt / -Datei

Project IC-DB

Project IC-Tester-Controls

Projekt IC-Tester (GUI, Hauptprogramm)


Projektstruktur

Im Vorwege sei vermerkt, dass das ein "gewachsenes" Projekt ist. Die Struktur des Projekt und die Verteilung der Aufgaben in die Klassen ist nicht optimal. Außerdem gibt es eine Reihe von Verbesserungsideen für eine nächste Version.

Verzeichnisse

Verzeichnisse

Arduino-IC-Tester: Code für das Arduino-Programm

Grafiken: Bilder der erfassten ICs

IC-DB: Klassen für IC-Stammdaten

IC-Tester: Hauptprogramm

IC-Tester-Controls: Steuerelemente

IC-Tester-Help: Verzeichnis für Sandcastle Help File Builder

UrsComPortExtension: Klassen für den Zugriff auf Com-Ports

Arduino-IC-Tester.sln: Solution für das Arduino-Programm

IC-Tester.exe - Verknüpfung: Zum einfachen Aufruf des kompilierten Programms

IC-Tester.ico: Icon für das PC-Programm

IC-Tester.sln: Solution für das PC-Programm

Das Gesamtprojekt teilt sich in zwei Solutions auf, eine für den Arduino-Code (Arduino-IC-Tester) und eine für den PC (IC-Tester).

Arduino-Programm

Das Arduino-Programm übersetzt die Aufträge, die vom PC kommen in Schaltanweisungen für die MCP23017 bzw. in Transferpakete für die I²C-Schnittstelle und sendet die Testergebnisse zurück zum PC.

Das Hauptprogramm Arduino-IC-Tester.ino analysiert die eingehenden Auftragspakete und leitet sie an die entsprechenden Klassen weiter.

IC-Pin -> ZIF-Pin

Aufwändig ist die Übersetzung der Pin-Nummer des zu testenden IC in die des ZIF-Sockels und die Bits der MCP23017-GPIO-Bänke. Die Methode TestIcClass::getZifPin berechnet aus der IC-Pin-Nummer die ZIF-Pin-Nummer.

Pin-Mapping

Berechnung des ZIF-Pins [1..28] aus IC-Pin [1..NumberOfPins] (Werte mit ‚#‘ am Ende: 1-basiert, sonst 0-basiert; Beispiel anhand eines 14-poligen IC)

Untere Pin-Leiste:

Variable Berechnung Beispiel
IC-Pin# -   [1...7]
Index IC-Pin# - 1   [0..6 = 0... (NumberOfPins / 2) - 1]
ZIF-Pin# IC-Pin#   [1...7]
ZIF-Pin Index   [0...6]

Obere Pin-Leiste

Variable Berechnung Beispiel
IC-Pin# -   [8...14 = (NumberOfPins / 2) + 1 ... NumberOfPins]
Index IC-Pin# - 1   [7...13 = (NumberOfPins / 2) ... NumberOfPins -1]
ZIF-Pin# 28 - NumberOfPins + IC-Pin#   [22...28 = 28 - NumberOfPins/2 + 1 ... 28]
ZIF-Pin 28 - NumberOfPins + Index   [21...27 = 28 - NumberOfPins/2 ... 27]

ZIF -> MCP23017-Bank

Aus dem ZIF-Pin muss das passende Bit in der passenden GPIO-Bank beim passenden MCP23017 ermittelt werden.

ZIF-Pin# ZIF-Pin #MCP Pin Maske   ZIF-Pin# ZIF-Pin #MCP Pin Maske
1 0 1 GPA7 0x80   15 14 2 GPB5 0x20
2 1 1 GPA6 0x40   16 15 2 GPB4 0x10
3 2 1 GPA5 0x20   17 16 2 GPB3 0x08
4 3 1 GPA4 0x10   18 17 2 GPB2 0x04
5 4 1 GPA3 0x08   19 18 2 GPB1 0x02
6 5 1 GPA2 0x04   20 19 2 GPB0 0x01
7 6 1 GPA1 0x02   21 20 1 GPB7 0x80
8 7 1 GPA0 0x01   22 21 1 GPB6 0x40
9 8 2 GPA7 0x80   23 22 1 GPB5 0x20
10 9 2 GPA6 0x40   24 23 1 GPB4 0x10
11 10 2 GPA5 0x20   25 34 1 GPB3 0x08
12 11 2 GPA4 0x10   26 25 1 GPB2 0x04
13 12 2 GPA3 0x08   27 26 1 GPB1 0x02
14 13 2 GPA2 0x04   28 27 1 GPB0 0x01

PC-Programm

Zur besseren Übersicht ist das PC-Programm in vier Namensräume / Projekte aufgeteilt. Hinzu kommt das Projekt für den Sandcastle Help File Builder:

Hilfe-Projekt / -Datei

Nahezu alle Felder und Methoden sind mit einer Code-Dokumentation versehen. Eine fertig erstellte Hilfedatei (IC-Tester-Help.chm) findet man im Verzeichnis IC-Tester-Help/Help.

Project IC-DB

Das folgende Diagramm zeigt die wesentliche Klassen für Stammdatenverwaltung der ICs.

Klassendiagramm

Die Klasse IcDefs verwaltet eine Liste von IC-Definitionen (IcDefinition). Neben den üblichen Listenfunktionen stehen Methoden zur Serialisierung (SaveToFile) und Deserialisierung (ReadFromFile) in und aus einer Datei zur Verfügung. Die Serialisierung erfolgt über einen DataContractSerializer in Form einer XML-Datei.

Die Kenndaten eines einzelnes ICs werden in der Klasse IcDefinition zusammengefasst. Wesentlich sind die Pin-Definition (PinDefinition), die im Feld Pins hinterlegt ist. Für die einzelnen Pin-Typen (Type) gibt die Enumeration PinType die Werte vor. Die Bedeutung der Werte ist in der Anleitung erklärt. Sie außerdem sind mit Attributen versehen:

Die durchzuführen Testschritte werden in der Liste TestSet verwaltet. Beim Testschritt wird festgelegt, welche Werte an die Input-Pins der Testfassung angelegt werden sollen und was die Erwartungswerte bei den Output-Pins sind. Außerdem können I²C-Testdaten hinterlegt werden (Felder I2cXmitData und I2cXmitString). Die Kommunikation dazu mit dem Arduino ist Kapitel Datenaustausch erläutert.

Project IC-Tester-Controls

Um das Hauptprogramm etwas übersichtlicher zu gestalten, wurden viel Oberflächenelemente als Controls ausgeführt. Dazu gibt es eine Reihe von Enumerationen und Event-Handlern. Z.T. wurden Standardsteuerelemente erweitert. Die Details dazu findet man ausführlich in der Hilfe-Datei.

Projekt IC-Tester (GUI, Hauptprogramm)

Das Projekt IC-Tester ist das Start-Projekt, Main das Startfenster. Es dient zur Verwaltung der IC-Definitionen. Das Form IcTesterForm führt den Test des ICs durch. Der Testprozess erfolgt im Hintergrund über einen BackgroundWorker (TestWorker), damit die Oberfläche reaktiv bleibt. TestWorker meldet den Testfortschritt über Ereignisse, die dann im IcTesterForm angezeigt werden.

IcTesterForm öffnet außerdem ein Fenster (TestEditor in IC-Tester-Controls), indem die einzelnen Testschrittdefinitionen angezeigt werden. Es ist an die Lebensdauer des IcTesterForm gebunden, d.h. es wird automatisch geöffnet und geschlossen. Eingaben können in dieses Fenster nicht gemacht werden.