Forum: Mikrocontroller und Digitale Elektronik Visual Studio C#: Probleme mit empfangen Zeichen


von Stefan S. (sschultewolter)


Lesenswert?

Hallo,

ich arbeite derzeit an einer "eigentlich einfachen" Möglich, einen 
Attiny841 über ein Bluetooth Modul zu steuern.

Es handelt sich bei dem BluetoothModul um diese typischen HC-05 Module. 
Parametriert ist dieses auf BAUD 38400. Später soll das ganze wenn 
möglich aber schneller laufen. Die ersten Gehversuche hatte ich mit 250k 
gemacht. 38400 war aber von den typischen Baudraten der schnellste ohne 
einer Fehlerquote >0.2%. 250k macht das HC-05 Modul standardmäßig leider 
nicht. Der Attiny841 wird mit internem Takt (8MHz) betrieben.

Da ihr euch sicherlich nicht den ganzen Tag langweilt, setze ich hier 
vorerst einmal nur die entscheidenen Codeschnippsel rein. Auf Anfrage 
kann ich die anderen Sachen nachreichen.


[c]
using System;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace bottlelight_v2
{
    public partial class Form1 : Form
    {
        delegate void SetTextCallback(string text);

       private void buttonConnect_ButtonClick(object sender, EventArgs 
e)

           string port = toolStripComboBox_port.Text;
            int baud = 38400;

            try
            {
                /* port, baud, etc auslesen */
                serialPort.DataReceived += new 
SerialDataReceivedEventHandler(serialPort_DataReceived);
                serialPort.Open();
            }
            catch
            {
                buttonClose_ButtonClick(this, null);
            }
        }

        private void serialPort_DataReceived(object sender, 
SerialDataReceivedEventArgs e)
        {
            try
            {
                SetText(serialPort.ReadExisting());
            }
            catch
            {
                buttonClose_ButtonClick(this, null);
            }
        }

        private void SetText(string text)
        {
            if(listBoxReceivedData.InvokeRequired)
            {
                SetTextCallback d = new SetTextCallback(SetText);
                Invoke(d, new object[] { text });
            }
            else
            {
                listBoxReceivedData.Items.Insert(0, text);
            }
        }
    }
}

Ich lasse mir die Werte direkt wieder zurückliefern. Nun werden hier 
aber sehr häufig Zeichen verschluckt. Kann es an der Methode liegen, wie 
ich die Daten hier in C# einlese?

von Alex A. (alexdetsch)


Lesenswert?

Da die Forenteilnehmer, wie Du richtig erkannt hast, nicht den ganzen 
Tag Langeweile haben, wird sich das so keiner durchlesen. Vollkommen 
unformatiert, ohne Syntaxhighlighting. Lade es lieber als Anhang als .cs 
hoch. Entweder die Forensoftware formatiert es dann schön oder Visual 
Studio.

Zu Deiner Frage, ohne den Quelltext gelesen zu haben: Schickt der AVR 
alles ordentlich weg (mit FTDI-UART mal dtübergucken)? Kommt am Rechner 
alles richtig an (mit Putty drübergucken)?

von Stefan S. (sschultewolter)


Angehängte Dateien:

Lesenswert?

Hallo,

im Anhang die cs Datei. Ich habe über die Data Visualizer (Atmel Studio) 
bereits geschaut, ob die Daten richtig kommen. Sende ich dort etwas, 
kommt das richtig an.

Im Anhang noch einmal ein Screenshot vom Prog.
listBoxReceivedData(oben mitt)
 zeigt den Fehler an, dass dort etwas falsch gelesen wurde

Ich habe dazu einfach nur diesen Befehl aus dem AVR abgesetzt.
1
    case 0x20:    // Reset
2
      uart_puts("20,00,00,01\n");
3
      cmd_reset = 1;
4
      break;

von Stefan S. (sschultewolter)


Angehängte Dateien:

Lesenswert?

Hab das ganze nocheinmal anders getestet.

Bluetooth Modul vom AVR getrennt und mit USB-Serial Adapter verbunden.
Über die WinForm fernbinde ich mich mit dem USB-Serial-Adapter. Über 
Putty finde ich mich mit dem Bluetooth Modul.

Nun habe ich Putty so eingestellt, dass er nur sendet, wenn ich Enter 
drücke.
Auch hier ist die Anzeige fehlerhaft.

Im Anfang rechts die Putty EINGABE. Links die WinForm AUSGABE. Wie man 
sieht, schneidet er die Werte falsch ab.

von Stefan S. (sschultewolter)


Lesenswert?

Hab es nun soweit, dass er mir den String richtig zurückliefert. Kann 
morgen den Code mal anhängen.

Das einzige Problem, was nun aufgetreten ist, ist das meine ISR für das 
einlesen des Strings nicht mehr flott genug ist. Mal schauen ob ich das 
gelöst bekomme, ansonsten muss ich warten bis die APAs da sind.

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
Noch kein Account? Hier anmelden.