Hallo aller seits. Wie kann ich es bewerkstelligen das ich 9-11 volt über ein 1 kohm widerstand in ein Programm anzeigen lassen kann ? (es ist nur wichtig AN = 9 Volt da hinweis zb AN und AUS 0 Volt kein hinweis.) die 9 Volt werden mit mosfet und nicht mit schalter geschalten also entfällt das entprellen. Aber das auslesen macht mir sorgen. Ich habe es mit private void serialPort1_PinChanged(object sender, SerialPinChangedEventArgs e) { Label1.Text = "An"; und private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { Label1.Text = "An"; versucht Habe die 9 volt schon an allen pins getestet es ändert sich nix. Mein Versuchsaufbau ist nicht der Meinung es habe sich was geändert. Ich wäre über Hilfe sehr dankbar.
:
Verschoben durch User
Hallo David, versuche die Eigenschaften DtrEnable und/oder RtsEnable auf true zu setzen um zu checken ob dann das PinChanged Ereignis ausgelöst wird
DAVID -. schrieb: > private void serialPort1_DataReceived(object sender, 9V an einem RxD Pin sind keine seriellen Daten, das ist also barer Unsinn. Georg
ok danke euch. Karoly das werde ich gleich mal versuchen. Und Georg wie könnte ich das in DATEN ändern ? Gibt es ein IC dafür ?
DAVID -. schrieb: > Und Georg wie könnte ich das in DATEN ändern ? Du hast anscheinend nicht die geringste Ahnung, was eine serielle Schnittstelle überhaupt ist. Einen Eingang RxD kannst du mit der COM-Schnittstelle eines PC oder einem Modem oder einem Terminal verbinden, und wenn du dort ein "A" tippst, dann liefert die von dir verwendete Routine ein "A" als Ergebnis. 9V sind KEIN A. Ist aber vermutlich nicht möglich, dir das zu erklären, da du wohl keinerlei Unterlagen liest und dir keine Grundlagen erarbeitest. Ohne das kann man nicht programmieren, Punkt und aus. War wohl schon überflüssig überhaupt soviel dazu zu schreiben. Georg
der ri pin ist aber sehr woll dafür gedacht Spannung zuerkennen! >>versuche die Eigenschaften DtrEnable und/oder RtsEnable auf true zu >>setzen um zu checken ob dann das PinChanged Ereignis ausgelöst wird Ok gute Idee habe ich versucht ändert aber nix da muss ich irgendwo anders ein Fehler haben. hmmmm
DAVID -. schrieb: > der ri pin ist aber sehr woll dafür gedacht Spannung zuerkennen! Wie kommst du darauf, dass man am RI Pin Daten empfangen kann? Schliesslich rufst du ja serialPort1_DataReceived auf. Das hat mit RI nicht das geringste zu tun. Ist einfach hoffnungslos. Georg
Auf wiki (https://de.wikipedia.org/wiki/RS-232) heist es dazu: Ri Ein High-Pegel an diesem Eingang signalisiert dem DTE-Gerät, dass ein Anruf ankommt, d.h. dass jemand eine Datenverbindung aufzubauen wünscht, („ring“ ist engl. für „klingeln“; besonders bei Telefonen und im übertragenen Sinne auch bei Modems). Siehe auch: Rufspannung. wenn DU also der Meinung bist das ich es nicht hin bekomme dann könnte man mir ja sagen wies geht ?oder zumindest eine Hilfe Stellung geben. Ich muss nur wissen welcher pin mit welchen Kommando den gewünschten erfolg hat oder wie ich es abändern müsste damit es läuft. Ich würde aber aus folgernder aussage von dir: <<<Ist einfach hoffnungslos.>>> eher schlissen das du es selber nicht weist und auch nicht beabsichtigst andren zu helfen wass woll auch keine schlechte Idee ist wenn man nicht weis um was es geht. da würde ich mich doch aber eher zurück halten als preis zugeben das man es nicht weis ODER?
@David: nicht an RI pin versuchen sondern mit DTR oder RTS Pins experimentieren. Ich habe damals so was ähnliches gebraucht und hat es auch funktioniert, allerdings in C++ entwickelt. Das Prinzip sollte aber dasselbe sein. Kann mich leider nicht erinnern welchen Pin von beiden erwähnten ich dafür verwendet habe.Aber kann bestätigen dass eine Spannungsänderung am Pin ein Ereignis ausgelöst hat.
Du solltest da etwas strukturierter vorgehen. Als erstes würde ich mal mit einem funktionierenden Tool deine Beschaltung testen. Ich nutze für die serielle Schnittstelle gerne das hier: https://sites.google.com/site/terminalbpp/ Das zeigt dir auch die digitalen Signale auf dem Comport an, wenn du da eine Reaktion bekommst, kannst Du an dein C# Programm gehen.
SUPER der tipp mit dem tool das zeigt mir an wo Spannung anliegt TOP. Mit welchen Kommando fragt man normalerweise die pins ab ? Bin ich damit private void serialPort1_PinChanged(object sender, SerialPinChangedEventArgs e) { oder private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) überhaub schon mal richtig ? DANKE EUCH 2
DataReceived wird aufgerufen, wenn ein oder mehrere Bytes eingetroffen sind. PinChanged wird aufgerufen, wenn ein Break erkannt wurde oder sich der Status einer der Pins geändert hat (Überwachte Pins sind dabei: CD, CTS, DSR, RING) ...natürlich muss zuvor der Port via .Open() auch geöffnet worden sein.
DANKE Ich habe noch mal neu angefangen mit dem Project und werde alles selber bauen und nix mehr aus andren Programmen über nehmen denke ich. zur zeit wüsste ich gerne wie ich mit PinChanged die Pins abfragen beziehungsweise zuordnen kann. So wie ich das nach dem übersetzten verschiedener Seite verstanden habe ist PinChanged zwar auf auslesen gedacht es gibt aber keine Rückmeldung WELCHER pin sein Status geändert hat. wie kann ich das da zuordnen? DANKE
Die Win32-API enthält hierfür die Funktion GetCommModemStatus: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363258%28v=vs.85%29.aspx http://stackoverflow.com/questions/28414178/serialport-check-cts
:
Bearbeitet durch User
Hilft mir leider gar nicht weiter. den mit BOOL WINAPI GetCommModemStatus( In HANDLE hFile, Out LPDWORD lpModemStat ); bekomme ich nur rote Striche und zulesen es sei kein verweis (glaube) vorhanden. Hast du noch andere Hilfe zur aus wahl? Danke dir für deine mühe
Du solltest lernen, wie man mit Deinem Werkzeug umgeht. Dazu gehört u.a., wie man Win32-API-Funktionen aufruft. O.g. zweiter Link zeigt das anhand der Funktionen GetCommMask und WaitCommEvent.
Würde nicht einfach sowas reichen? Oder gehts um Pins, auf die man vom SerialPort-Objekt gar nicht zugreifen kann?
1 | bool lastStateCTS=false; // Variable die letzten CTS-Status merkt |
2 | |
3 | private void initSerialPort() |
4 | {
|
5 | sp.Open(); // Port öffnen |
6 | lastStateStatus=sp.CtsHolding; // Initialwert merken |
7 | }
|
8 | |
9 | |
10 | private void sp_PinChanged(object sender, SerialPinChangedEventArgs e) |
11 | {
|
12 | if (lastStateCTS!=sp.CtsHolding) |
13 | {
|
14 | // CTS-Pin hat sich geändert
|
15 | |
16 | lastStateCTS=sp.CtsHolding; |
17 | }
|
18 | }
|
Liest jemand die Docs? SerialPinChangedEventArgs https://msdn.microsoft.com/de-de/library/system.io.ports.serialpinchangedeventargs(v=vs.110).aspx SerialPinChange-Enum https://msdn.microsoft.com/de-de/library/system.io.ports.serialpinchange%28v=vs.110%29.aspx Gibt man in VS jetzt bspw. in dem PinChanged-Handler
1 | if ((e. |
ein schlägt das u.a. EventType vor
1 | if ((e.EventType & |
dann wird sogar SerialPinChange vorgeschlagen. Noch ein . hinter SerialPinChange und es wird u.a. CDChanged und Ring vorgeschlagen.
:
Bearbeitet durch User
Hallo Danke dir aber bei nur ((e erkennt es weder EventType noch SerialPinChange nur mit if ((else.EventType & SerialPinChange.Ring bekomme ichs hin Ring und CDChanged nimmt er aber auch so noch. Wo mache ich den Fehler ? DANKE DIR SEHR
DAVID -. schrieb: > Wo mache ich den Fehler ? Lies Dir doch bitte Deinen "Text" nochmal durch. Quelltext übrigens nicht als Bild posten.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.