16-Segment- Dekoder (mit CPLD)



Ähnliche Dokumente
Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Aufbau und Bestückung der UHU-Servocontrollerplatine

Waggonbeleuchtung. Stützkondensatoren

Baubericht für den AX81-GKR Einleitung

Einbau bzw. Umbau einer USB-Schnittstelle für das Testboard TB1 nicht nur für il-troll

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Umrüsten von Leuchtstofflampen auf LED-Röhren

CU-R-CONTROL. Beschreibung zur Schaltung ATMega16-32+ISP MC-Controller Steuerung auf Basis ATMEL Mega16/32. Autor: Christian Ulrich

1 Mathematische Grundlagen

13 Programmierbare Speicher- und Logikbausteine

Bauanleitung Elektronik Version 1.0. April 2015 M.Haag

Einführung in. Logische Schaltungen

Erstellen von x-y-diagrammen in OpenOffice.calc

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach

Anleitung über den Umgang mit Schildern

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Mit dem sogenannten Seriendruck können Etiketten und Briefe mit einer Adressdatei (z. B. Excel) verknüpft werden.

Stepperfocuser 2.0 mit Bootloader

Zulassung nach MID (Measurement Instruments Directive)

EMS Anforderungen Für die optimale Planung und Fertigung von elektronischen Baugruppen

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Der Aufbau der Uhr ist sehr einfach, weil nur sehr wenige Bauteile eingelötet werden müssen.

Primzahlen und RSA-Verschlüsselung

Objektorientierte Programmierung für Anfänger am Beispiel PHP

10. Elektrische Logiksysteme mit

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Projektmanagement in der Spieleentwicklung

Simulation LIF5000. Abbildung 1

Viele Bilder auf der FA-Homepage

1 Anmerkungen zur Entwicklung von GALs mit LOG/iC

Einführungskurs MOODLE Themen:

Dipl.-Ing. Herbert Schmolke, VdS Schadenverhütung

Menü Macro. WinIBW2-Macros unter Windows7? Macros aufnehmen

OECD Programme for International Student Assessment PISA Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland

Leichte-Sprache-Bilder

QM: Prüfen -1- KN

Flyer, Sharepics usw. mit LibreOffice oder OpenOffice erstellen

easyident Türöffner easyident Türöffner Art. Nr. FS-0007 FS Fertigungsservice

XY-Plotter. Hardware. Software µp. Software PC. von Thomas Wagner

Inventur. Bemerkung. / Inventur

teamsync Kurzanleitung

GEVITAS Farben-Reaktionstest

Versuch 3. Frequenzgang eines Verstärkers

Arbeiten mit UMLed und Delphi

Schrittweise Anleitung zur Erstellung einer Angebotseite 1. In Ihrem Dashboard klicken Sie auf Neu anlegen, um eine neue Seite zu erstellen.

Bereich METIS (Texte im Internet) Zählmarkenrecherche

AutoCAD Dienstprogramm zur Lizenzübertragung

Platinen mit dem HP CLJ 1600 direkt bedrucken ohne Tonertransferverfahren

Dokumentation IBIS Monitor

9 Multiplexer und Code-Umsetzer

Batterie richtig prüfen und laden

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

Technische Informatik Basispraktikum Sommersemester 2001

Bauanleitung: Digitalumrüstung BR 01 Tillig

Repetitionsaufgaben Wurzelgleichungen

Bauanleitung Duinocade Rev A. Duinocade. Bauanleitung. H. Wendt. Übersetzung der englischen Version. 1 of 8

UK-electronic 2013/15

Facharbeit Informatik. Thema:

upsdrpc_c5_aufbau Anleitung zum Aufbau von upsdrpc für den Einsatz als Funkrufpapagei in einem Funkgerät C5.

Bildbearbeitung für BFV-Homepage mit IrfanView. IrfanView ist ein kostenloses Bildbearbeitungsprogramm. Einen geprüften Download finden Sie hier:

trivum Multiroom System Konfigurations- Anleitung Erstellen eines RS232 Protokolls am Bespiel eines Marantz SR7005

1. Kennlinien. 2. Stabilisierung der Emitterschaltung. Schaltungstechnik 2 Übung 4

Sensor board EB

Ein Buch entsteht. Ein langer Weg

Einführung zum Arbeiten mit Microsoft Visual C Express Edition

Serienbrieferstellung in Word mit Kunden-Datenimport aus Excel

Elektrische Logigsystem mit Rückführung

1. Einführung Erstellung einer Teillieferung Erstellung einer Teilrechnung 6

TESTEN SIE IHR KÖNNEN UND GEWINNEN SIE!

Bundesverband Flachglas Großhandel Isolierglasherstellung Veredlung e.v. U g -Werte-Tabellen nach DIN EN 673. Flachglasbranche.

Professionelle Seminare im Bereich MS-Office

Stundenerfassung Version 1.8

FORUM HANDREICHUNG (STAND: AUGUST 2013)

ONLINE-AKADEMIE. "Diplomierter NLP Anwender für Schule und Unterricht" Ziele

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Bestückungsanleitung. Weich88-N (V 2.50) Bestückungs-Anleitung DSD Seite 1 von 10 Copyright (C) , Sven Brandt

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Satzhilfen Publisher Seite Einrichten

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Bedienungsanleitung Albumdesigner. Neues Projekt: Bestehendes Projekt öffnen:

Informationen zu den regionalen Startseiten

Microcontroller Kurs Microcontroller Kurs/Johannes Fuchs 1

4. BEZIEHUNGEN ZWISCHEN TABELLEN

Insiderwissen Hintergrund

Vorbereitung einer Grafik zum Druck einer Glotze aus, Stadion an! -Zaunfahne Torsten Bunde, Stand 5. Juli 2014

Zwischenablage (Bilder, Texte,...)

Tietze, Schenk: Halbleiterschaltungstechnik (Kap. 10) Keller / Paul: Hardwaredesign (Kap. 5) L. Borucki: Digitaltechnik (Kap.

Energetische Klassen von Gebäuden

Welche Bereiche gibt es auf der Internetseite vom Bundes-Aufsichtsamt für Flugsicherung?

Anleitung Postfachsystem Inhalt

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

Erfahrungen mit Hartz IV- Empfängern

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten

PicKit 3. Programmierung mit dem USB-Programmer PICkit3 (Microchip) AB

Version smarter mobile(zu finden unter Einstellungen, Siehe Bild) : Gerät/Typ(z.B. Panasonic Toughbook, Ipad Air, Handy Samsung S1):

Das große All-in-All CPLD/FPGA Tutorial

7 Rechnen mit Polynomen

HANDBUCH PHOENIX II - DOKUMENTENVERWALTUNG

1 topologisches Sortieren

Transkript:

16-Segment- Dekoder (mit CPLD) Autor: Buchgeher Stefan Letzte Bearbeitung: 20. Juli 2005

Inhaltsverzeichnis 1. EINLEITUNG...5 2. WAHRHEITSTABELLE DES 16-SEGMENT-DEKODERS...6 3. UMSETZUNG DER WAHRHEITSTABELLE IN AHDL...10 3.1. Quelldatei 16_SEGM_DEKODER.TDF...10 3.2. Include-Datei 16_SEGM_DEKODER.INC...12 4. DEMONSTRATIONSBEISPIEL...13 4.1. Schaltung...13 4.2. Software...14 4.3. Anmerkungen zur Software...15 4.4. Nachbauanleitung...15 ANHANG A: LAYOUT (DEMONSTRATIONSBEISPIEL)...18 ANHANG B: STÜCKLISTE (DEMONSTRATIONSBEISPIEL)...19 ANHANG C: QUELLEN...20 Seite 3

1. Einleitung Der hier beschriebene 16-Segment-Dekoder hat die Aufgabe die im ASCII-Code 1 vorliegenden Zeichen auf einer handelsüblichen 16-Segment-Anzeige darzustellen. Dabei muss aber eine Einschränkung beachtet werden: die Kleinbuchstaben a bis z können auf einem 16-Segment-Display nicht dargestellt werden und werden durch die entsprechenden Großbuchstaben A für a, B für b bis Z für z ersetzt. Abschnitt 2 zeigt die gewaltige Wahrheitstabelle für jedes der 16 Segmente. Daraus lässt sich schon erahnen, dass diese Logik nur sehr schwer mit herkömmlichen Logik- ICs aufzubauen ist. Diese Aufgabe wird daher eleganter mit einem programmierbaren Logikbaustein gelöst. Solche programmierbaren Logikbausteine werden von unterschiedlichen Herstellern angeboten und unterscheiden sich erheblich voneinander. Zudem gibt es noch unterschiedliche Technologien vom eher einfachen (PAL 2 und GAL 3 ) bis zu sehr komplexen (CPLD 4 und FPGA 5 ). Für diese Aufgabe wurde ein CPLD von Altera ausgewählt. Dies ist rein willkürlich, denn grundsätzlich könnte auch ein Baustein eines anderen Herstellers verwendet werden. Einschränkungen ergeben sich nur in der Anzahl der verfügbaren Pins und der Größe des Bausteins. Mit Größe sind hier nicht die Abmessungen gemeint sondern die Größe der Schaltung sprich die Anzahl der Makrozellen. Bei programmierbaren Logikbausteinen ist weiters zu beachten dass die Funktion der Schaltung in den Baustein programmiert werden muss. Dazu muss diese aber zuerst in irgendeine Form erstellt werden. Hier hat sich eine spezielle Sprache entwickelt und durchgesetzt. Mit dieser Sprache ist es möglich die zu programmierende Schaltung zu beschreiben. Man nennt diese HDL 6, wobei sich hier verschiedene Dialekte entwickelt haben (VHDL 7, AHDL 8, ABEL-HDL usw.). Hier, bei diesem Projekt wurde die vom Hersteller entwickelte Sprache AHDL verwendet. Schließlich muss die erstellte Software noch in den Logikbaustein (IC) gebracht werden. Dazu gibt es vom Hersteller mehrere Downloadkabel, die entweder die parallele Schnittstelle oder die USB-Schnittstelle verwenden. Das Downloadkabel welches die parallele Schnittstelle kann auch sehr einfach selbst gebaut werden. Dieser Nachbau ist in einem anderen Dokument beschrieben (siehe Anhang C: Quellen) Zuletzt soll noch erwähnt werden, dass der Hersteller zu seinen programmierbaren Logikbausteinen auch eine kostenlose Entwicklungsumgebung bereitstellt. Diese kann von der Hersteller-Hompage kostenlos downgeloadet werden. 1 ASCII steht für American Standard Code for Information Interchange und ist ein Code zur Verschlüsselung von 128 alphanumerischen Zeichen (und Steuersignalen) 2 PAL steht für Programmable Array Logic 3 GAL steht für Generic Array Logic 4 CPLD steht für Complex Programmable Logic Device 5 FPGA steht für Field Programmable Gate Array 6 HDL steht für Hardware Description Language 7 VHDL steht für Very high speed integrated circuit Hardware Description Language 8 AHDL steht für Altera Hardware Description Language Seite 5

2. Wahrheitstabelle des 16-Segment-Dekoders Tabelle 2.1. Wahrheitstabelle des 16-Segment-Dekoders Seite 6

Tabelle 2.1. Wahrheitstabelle des 16-Segment-Dekoders (Fortsetzung) Seite 7

Tabelle 2.1. Wahrheitstabelle des 16-Segment-Dekoders (Fortsetzung) Seite 8

Tabelle 2.1. Wahrheitstabelle des 16-Segment-Dekoders (Fortsetzung) Seite 9

3. Umsetzung der Wahrheitstabelle in AHDL Die Umsetzung der Wahrheitstabelle wurde in AHDL erstellt und erfolgt in zwei Dateien. Die Datei 16_SEGM_DEKODER.TDF beinhaltet die komplette Tabelle, während die Datei 16_SEGM_DEKODER.INC zur Einbindung in eine praktische Anwendung dient. Beide Dateien sollten daher auch immer in den Projektordner hinzugefügt werden, wo dieser 16-Segment-Dekoder verwendet wird. 3.1. Quelldatei 16_SEGM_DEKODER.TDF %****************************************************************************% %* 16-Segment-Dekoder (in AHDL) *% %* *% %* Entwickler: Buchgeher Stefan *% %* Entwicklungsbeginn: 11. Juni 2005 *% %* Funktionsfaehig seit: 11. Juni 2005 *% %* Letzte Bearbeitung: 8. Juli 2005 *% %****************************************************************************% %***************** Definition der Ein- und Ausgaenge ************************% SUBDESIGN 16_SEGM_DEKODER ( in[6..0] : INPUT; out[15..0] : OUTPUT; ) %***************** Beginn der Schaltungsbeschreibung ************************% BEGIN CASE in[] IS WHEN 0 => out[] = B"1111111100000000"; % 0 % WHEN 1 => out[] = B"0011000000000000"; % 1 % WHEN 2 => out[] = B"1110111000010001"; % 2 % WHEN 3 => out[] = B"1111110000010001"; % 3 % WHEN 4 => out[] = B"0011000100010001"; % 4 % WHEN 5 => out[] = B"1101110100010001"; % 5 % WHEN 6 => out[] = B"0001111100010001"; % 6 % WHEN 7 => out[] = B"1111000000000000"; % 7 % WHEN 8 => out[] = B"1111111100010001"; % 8 % WHEN 9 => out[] = B"1111000100010001"; % 9 % WHEN 10 => out[] = B"1111001100010001"; % A % WHEN 11 => out[] = B"1111110001010100"; % B % WHEN 12 => out[] = B"1100111100000000"; % C % WHEN 13 => out[] = B"1111110001000100"; % D % WHEN 14 => out[] = B"1100111100000001"; % E % WHEN 15 => out[] = B"1100001100000001"; % F % WHEN 16 => out[] = B"0000000000000000"; % % WHEN 17 => out[] = B"0000000000000000"; % % WHEN 18 => out[] = B"0000000000000000"; % % WHEN 19 => out[] = B"0000000000000000"; % % WHEN 20 => out[] = B"0000000000000000"; % % WHEN 21 => out[] = B"0000000000000000"; % % WHEN 22 => out[] = B"0000000000000000"; % % WHEN 23 => out[] = B"0000000000000000"; % % WHEN 24 => out[] = B"0100110001010101"; % Sonderzeichen % WHEN 25 => out[] = B"0000000010110101"; % Sonderzeichen % WHEN 26 => out[] = B"1100111101010101"; % Sonderzeichen % WHEN 27 => out[] = B"0110000001010000"; % % WHEN 28 => out[] = B"0000000000000000"; % % WHEN 28 => out[] = B"0000001110100000"; % Sonderzeichen % WHEN 29 => out[] = B"0000110001010101"; % Sonderzeichen % WHEN 30 => out[] = B"0000000001001110"; % Sonderzeichen % WHEN 31 => out[] = B"0000000011100100"; % Sonderzeichen % WHEN 32 => out[] = B"0000000000000000"; % % WHEN 33 => out[] = B"0011000000000000"; %! % WHEN 34 => out[] = B"0000000101000000"; % " % WHEN 35 => out[] = B"1111111111111111"; % Alle Segmente % WHEN 36 => out[] = B"1101110101010101"; % $ % WHEN 37 => out[] = B"1001100101110111"; % % %% WHEN 38 => out[] = B"0101110001100110"; % & % Seite 10

WHEN 39 => out[] = B"0000000000100000"; % ` % WHEN 40 => out[] = B"0000000000101000"; % ( % WHEN 41 => out[] = B"0000000010000010"; % ) % WHEN 42 => out[] = B"0000000011111111"; % * % WHEN 43 => out[] = B"0000000001010101"; % + % WHEN 44 => out[] = B"0000000000000010"; %, % WHEN 45 => out[] = B"0000000000010001"; % - % WHEN 46 => out[] = B"0000011000000101"; % o % WHEN 47 => out[] = B"0000000000100010"; % / % WHEN 48 => out[] = B"1111111100000000"; % 0 % WHEN 49 => out[] = B"0011000000000000"; % 1 % WHEN 50 => out[] = B"1110111000010001"; % 2 % WHEN 51 => out[] = B"1111110000010001"; % 3 % WHEN 52 => out[] = B"0011000100010001"; % 4 % WHEN 53 => out[] = B"1101110100010001"; % 5 % WHEN 54 => out[] = B"0001111100010001"; % 6 % WHEN 55 => out[] = B"1111000000000000"; % 7 % WHEN 56 => out[] = B"1111111100010001"; % 8 % WHEN 57 => out[] = B"1111000100010001"; % 9 % WHEN 58 => out[] = B"0000000001000100"; % Sonderzeichen % WHEN 59 => out[] = B"0000000000000000"; % % WHEN 60 => out[] = B"0000000000101000"; % Sonderzeichen % WHEN 61 => out[] = B"0000110000010001"; % = % WHEN 62 => out[] = B"0000000010000010"; % Sonderzeichen % WHEN 63 => out[] = B"0110000000010100"; %? % WHEN 64 => out[] = B"1110111101010000"; % @ % WHEN 65 => out[] = B"1111001100010001"; % A % WHEN 66 => out[] = B"1111110001010100"; % B % WHEN 67 => out[] = B"1100111100000000"; % C % WHEN 68 => out[] = B"1111110001000100"; % D % WHEN 69 => out[] = B"1100111100000001"; % E % WHEN 70 => out[] = B"1100001100000001"; % F % WHEN 71 => out[] = B"1101111100010000"; % G % WHEN 72 => out[] = B"0011001100010001"; % H % WHEN 73 => out[] = B"0000000001000100"; % I % WHEN 74 => out[] = B"0011111000000000"; % J % WHEN 75 => out[] = B"0000001100101001"; % K % WHEN 76 => out[] = B"0000111100000000"; % L % WHEN 77 => out[] = B"0011001110100000"; % M % WHEN 78 => out[] = B"0011001110001000"; % N % WHEN 79 => out[] = B"1111111100000000"; % O % WHEN 80 => out[] = B"1110001100010001"; % P % WHEN 81 => out[] = B"1111111100001000"; % Q % WHEN 82 => out[] = B"1110001100011001"; % R % WHEN 83 => out[] = B"1101110100010001"; % S % WHEN 84 => out[] = B"1100000001000100"; % T % WHEN 85 => out[] = B"0011111100000000"; % U % WHEN 86 => out[] = B"0000001100100010"; % V % WHEN 87 => out[] = B"0011001100001010"; % W % WHEN 88 => out[] = B"0000000010101010"; % X % WHEN 89 => out[] = B"0000000010100100"; % Y % WHEN 90 => out[] = B"1100110000100010"; % Z % WHEN 91 => out[] = B"0100100001000100"; % [ % WHEN 92 => out[] = B"0000000010001000"; % \ % WHEN 93 => out[] = B"1000010001000100"; % ] % WHEN 94 => out[] = B"0000000000000000"; % % WHEN 95 => out[] = B"0000110000000000"; % _ % WHEN 96 => out[] = B"0000000010000000"; % % WHEN 97 => out[] = B"1111001100010001"; % a = A % WHEN 98 => out[] = B"1111110001010100"; % b = B % WHEN 99 => out[] = B"1100111100000000"; % c = C % WHEN 100 => out[] = B"1111110001000100"; % d = D % WHEN 101 => out[] = B"1100111100000001"; % e = E % WHEN 102 => out[] = B"1100001100000001"; % f = F % WHEN 103 => out[] = B"1101111100010000"; % g = G % WHEN 104 => out[] = B"0011001100010001"; % h = H % WHEN 105 => out[] = B"0000000001000100"; % i = I % WHEN 106 => out[] = B"0011111000000000"; % j = J % WHEN 107 => out[] = B"0000001100101001"; % k = K % WHEN 108 => out[] = B"0000111100000000"; % l = L % WHEN 109 => out[] = B"0011001110100000"; % m = M % WHEN 110 => out[] = B"0011001110001000"; % n = N % WHEN 111 => out[] = B"1111111100000000"; % o = O % WHEN 112 => out[] = B"1110001100010001"; % p = P % WHEN 113 => out[] = B"1111111100001000"; % q = Q % WHEN 114 => out[] = B"1110001100011001"; % r = R % WHEN 115 => out[] = B"1101110100010001"; % s = S % WHEN 116 => out[] = B"1100000001000100"; % t = T % WHEN 117 => out[] = B"0011111100000000"; % u = U % Seite 11

END; WHEN 118 => out[] = B"0000001100100010"; % v = V % WHEN 119 => out[] = B"0011001100001010"; % w = W % WHEN 120 => out[] = B"0000000010101010"; % x = X % WHEN 121 => out[] = B"0000000010100100"; % y = Y % WHEN 122 => out[] = B"1100110000100010"; % z = Z % WHEN 123 => out[] = B"0100100001000101"; % { % WHEN 124 => out[] = B"0000000001000100"; % % WHEN 125 => out[] = B"1000010001010100"; % } % WHEN 126 => out[] = B"0010001000010001"; % Sonderzeichen % WHEN 127 => out[] = B"0000000000000000"; % % END CASE; 3.2. Include-Datei 16_SEGM_DEKODER.INC %****************************************************************************% %* Include-Datei zum 16-Segment-Dekoder (in AHDL) *% %* *% %* Entwickler: Buchgeher Stefan *% %* Entwicklungsbeginn: 11. Juni 2005 *% %* Funktionsfaehig seit: 11. Juni 2005 *% %* Letzte Bearbeitung: 8. Juli 2005 *% %****************************************************************************% FUNCTION 16_SEGM_DEKODER ( in[6..0] ) RETURNS ( out[15..0] ); Seite 12

4. Demonstrationsbeispiel Das folgende Beispiel dient nur zur Demonstration. Es zeigt eine mögliche Einbindung der im Abschnitt 3 beschriebenen Tabelle. 4.1. Schaltung Bild 4.1: Schaltung zum Demonstrationsbeispiel 1 Bild 4.1. zeigt die sehr einfache Schaltung dieses Demonstrationsbeispiels. Sie besteht im Wesentlichen aus dem zu programmierenden Logikbausteins (IC1) vom Typ EPM7064 und der 16-Segment-Anzeige (LD1) vom Typ PSA08-12EWA. Der Logikbaustein ist ein so genanntes CPLD (Complex Programmable Logic Device). Die 10polige Anschlussleiste JTAG dient zur Programmierung des Logikbausteins IC1. Die Programmierung erfolgt mit einem speziellen Downloadkabel 9. Die Kondensatoren C1 bis C3 dienen zur Pufferung der Betriebsspannung für den Logikbaustein. Eine Takterzeugung für den Logikbaustein ist hier nicht notwendig, da die programmierte Logik eine reine kombinatorische Logik in Form einer sehr großen Wahrheitstabelle ist. Aus demselben Grund ist auch keine Reset-Schaltung notwendig. Die Pins 43 (Takt) und 1 (Reset) bleiben daher unbeschaltet. 9 Ein solches Downloadkabel kann entweder käuflich erwerbt oder selbst gebaut werden. Der Selbstbau bzw. Nachbau des Original-Downloadkabels ist in einem anderen Dokument beschrieben. Der Hersteller (Altera) bezeichnet dieses Downloadkabel als Byteblaster Seite 13

Die Widerstände R1 bis R16 sind so genannte Strombegrenzungswiderstände, während das Widerstandsarray R17 als so genannte Pull-Up-Widerstände 10 für die Eingänge dienen. Die Stromversorgung kann zwischen 2.5V und 5V liegen, wobei die Tendenz zu niedrigen Betriebsspannung geht, da hier die Verlustleistung deutlich geringer ist. 4.2. Software %****************************************************************************% %* Demonstrationsbeispiel 1 zum 16-Segment-Dekoder (in AHDL) *% %* *% %* CPLD-Typ: EPM7064SLC44-10 *% %* *% %* Entwickler: Buchgeher Stefan *% %* Entwicklungsbeginn: 11. Juni 2005 *% %* Funktionsfaehig seit: 11. Juni 2005 *% %* Letzte Bearbeitung: 8. Juli 2005 *% %****************************************************************************% %***************** Include-Dateien ******************************************% include "16_SEGM_DEKODER.INC"; %***************** Definition der Ein- und Ausgaenge ************************% SUBDESIGN 16_Segment_Dekoder ( inascii[6..0] : INPUT; ) a,b,c,d,e,f,g,h k,m,n,p,r,s,t,u : OUTPUT; : OUTPUT; %***************** Definition der Variablen *********************************% VARIABLE ianzeige : 16_SEGM_DEKODER; %***************** Beginn der Schaltungsbeschreibung ************************% BEGIN ianzeige.in[] = inascii[]; END; a =!ianzeige.out[15]; b =!ianzeige.out[14]; c =!ianzeige.out[13]; d =!ianzeige.out[12]; e =!ianzeige.out[11]; f =!ianzeige.out[10]; g =!ianzeige.out[9]; h =!ianzeige.out[8]; k =!ianzeige.out[7]; m =!ianzeige.out[6]; n =!ianzeige.out[5]; p =!ianzeige.out[4]; r =!ianzeige.out[3]; s =!ianzeige.out[2]; t =!ianzeige.out[1]; u =!ianzeige.out[0]; 10 Ein Pull-Up-Widerstand erzeugt einen definierten High-Pegel, wenn der Eingang unbeschaltet ist. Im Gegensatz zu einem Pull-Down-Widerstand. Dieser erzeugt im unbeschalteten Zustand einen definierten Low-Pegel. Seite 14

4.3. Anmerkungen zur Software Die in AHDL geschriebene Software besteht hier nur aus der Einbindung der Wahrheitstabelle vom Abschnitt 2 und der Definition der Ein- und Ausgänge. Die Einbindung erfolgt mit Hilfe der Include-Anweisung include "16_SEGM_DEKODER.INC"; Bei den Ausgängen ist anzumerken, dass diese lowaktiv sind, da ja eine Anzeige mit gemeinsamer Anode verwendet wird. Das bedeutet, dass ein Segment nur dann leuchten kann, wenn der Ausgang des CPLD low ist. In der Software bedeutet dass, dass diese Ausgänge invertiert werden müssen. Diese Invertierung erfolgt mit! zb.a =!ianzeige.out[15]; Die Software benötigt 61 Makrozellen, füllt also das verwendete CPLD (mit 64 Makrozellen) fast vollständig aus. 4.4. Nachbauanleitung Schritt 1: Platinen herstellen Zu diesem Zweck ist im Anhang A das Layout zu diesem Demonstrationsbeispiel angedruckt, welches üblicherweise seitenverkehrt ist. Selbstverständlich kann eine eigene Platine entworfen werden, die den eigenen Anforderungen entspricht. Schritt 2: Platinen bestücken Das Bestücken einer Platine ist erst dann sinnvoll, wenn alle für diese Platine benötigten Bauteile vorhanden sind. Es sollten generell nur erstklassige und neuwertige Bauteile verwendet werden. Auf Bauteile aus ausgeschlachteten Geräten sollte grundsätzlich verzichtet werden, da ihre Funktionalität nicht gewährleistet ist, und eine unnötige Fehlersuche dadurch vermieden werden kann. Weiters sollte ausreichend Platz und vor allem ausreichend Zeit für die Bestückung und Verdrahtung der Platinen vorhanden sein. Die Bauelemente entsprechend Bild 4.2. (Bauteilseite), Bild 4.3. (Lötseite) der folgenden Reihenfolge, der Stückliste (Anhang B) und dem Schaltplan (Abschnitt 4.1) bestücken. Die nach dem anlöten überstehenden Anschlüsse mit einem kleinen Seitenschneider entfernen. Reihenfolge zur Bestückung der Platine: Buchsenleiste für LD1 (16-Segment-Anzeige) und ASCII-Eingänge: Tipp: Bei mehrpoligen Buchsenleisten zuerst den ersten Pin anlöten, Buchsenleiste anschließend ausrichten, eventuell nachlöten, dann den letzten Pin anlöten, Buchsenleiste eventuell ausrichten und/oder nachlöten. Erst danach die restlichen, dazwischen liegenden Pins anlöten. Seite 15

Widerstandsarray R17 (8x1k): Achtung: Gemeinsamen Anschluss beachten! Dieser ist normalerweise durch einen Punkt oder ähnlichem gekennzeichnet. Keramikkondensator C1 und C2 (je 220nF) PLCC-Fassung für IC1 (44polig): Tipp 1: Obwohl es bei den Fassungen elektrisch gesehen egal ist wie die Fassungen eingelötet sind, sollte man doch die Fassung so einlöten, dass die abgeschrägte Ecke in die richtige Richtung zeigt. Dies erleichtert das spätere Einsetzten der ICs bzw. erleichtert die Arbeit bei einem IC-Tausch. Tipp 2: Beim Einlöten der Fassungen sollte man wie folgt vorgehen: Fassung an der einzusetzenden Stelle lagerichtig einsetzen und zunächst nur einen beliebigen Eckpin anlöten. Fassung kontrollieren und eventuell Nachlöten. Sitzt die Fassung ordentlich, den gegenüberliegenden Pin anlöten. Fassung wieder kontrollieren und eventuell nachlöten. Erst wenn Sie mit der Lage der Fassung zufrieden sind, die restlichen Pins anlöten. Mini-Elko C3 (22µF/25V): Achtung: Polarität beachten! Zweireihige Stiftleiste für den Programmieradapter Zwei Anschlussdrähte (rot und schwarz) von ca. 10cm Länge Bild 4.2. zeigt die nun bestückte Bauteilseite der Platine mit 16-Segment-Anzeige. Die Anzeige noch nicht einsetzen) Anschlussdrähte (+Ub, GND) ASCII-Eingänge Programmier- Anschluß Bild 4.2: Bauteilseite SMD-Widerstände R1 bis R16 (je 120 Ohm auf der Lötseite): Achtung: Es müssen auch noch 2 Null-Ohm-SMD-Widerstände gelötet werden. Diese haben die Bezeichnung R18 und R19. 0-Ohm- Widestände (2x) Bild 4.3: Lötseite Seite 16

Zum Schluss alle Lötstellen noch einmal sorgfältig auf Kurzschlüsse oder kalte Lötstellen überprüfen. Auch hierfür sollte man sich ausreichend Zeit nehmen! Schritt 3: Test IC1 (EPM7064) und LD1 (16-Segment-Anzeige) noch nicht in die Fassungen einsetzen, und auch noch nicht die Betriebsspannung anschließen. Zuerst mit einem Multimeter prüfen, ob zwischen Betriebsspannung und Masse kein Kurzschluss herrscht. (Multimeter im Mode Durchgangstester an den Anschlussdrähten). Ist kein Kurzschluss feststellbar, als nächstes an den IC-Sockeln gemäß dem Schaltplan ebenfalls diesen Test durch führen. Eventuell festgestellte Kurzschlüsse müssen natürlich aufgespürt und entfernt werden! Eine Spannungsquelle mit einer Spannung zwischen 2,5V und 5V anschließen. Spannung an IC1 an den jeweiligen Pins messen. Wird keine oder eine grob abweichende Spannung als an der Spannungsquelle eingestellter Spannung gemessen, so liegt ein Bestückungs- und/oder Verdrahtungsfehler vor, welcher unbedingt aufgespürt und beseitigt werden muss. Ist die Spannung okay, entweder die Stromversorgung abschalten, oder die Platine von der Stromversorgung trennen. Schritt 4: Inbetriebnahme CPLD (EPM7064, IC1), und die 16-Segment-Anzeige (LD1) im ausgeschalteten Zustand einsetzen. Achtung: Auf die Polarität achten! Spannung wieder anlegen bzw. einschalten Das CPLD mit einem entsprechenden Downloadkabel programmieren. Fertig! Nun kann mit Hilfe von Drahtbrücken an den Eingängen die Funktion überprüft werden. Die 16-Segment-Anzeige sollte nun die in Tabelle 2.1. angegebenen Zeichen darstellen. Seite 17

Anhang A: Layout (Demonstrationsbeispiel) Seite 18

Anhang B: Stückliste (Demonstrationsbeispiel) Nr. Bezeichnung St. Lieferant Bestell. E- Bemerkungen Nr. Preis R1-R16 Widerstand 120 Ohm 16 Farnell 613-599 0,028 SMD 1206 R17 Widerstandsarray 8x1k 1 Conrad 414190 0,33 R18, R19 Widerstand 0 Ohm 2 Farnell 772-240 0,028 SMD 1206 C1, C2 Keramikkondensator 2 Conrad 453366 0,35 220nF (RM5,08) C3 Elko 22µF/25V 1 Conrad 460575 0,15 LD1 16-Segment-Anzeige (PSA08-12EWA) 1 RS 451-6622 2,83 Ohne MwSt IC1 EPM7064SLC44-10 1 Farnell 300-5860 9,60 Ohne MwSt PLCC-Fassung 44polig 1 Conrad 189731 1,15 für IC1 Stiftleiste 2reihig (2x5polig) 1 Conrad 732478 0,79 Preis für 2x36polig (für JTAG) Buchsenleiste 7polig 2 Conrad 740438 1,15 Preis für 32polig (für ASCII-Eingänge) Buchsenleiste 9polig 2 Conrad 740438 1,15 Preis für 32polig (für LD1) Platine-Basismaterial 1 Conrad 529214 1,95 Preis für 75x100 mm (einseitig) Distanz M3x10 4 (optional) Mutter M3 4 (optional) Zahnscheibe M3 4 (optional) Seite 19

Anhang C: Quellen Homepage des Herstellers des hier verwendeten CPLDs (www.altera.com) Datenblatt zum EPM7064 (www.altera.com) Datenblatt zur 16-Segment-Anzeige (PSA08-12EWA) (www.kingbright.com) Elektor, Ausgabe Mai/2004, Seite 12ff Elektor, Ausgabe Juni/2004, Seite 58ff Dokument Byteblaster (Altera-Nachbau) Buch Programmierbare Logik mit GAL und CPLD (ISBN: 3-486-24610-0, Autor: Christian Ellwein) Buch Das FPGA-Kochbuch (ISBN: 3-8266-2712-1, Autor: Markus Wannemacher) Seite 20