Und deine Hardware ist korrekt?!
Und deine Hardware ist korrekt?!
Muss ja.
Wenn ich
USART_puts("Hello");
sende, schreibt der Datenlogger:
Answer:
48 65 6C 6C 6F Hello
###########EDIT###########
Habe gerade nochmal einen weiteren Test gemacht.
Das Sende ich:
1B 53 06 00
Und das kommt an:
Answer:
1B 53 06 .S.
Es fehlt also das 0x00 am Ende.
Das ist ein Fortschritt, beim letzten Test kam etwas ganz anderes dabei herum. Evtl. könnte das damit zusammenhängen das ich es so gesendet habe:
USART_puts("Hello");
USART_putc(0x1B);
.
.
.
Er hat vielleicht das "Hello" mit dem Rest verknüpft.
Wie auch immer, nun muss ich es hin bekommen das er das 0x00 nicht verschluckt.
Vielleicht fehlt da noch etwas. Irgendwas zum terminieren, vielleicht?
Weitere Tests ergaben, das er die 0x00 immer verschluckt. Egal ob ich es zu Beginn sende oder mitten drin.
Selbst wenn ich das 10mal hintereinander sende kommt keines davon an. Die anderen Werte werden nun problemlos übertragen.
Hat jemand eine Idee, wieso die 0x00 nicht übertragen werden?
Geändert von MechMac (24.03.2011 um 21:20 Uhr)
Ok, hab den einen Satz überlesen.
Hallo,
in deinem Programm steht doch
(vlt erklärt mir iwann mal wer wich ich dies Codefenster erzeuge)Code:while (*s!=0) { USART_putc(*s); s++; } }
das bedeute es soll gesendet werden bis die \0 (Nullterminierung) gefunden wird. Aber wie der Name sagt ist \0 = 0x00
Da du versuchst deine Abbruchbedingung zu senden klappt des nich.
Ich hoffe du verstehst was ich meine.
MfG Elchi
Geändert von PicNick (25.03.2011 um 10:07 Uhr)
Hallo,
nicht ganz.
Schau mal auf die beiden Proceduren.
Ein String wird in USART_puts "zerstückelt" und byteweise durch USART_putc versendet.
Dieses herausfiltern der Nullterminierung greift also nur, wenn ich USART_puts auch nutze.
Die HEX-Werte sende ich aber Byteweise direkt mit USART_putc.
Gruß
Ok ich war wohl zu Erfreut auch mal wem helfen zu können, das ich zu schnell gerschrieben hatte. Ich teste demnächst mal was passiert wenn ich 0x00 zu senden versuche. Allerdings sende ich über die USART in dem ich das Byte in das entsprechende Register schreibe.
So sende ich ein Byte vlt hilft dir das.Code:void send_byte(unsigned char send) { while ( (~(UCSRA)) & (1 << UDRE) ); //Senden des bytes UDR = send; }
Geändert von ElchiMtr (25.03.2011 um 22:14 Uhr) Grund: Codefenster eingefügt
Lesezeichen