Hallo zusammen Ich versuche einen String über den UART zu senden. Er kommt heraus, aber am Schluss des Strings kommen noch kosmische Zeichen. Der zu sendene ist: "$PSRF103,01,01,01,01*25" Herauskommt jedoch, wobei beim $ der nächste wieder beginnt: "$PSRF103,01,01,01,01*25<0>ÃA"¥%5´3£#ÆÆƦ&VlS"3bccc S«6$PSRF103,01,01,01,01*25" Ausserdem sollte der String mit CR und LF terminiert sein, dies funktioniert jedoch nicht :-(. kann mir jemand helfen?? übrigens die routine ist im file sendstrng.c angehängt. besten Dank und Gruss Martial
Hallo OldBug ich habe diese Transmit funktion eigentlich getestet und sie hat funktioniert, aber evt. war das ja zufall das es funktioniert hat. Darum gebe ich sie dir mal. Gruss Martial void USART_Transmit( unsigned char data ) { // ueberprüfung ob register leer while ( !( UCSRA & (1<<UDRE)) ); // daten in das register schreiben um zu senden UDR = data; }
Hi oder an falsch berechnetem length. Warum denn nicht: void USART_SendString(unsigned char* data) { //Alle zeichen nacheinander ausgeben while (*data) { USART_Transmit(*data++); } USART_Transmit(0x0D); //CR USART_Transmit(0x0A); //LF } Solte für 0-terminierten String problemlos funktionieren. Matthias
Hallo Matthias mein String "$PSRF103,01,01,01,01*25" ist nicht 0 terminert, kann ich dann dem String einfach eine 0 anhängen? Gruss Martial
Hm, scheint dann wohl doch an der Länge zu liegen!?!? Wenn Du Matthias Variante verwenden möchtest, dann musst Du das so machen: USART_SendString("\"$PSRF103,01,01,01,01*25\""); Die "" terminieren den String entsprechend...
Ich geb Dir noch nen Tipp: sowas lässt sich recht einfach auf dem PC Testen. Siehe Anhang.
Hallo zusammen ich habe jetzt die funktion von Matthias genommen und die termination von OldBug, aber es sendet immer noch die gleichen zeichen zum schluss. gruss Martial
Hm, OK. Also auf dem PC läuft das Einwandfrei, da bleibt dann eigentlich nur noch übrig, daß Du uns den gesamten Code zeigst. Ansonsten würde das heir in Rate-Spielchen ausarten...
ich habe es jetzt geschafft, ich musste den terminator anders setzen. Danke für Eure Hilfe. gruss Martial
hallo zusammen sorry das ich das nicht gleich geschrieben habe :o).. Ich musste den Sendstring folgendermassen ausführen: USART_SendString("$PSRF103,01,01,01,01*25 \n\r\0"); eigentlich sollte das \n den cr und lf machen, doch dies ging nicht darum noch den \r. Das \0 ist die 0 ternimierung. Gruss Martial
Hi Also "xxxxxxxx" sollte eigentlich immer einen Null-terminierten String, auch ohne \0, erzeugen. Matthias
Macht es auch, habe ich schon ausprobiert. Er hat jetzt das Problem, daß er zwei \0 in seinem String hat. Naja, wer Bytes verschwenden mag... ;)
P.S.: Dein String sieht jetzt überigens ganz anders aus: die "" werden nicht mehr übertragen!
Aha... gut zu wissen, ich hab sie nämlich aufgrund Deines ersten Postings überhaupt erst in den String mit eingebaut...
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.