Funktion utoa funktioniert nicht richtig

OP #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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.