Phade Geschrieben 10. Februar 2005 Geschrieben 10. Februar 2005 Moin Moin zusammen, ich möchte gern ein C-Programm schreiben, mit dem ich Ports (z.B. Com1 oder LPT1 usw..) auslesen kann. Nun wollte ich wissen ob das überhaupt geht und wenn ja, wie schreibe ich dann das Programm :confused: Ich sollte dazu sagen, dass das ganze auf einem Linuxsystem laufen müsste, was das ganze zusätzlich noch erschwert.... Thanx im voraus Zitieren
baba007 Geschrieben 10. Februar 2005 Geschrieben 10. Februar 2005 klick mich, vielleicht hilfts Zitieren
Phade Geschrieben 10. Februar 2005 Autor Geschrieben 10. Februar 2005 Also etwas hat es geholfen. Weiß jetzt aber nicht nicht ob das AVR auf mich zutrifft ??? Die wollen ja Ports an Robotern auslesen und ich "nur" an meinem PC...... Kann auch sein das ich das jetzt falsch verstehe......... Zitieren
Phade Geschrieben 10. Februar 2005 Autor Geschrieben 10. Februar 2005 Also, ich habe da mal begonnen 'blind' einen Code zu schreiben. (Siehe unten...) Ich habe herausgefunden, das ich eine sogenannte Headerdatei schreiben muss, da C, C++ und noch weitere Programmiersprachen keine Ports kennen. In dieser Headerdatei (heißt das überhaupt so????) kann ich dann meinem Programm die Ports beibringen. Hat da jemand eventuell etwas Erfahrung mit dem schreiben solcher Headerdateien???? Falls jemand verbesserungsvorsachläge zu meinem derzeitigen Quelltext, immer her damit.... Hier noch der Quelltext: #include <stdio.h> main() { int ausgabe, eingabe; printf("Bitte geben Sie für COM1 die 1 ein, für COM2 die 2 oder für LPT1 die 3 ein: "); scanf("&i", &eingabe); if(eingabe == 1) { printf("\n\nPort COM1 wird ausgelesen.....Bitte warten....", &ausgabe); } else { if(eingabe == 2) { printf("\n\nPort COM2 wird ausgelesen.....Bitte warten....", &ausgabe); } else { if(eingabe == 3) { printf("\n\nPort LPT1 wird ausgelesen.....Bitte warten....", &ausgabe); } else { return 0; } } } return 0; }[/PHP] thanx.... Zitieren
Guybrush Threepwood Geschrieben 10. Februar 2005 Geschrieben 10. Februar 2005 Also was du bisher "Herausgefunden" hast, solltest du lieber schnell wieder vergessen weil das Schwachsinn ist Stattdessen hättest du einfach mal hier im Forum die Suche verwenden können: http://forum.fachinformatiker.de/search.php?searchid=128781 Zitieren
Phade Geschrieben 10. Februar 2005 Autor Geschrieben 10. Februar 2005 Hmmmmmmmm....... warum ist das denn Schwachsinn ???? ;-) zum zweiten mal Hmmmmm..... der Tip war ja nicht schlecht, aber leider konnte ich Anfänger damit nichts anfangen.....sorry (doppelt und dreifach!!!) könntest du mir eventuell trotzdem weiter helfen??????????????????? Zitieren
Guybrush Threepwood Geschrieben 10. Februar 2005 Geschrieben 10. Februar 2005 Wenn du keine Eigeniniative zeigst...nö In den 20 Minuten hast du dir wohl kaum alle Threads richtig durchgelsen und versucht dich über die dortigen Beispiele schlau zu machen. Zitieren
Phade Geschrieben 10. Februar 2005 Autor Geschrieben 10. Februar 2005 Ok, ok..... habe mir jetzt mal alle Threads richtig durchgelesen. Ich kann zum Beispiel den COM2 Port als Datei behandeln und mit READFILE z.B. lesen. Jetzt schließe ich da ein Thermostaten an, der mir Werte in Pulsweitenmodulation ausgibt. Wie bewerkstellige ich es denn nun, das ich die Ausgabewerte 'lesen' kann ????????????????????????????? Zitieren
Bubble Geschrieben 10. Februar 2005 Geschrieben 10. Februar 2005 Ok, ok..... habe mir jetzt mal alle Threads richtig durchgelesen. Ich kann zum Beispiel den COM2 Port als Datei behandeln und mit READFILE z.B. lesen. Jetzt schließe ich da ein Thermostaten an, der mir Werte in Pulsweitenmodulation ausgibt. Wie bewerkstellige ich es denn nun, das ich die Ausgabewerte 'lesen' kann ????????????????????????????? Es gibt den praktischen Weg unter Linux serielle Schnittstellen als Datei zu öffnen (geht auch unter Windows), da die Schnittstellen im /dev Verzeichnis eingeblendet werden, z.B. als "/dev/ttyS0". Suche im Web nach "serial-programming.howto" und nach "Serial Programming Guide for POSIX Operating Systems", das sollte zusammen ein paar Infos liefern. Ich habe herausgefunden, das ich eine sogenannte Headerdatei schreiben muss, da C, C++ und noch weitere Programmiersprachen keine Ports kennen. Das klingt so abwertend. Natürlich kennen Programmiersprachen so etwas nicht. Allenfalls Funktionsbibliotheken unterstützen bei dem Vorhaben. Da Du aber eine "sogenannte Headerdatei" schreiben musst und wenn ich mir Dein C-Codebeispiel anschaue, vermute ich, dass Du mit C/C++ noch nicht besonders viel Erfahrung hast. Daher: Du solltest Dich zuerst mehr mit C beschäftigen und zusätzlich allgemein etwas von den Abläufen in der Hardware kennen, bevor Du Dich an serielle Schnittstellen wagst. Zitieren
Timon Geschrieben 11. Februar 2005 Geschrieben 11. Februar 2005 Ok, ok..... Jetzt schließe ich da ein Thermostaten an, der mir Werte in Pulsweitenmodulation ausgibt. Wie bewerkstellige ich es denn nun, das ich die Ausgabewerte 'lesen' kann ? Wie sieht das Signal genau aus? Ein PWM-Signal an einer seriellen Schnittstelle zu capturen halte ich fuer ein interessantes Unterfangen, ist aber unter Umstaenden moeglich. Zitieren
Phade Geschrieben 11. Februar 2005 Autor Geschrieben 11. Februar 2005 Das klingt so abwertend. Das war aber nicht abwertend gemeind Daher: Du solltest Dich zuerst mehr mit C beschäftigen und zusätzlich allgemein etwas von den Abläufen in der Hardware kennen, bevor Du Dich an serielle Schnittstellen wagst. Ich weiß auch, dass das kein Thema für Anfänger wie mich ist, aber ich habe da ein Projekt bekommen das so ein Programm 'verlangt'.... :mod: "Hmmm....den Quelltext habe ich erstmal so stumpf geschrieben, damit ich ungefähr weiß, worauf ich nahcher hinaus möchte....." thanx Zitieren
Phade Geschrieben 11. Februar 2005 Autor Geschrieben 11. Februar 2005 Wie sieht das Signal genau aus? Das kann ich erst sagen, wenn man mir eine Übersicht geschickt hat, wo das halt drin steht. Ein PWM-Signal an einer seriellen Schnittstelle zu capturen halte ich fuer ein interessantes Unterfangen, ist aber unter Umstaenden moeglich. Tja, ich glaube deshalb habe ich dieses Projekt auch bekommen.... Zitieren
Bubble Geschrieben 11. Februar 2005 Geschrieben 11. Februar 2005 Ich weiß auch, dass das kein Thema für Anfänger wie mich ist, aber ich habe da ein Projekt bekommen das so ein Programm 'verlangt'.... :mod: Dann sag doch, dass Du noch nicht so weit bist, um das umzusetzen. Was bringt es denn wenn es nachher zwar irgendwie klappt, aber unter Umständen diverse Fehler drin sind. Hast es denn keinen Ansprechpartner, den Du Fragen kannst und der Dir bei solch speziellen Problemen weiterhilft? Zitieren
M.A.Knapp Geschrieben 13. Februar 2005 Geschrieben 13. Februar 2005 Zuerst mußt du dir darüber klar sein was du machen möchtest: Offenbar geht es um einen Thermostaten, der über die serielle Schnittstelle ausgelesen werden soll. Zuerst stellt sich die Frage ob ein direkter Anschluß an die serielle Schnittelle rein technisch möglich ist (Signalspannung, etc ...) Wenn ja: *) An welchem Pin/Eingang hängt das Signal ==> Auslesen des entsprechenden Bit der Schnittstelle Auslesen via Polling: *) Konstante Sampling-Frequenz ==> Periodisches Auslesen der Schnittstelle mit mehrfachem über der Samplingfrequenz *) Ermittlung der Pulslänge und Umrechnen in Temperatur-Werte. Auslesen via Interrupt: Wenn steigende und fallende Flanke einen Interrupt auslösen (entsprechende Verdrahtung), ist die Berechnung etwas genauer und nicht so systembelastend wie Polling. Jetzt kommt das Betriebssystem ins Spiel: Wenn möglich die Systemfunktion zum Schnittstellenauslesen verwenden und nix eigenes programmieren. MfG, Michael Zitieren
Bubble Geschrieben 13. Februar 2005 Geschrieben 13. Februar 2005 Ich vermute (bzw. hoffe für ihn ), dass sein Thermometer einfach Temperaturangaben periodisch über die Serielle Schnittstelle (sei es im "Klartext" oder sonst wie festgelegt, aber schon als via Terminal-Programm einlesbare Bit-Abfolge) ausgeben kann. Ansonsten gebe ich ihm wenig Chance es hinzubekommen. Konstante Sampling-Frequenz ==> Periodisches Auslesen der Schnittstelle mit mehrfachem über der Samplingfrequenz Wenn ein Signal mit der Frequenz f ohne Verlust abgetastet werden soll, reicht die doppelte Abtastfrequenz (also 2f). Falls hohe Timinganforderungen ins Spiel kommen, ist es je nach Anforderung ohnehin kritisch, denn Linux ist kein Echtzeitbetriebssystem. Zitieren
Phade Geschrieben 15. Februar 2005 Autor Geschrieben 15. Februar 2005 Moin Moin zusammen. Ich glaube ich bin euch eine Erklärung schuldig. Also, dieses Projekt habe ich mit mir mit meinem Ausbilder ausgesucht, da wir eigendlich dachten, das man so ein Thermometer das Seriell angeschlossen ist, "einfach" auslesen kann. Nur leider haben wir letzte Woche von dem Lieferanten erfahren, der uns die Hardware liefert, dass das nicht so einfach ist. Zitat Lieferant - :"Das Thermometer gibt nicht direkt ein alphanumerisches Signal, sonder eine Pulsweitenmodulation ab. Und die Abfrage ist etwas Zeitkritisch." - Zitat ende. Da wir aber nun in der Schule C schreiben, haben wir uns gedacht, da eventuell etwas zu schreiben. Nun hat sich der Lieferant allerdings dazu bereit erklärt, mir ein paar Codes für Linux zu überlassen, damit wir es etwas leichter haben. Jetzt, (peinlich, peinlich... :floet: ) weiß ich nicht in welcher sprache Linux geschrieben ist :confused: :confused: Für mich sieht es wie C aus. Hat da eventuell jemand eine Antwort ??? :confused: So, ich hoffe ich konnte es euch einiger maßen verständlich machen. Falls noch fragen sind, immer her damit, ich werde mich bemühen sie zu beantworten :cool: tschö mit ö Zitieren
Bubble Geschrieben 15. Februar 2005 Geschrieben 15. Februar 2005 Moin Moin zusammen. Jetzt, (peinlich, peinlich... :floet: ) weiß ich nicht in welcher sprache Linux geschrieben ist :confused: :confused: Linux - also der Kernel - ist großteils in C geschrieben, es gibt auch in Assembler geschriebene Teile. Zitieren
M.A.Knapp Geschrieben 15. Februar 2005 Geschrieben 15. Februar 2005 "für Linux geschrieben" bedeutet nur, daß das Ding Linux system calls verwendet, mehr nicht. Da ist keine Aussage über die Sprache drinn. Zitieren
Phade Geschrieben 16. Februar 2005 Autor Geschrieben 16. Februar 2005 "für Linux geschrieben" bedeutet nur, daß das Ding Linux system calls verwendet, mehr nicht. Da ist keine Aussage über die Sprache drinn. Könntest du das eventuell etwas prezieser beschreiben :confused: Zitieren
Klotzkopp Geschrieben 16. Februar 2005 Geschrieben 16. Februar 2005 Könntest du das eventuell etwas prezieser beschreiben :confused:"Codes für Linux" bedeutet nur, dass dieser Code auf Funktionen zurückgreift, die Linux anbietet (und andere OS, wie z.B. Windows, eben nicht). Das beinhaltet aber keine Information darüber, in welcher Sprache diese "Codes" geschrieben sind. Mit der Sprache, in der Linux geschrieben wurde (wobei ich bezweifle, dass es nur eine ist), hat das überhaupt nichts zu tun. Zitieren
Phade Geschrieben 16. Februar 2005 Autor Geschrieben 16. Februar 2005 "Codes für Linux" bedeutet nur, dass dieser Code auf Funktionen zurückgreift, die Linux anbietet (und andere OS, wie z.B. Windows, eben nicht). Das beinhaltet aber keine Information darüber, in welcher Sprache diese "Codes" geschrieben sind. Mit der Sprache, in der Linux geschrieben wurde (wobei ich bezweifle, dass es nur eine ist), hat das überhaupt nichts zu tun. Aha, also könnte es sein, das die Codeausschnitte erst noch von mir "umgeschrieben" werden muss :confused: oder wie soll ich das verstehen :confused: Hmmm.... eigendlich wollte ich ja das Programm, dass ich in C schreiben wollte, mit diesen Codeausschnitte ergänzen. Ich denke doch mal, das die Codeausschnitte in C sind. Wenn nicht stehe ich voll auf dem Schlauch........ :beagolisc :beagolisc Zitieren
M.A.Knapp Geschrieben 16. Februar 2005 Geschrieben 16. Februar 2005 @Phade: Nicht böse sein, aber wenn Du hier mit den hier gelieferten Hinweise wirklich nix anfangen kannst, bist Du - ehrlich gesagt - völlig ungeeignet diese Aufgabe zu lösen. Da fehlts noch zuviel an Hintergrundswiesen als daß Du diese Aufgabe mit Deinem derzeitigen Kenntnisstand bewältigen könntest. Als erste Aufwärmübung mit der seriellen Schnittstelle versuche mal die Daten, die Dir eine gewöhnliche serielle Maus liefert, in Koordinaten umzurechnen. Infos zu Mäusen: http://www.hut.fi/~then/mytexts/mouse.html Als kleine Hilfestellung: Dort gibt es einen Turbo Pascal/Assembler Beispielcode für eine "Microsoft-Maus": http://www.geocities.com/SiliconValley/2151/mouse.html MfG, Michael Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.