Forum: Compiler & IDEs UART und HTerm Anfängerfrage


von hiho (Gast)


Lesenswert?

Hallo!


Ich habe aus dem GCC-Tutorial die UART-Funktionen in meinen ATMEGA16 
implementiert.
1
int main(void)
2
{
3
   // Pufferspeicher ausreichend groß
4
   // evtl. Vorzeichen + width + Endezeichen:
5
   char s[8]; 
6
   float f = -12.345;
7
 
8
   uart_init();
9
 
10
   dtostrf( f, 6, 3, s ); 
11
   uart_puts( s );
12
   // verkürzt: uart_puts( dtostrf( f, 7, 3, s ) );
13
 
14
   while (1) {
15
      ;
16
   }
17
 
18
   return 0; // never reached 
19
}

Funktionert soweit alles perfekt.

Jedoch möchte ich an das Terminalprogramm (HTerm) folgenden String 
übertragen.

z.B -12.345,-12.345

nachdem die 2 double-Werte übertragen wurden, soll HTerm einen CR 
durchführen.

Wie kann ich das im obigen Code umsentzen?

Schon mal vielen Dank im Voraus!

Gruss

von Karl H. (kbuchegg)


Lesenswert?

hiho schrieb:

> z.B -12.345,-12.345
>
> nachdem die 2 double-Werte übertragen wurden, soll HTerm einen CR
> durchführen.
>
> Wie kann ich das im obigen Code umsentzen?

INdem du das ganz einfach überträgst.
Hinweis: Der Empfänger kann nicht unterscheiden, ob du den Text mit 
einem Aufruf von zb uart_puts auf den Weg bringst, oder mit mehreren. 
Alles was er kriegt sind die Zeichen.
1
 uart_puts( s );
2
 uart_puts( "," );
3
 uart_puts( s );
4
 uart_puts( "\n" );

ist zb eine Möglichkeit. Es gibt noch andere Möglichkeiten, inklusive 
dem Zusammensetzen der Zeile auf der Senderseite. Da das aber mit 
Stringverarbeitung verbunden ist und Stringverarbeitung in C immer 
darunter leidet, dass man im Vorfeld die zu erwartenden maximal 
Stringlänge kennen muss, ist das oftmals gar nicht ratsam. Einfacher ist 
es, die Einzelteile ganz einfach nacheinander auf den Weg zu bringen.

PS: Ob du ein \n schicken musst, oder ein \r\n hängt von der Einstellung 
des Terminalprogramms ab.
Auch hast du wahrscheinlich eine Funktion, die sich besser zum Versand 
von Einzelzeichen eignet, als uart_puts. Um einen einzelnen ',' zu 
versenden wird man dann wohl eher zu dieser Funktion für Einzelzeichen 
greifen, aber zur Not geht es auch mit Stringfunktionen. Das unnötige 
Abarbeiten eines Strings geht immer noch schneller als das eigentliche 
Übertragen mittels UART.

von hiho (Gast)


Lesenswert?

Vielen Dank!

Funktioniert TOP!

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
Noch kein Account? Hier anmelden.