Hallo allesamt, ich habe eine Frage zu C (ich hoffe, dass es einigermassen in diese Liste passt): Mich hat gestern ein Bekannter gefragt, ob es ein Problem wäre, eine Zeitmessung über ein kleines C-Prograemmchen zu realisieren. Es soll erfasst werden, wie lange es dauert bis der Deckel eines Cola-Dosenhalters (in irgend einem neuen Auto) aufschnappt. Ich habe mir gedacht, dass zwei Gabellichtschranken den Start-Stop-Befehl für den Timer realisieren. Die Lichtschranken haben einen Schalttransistor, der Signal Low oder High geben könnten. Nun zu meiner Frage: Ist es möglich ohne I/O-Karte, z.B. über den Parallel-Port bei Signal Low am Pin X eine Routine starten zu lassen? Vielleicht hat ja schon mal wer sowas gemacht und kann mir weiterhelfen. Danke im Voraus Ralf
* Ralf Münk schrieb am 29.Sep.2001:
Ist es möglich ohne I/O-Karte, z.B. über den Parallel-Port bei Signal Low am Pin X eine Routine starten zu lassen?
Habe ich noch nicht gemacht, aber horsch doch auf /dev/lp0 an der bestimmten Stelle. Wenn's nicht /dev/lp0 ist, dann vielleicht /dev/lp1 oder /dev/lp2. Bernd -- Umsteiger von Microsoft Windows xx? Hast Du schon file://usr/doc/howto/de/DE-DOS-nach-Linux-HOWTO.txt gelesen? Auch file://usr/doc/Books/Linuxhandbuch.dvi ist zu empfehlen. |Zufallssignatur 1
"Ralf Münk" wrote:
Hallo allesamt,
ich habe eine Frage zu C (ich hoffe, dass es einigermassen in diese Liste passt):
Mich hat gestern ein Bekannter gefragt, ob es ein Problem wäre, eine Zeitmessung über ein kleines C-Prograemmchen zu realisieren. Es soll erfasst werden, wie lange es dauert bis der Deckel eines Cola-Dosenhalters (in irgend einem neuen Auto) aufschnappt.
Ich habe mir gedacht, dass zwei Gabellichtschranken den Start-Stop-Befehl für den Timer realisieren. Die Lichtschranken haben einen Schalttransistor, der Signal Low oder High geben könnten.
Nun zu meiner Frage:
Ist es möglich ohne I/O-Karte, z.B. über den Parallel-Port bei Signal Low am Pin X eine Routine starten zu lassen?
Ja.
Vielleicht hat ja schon mal wer sowas gemacht und kann mir weiterhelfen.
Du hast schon das IO-Port-Programmimg Mini-Howto durchgelesen ? -- Markus Kossmann markus.kossmann@inka.de
"Ralf Münk" schrieb:
Hallo allesamt, Ist es möglich ohne I/O-Karte, z.B. über den Parallel-Port bei Signal Low am Pin X eine Routine starten zu lassen?
Wenn es einfach sein und wenig kosten soll, kannst Du auch die Statusleitungen einer seriellen Schnittstelle benutzen. Dort hast Du 4 Eingänge zur Verfügung. Wenn die Leitungen nicht allzu lang sein sollen und keine wilden EMV-Störungen gegeben sind, kannst Du das ohne weitere Elektronik realisieren. C-Code und Schaltplan poste ich bei Bedarf. -- Grüße, Bert
Moin Moin
From: "Bert Blümer"
"Ralf Münk" schrieb:
Hallo allesamt, Ist es möglich ohne I/O-Karte, z.B. über den Parallel-Port bei Signal Low am Pin X eine Routine starten zu lassen?
Wenn es einfach sein und wenig kosten soll, kannst Du auch die Statusleitungen einer seriellen Schnittstelle benutzen. Dort hast Du 4 Eingänge zur Verfügung. Wenn die Leitungen nicht allzu lang sein sollen und keine wilden EMV-Störungen gegeben sind, kannst Du das ohne weitere Elektronik realisieren.
C-Code und Schaltplan poste ich bei Bedarf.
Da das Thema gerade diskutiert wird, muß ich doch auch einmal nachhaken: Muß man das in C realisieren? Also mir schwebt da für meinen "Server" ein Umschalter vor. Und jedesmal wenn er umgeschlatet wird, wird ein Bash-Skript aufgerufen. So in der Art von Anwesend/Abwesend. Bei Abwesend könnte z.B. Vbox anspringen usw. Ist so etwas sehr komplziert? Also meine Löt-Künste halten sich sehr im Rahmen! Und mit C sieht es nicht viel besser aus! Gruß & Danke Thilo
"Thilo A. Coblenzer" schrieb:
"Ralf Münk" schrieb:
Hallo allesamt, Ist es möglich ohne I/O-Karte, z.B. über den Parallel-Port bei Signal Low am Pin X eine Routine starten zu lassen?
Da das Thema gerade diskutiert wird, muß ich doch auch einmal nachhaken: Muß man das in C realisieren? Also mir schwebt da für meinen "Server" ein Umschalter vor. Und jedesmal wenn er umgeschlatet wird, wird ein Bash-Skript aufgerufen. So in der Art von Anwesend/Abwesend. Bei Abwesend könnte z.B. Vbox anspringen usw.
Wenn Du perl kannst, da hatte ich auch mal ein script, aber weiß nicht mehr woher. Es ist aber nicht kompliziert; ich habe genau das mal mit einem USV-Progrämmchen gemacht. Such mal nacht usvd-2_0_0.tgz, wenn Du es nicht findest, kann ich es per PM schicken. Es läßt sich auch ohne große C-Kenntnisse anpassen, da gut erklärt. -- Grüße, Bert
* Thilo A. Coblenzer schrieb am 30.Sep.2001:
Da das Thema gerade diskutiert wird, muß ich doch auch einmal nachhaken: Muß man das in C realisieren? Also mir schwebt da für meinen "Server" ein Umschalter vor. Und jedesmal wenn er umgeschlatet wird, wird ein Bash-Skript aufgerufen. So in der Art von Anwesend/Abwesend. Bei Abwesend könnte z.B. Vbox anspringen usw.
Ist so etwas sehr komplziert? Also meine Löt-Künste halten sich sehr im Rahmen! Und mit C sieht es nicht viel besser aus!
Ich glaube, daß muß nicht in C geschrieben werden es genügt eine Schnittstelle auszulesen, die bei Linux ja normale Dateien sind. Gibt es ein HOWTO zu, habe ich jetzt leider nicht zur Hand. Löten wpürde ich natürlich nur an einem Stecker, und nicht etwa am Rechner selber. Dann kannst Du max. ein paar Stecker versauen. Bernd -- ROTFL = Rolling On The Floor, Laughing = Auf dem Boden wälzen, lachend. SCNR = Sorry, Could Not Resist = Sorry, Ich konte nicht wiederstehen. AFAIK = As Far As I Know = So weit ich weis|BTW = By The Way = Nebenbei bemerkt IMHO = In My Humble Opinion = meiner bescheidenen Meinung nach |Zufallssig. 9
Ist es möglich ohne I/O-Karte, z.B. über den Parallel-Port bei Signal Low am Pin X eine Routine starten zu lassen?
Ja. Hab' ich auch schon gemacht und geht sehr einfach.
Folgende manuals helfen weiter:
ioperm(2), outb(2)
Ausserdem muss man die Adresse des Ports kennen (mal boot messages
konsultieren). Ein port ist der data-port, dann kommen die kontroll-ports
(busy, strobe, etc.)
Man muss auch im BIOS die parallele Schnittstelle auf irgend einen Modus
umstellen, der bidirektionale Datenübertragung erlaubt (ein wenig probieren).
Naja, ein wenig in den kernel sources zu wühlen und sich dort den
lp-treiber anzusehen ist auch nicht falsch... (wegen der #defines)
Es sollte so ungefähr gehen (zumindest für kernel 2.2):
#include
Von: "Wolly Wicyrek
[Dem Adreßbuch hinzufügen] Ja. Hab' ich auch schon gemacht und geht sehr einfach. Folgende manuals helfen weiter: ioperm(2), outb(2) Ausserdem muss man die Adresse des Ports kennen (mal boot messages Es sollte so ungefähr gehen (zumindest für kernel 2.2): #include #include #include /*#include */ #include #include #include typedef unsigned char uchar; #define baseaddr 0x378 /* entsprechend setzen */ /* Das funktioniert bei mir mit einem speziellen mode * (ECP, EPP? - weiss ich gerade nicht) ulong outdata=baseaddr ; ulong status =baseaddr+1LU; ulong control=baseaddr+2LU; ulong indata =baseaddr+3LU; int main() { uchar val; if(ioperm(baseaddr,4,1)) { perror("ioperm"); } /* play around with port.... */ outb(0x00,outdata); val=inb(indata); ....... return(0); }
Danke Wolly, ich hab`s mittlerweile auch schon raus. Ich nutze auch die Ausgänge. Momentan hängen da noch Status-LED`s (soll irgendwann mal ein LCD- Display dran). Da lasse ich sicherheitshalber die base-addr vorher durch ein script abfragen und in eine Datei schreiben (allerdings dezimal), die dann mein C-Progrämmchen ausliest. Wenn nämlich das Programm mal woanders läuft, und auf der Adresse z.B. ein Festplattencontroller hängen würde... Rest kannst Du Dir denken. Ralf
participants (6)
-
B.Brodesser@t-online.de
-
Bert Blümer
-
markus.kossmann@inka.de
-
Ralf M�nk
-
Thilo A. Coblenzer
-
Wolly Wicyrek