Steuerung über USB statt über Centronics-Druckerschnittstelle

Früher hatten die Computer eine Centronics-Druckerschnittstelle. Die Datenleitungen ließen sich gleichzeitig (bidirektional) als Ein- und Ausgänge verwenden. So war es möglich Geräte (Robotergreifarm, Heizungsregler, Alarmanlage …) an diese Schnittstelle anzuschließen und zu steuern.
Inzwischen gibt es keine Centronicsbuchse an den PCs/Laptops/Tablets… mehr.
Aber es gibt Kabel die eine USB-Eingangsbuchse und eine Centronics-Ausgangsbuchse haben.
Meine Frage: Wie können mit Hilfe dieser Kabel die Geräte mit INP/OUT usw. gesteuert werden? Wird auch die Abfrage der Druckeradresse unterstützt? :upside_down_face:

Ja

Mit dementsprechender Software/Treiber.

Ja.

Hi!

Es kommt ein wenig drauf an. Grundsätzlich können über diese USB-Parallel-Schnittstellen natürlich Daten hin und her geschickt werden, Drucker etc. werden funktionieren.

Nur eines:

Ganz früher hab man darüber auch ganz gerne mal Schrittmotoren angesteuert. Man hat also im gleichmäßigen Takt ein byte geschickt, und ein einzelnes Bit davon immer wieder invertiert. Das hat den Schrittmotor dann einen Schritt machen lassen. Sowas hat man damals z.B. für einfache Plotter verwendet, teils auch für Hobby-Programmiergeräte für Microcontroller.
Das funktioniert aber nur, wenn die Software direkten Zugriff auf die Schnittstelle hat, und präzise bestimmen kann, wann ein Byte geschickt wird.
Heute, insbesondere über USB, geht das nicht mehr - der PC sammelt einfach 1000 zu sendende Bytes, und schickt die dann auf einmal rüber.

Sei also gewarnt, wenn das bei bestimmten Geräten nicht mehr funktioniert!

1 Like

Es sollen auf einer selbstgebastelten Platine über Schalter und Taster LEDS zum leuchten gebracht werden. Das ganze soll aber möglichst ruckelfrei - ohne merkbare Verzögerung - passieren. D. h. wenn ich auf einen Taster drücke, soll diese oder jene LED aufleuchten.

Ah, ein bastelprojekt…

Hast du auch an das Handshaking gedacht, also an die Steuerleitungen, mit denen PC und Gerät sich mitteilen, dass grade was gesendet bzw bereits gelesen wurde? Denn so ganz trivial ist das alles nicht!

Moin,

Worum geht es dir nun genau? Sollen per Programm LED aufleuchten und Taster abgefragt werden? Muss das wirklich wingend ein PC sein und eine Schnittstelle, die typisch kein realtime erlaubt?
Für solche Zwecke sind Arduino und Co besser geeignet.

Du willst dich mit einem PC und seinem Betriebssystem und einer exotischen Hardware rumprügeln, nur um eine LED zu betreiben? Das ist eigentlich die Domäne der embedded Controller und du kannst dich auf das Basteln von peripherer Hardware konzentrieren.
Auch ein raspberry wäre dafür sehr gut geeignet, wenngleich er dafür etwas zu viel kann.

-Luno

1 Like

Hallo sweber, hallo Lunochod,
wahrscheinlich habe ich mich unzureichend ausgedrückt. Es existieren bereits etliche Programme in GWBasic/PCBasic, welche mit der Original-Centronics laufen. Heutige PCs haben aber keinje Centronics mehr - alternativ gibt es einen Adapter „USB - Centronics“. Dieser funktioniert bei Drucker. Er soll auch bei gelöteten Hardwareplatinen im Schulbereich funktionieren. Schulen arbeiten mit Windows-PCs und Tabletts. Die Schüler sollen nicht raspberry lernen sondern im Rahmen von MSR (Messen-Steuern-Regeln) selbst eine Platine mit LEDs, Tastern und Schalter bestücken, die dann am PC angeschlossen werden kann.
Hier Beispiel eines Quellcodes:
100 REM - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
150 :
160 COLOR 7,0: CLS: KEY OFF
170 OUT 888,0: OUT 632,0: OUT 956,0
180 :
190 :
200 LOCATE 2,1,0
210 PRINT " * * * * * * * * * * * * * * Ein-Aus-Tester * * * * * * * * * * * * *
220 PRINT " * *
230 PRINT " * º Sensor º Ausgangswerte computerabhaengige Adresse *
240 PRINT " * º A D º A=000001=2^0= 1 Ausgang Eingang *
250 PRINT " * º º B=000010=2^1= 2 1 = 632/&H278 - 633/&H279 *
260 PRINT " * º B E º C=000100=2^2= 4 2 = 888/&H378 - 889/&H379 *
270 PRINT " * º º D=001000=2^3= 8 3 = 956/&H3BC - 957/&H3BD *
280 PRINT " * º C F º E=010000=2^4=16 *
290 PRINT " * º Taster º F=100000=2^5=32 aktueller Ausgang = *
300 PRINT " * Wert des Tasters = *
310 PRINT " *100 REM Signal (OUT Ausgang,Wert) Wert der Buchse = *
320 PRINT " *110 OUT 888, 0 Wert des Sensors = *
330 PRINT " *200 REM Tasterabfrage *
340 PRINT " *220 IF (INP(889) AND 16) = 0 THEN PRINT Taster nicht gedrueckt' * 350 PRINT " *230 IF (INP(889) AND 16) = 16 THEN PRINT Taster ist gedrueckt’ *
360 PRINT " *200 REM Buchsenabfrage *
370 PRINT " *220 IF (INP(889) AND 32) = 0 THEN PRINT Buchse ist geschlossen * 380 PRINT " *220 IF (INP(889) AND 32) = 32 THEN PRINT Buchse ist offen *
390 PRINT " *300 REM Sensorabfrage *
400 PRINT " *320 IF (INP(889) AND 64) = 0 THEN PRINT Es ist hell/Sensor aktiv'* 410 PRINT " *330 IF (INP(889) AND 64) = 64 THEN PRINT Es ist dunkel’ *
420 PRINT " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *";
430 LOCATE 25,3: COLOR 0,7: PRINT " Bitte waehlen: A-F = Ausgang 1-3 = Computertyp Taster Buchse Sensor „;: COLOR 7,0
440 LOCATE 23,1
450 :
460 REM Variable festlegen
470 TYP1 = 1: TYP2 = 2: TYP3= 3
480 TASTE$ = „2“: AUS1(AKTUELL) = 888: EIN1(AKTUELL) = 889
490 GOTO 510
500 TASTE$=“": TASTE$=INKEY$
510 IF TASTE$>=„a“ AND TASTE$<=„f“ THEN TASTE$=CHR$(ASC(TASTE$)-32)
520 IF TASTE$>=„1“ AND TASTE$<=„3“ THEN TASTE=VAL(TASTE$): GOTO 570
530 IF TASTE$>=„A“ AND TASTE$<=„F“ THEN TASTE=ASC(TASTE$)-61: GOTO 570
540 IF TASTE$<>"" THEN PLAY „c16“
550 IF TASTE$ = CHR$(27) THEN RUN „menue“
560 GOTO 580
570 ON TASTE GOSUB 640, 710, 780, 920, 990, 1060, 1130, 1200, 1270
580 OUT(AUS1(AKTUELL)), (INP(AUS1(AKTUELL)) AND 63): PLAY „p16“
590 LOCATE 10,68: PRINT " ": LOCATE 10,67: PRINT INP(AUS1(AKTUELL))
600 LOCATE 11,67: PRINT " ": LOCATE 11,67: PRINT (INP(EIN1(AKTUELL)) AND 16)
610 LOCATE 12,67: PRINT " ": LOCATE 12,67: PRINT (INP(EIN1(AKTUELL)) AND 32)
620 LOCATE 13,67: PRINT " ": LOCATE 13,67: PRINT (INP(EIN1(AKTUELL)) AND 64)
630 GOTO 500
640 REM Wahl 1
650 AUS1(AKTUELL) = 632: EIN1(AKTUELL)=633
660 LOCATE 6,47: COLOR 0,7: PRINT „1 = 632/&H278 - 633/&H279“: COLOR 7,0
670 LOCATE 7,47: PRINT „2 = 888/&H378 - 889/&H379“
680 LOCATE 8,47: PRINT „3 = 956/&H3BC - 957/&H3BD“
690 GOSUB 850
700 RETURN
710 REM Wahl 2
720 AUS1(AKTUELL) = 888: EIN1(AKTUELL)=889
730 LOCATE 6,47: PRINT „1 = 632/&H278 - 633/&H279“
740 LOCATE 7,47: COLOR 0,7: PRINT „2 = 888/&H378 - 889/&H379“: COLOR 7,0
750 LOCATE 8,47: PRINT „3 = 956/&H3BC - 957/&H3BD“
760 GOSUB 850
770 RETURN
780 REM Wahl 3
790 AUS1(AKTUELL) = 956: EIN1(AKTUELL)=957
800 LOCATE 6,47: PRINT „1 = 632/&H278 - 633/&H279“
810 LOCATE 7,47: PRINT „2 = 888/&H378 - 889/&H379“
820 LOCATE 8,47: COLOR 0,7: PRINT „3 = 956/&H3BC - 957/&H3BD“: COLOR 7,0
830 GOSUB 850
840 RETURN
850 REM ----- Textkorrektur -----
860 AUS$=RIGHT$(STR$(AUS1(AKTUELL)),3): EIN$=RIGHT$(STR$(EIN1(AKTUELL)),3)
870 LOCATE 13,15: PRINT AUS$
880 LOCATE 15,19: PRINT EIN$: LOCATE 16,19: PRINT EIN$
890 LOCATE 18,19: PRINT EIN$: LOCATE 19,19: PRINT EIN$
900 LOCATE 21,19: PRINT EIN$: LOCATE 22,19: PRINT EIN$
910 RETURN
920 REM taste A
930 IF (INP(AUS1(AKTUELL)) AND 1) = 1 THEN GOTO 960
940 OUT AUS1(AKTUELL),INP(AUS1(AKTUELL)) + 1
950 LOCATE 5,26: COLOR 0,7: PRINT " A=000001=2^0= 1 ": LOCATE 5,13: PRINT „A“: COLOR 7,0: GOTO 980
960 LOCATE 5,26: PRINT " A=000001=2^0= 1 ": LOCATE 5,13: PRINT „A“
970 OUT AUS1(AKTUELL),INP(AUS1(AKTUELL)) - 1
980 RETURN
990 REM taste B
1000 IF (INP(AUS1(AKTUELL)) AND 2) = 2 THEN GOTO 1030
1010 OUT AUS1(AKTUELL),INP(AUS1(AKTUELL)) + 2
1020 LOCATE 6,26: COLOR 0,7: PRINT " B=000010=2^1= 2 ": LOCATE 7,13: PRINT „B“: COLOR 7,0: GOTO 1050
1030 LOCATE 6,26: PRINT " B=000010=2^1= 2 ": LOCATE 7,13: PRINT „B“
1040 OUT AUS1(AKTUELL),INP(AUS1(AKTUELL)) - 2
1050 RETURN
1060 REM taste C
1070 IF (INP(AUS1(AKTUELL)) AND 4) = 4 THEN GOTO 1100
1080 OUT AUS1(AKTUELL),INP(AUS1(AKTUELL)) + 4
1090 LOCATE 7,26: COLOR 0,7: PRINT " C=000100=2^2= 4 ": LOCATE 9,13: PRINT „C“: COLOR 7,0: GOTO 1120
1100 LOCATE 7,26: PRINT " C=000100=2^2= 4 ": LOCATE 9,13: PRINT „C“
1110 OUT AUS1(AKTUELL),INP(AUS1(AKTUELL)) - 4
1120 RETURN
1130 REM taste D
1140 IF (INP(AUS1(AKTUELL)) AND 8) = 8 THEN GOTO 1170
1150 OUT AUS1(AKTUELL),INP(AUS1(AKTUELL)) + 8
1160 LOCATE 8,26: COLOR 0,7: PRINT " D=001000=2^3= 8 ": LOCATE 5,20: PRINT „D“: COLOR 7,0: GOTO 1190
1170 LOCATE 8,26: PRINT " D=001000=2^3= 8 ": LOCATE 5,20: PRINT „D“
1180 OUT AUS1(AKTUELL),INP(AUS1(AKTUELL)) - 8
1190 RETURN
1200 REM taste E
1210 IF (INP(AUS1(AKTUELL)) AND 16) = 16 THEN GOTO 1240
1220 OUT AUS1(AKTUELL),INP(AUS1(AKTUELL)) + 16
1230 LOCATE 9,26: COLOR 0,7: PRINT " E=010000=2^4=16 ": LOCATE 7,20: PRINT „E“: COLOR 7,0: GOTO 1260
1240 LOCATE 9,26: PRINT " E=010000=2^4=16 ": LOCATE 7,20: PRINT „E“
1250 OUT AUS1(AKTUELL),INP(AUS1(AKTUELL)) - 16
1260 RETURN
1270 REM taste F
1280 IF (INP(AUS1(AKTUELL)) AND 32) = 32 THEN GOTO 1310
1290 OUT AUS1(AKTUELL),INP(AUS1(AKTUELL)) + 32
1300 LOCATE 10,26: COLOR 0,7: PRINT " F=100000=2^5=32 ": LOCATE 9,20: PRINT „F“: COLOR 7,0: GOTO 1330
1310 LOCATE 10,26: PRINT " F=100000=2^5=32 ": LOCATE 9,20: PRINT „F“
1320 OUT AUS1(AKTUELL),INP(AUS1(AKTUELL)) - 32
1330 RETURN

Ganz ehrlich: Da wird mir ganz anders! Im Jahre 2022, in dem an jeder Ecke ein kleiner Arduino o.ä. für ein kleines Taschengeld zu bekommen ist, dessen Programmierung nicht nur schnell und einfach zu erlernen ist, sondern bei dem das Wissen um diese Dinge einen echten Mehrwert in Bezug auf die berufliche Zukunft bedeutet, noch mit GW-Basis und Centronics-Schnittstellen zu hantieren, zeigt mal wieder deutlich wo es im Schulsystem überall so krankt!

Du willst hier Wissen von vorvorgestern vermitteln, dass schon lange niemand mehr braucht. Bei mir wecken die Zeilen oben noch nostalgische Gefühle, denke ich an lustige Nachmittage in der damals höchst begehrten Informatik-AG (kein regulärer Unterricht), als wir die halbe Physik-Vorbereitung leer geräumt haben, um eine (allerdings fertig erworbene) Messplatine an einem 80286 so einzurichten/dafür passende Programme zu schreiben, damit man das Ding dann im Unterricht einsetzen konnte. Aber da reden wir von den 80ern des letzten Jahrhunderts!

Mein Sohnemann hat letztes Jahr in der 10. im inzwischen nicht nur regulären sondern sogar verpflichtenden Informatik-Unterricht solche Geschichten selbstverständlich mit einem Arduino in objektorientierter Programmierung gemacht (gelernt damit umzugehen hatte er zusammen mit mir schon viel früher). Da gab es für jeden ein kleines Einstiegspaket mit einem Controller, einem Breadboard und ein paar Sensoren und Aktoren, und auf den Schul-PC war natürlich die Arduino IDE installiert. Also USB-Kabel zwischen PC und Controller, und los ging es. Der hat hier inzwischen mit den kleinen Biestern sein ganzes Zimmer automatisiert, hängt damit über MQTT an der „großen Hausautomatisation“, die ich aufbaue, … Das sind Dinge, mit denen er sich für Ausbildung/Studium und später Beruf brauchbares Wissen schafft.

2 Like

Moin,

Der raspberry ist ein PC, ein ganz kompletter sogar. Tastatur, Monitor und Maus ran und fertig ist der kleine Desktop PC. Und sogar mit Basic, wenn man’s möchte. Mit einem durchaus respektablen Betriebssystem und Programmiersprachen, die für diese Zwecke zugeschnitten sind. Und exakt MSR ist ein Job für embedded Systems. Dessen Daten gehen dann Richtung PC und der sorgt für den Oberbau.
Gerade MSR erfordert realtime Fähigkeiten, um nachvollziehbare zeitliche Intervalle zu erhalten.

Muss das wirklich so sein, dass man museale Hardware nur für diesen Zweck zum Laufen bringt und eine Programmiersprache, deren Nutzer teilweise schon auf dem Friedhof liegen? Ich kann vieles nachvollziehen, aber das nur bedingt. Für Fortgeschrittene User ist das ein super Ausflug in die Vergangenheit, wenn man denen mal Basic als „Konfrontationstherapie“ in die Hand drückt. Aber Frischlinge?

facepalm

Aus gutem Grund, denn die war dafür nicht gedacht.

Ja, nur bitte nicht mit Konzepten aus der Steinzeit.

Aber okay, es ist deine Angelegenheit. Kauf dir ein Kabel (oder deren mehrere) und probier aus, was geht,.

-Luno

2 Like

Hi!

ich muss mich da anschließen.

Die Parallelschnittstelle ist irgendwo um das Jahr 2000 aus den PCs verschwunden. Viele Uni-Absolventen von heute waren da noch nicht mal geboren. Von Schülern will ich nicht erst anfangen.

Genauso das mit dem Basic.Ja, VisualBasic wird in Office genutzt, aber das ist heute keine ernstzunehmende Programmiersprache mehr, und ist für die Schüler weitgehend nutzlos.
(GOTO war nebenbei schon im Jahr 2000 verpönt)

Wie die anderen sagen, fertige Platinen mit Microcontroller sind heute gut und günstig zu haben, leisten das gleiche, nur besser, und noch mehr.
Übrigens kenne ich vierte Klassen (!), die im Sachkundeunterricht (!) Microcontroller programmieren. Was die so machen? Sie entdecken, dass das Ding ne Funkschnittstelle hat, man anderen ne Nachricht schicken kann, beim Empfang gleich noch die Signalstärke geliefert bekommt, und bauen daraus ein Corona-Abstandsalarm.

2 Like

Also noch einmal: Es geht nicht darum eine aktuelle und einfachere Lösung zu finden. Die Schüler sollen zunächst einmal an Dioden, Widerständen usw. herangeführt werden.

Ohne Werbung machen zu wollen; schwebt der Geist des guten alten „Kosmos“ Elektronik - Baukastens durch die Gegend.
Ja, nicht billig für ein Steckbrett und ner Handvoll Bauteilen, aber doch Der Klassiker für den Einstieg.

1 Like

Moin,

Dazu benötigt niemand einen PC. Das geht ohne diesen Zirkus.

Das täte es auch.

-Luno

1 Like

Und wozu brauchst Du dabei einen PC mit einer Uralt-Schnittstelle und Uralt-Software?

Batterie-Schalter-Vorwiderstand-LED, Multimeter und Punkt!
Batterie-Schalter-verschiedene Vorwiderstände-LED, Multimeter und Punkt!
Batterie-Schalter-Poti als Spannungsteiler-LED, Multimeter und Punkt!

Statt Multimeter kann man auch wunderbar einen Arduino o.ä. verwenden. Eine kleine Schleife mit analogRead() und Ausgabe des gemessenen Werts auf der seriellen Konsole (Teil der IDE auf dem PC) braucht nur ein paar Zeilen, ist sofort für jeden Schüler verständlich und macht schnell Lust auf mehr. Also den Schalter auch noch schnell angeklemmt und die Schleife um eine Abfrage des Status des Schalters erweitert. Um das Ding autark vom PC zu machen, dann noch für ein paar Euro eine kleine Anzeige angeklemmt und mit wenigen Zeilen in das Programm eingebunden, … Für all das gibt es 1001 fertige Anleitungen im Internet zu finden.

Ja, das waren noch Zeiten an die ich mich gerne erinnere. Aber die liegen noch ein Stück vor dem ersten Basic-programmierbaren Taschenrechner, dem Atari mit sehr modernem Basic-Dialekt (GFA) und passender IDE und dann irgendwann auch dem ersten PC mit Turbo Pascal, Modula, C, … Für all die Experimente der Kosmos-Kästen brauchte man keinen PC, und daher wundert mich die Fragestellung hier wirklich massiv: Entweder es geht um eine Einführung in ein paar Grundkomponenten der Elektronik, dann geht das wunderbar wie zu guten alten Kosmos-Zeiten ohne PC oder man will da gerne einen PC oder Microcontroller einbinden, dann gibt es dafür heute so wunderbar billige und leicht zu erlernende Plattformen (in die ich als Jurist mit Mitte 50 noch einen recht problemlosen Einstieg gefunden und inzwischen diverse nette Sachen fürs Haus gebaut habe), mit denen man dann richtig was anfangen kann.

Aber hier will sich jemand offenbar unbedingt in das Reich der Schmerzen begeben und sich mit einer Uralt-Lösung rum ärgern, die aller Voraussicht nach an eigentlich für den Zweck nicht gedachten Schnittstellen nur Probleme machen wird.

Hallo Kudo, ich erinnere mich an den Logikus von Kosmos. Mein Brüderchen hat viel damit gemacht und wurde später Meister (Mechatroniker) und bildete Leute aus.

Ich habe mich mehr für Software interessiert und gemeinsam mit einem Lehrer Benutzeroberflächen entwickelt, die ähnlich wie der Logikus bzw. durch Eingabe von Fomeln der booleschen Algebra arbeiten.
Solltest Du daran Interesse haben und eine Zusammenarbeit anstreben kann ich die Verbindung herstellen
:slight_smile:

Das war schon in den 80ern verpönt, ebenso wie die Aneinanderreihung von Befehlen mit Doppelpunkten. Modernere Basic-Dialekte hatten schon damals nicht mal mehr Zeilennummern, nutzen aber in der IDE automatische Einrückungen, verstanden sich auf Prozeduren, …

GFA-Basic 3.0 von 1988

1 Like

Oh man, mit GFA Basic hab ich angefangen!
Das waren Zeiten !

Angefangen habe ich zwar tatsächlich noch etwas früher (Basic-programmierbarer Sharp-Taschenrechner, Fujitsu FM7 mit Z80-Karte CP/M und Turbo Pascal, …), GFA-Basic war aber dann tatsächlich die Sprache mit der ich als Schüler erste größere Projekte auf dem Atari ST gemacht habe. Und da ging dann schon richtig viel. Wenn man sich überlegt, was damit damals schon so alles möglich war, das auf dem PC dann noch Jahre brauchte, … Ich habe damals z.B. ein recht umfangreiches Business-Grafik Programm geschrieben. Da fielen den Leuten mit den grünen Bildschirmen die Augen aus dem Kopf, wenn man ein Tortendiagramm mit der Maus frei auf dem Bildschirm aufziehen, die Neigung und Höhe ebenso festlegen und das Ding dann inkl. Beschriftung in einer Sekunde zeichnen lassen konnte.

So, nachdem wir nun alle über die alten Zeiten gesprochen haben, komme ich zurück auf meine Frage:
Wie können mit Hilfe dieser Kabel die Geräte mit INP/OUT usw. gesteuert werden? Wird auch die Abfrage der Druckeradresse unterstützt?