- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 13

Thema: Digitalmultimeter c# problem

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    02.02.2012
    Beiträge
    6

    Frage Digitalmultimeter c# problem

    Ich habe mir mit einem µController ein Voltmeter gebaut, welches daten über RS232 an meinen PC sendet. Sende ich meine gemessenen Werte alle 10 ms funktioniert es einwandfrei, jedoch wenn ich mit 1 ms sende kommen nicht mehr alle 5 Byte an. Wie kann ich den Code verbessern? Es werden 4 ASCII-Zeichen gesendet und ein Endzeichen 'e'.
    Code:
     
    public double messen()
    {
        string mess = "";
    //einlesen bis Endzeichen kommt
        mess = serialPort1.ReadTo("e");
    //buffer entleeren
        serialPort1.DiscardInBuffer();
    // Bitwert auf Realen Messwert umwandeln
        Messwert = Convert.ToDouble(mess) / 1023 * 5.07;
        return Messwert;
    }

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied Avatar von masasibe
    Registriert seit
    21.01.2011
    Beiträge
    181
    Mit welcher Baudrate sendest du denn?
    Bei einer Baud von 1200Byte/s bräuchte jedes Byte ja schon 0,833ms und dann gehen sich 5Byte/ms natürlich nicht mehr aus.

    mfg masasibe

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    02.02.2012
    Beiträge
    6
    Baud ist ok. Ich sende mit 9600 baud. Ich sende den string "1023" und bei mir kommt manchmal "123" manchmal "102" manchmal "" usw. an.

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.05.2005
    Ort
    Berlin
    Beiträge
    316
    Dein C# Programm wird die Daten nicht schnell genug aus dem (Virtual)COM Port holen. Vom Read bis zum DiscardInBuffer werden schon wieder Zeichen angekommen sein.
    Ich halte 1kHz Update-Rate über den Port für sehr bedenklich und auch "unschön". Ein Update mit 10Hz würde doch mehr als reichen, oder?
    Also immer 100 Werte im Controller sammeln und dann in einem rüber damit. Das lässt die Schnittstelle länger frei, reduziert den Overhead und du kommst mit deinem nicht so schnellen PC hinterher ;D

  5. #5
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Auch bei 9600 Baud braucht ein Byte schon etwas über 1 ms !. Bei 1200 baud sind das 0,83 ms für ein Symbol, und man braucht in der Regel 10 Symbole für 1 Bytes, also gut 8 ms.
    Wenn man wirklich 1 ms braucht hilft nur eine höhere Baudrate ( >=20000) und dann ggf. noch eine binäre Übertragung. Die 10 bit kann man auch in 2 Bytes übertragen, einfach 1 Bit für die Identifikation der Datenhälften reservieren. Zur Not auch mit 19200 Baud und dann nur 6 oder 7 Bit Datenpakete.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied Avatar von masasibe
    Registriert seit
    21.01.2011
    Beiträge
    181
    Oh du hast Recht! Die Baud gibt die Symbole und nicht die Byte/s an.
    Jetzt verstehe ich auch, warum man bei einer Baud von 1200 quasi zuschauen kann, wie die Daten ankommen.
    Das sind dann ja nur 120 Byte/s, wenn ein Byte 10 Symbole braucht.

    Tja wieder etwas dazugelernt!

Ähnliche Themen

  1. ATMega32 UART problem --> Problem gelöst
    Von ChristophB im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 12.03.2010, 19:45
  2. Problem mit Atmega644P Erkennung (Bascom-Versions-Problem)
    Von Rohbotiker im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 11.08.2008, 19:52

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress