Will man USB-Druckdaten auffangen, genügt ein zusätzlicher USB-Paralleldrucker-Konverter, den man preiswert nahezu überall kaufen kann, etwa bei Reichelt. Eine Ein-Box-Lösung ist auch nichts anderes als so ein Ensemble, nämlich zwei Mikrocontroller Rücken an Rücken, nur ungleich teurer.
Der Einsatz des FT245R (das R ist wichtig!)
Stück | Beschreibung | Bauform | Reichelt-Bestellkode | Preis in € (2011) |
---|---|---|---|---|
1 | USB-FIFO-Schaltkreis | QFN-32 | FT245RQ | 4,99 |
1 | Keramikkondensator 100 nF | 0603 | X7R-G0603 100n | 0,05 |
1 | Keramikkondensator 4,7 µF | 0603 | X5R-G0603 4,7/6 | 0,05 |
3 | Widerstandsnetzwerk 4 × 100 Ω | 1206 | BCN16 100 | 0,02 |
1 | Widerstand 4,7 kΩ | 0603 | SMD-0603 4,7k | 0,10 |
1 | SubD-Stecker 25-polig | Lötkelch | D-Sub St 25 | 0,19 |
1 | USB-Buchse MiniB | Durchsteck | USB BWM | 0,98 |
1 | SubD-Gehäuse | Plast | KAPPE CG25G | 0,16 |
1 | USB-Kabel | 1 m | AK 673-A | 1,00 |
1 | Ein- oder zweiseitige Leiterplatte, ggf. ohne Löcher (siehe Text) Durchkontaktierungen oder Brücken können von Hand bestückt werden | LptCap.brd | DIY |
Hinweis: Der Gehäusetyp Q (QFN, 32-polig, Padabstand 0,5 mm) ist bei Reichelt nicht mehr lieferbar (2011), für den Gehäusetyp L (SSOP, 28-polig, Beinabstand 0,65 mm) wären die Pin-Nummern im Schaltplan falsch und die Leiterplatte neu zu routen.
LptCap ist nicht dazu gedacht, lokale Druckdaten aufzufangen. Auch wenn das tatsächlich funktioniert, dafür gibt es software-basierende Lösungen, bspw. die Shareware DosPrn, neben den vom jeweiligen Betriebssystem gebotenen Lösungen.
Außer mit dem FT245R kann man's auch umständlicher mit Mikrocontroller und Firmware lösen. Möglicherweise ist's billiger. Beispielsweise:
Bisweilen möchte man Druckdaten parallel zum Drucker mitprotokollieren. Als Y-Kabel sozusagen. Dann ist in die BUSY-Leitung ein ODER-Gatter einzufügen. Dieses blockiert das Ausgabeport solange, bis sowohl Drucker als auch FT245R bereit sind zum Datenempfang — dann geht niemandem ein Byte durch die Lappen. Im Prinzip kann man das auch in Software erledigen, d.h. das Programm SPE (siehe unten) ist so zu modifizieren, dass es sowohl druckt als auch protokolliert.Beim hardwaremäßigen Ansatz als Y-Kabel ist zu klären, was passieren soll, wenn der Protokoll-PC ⓐ ausgeschaltet oder ⓑ nicht empfangsbereit ist. Davon hängt die Beschaltung des ODER-Gatters ab.
SubD25 | Port | Board |
---|---|---|
1 | PD4 | 4 |
2 | PD0 | 3 |
3 | PB1 | 15 |
4 | PB2 | 16 |
5 | PB3 | 14 |
6 | PB4 | 8 |
7 | PB5 | 9 |
8 | PB6 | 10 |
9 | PD7 | 6 |
10 | PD1 | 2 |
11 | PC6 | 5 |
12 18..24 | GND | |
15-16 | — |
Beispiel-Implementierung mache ich erst auf Anfrage! Deshalb gibt's hier zurzeit keine Firmware zum Runterladen.;ISR bei Hi-Lo-Übergang an Strobe (hier: Input Capture an PD4) ;UENUM sei bereits mit der Endpoint-Nummer für USB-CDC-IN geladen, ;die Register R16, R17 und Flags verfügbar zwecks schneller Interruptreaktion auf die Hi-Lo-Flanke an Strobe sbi PORTD, 1 ;BUSY highin r16,PINB ;(herausgeführte) D1..D6 in r17,PIND ;restliche D0 und D7 andi r16, 0x7E andi r17, 0x81 or r16,r17 ;zusammensetzen sts UEDATX,r16 ;Byte zum USB-CDC ausgeben in r16,UEINTX sbrc r16, 5 ;RWAL-Bit: FIFO voll?rjmp 1f ;nein, zum ACK-Zyklusldi r16, 0x7F sts UEINTX,r16 ;Puffer abschicken (FIFOCON löschen) in r16,UEINTX sbrs r16, 5 ;RWAL-Bit: Neue Bank (des Doppelpuffers) vorhanden?rjmp 2f ;nein, BUSY HIGH lassen (Hauptschleife muss sich kümmern)1 : cbi PORTD,1 ;BUSY lowcbi PORTC, 6 ;!ACK lowldi r16, 16 1 : dec r16 ;3 µs wartenbrne 1b sbi PORTC, 6 ;!ACK high2 : reti ;fertig
Hingegen zum Ausdruck auf einen anderen Windows-Drucker (bspw. einen PDF-Generator), ggf. unter Beachtung eingebetteter ESC/P-Druckersteuerkodes, gibt es das Programm SPE = Serial Printer Emulator. Der Name kommt daher, weil jenes Programm den Computer in (mindestens) einen Drucker mit serieller Schnittstelle umwandelt, zusammen mit dem hier vorgestellten Adapter mit paralleler Schnittstelle.
Selbstverständlich kann man auch jede andere Art von Programm selber schreiben, das die Daten von der COM-Schnittstelle einliest und auswertet, etwa in VisualBasic, VBA, C++, Python oder LabVIEW.
Die Leiterplatte oder das Fertiggerät gibt es nicht bei mir zu kaufen, Nachfrage zwecklos! Wer so etwas ganz schnell braucht, geht am besten zu Ebay, ersteigert sich dort ein FT245R-Modul, und lötet einen SubD-Stecker mit kurzen Drähten an. Sieht nicht so schick aus, aber funktioniert und geht schnell.