Funktion utoa funktioniert nicht richtig

#3451112
Lesenswert?

Hallo zusammen,

ich habe ein kleines Problem mit der Funktion utoa.

Ziel ist es einen Integer aus dem ADC in einen String für UART-Ausgabe 
zu schreiben.

Ich habe schon einiges probiert um den Fehler zu finden, aber bin 
mittlerweile völlig Ratlos.

Der Code sieht wie folgt aus:
1
int main(void)
2
{
3
  
4
  uint16_t adc_wert=50;
5
  char spannung[20];
6
  uint16_t acd_flag=1;
7
  init_uart();
8
        
9
   sei();
10
   
11
    while(1)
12
    {
13
    
14
    if (adc_wert!=acd_flag)
15
       {utoa(adc_wert, spannung, 10);
16
       strcpy(spannung, "\n\r");
17
       //put_string(spannung);
18
       put_string("test\n\r");
19
       adc_wert=acd_flag;
20
      }
21
    
22
    
23
     }

So wie gezeigt gibt Uart korrekt einmal "test" aus.
Wenn ich die Zeile mit dem erzeugten String auskommentiere liefert die 
Ausgabe ausschließlich die Zeichenfolge 0A 0D 0A 0D und auch das Wort 
"test" wird nicht mehr ausgegeben.

Sieht jemand den Fehler?

Vielen Dank :-)
Gast #3451117
Lesenswert?

R. B. schrieb:
> strcpy(spannung, "\n\r");

Mit diesem Ausdruck überschreibst du die vorher durch utoa() erzeugten 
Daten aus deinem String.
0A und 0D sind die Hexadezimalen Darstellungen deiner Zeichen '\n' und 
'\r' Lasse diese Zeile weg, oder ersetze sie durch:
strcat (spannung,"\n\r");
Gast #3451119
Lesenswert?

>        strcpy(spannung, "\n\r");

Tach, werden die hier nicht die ersten beiden Bytes des Strings, der die 
Spannung enthalten soll, wieder mit CR-LF überschrieben?

Gute Nacht, im Zweifel versuch's morgen früh nochmal.
#3451260
Lesenswert?

Kaj schrieb:
> Alternative:
> Du weißt ja wie groß dein Wert ist, dann kannst du das im zweifel auch
> von hand machen, z.B.: Spannung[5] = '\n'; Spannung[6] = '\r';



Das ist die schlechteste Idee, die du haben kannst.

Alternativ:
Du kannst auch deine Texte in mehreren Happen ausgeben. Der Empfänger 
kann das sowieso nicht unterscheiden, ob du einmal oder mehrmals 
put_string aufgerufen hast. Der sieht ja nur, was an Zeichen über seine 
Schnittstelle reinkommt.
1
       utoa( adc_wert, spannung, 10 );
2
       put_string( spannung );
3
       put_string( "\r\n" );

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren