Forum: Mikrocontroller und Digitale Elektronik Schwierigkeiten USART Übertragung mit itoa


von Stefan S. (eric996)


Lesenswert?

Moin,

versuche eine Übertragung eines 10 Bitwertes über STK500 USART an einen 
PC.
Empfangen wird mit Hterm (nicht hyper Teminal).

"Codeschnipsel"
 ADC_Messung_starten();
   // get converted value
    ADC_Wert = ADCW;
  PORTB = ~ADC_Wert>>2; // Ausgabe an PORT X mit LED's

    itoa( ADC_Wert, s, 10 ); // ADC_Wert wandeln in String auf Basis 10 
fuer radix -> Dezimalsystem

   uart_puts( s );  // Ausagbe über UART

Der ADC Wert wird zusätzlich über LEDs angezeigt(i.O.).
An Hterm kommt aber nur ein einstelliger Wert an.
Meine das die Benutzung von itoa nicht korrekt ist.
Brauche einen Denkanstoß.

Schönes Wochenende +
Danke.

von Karl H. (kbuchegg)


Lesenswert?

Wie ist s definiert?

von Stefan S. (eric996)


Lesenswert?

sorry,

s wurde laut Tutorial so übernommen


int main()
{
  int a;
char s[7];

von Justus S. (jussa)


Lesenswert?

1
    uart_puts( itoa( ADC_Wert, s, 10 ) );

schon mal so versucht?

von Sparki (Gast)


Lesenswert?

Du definierst s als char und char ist immer nur einer.
definiere mal:
string s;

von Johannes M. (johnny-m)


Lesenswert?

Sparki wrote:
> Du definierst s als char und char ist immer nur einer.
Nein, er definiert ein Array of char.

> definiere mal:
> string s;
Einen Datentyp string gibt es in C nicht!

von Stefan S. (eric996)


Lesenswert?

ja habe ich, laut Tutorial ist das die Zusammenfassung

itoa( ADC_Wert, s, 10 );
uart_puts( s );

von Sparki (Gast)


Lesenswert?

Probiere mal
1
for(int i=0;i<7;i++)
2
{
3
uart_putc(s[i]);
4
}
anstatt uart_puts(s);

von Stefan S. (eric996)


Lesenswert?

uart_putc(s[i]);

diese Zeile mag der Compiler gar nicht

../PWM_ADC_UART_11.c:151: error: subscripted value is neither array nor 
pointer

von zero (Gast)


Lesenswert?

Probiere mal zum Test

s="4321";

von SoLaLa (Gast)


Lesenswert?

bevor das Rätselraten weitergeht solltest Du mal den ganzen Code posten

von Johannes M. (johnny-m)


Lesenswert?

zero wrote:
> Probiere mal zum Test
>
> s="4321";
Und was soll das testen, außer Fehlermeldungen? Nochmal: Es gibt in C 
keinen Datentyp string und man kann auch keinen String-Literal als 
ganzes zuweisen. Man kann nur ein Array oder einen Zeiger mit einem 
String initialisieren.

von Stefan S. (eric996)


Angehängte Dateien:

Lesenswert?

Es geht:-)))
der Fehler  "war zwischen den Kopfhöhrern".

Ich hatte 'char s[7];! in main definiert aber den Aufruf zum Senden+ 
itoa in einer Funktion, in der unglücklicherweise 's' nochmal als int 
definiert war.
Dadurch hat der Compiler nicht gemeckert aber es wurden seltsame Dinge 
ausgegeben.

Herzlichen Dank an alle und noch einen schönen Abend

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.