Zum Inhalt springen

Ports mit C ansprechen ? Weiß wer wie das Funktioniert.


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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.........

Geschrieben

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....

Geschrieben

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???????????????????

Geschrieben

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 ?????????????????????????????

Geschrieben
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.

Geschrieben
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.

Geschrieben
Das klingt so abwertend.

Das war aber nicht abwertend gemeind :D

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

Geschrieben
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.... :rolleyes:

Geschrieben
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?

Geschrieben

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

Geschrieben

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.

Geschrieben

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 ö

Geschrieben
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.

Geschrieben
"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:

Geschrieben
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.
Geschrieben
"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

Geschrieben

@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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...