Forum: Mikrocontroller und Digitale Elektronik USART Float übergeben STK600 AT32UC3C0512C


von PHTH (Gast)


Lesenswert?

Hallo,

Ich arbeite momentan an einem Projekt mit einem STK600 und dem Prozessor 
AT32UC3C0512C der Firma Atmel.

Im Programm wird ein Vector mit Float-Werten erzeugt der per USART an 
den PC übergeben werden muss.

Ein Beispielprogramm der Firma Atmel habe ich bereits umgeschrieben und 
kann auch ein "Hello World" ausgeben.

Wenn ich allerdings Zahlen übergeben will wird immer nur die letzte 
Ziffer übertragen.

Vielleicht wisst ihr da ja eine Lösung für mein Problem.

Grüße

PHTH

von isnah (Gast)


Lesenswert?

Wenn du "Hello World" übertragen kannst, sollte eine in ASCII-gewandelte 
Float-ziffer kein Problem sein.
Beitrag "AVR-GCC, float to Ascii"

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

PHTH schrieb:
> Wenn ich allerdings Zahlen übergeben will wird immer nur die letzte
> Ziffer übertragen.
Und wie sieht das Programm dazu aus?

> ein Vector mit Float-Werten erzeugt der per USART an den PC übergeben
> werden muss.
Und was macht der dann damit?

: Bearbeitet durch Moderator
von PHTH (Gast)


Lesenswert?

Danke schon mal für die schnellen Antworten!

nachfolgend einmal der Code-Abschnitt für das "Hello World". ICh hoffe 
mal das reicht so
1
while (1)
2
  { 
3
    
4
  // Hello world!
5
  usart_write_line(EXAMPLE_USART, "Hello World");
6
7
  // Press enter to continue.
8
  while (usart_get_echo_line(EXAMPLE_USART) == USART_FAILURE);  // Get and echo characters until end of line.
9
10
  usart_write_line(EXAMPLE_USART, "Goodbye.\r\n");
11
  
12
  }

und jetzt möchte ich anstatt des "Hello World" einen Float-Wert 
übergeben.

die Float-Werte sollen erstmal nur am PC angezeigt werden.

Gruß

PHTH

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

PHTH schrieb:
> ICh hoffe mal das reicht so
Naja, meine Frage war eigentlich nach genau dem Programm, das den Fehler 
zeigt und nur die letzte Stelle überträgt...

von PHTH (Gast)


Lesenswert?

Hier einmal der Code-Teil bei dem nur die letzte Ziffer übergeben wird
1
float adc_value[1];
2
  adc_value[0] = 1.2;
3
  float wert = adc_value[0];
4
5
  while (1)
6
  {
7
    usart_write_char(EXAMPLE_USART, wert); //oder usart_write_line(EXAMPLE_USART, wert);
8
    
9
    while (usart_get_echo_line(EXAMPLE_USART) == USART_FAILURE);  
10
11
    usart_write_line(EXAMPLE_USART, "Goodbye.\r\n");
12
  }

von PittyJ (Gast)


Lesenswert?

Also ...  in C gibt es verschiedene Datentypen wie float oder char.
Und bei einer Funktion
usart_write_char()
sollte man unter Umständen auch ein char übergeben und nicht einen 
float.

Wie man aus einem Float mit sprintf oder ähnlichem eine Zeichenkette 
erzeugt, steht in jedem guten C-Buch.

Da werden auch die Unterschiede von float, int und char erklärt.

Ein-Elementige Vektoren wie float adc_value[1] sollte auch vermieden 
werden.

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.