Digitaltechnik

Version 1.1 vom 28.9.1998
Zusammenstellung und HTML-Bearbeitung: Horst Lehner

Tastenentprellung

Wenn der Taster einen Umschaltkontakt hat, ist am einfachsten ein RS-Flipflop, (z. B. aus zwei kreuzgekoppelten NANDs 74xx00). Man schließt den Mittelkontakt an GND (oder Vcc, je nach Flipflop), die beiden Kontakte an S und R des Flipflops, noch je einen pullup- (bzw. pulldown-) Widerstand an die Eingänge. Der Ausgang Q des Flipflops ist dann garantiert entprellt. Bei normalen Ein-Tastern hilft ein Monoflop, das auf ein Mehrfaches der Prellzeit eingestellt ist.

Eine weitere Entprellschaltung besteht aus einem nichtinvertierenden Pufferglied (z.B. CD 4050). An den Eingang kommt der Anschluß eines Wechseltasters, der entweder Masse oder +5V auf den Gattereingang legt. Das Gatter selbst wird über einen Widerstand (Größe je nach Ausgangsstrom und Eingangsstrom, ca. 2...100kOhm) auf den Eingang zurückgekoppelt. Sobald das Potential über den Schalter am Eingang des Gatters anliegt wird die Rückkopplung aktiv und überbrückt die Prellzeit (normalerweise prellt ein Schalter zwischen einem festen Potential und keinem Potential). Evtl. kann man ein weiteres Puffergatter nachschalten, wenn man den Ausgang stärker belasten will. Auf keinen Fall ein invertierendes Gatter nehmen, oder in diesem Fall den Rückkopplungswiderstand über eine Reihenschaltung aus zwei invertierenden Gattern legen - das Prinzip sollte klar sein.

Dann gibt es noch den (MC1)4490, der bis zu sechs Tasten entprellt. Es gibt auch höher integrierte ICs, die das Entprellen und codieren einer ganzen Tastenmatrix (z.B. 4x4) übernehmen. Falls die Tasten an einem Mikroprozessor angeschlossen sind, kann das Scannen der Matrix und das Entprellen am einfachsten per Software realisiert werden.

Zu guter Letzt sei noch erwähnt, daß es Tasten gibt, die so kurze Prellzeiten haben, daß eine Entprellung bei bestimmten nicht ganz so flotten Logikfamilien gar nicht notwendig ist.

Drahtlose Datenübertragung mit Infrarot und Funk

Die erste Möglichkeit ist ein Universal Infrarot Transceiver von Crystal, der kann IrDA, HPSIR, ASK, RC-5 senden und empfangen, maximale Datenrate für IrDA z.B. ist 115kBit/s, das Ding hat ein TTL/CMOS kompatibles Rx/Tx CTSDTR Interface und IO für die IR-LEDs, das Teil läuft von 2.7 bis 5.5 Volt, kommt im 20pol SSOP Gehäuse. Üuuml;ber die Reichweite wird im Datenblatt nix gesagt, aber die hängt auch mehr von den LEDs und der Umgebung ab. Die beiden OnChip LED-Treiber können jedenfalls beide je 250mA treiben. Der Typ heißt CS8130, Informationen bei Metronik oder Atlantik-Elektronik in München.

Von Linear Technologies gibts den LT1319, der kann IrDA-SIR, IrDA-FIR, IrDA-4PPM, Sharp/Newton, AppleModulated Localtalk, RC-5. (IrDA-FIR geht bis 1.15MBaud, IrDA-4PPM geht bis 4MBaud bei Reichweiten im Dezimeterbereich.)

Bei Funkübertragung darf die Leistung der Sender 10mW nicht überschreiten. Es muß mit gravierenden Störungen gerechnet werden, da die Üuuml;bertragung mitten in einem Amateurfunkband liegt. Es kann auch Störungen durch drahtlose Kopfhörer und ähnliche Anwendungen geben.

Bei den folgenden Firmen gibt es Sende- und Empfangsmodul:

HM-Funktechnik
World Trade Center Bremen
Birkenstr. 15
28195 Bremen
0421-1655657 (fax 1655658)
Heiland Elektronik
Boschweg 38
48351 Everswinkel
02582-7550 (fax 7887)
Ingenieurbüro Strobl
Postfach 1247
84302 Eggenfelden
08721-5880 (fax 8769)
Auch CONRAD-Elektronik führt einige solche modul.

Schwingschaltungen mit NE555

555 als astabiler Multivibrator

Vcc  o--------o--------------o--------+
              |              |        |
             +-+             |        |
        R1   | |             |        |
             | |             |        |
             +-+        +------------------+
              |         |    4        8    |
              o-----o---|7                 |
              |     |   |                 3|----------o Out
             +-+  +---+ |                  |
        R2   | |   \ /  |      NE555       |
             | |  ----- |                  |
             +-+  D |   |                  |
              |     |   |                 5|------+
              o-----o---|6                 |      |
              |     |   |    2        1    |      |
        C1  -----   |   +------------------+    -----  10nF
            -----   |        |        |         -----
              |     +--------+        |           |
              |                       |           |
Gnd  o--------o-----------------------o-----------+

Ohne die Diode D gilt:
ti = 0.7 * C * (R1+R2)                  t  = ti + tp
tp = 0.7 * C * R2                       f  = 1/t

Mit der Diode D läßt sich auch ein Tastverhältnis unter 50% erreichen:
ti = ca. 0.7 * C * R1.

Frequenzverdoppler

Mit einem EXOR-Gatter, einem Widerstand und einem Kondensator läßt sich das für eine feste Eingangsfrequenz so machen:

   IN >------*-------|
             R       |EXOR------> OUT
             *-------|
             C
             |
            gnd
RC muß so dimensioniert sein, daß die durch sie erzeugte Impulbreite OUT kleiner ist als die halbe Periode des Eingangssignales IN wenn das Tastverhaeltnis 50% ist.

Digitale Zufallsgeneratoren

Die folgenden drei Funktionsprinzipien sind bekannt:

PrinzipVorteileNachteile
Rückgekoppelte Schieberegister
  • einfach zu realisieren
  • nur pseudozufälliges, periodisches Ergebnis
parallel laufende Zähler mit unterschiedlichen Taktquellen
  • aufwendigere Realisierung
  • bessere Zufallsergebnisse
Digitalisierung eines analogen Rauschsignals
  • je nach Anspruch an die Gleichverteilung von Nullen und Einsen aufwendig zu realisieren
  • i. d. R. höhere Versorgungsspannung zur Erzeugung des Analograuschens notwendig
  • echtes Zufallsergebnis
Schaltungen v. a. zur ersten Variante sind in vielen Büchern und Zeitschriften zu finden.

A/D- und D/A-Wandler

1-bit-Wandler

Delta-Verfahren

Bei der Delta-Modulation besteht der Modulator aus einem Komparator , dessen Ausgangssignal zum einen nach draussen geführt und zum anderen über einen Integrierer negiert zum Eingangssignal addiert wird. Der Demodulator ist der gleiche Integrierer, dessen Ausgangssignal -- tiefpaßgefiltert -- ungefähr dem ursprünglichen Eingangssignal entspricht.

Modulator

    x(t) ----O----- Komparator ----+---- y(n)
             ^-                    |
             +---< Integrierer <---+

Demodulator

    y(n) --- Integrierer --- Tiefpass --- y(t)

Delta-Sigma-Verfahren

Ein Delta-Sigma-Modulator ist ähnlich, jedoch wird der o.a. zweite Integrierer (beim Delta-Verfahren im Demodulator) noch vor den ursprünglichen Modulator in dessen Blockschaltung aufgenommen. Der Demodulator ist dann nur noch ein normaler Tiefpaßfilter:

Modulator

    x(t) ----Integrierer---O----- Komparator ----+---- y(n)
                           ^-                    |
                           +---< Integrierer <---+

Demodulator

    y(n) -- Tiefpass -- y(t)

Programmierbare Logikbausteine

GALs

Zu diesem Thema suche ich noch einen einführenden Artikel. Wer schreibt ihn für alle MAUSer?

Solange kann ich wenigstens mal die folgenden Buchempfehlungen weitergeben:

Das GAL-Buch
Ulrich Hack, Markus Hoffmann
Grundlagen, Entwurf, Selbstbau-Brenner
Elektor-Verlag
Mindestends: 4. Auflage (keine ältere nehmen!)
ISBN 3-928051-30-x
Enthält auch eine Bauanleitung für ein empfehlenswertes Programmiergerät
(16V8 & 20V8) inclusive einem GAL-Assembler zum Erstellen der Jedec-Files.
Die Software liegt für PC und Atari bei.

Autor:  Dieter Bitterle
Buch1:  GALs
        Programmierbare Logikbausteine in Theorie und Praxis
Buch2:  Schaltungstechnik mit GALs
        Ueber 50 Schaltungen fuer die praktische Anwendungen
Verlag: FRANZIS

Für den Amiga gibt es einen GALer, der 16V8, -A, -B, 20V8, -A, -B, 22V10 und 20RA10 programmieren, testen und disassemblieren kann. Mit Funktionskontrolle am "lebenden" GAL im Programmiergeraet drinnen (Pegel anlegen und schauen, was hinten rauskommt). Mehr Infos dazu bei Christian.Habermann@t-online.de

Die folgenden Angaben zur Identifikation von GALs beruhen auf ausgelesenen GALS und der c't 11/90, 12/90 und 12/92.

In der Reihe 58 befindet sich z.B.:

10001111 00100000 00000001 00000000  NS  GAL20V8  -25LNC  Winter 89/90
10001111 00011010 00000010 00000000  NS  GAL16V8QS-15QNS  Frühjahr 94
00100000 00000000 00000010 00000000  ST  GAL16V8S -20QB1
00100000 00000000 00000001 00000000  ST  GAL16V8  -20HB1
    ^        ^        ^        ^
    |        |        |        |
    |        |        |    Programmierzähler
    |        |        |    (nicht beschreiben)
    |        |        |
    |        |    Programmieralgorithmus
    |        |    0x00: Programmierdauer 80 msec, Programmierspg. 15.75 Volt
    |        |    0x01: Programmierdauer 80 msec, Programmierspg. 15.75 Volt    
    |        |    0x02: Programmierdauer 11 msec, Programmierspg. 16.5 Volt
    |        |    0x03: Programmierdauer 40 msec, Programmierspg. 14.5 Volt
    |        |    0x04: Programmierdauer 80 msec, Programmierspg. 14 Volt
    |        |
    |     IC-Typ
    |     0x00: 16V8
    |     0x1A: 16V8A/B  ???
    |     0x20: 20V8     ???
    |     0x3A: 20V8A    ???
    |     Wichtig für's ACW.
    |
Hersteller
$8F = National Semiconductor (NS)
$20 = SGS-Thomson (ST)
$A1 = Lattice
Gelesen werden muss die Reihe mit nur 12 V, damit man neuere GALs nicht schon beim Lesen verbrät.

PALCEs

Bei den am meisten verbreiteten programmierbaren Logikbausteinen gibt es neben den GALs der Hersteller Lattice, National Semiconductor und SGS-Thomson (GAL16V8 und GAL20V8) auch PALCEs von AMD (PALCE16V8, PALCE20V8). Diese unterscheiden sich jedoch trotz der ähnlichen Bezeichnung in zwei Punkten:

Programmierung GALs und PALCEs werden mit unterschiedlichen Programmieralgorithmen gebrannt, daher können PALCEs nicht mit den einfachen Selbstbau-GAL-Brennern programmiert werden.
Funktion GALs und PALCEs sind von der Funktion her nicht 100% kompatibel. Die OLMC (genauer gesagt der darin enthaltene F(eedback)MU(ltiple)X(er)) sind unterschiedlich. Dadurch werden bei PALCEs in bestimmten Fällen im normalen Betriebsmodus (keine Tristate- oder Registerausgänge) Ausgänge über die benachbarte OLMC auf die UND-Matrix zurückgeführt, während das bei GALs nicht der Fall ist (Spalte der Matrix liegt auf GND).
Es ist also nicht möglich, ohne Berücksichtigung der funktionellen Unterschiede mit Entwicklungstools für PALCEs (z.B. PALASM oder EASYABEL) JEDEC-Dateien für GALs zu entwerfen. Ebenso ist bei der Verwendung von JEDEC-Dateien, die ursprünglich für GALs erzeugt wurden, in PALCEs Vorsicht geboten. Genaueres steht im Artikel "GAL=PALCE?" in Elektor 01/94.

(E)EPROMs

In EPROMs wird zu jeder möglichen Kombination der Eingänge (A0-Ax) eine Kombination der Ausgänge (D0-Dx) gespeichert. Mit einem einfachen 27C256 kann man damit also 8 Logische Funktionen mit jeweils 15 Eingangsvariablen realisieren. Wer so hohe Komplexität bei gleichzeitig geringen Anforderungen an die Geschwindigkeit braucht, kann ein (E)EPROM statt mehrerer GALs benutzen.

MACHs und FPGAs

Zu diesem Thema suche ich noch einen einführenden Artikel. Wer schreibt ihn für die FAQ?

PICs

Allgemeine Merkmale

PIC-Prozessoren sind nach der Harvard-Architektur aufgebaut. Sie haben getrennte Busse für den Daten- und Programmspeicher. Der Datenspeicher ist bei allen PIC's 8-bit breit aufgebaut. Der Programmspeicher ist 12, 14 oder 16 bit breit.

Die Hardwareausstattung unterscheidet sich zwischen den einzelnen Typen stark. Einfache PIC's (16C5x) besitzen lediglich digitale I/O, sie sind der kleinste gemeinsame Nenner. Näheres siehe bei Hardwareausstattung.

Befehlsausführungszeiten

Alle Instruktionen sind in einem Wort im Programmspeicher kodiert. Bei Sprungbefehlen ist das Sprungziel ebenfalls im gleichen Wort kodiert. Alle Befehle dauern einen Maschinenzyklus, der 4 Oszillatorzyklen lang ist. Ausnahme sind Befehle, bei denen der Programmzähler modifiziert wird. Diese Befehle dauern 2 Maschinenzyklen. Daraus lassen sich Ausführungszeiten von Programmteilen sehr einfach berechnen. Wird für den Oszillator beispielsweise ein Quarz mit 4 MHz verwendet, ergibt sich eine Ausführungszeit von 1uS pro Befehl.

Programmspeicher

Die Datenbreite im Programmspeicher (ROM oder EEPROM) ist vom jeweiligen Prozessorkern abhängig. Es gibt keine Möglichkeit aus dem laufenden Programm heraus Daten aus dem Programmspeicher zu lesen.

RAM / Register

PICs haben weder RAM noch Register im herkömmlichen Sinn. Jede Speicherzelle läßt sich als Register verwenden. Der Programmzähler, I/O Ports, der RealTime-Counter (RTCC) sowie das Statusregister mit den Prozessorflags liegen ebenfalls im RAM-Bereich. Alle Befehle lassen sich uneingeschränkt auf alle Speicherzellen anwenden.

Für arithmetische Operationen gibt es das W-Register. Datenverschiebungen müssen ebenfalls über dieses Register laufen, weil es keinen Befehl zum direkten Verschieben von Daten von einer Speicherzelle in eine andere gibt.

Stack / Unterprogramme

Der Stack für Unterprogrammaufrufe wird hardwaremäßig organisiert, er kann vom Anwender nicht modifiziert werden. Der Stack liegt weder im Programmspeicher noch im Datenspeicher, auf den Inhalt kann nicht zugegriffen werden. Die Stacktiefe hängt vom Prozessorkern ab. Bei 12 bit PIC beträgt sie 2 Ebenen, bei 14 bit PIC's 8 und bei 16 bit PIC's 16 Ebenen. Parameterübergabe an Unterprogramme über den Stack ist nicht möglich. Wird die Tiefe das Stacks durch zu viele Unterprogrammaufrufe überschritten, vergißt der PIC die erste Returnadresse.

Picvarianten

Es folgt eine tabellarische Aufstellung gängiger PICs. Die in der Spalte "Programmspeicher" mit "ROM" gekennzeichneten Typen sind maskenprogrammierbar und deshalb für den Hobbybereich nicht geeignet. Die in derselben Spalte mit "EE" bezeichneten Typen haben ein EEPROM als Programmspeicher. Sie lassen sich mit einem sehr einfachen Programmiergerät lesen, schreiben und löschen. Unter "Datenspeicher" sind die für den Anwender zur Verfügung stehen Speicherzellen angegeben, Register mit besonderen Funktionen nicht eingerechnet.

Typ Programm-
speicher
Daten-
speicher
I/O-
Pins
Ges.
Pins
Inter-
rupts
Takt
fmax
in MHz
VCC-
Bereich
in V
Besonderheiten
Worte Wort-
breite
Worte Wort-
breite
PIC16C52 384
12
25
8
12
?
-
4 3.0-6.26 ultra-low-cost (neuer ultra-low-cost-Typ mit 12bit-Kern angekündigt)
PIC16C54 512 25 12 20 2.5-6.25
PIC16C54A 512 25 12 20 2.5-6.25
PIC16C54S 512 25 12 20 2.5-6.25 20pin SSOP
PIC16CR54 512 ROM25 12 20 2.0-6.25
PIC16CR54A 512 ROM25 12 20 2.0-6.25
PIC16C55 512 24 20 20 2.5-6.25
PIC16C56 1024 25 12 20 2.5-6.25
PIC16C57 2048 72 20 20 2.5-6.25
PIC16CR57A 2048 ROM7220 20 2.0-6.25
PIC16C58A 2048 73 12 20 2.5-6.25
PIC16C62 2048
14
128
8
22 28 7 20 ? 1 PWM
PIC16C63 4096 192 22 28 10 20 ? 2 PWM, USART
PIC16C64 2048 128 33 40/44 8 20 ? 2 PWM, Slaveport, USART
PIC16C65 4096 192 33 40/44 11 20 ? 2 PWM, Slaveport, USART
PIC16C71 1024 36 13 18 4 16 ? Slaveport, USART, 4fach-8bit-AD-Wandler
PIC16C73 4096 192 22 28 11 20 ? 2 PWM, Slaveport, USART, 5fach-8bit-AD-Wandler
PIC16C74 4096 192 22 40/44 12 20 ? 2 PWM, Slaveport, USART, 8fach-8bit-AD-Wandler
PIC16C84 1024 EE 36 +
64 EE
13 18 5 10 ? Programmspeicher als EEPROM (seriell in der Anwenderschaltung programmierbar), 64 Byte EEPROM (aus dem Programm benutzbar), BASIC-Compiler verfügbar (Siehe im Kapitel Computertechnik unter BASIC-Stamp).
PIC17C42 2048
16
256
8
33 40/44 ? 25 4.5-5.5
6mA typ.
2 PWM, USART, 3 16-bit-Zähler/Timer, 2 Compare/Capture Register, 55 Befehle
PIC17C44 8192 480 33 40/44 ? 25 ?
Legende für Kurzangaben unter "Besonderheiten"
USART Serielles Interface (auf I2C-Bus oder RS232 programmierbar)
Slaveport 8-bit Hostinterface für Mikroprozessor
PWM Pulsweitenmodulator
nfach-8bit-A/D-Wandler 8Bit-A/D Wandler mit n-fach-Eingangs-Multiplexer. Wandlungszeit 20µs.

Spezielle Varianten

Von jeder Familie gibt es eine Variante im Keramikgehäuse mit Glasfenser. Diese Typen sind mit UV-Licht wie ein EPROM löschbar. Bei diesen Typen ist der Oszillatortyp (RC, Quarz, High-Speed) beim Programmieren einstellbar, die übrigen Typen werden mit einem bestimmten Oszillatortyp ausgeliefert. Die 16C5X-Reihe gibt es zusätzlich in einer Low-Power Ausführung mit 32kHz Uhrenquarz. Der Stromverbrauch liegt dann bei typ. <20uA.

Support durch Mikrochip und im Internet

Mikrochip unterhält neben einem WWW- und einem FTP-Server auch eine Mailbox, die via T-Online und Compu$erve zum Ortstarif erreichbar ist, auch wenn man keinen eigenen T-Online- oder CompuServe-Zugang hat.

Man nehme ein Terminalprogramm, eingestellt auf ANSI-BBS. Damit wählt man sich bei T-Online ein:

  atdp01910     (oder: atdt01910)
Nachdem der Bildschirm vollgemüllt ist, einen "." eingeben und mit <Return> bestätigen, das schaltet T-Online auf VT-100 Modus. Auf die Frage nach der Anschlusskennung folgende Nummer eingeben:
  000255975978
Es erscheint das Eröffnungsmenü von CompuServe. "#" drücken. Es erscheint eine Mitteilungsseite. Mit "#" weitermachen. CompuServe fragt nach dem Host Name:
  mchipbbs <enter>
Beim ersten Mal werden nun Zugangsdaten eingestellt. Beim nächsten Mal ist nur User ID und Password notwendig - fertig. Das ganze in ein Telix-Simple-Script gepackt sieht so aus:
  waitfor "kennung:"      maxof 30 then send "." enter
  waitfor "kennung:"      maxof 10 then send "000255975978" 
  waitfor "Zum CompuServe-Informationsdienst" maxof 10 then send "#" 
  waitfor "weiter"        maxof 10 then send "#"
  waitfor "Host Name:"    maxof 10 then send "mchipbbs"   enter
  waitfor "User ID"       maxof 10 then send "XXX"        enter
  waitfor "password"      maxof 10 then send "XXX"        enter
(statt dem "XXX" sind natürlich die persönlichen Daten einzusetzen) Auf einschlägigen ftp Servern im Internet wird diese Mailbox gespiegelt.

Außerdem gibt es einen Assembler, der u. a. in der Maus TÜ im GPT Elektronik liegt. Die meisten Entwicklungstools liegen bisher nur in Versionen für DOS/Windows vor. Tips für andere Betriebssysteme bitte an Stefan Ullmann oder Horst Lehner.

Im UseNet erscheint in der Gruppe sci.electronics monatlich eine FAQ zum PIC. Es gibt auch eine Mailingliste, in der Entwickler von Mikrochip sowie Parallax vertreten sind. Diese Mailingliste ist jedoch stark frequentiert und deshalb im Mausnetz nur eingeschränkt lesbar. Infos hierzu in der PIC-FAQ.

Die mittlerweile weit verbreiteten BASIC-Stamps (Deutscher Distributor: Wilke) basieren ebenfalls auf PIC-Controllern. Sie enthalten einen Interpreter für den von der Entwicklungsumgebung erzeugten Zwischencode. Dieser wird in einem extern anzuschließenden EEPROM gespeichert und dann vom PIC interpretiert. Variablen können ebenfalls im EEPROM abgelegt werden. EEPROMs haben aber eine begrenze Anzahl von Schreibzyklen, daher ist diese Möglichkeit mit Vorsicht zu genießen.

Programmiergeräte

Der PIC-Progger der ELEKTOR kann fast alle PICs programmieren und wird über eine einfache serielle Schnittstelle betrieben; es reicht ein Terminalprogramm.

Bei allen Distributoren von Mikrochip (z.B. AVNET E 2000; München) ist das Programmierkit "PICSTART-16B1" nahezu zum Selbstkostenpreis zu haben. Das ganze Kit kostet inclusive PIC-Datenbuch, Embedded Control Handbuch, MPASM (Assembler), MPSIM (Simulator), Programmiergerät für PIC 16XX/17XX (anzuschließen am seriellen Port), 9-Pol-Sub-D-Kabel und Netzteil und einem PIC16C65 und einem PIC16C61 ca. 170,- DM + Mwst.

Eine weitere Möglichkeit zum Programmieren von PICs ist der Universalprommer "ALL07" (wenn man ohnehin verschiedene Speicherbausteinen zu programmieren hat, ist ein solches Gerät sowieso notwendig), der um die 1000,- DM kostet. Gibt es billigere Geräte mit vergleichbarer Funktionalität, evtl.auch als Bausatz oder Bauanleitung?

Speziell für den PIC 16C84 gibt es auch noch die folgende, superbillige Lösung:

     TxD ---*-----------------------------
     (2)    I                            I
           ---                          ---
           I I                          I I
           I I 2k2                      I I 10k
           ---                          ---
            I       I\I                  I
            *-------I-I-----*---------   I
            I       I/I     I        I   I
          ----\             I +      I   I
           /\  \           ---    14 I   I 4
          /  \    5V6      ---   --------------
          ----         100u I    I  Vdd Vpp   I
            I               I    I            I
            I               I  5 I            I
     GND ---*---------------*----I Vss        I
     (7)           22k           I            I
                  -----       12 I            I
     RTS ---------I   I----------IRB6 (clock) I
     (4)          -----          I            I
                  -----       13 I            I
     DTR ---------I   I----*-----IRB7 (data)  I
     (20)         -----    I     I            I
                   2k2     I     I  PIC 16C84 I
     CTS ------------------I     I------------I
     (5)
Wie man sieht, hängt die Schaltung direkt an einer RS232-Schnittstelle. Alle Spannungen werden aus dieser gewonnen; es ist keine externe Versorgung nötig. Deshalb ist zwar die Programmierspannung unterhalb der Toleranz (12-14V), nämlich 9-10 V, es funktioniert aber trotzdem. Laut Auskunft von Microchip wird die Spannung beim 16C84 nur benutzt, um ihn in den Programmiermodus zu schalten, d.h. die Qualität und Dauerhaftigkeit der Programmierung leidet nicht unter zu niedriger Spannung. Wenn der Chip umschaltet, ist es OK. Die benötigte Software ist PIP-02 und COM84.

Fast ebenso einfach und für den Anschluß an die Parallelschnittstelle gedacht ist das folgende PIC-16C84-Programmiergerät:

          _____        _________
 13.8V   |     |  5V  |         |
  o--+---|78L05|--+---|1/4  4066|-----------------------------+
     |   |_____|  |   |_________|                             |
    _|_     |    _|_       |            ________________      |   100n
 10u___     |    ___100n   |          O| 1      U    18 |O    |    | |
     |      |     |        |          O|                |O    +----| |----+
    ///    ///   ///       |          O|                |O    |    | |    |
                           |    +-----O| MCLR/Vpp       |O    |   _____   |
           |\              |    |  +--O| Vss        Vdd |O----+--|_____|--+
  <D2>-----| >o--+---------+    |  |  O|            RB7 |O------+  10k    |
  (4)      |/    |  _____       | /// O|            RB6 |O----+ |        ///
                 +-|_____|--+   |     O|     16C84      |O    | |
 <GND>-------+       18k  13.8V |     O|________________|O    | |
 (25)       ///   _________     |                             | |
                 |         |    |    _____                    | |
    13.8V +------|1/4  4066|----+---|_____|---+               | |
                 |_________|          10k     |               | |
           |\         |     _____            ///              | |
  <D3>-----| >o-------+----|_____|--+ 13.8V                   | |
  (5)      |/                18k                              | |
                       _____                                  | |
  LPT1             +--|_____|--+ 5V                           | |
           |\      |    10k                                   | |
  <D1>-----| >o----+------------------------------------------+ |
  (3)      |/          _____                                    |
                   +--|_____|--+ 5V                             |
           |\      |    10k                                     |
  <D0>-----| >o----+--------------------------------------------+
  (2)      |/                                                   |
                 All gates are inverting or non-inverting       |
            /|   TTL O/C buffers, 74xx06, or 74xx07             |
<-ACK>----o< |--------------------------------------------------+
 (10)       \|

  4066: pin-14, 13.8V; pin-7, GND.  buffer: pin-14, 5V; pin-7, GND.

Pegelumsetzer TTL/CMOS <--> RS232

Die einfachste und preiswerteste Möglichkeit (wenn Versorgungsspannungen von +/- 5..12V zur Verfügung stehen) ist die Verwendung von RS232-Leitungstreibern/-empfängern MC1488 und MC1489 (u. a. von Motorola).

Mit einfacher 5V-Versorgung arbeitet die folgende Schaltung mit dem MAXIM-Baustein ICL232 als Spannungswandler und Leitungstreiber:

       +5V >--------------*--------------+            RS-232 INPUTS/OUTPUTS
                          |              |
                          16             | -
                 +--------+-------+    ===== C3 22uF
                 |       Vcc      |      | +
           +---1-+ C1+         V+ +-2----*---/\/\/\----->DTR (20) DATA
         + |     |                |      |    5kOhm      TERMINAL READY
 C1 22uF =====   |                |      |
         - |     |                |      +---/\/\/\----->DSRS (24) DATA
           +---3-+ C1-            |           5kOhm      SIGNALING RATE
                 |             V- +-6---+                SELECT
           +---4-+ C2+            |     | +
         + |     |      ICL       |   ===== C4 22uF
 C2 22uF =====   |                |     | -
         - |     |      232       |    GND
  I        +---5-+ C2-            |
  N              |                |
  P    TD >---11-+ T1in     T1out +-14--------------> TD  (2) TRANSMIT DATA
  U              |                |
T P   RTS >---10-+ T2in     T2out +--7--------------> RTS (4) REQUEST TO SEND
T U              |                |
L T    RD <---12-+ R1out     R1in +-13--------------< RD  (3) RECEIVE DATA
/ S              |                |
C     CTS <----9-+ R2out     R2in +--8--------------< CTS (5) CLEAR TO SEND
M O              |                |
O U              +-------+--------+
S T                      |
  P                     15
  U                      |
  T                      *--------------------------< SIGNAL GROUND (7)
  S                      |
                        GND

(Simple Duplex RS-232 Port with CTS/RTS Handshaking)

Invertierender Schmittrigger als Logikpegelumsetzer TTL/100V

                      o Ub =100V
                      |
              +-------o-------------------------+
              |       |                         |
             +-+     +-+                        |
             | |     | |                        |
         R4  | |     | |  R1                    |
             +-+     +-+                        |
              |       |                         |
              |       V                         |
              |     |/                          |
              o-----|   T2                      |
              |     |\                          |
             +-+      |                   T3    |
         R5  | |      |                       |/
             | |      o-----------------------|
             +-+      |                       |\
              |    T1 |                         V
             ===      |                         |
                    |/                          o--------o  Ua
    Ue o------------|                           |
                    |\                         +-+
                      V                        | |
                      |                        | | R2
                      |                        +-+
                      |                         |
                      +-------------------------o
                                                |
                                               +-+
    R1 = 100 Ohm                               | |
    R2 = 6.8 kOhm                              | | R3
    R3 = 100 Ohm                               +-+
    R4 = 680 Ohm                                |
    R5 = 33  kOhm                              ===