Gast
#4378365
Hallo, ich möchte mit einer GUI einen String an einen AVR senden. Der AVR erwartet Werte wie "0,12,124,42\n".
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
Leider liefert mir die Funktion das nicht. Was ist da genau falsch?
|
Anzeige
|
C# (Visual Studio) string erstellen.
Gast
#4378365
Hallo, ich möchte mit einer GUI einen String an einen AVR senden. Der AVR erwartet Werte wie "0,12,124,42\n".
Leider liefert mir die Funktion das nicht. Was ist da genau falsch?
Gast
#4378367
Marion schrieb: > Leider liefert mir die Funktion das nicht. und was liefert sie? Man kann es auch besser lesbar schreiben.
Gast
#4378371
Marion schrieb: > Leider liefert mir die Funktion das nicht. Was ist da genau falsch? Zähl mal deine Kommata im String.
Gast
#4378381
Liefert nicht die Anzahl erwünschter ','. Es wird lediglich 1 ',' gesendet
Gast
#4378387
Sende ich über Putty "1,2,3,4\n" wird es auf dem AVR korrekt "entschlüsselt".
Gast
#4378392
Marion schrieb: > Liefert nicht die Anzahl erwünschter ','. Es wird lediglich 1 ',' > gesendet glaube ich nicht. Bei mir geht es. Die Zwischenvariable hilft übrigens beim Debuggen, dann sieht man was wer sendet.
Gast
#4378410
Beachten sollte man, das WriteLine() selbst noch ein NewLine-Zeichen anhängt. Beim Senden von Zeichenketten statt Bytes kann es generell nicht schaden, SerialPort.Encoding und SerialPort.NewLine besser auf gewünschte Werte zu setzen. Marion schrieb: > Leider liefert mir die Funktion das nicht. Also was sendet der Code denn jetzt, was steht in "str"?
Gast
#4378433
Sendet laut dem Ausgabefenster "1,0,0,255". Die Werte passen soweit, jedoch bekomme ich vom AVR die Antwort "LED 1 (hue,sat,val) : 0, 0, 0"
Gast
#4378443
Marion schrieb: > Sendet laut dem Ausgabefenster "1,0,0,255". Die Werte passen soweit, > jedoch bekomme ich vom AVR die Antwort setzte mal noch wie schon von bluppdidupp geschrieben das Encoding auf ASCII.
Gast
#4378501
Wie mache ich das, habe von C# nicht viel Ahnung und brauche nur ein kleines Programm. Hab ansonsten erst einmal nicht weiter vor mit C# zu arbeiten.
Gast
#4378510
Okay,
das Encoding scheint schon auf ASCII zu stehen.
serialPort.Encoding = Encoding.GetEncoding(28591);
Beim AVR kommt einfach kein 2. ',' an.
Probier mal statt der WriteLine-Methode das hier (WriteLine sendet wie schon von bluppdidupp angemerkt selbst LF/CR mit):
Gast
#4378589
Marion schrieb: > Beim AVR kommt einfach kein 2. ',' an. dann lass doch den AVR einfach mal zurückschicken, was er bekommt. Es müsste ja schon das erste Zeichen reichen was er nicht erkannt hat.
Hmmm, das Problem hab ich scheinbar an der falschen Stelle gesucht. Wieso es aber mit Putty geht, ist mir ein Rätsel. Ich habe im Programm ein delay_ms(10). Davor wird ein WS2812 Strip beschrieben (80Leds). Nehme ich beide Teile raus, funktioniert es auch mit dem Visual C#. Was kann ich da ggf. machen mit der UART Schnittstelle? Interruptbetrieb ist nicht möglich, da die Leds das blockieren.
Gast
#4378656
Stefan S. schrieb: > Was kann ich da ggf. machen mit der UART Schnittstelle? Interruptbetrieb > ist nicht möglich, da die Leds das blockieren. dann zeig mal das komplette Programm. Niemand weiß was hinter uart_available und uart_getc steckt. > Wieso es aber mit Putty geht, ist mir ein Rätsel. vermutlich weil du viel langsamer tippst als C# sendet.
Gast
#4378657
Nachtrag. die könntest einfach die Baudrate runter drehen, dann hat der µC mehr zeit für die Verarbeitung.
Gast
#4378664
Baudrate werde ich mal runterdrehen.
Gast
#4378669
und wo im Programm steht das delay? Stefan S. schrieb: > Interruptbetrieb ist nicht möglich, da die Leds das blockieren. Verstehe ich nicht. Den String im C# Code zeichenweise mit Pausen senden (und hoffen, dass der UART-Puffer nicht die Zeichen sammelt), dann hat der µC auch genug Zeit. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|