|
16-Kanal Digitalausgabe über die parallele Schnittstelle
Version 1.0
1. Grundsätzliches und Lizenz
Die Programme unteliegen der GPL (Gnu Public License) Version 2
oder später und die Dokumentation der Hardware der FDL
(Free Document License). Ich übernehme ausdrücklich keinerlei
Haftung fuer die Richtigkeit und Funktionsfähigket der im
Projekt enthaltenen Informationen.
Alle genannten
Marken sind Eigentum des jeweiligen Markeninhabers.
2. Projekt-Steckbrief
Name: |
parout16 |
Funktion: |
16 digitale Ausgänge über die parallele Schnittstelle steuern. |
System: |
Xilinx XC9536 (VHDL) |
Status: |
stabil, einsetzbar |
3. Hardware
Das Projekt realisiert 16 über die parallele Schnittstelle
steuerbare Ausgänge mit einem XC9536 CPLD. Dabei kann die Ausgabe
mit einem externen Signal synchronisiert werden. Eine Anpassung an
vergleichbare Architekturen sollte ohne weiteres möglich sein.
Folgende Resourcen werden bei der realisierten Implementierung
belegt:
Makrozellen: | 36/36 | (100%) |
Register: | 33/36 | (92%) |
Produktterme: | 141/180 | (78%) |
Signale: | 66/72 | (92%) |
PIN's | 27/34 | (79%) |
Globaler Takt: | 1/3 | 2 als IO |
Globaler Tristate: | 0/2 | 2 als IO |
Globaler Reset: | 1/1 | |
Inwieweit die Belegung der PIN's des CPLD geändert werden kann,
habe ich nicht untersucht, ohne die Nutzung von globalem Takt
(GCK1) und globalem Reset(GSR) liess sich das Design trotz aller Optimierungen
nicht fitten.
Auf der "Eingangsseite", die direkt mit der parallelen Schnittstelle
verbunden wird, sind folgende Signale notwendig:
Signal |
CPLD (PLCC44) |
CPLD (TQFP44) |
DSUB-Stecker |
strobe |
5 |
43 |
1 |
D0 |
6 |
44 |
2 |
D1 |
7 |
1 |
3 |
D2 |
8 |
2 |
4 |
D3 |
9 |
3 |
5 |
D4 |
11 |
5 |
6 |
D5 |
12 |
6 |
7 |
D6 |
13 |
7 |
8 |
busy |
18 |
12 |
11 |
Die 16 Ausgangssignale sind LOW-aktiv, werden HIGH-aktive Signale
benötigt, muss in der Datei "datareg01.vhd" in Zeile 43 das "not"
vor "invalue" entfernt werden. Ausserdem müssen der Bitvektor "1..."
in Zeile 86 der Datei "main.vhd" in "0..." geändert werden und
die INIT-werte für die Ausgaenge "relais<x>" in der ucf-Datei
auf "0" gesetzt werden.
Signal |
CPLD (PLCC44) |
CPLD (TQFP44) |
Out 0 |
19 |
13 |
Out 1 |
20 |
14 |
Out 2 |
22 |
16 |
Out 3 |
24 |
18 |
Out 4 |
25 |
19 |
Out 5 |
26 |
20 |
Out 6 |
27 |
21 |
Out 7 |
28 |
22 |
Out 8 |
29 |
23 |
Out 9 |
33 |
27 |
Out 10 |
34 |
28 |
Out 11 |
35 |
29 |
Out 12 |
40 |
34 |
Out 13 |
42 |
36 |
Out 14 |
43 |
37 |
Out 15 |
44 |
38 |
Zusätzlich gibt es noch zwei Signale zur Steuerung. Das RESET-Signal
setzt bei LOW-Pegel alle Ausgänge auf HIGH (bzw. LOW).
Zwar geschieht das auch bei der Initialisierung, aber das Signal kann
zum Beispiel als Zwangs-Aus Signal genutzt werden.
Um die Ausgabe mit externen Komponenten zu synchronisieren (z.B.
fuer Phasenanschnittsteuerungen), kann ein Busy-Signal auf der
parallelen Schnittstelle generiert werden, welches erst mit der
steigenden Flanke des TRIGGER-Signals wieder deaktiviert wird.
Signal |
CPLD (PLCC44) |
CPLD (TQFP44) |
/RESET |
39 |
33 |
TRIGGER |
38 |
32 |
4. Ansteuerung
Die Ansteuerung erfolgt mit einfachen Klartext über die parallele
Schnittstelle. Es werden nur 7 Bit ASCII ausgewertet.
Folgende Funktionen sind realisiert:
0...9 |
Übernahme in das niedrigste Nibble, vorhandene Daten-Nibbles
werden zum naechsthöheren Nibble weitergeschoben. Die Daten aus dem höchstwertigen
Nibble gehen verloren. |
A...F a...f |
Übernahme in das niedrigste Nibble, vorhandene Daten-Nibbles
werden zum naechsthöheren Nibble weitergeschoben. Die Daten aus dem höchstwertigen
Nibble gehen verloren. |
* |
Übernahme der Daten in die Ausgänge. Das Busy-Signal wird
nicht aktiviert. |
+ |
Übernahme der Daten in die Ausgänge. Das Busy-Signal wird
aktiviert und erst bei steigender Flanke des TRIGGER-Signals wieder deaktiviert.
Dadurch hält der steuernde PC die Ausgabe bis zur Synchronisation an.
Dabei darf das Timeout für die parallele Schnittstelle nicht ueberschritten werden. |
5. Beispiele
Zum Testen können die Daten mit folgendem Befehl (Konsole) an die
parallele Schnittstelle gesendet werden (Voraussetzung sind natürlich
Schreibrechte auf /dev/lp0):
8001* |
setzt das höchstwertige (MSB) und das niederwertigste Bit (LSB) |
F000+ |
setzt die 4 höchstwertigen Bits,
danach wird auf eine steigende Flanke des TRIGGER-Signals gewartet. |
3* |
setzt die untersten 2 Bits und schiebt die anderen um
4 Stellen nach nach links (oben). |
00+ |
löscht die untersten 8 Bits und schiebt die anderen um
8 Stellen nach nach links (oben), danach wird auf eine steigende Flanke des TRIGGER-Signals gewartet. |
- echo "0000+0001+0002+0003+0004+0008+0010+0020+0030+0040+0080+0000*" > /dev/lp0
liegt an TRIGGER ein Taktsignal an, haben wir so ein einfaches "Lauflicht" programmiert.
6. Compilierung mit vhdl2cpld
Das Projekt besteht aus mehreren Dateien im Verzeichnis "src". Das Contraints-File plcc44.ucf enthält
die PIN-Belegung für die PLCC-Version. Soll die Version im VQFP-Gehäuse benutzt werden, müssen die Datei
plcc44.ucf in z.B. plc44.ucx sowie die Datei vqfp44.ucx in vqfp44.ucf umbenannt werden.
Bei der PLCC-Version reicht es aus, im "src"-Verzeichnis
aufzurufen. Bei der VQFP-Version muss noch die Option für die andere Gehäuseform angegeben werden:
- vhdl2cpld -type XC9535-5-VQFP44
7.Download
|