mikrocontroller.net

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


Autor: Eric S. (eric996)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ist s definiert?

Autor: Eric S. (eric996)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry,

s wurde laut Tutorial so übernommen


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

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
    uart_puts( itoa( ADC_Wert, s, 10 ) );  

schon mal so versucht?

Autor: Sparki (Gast)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Eric S. (eric996)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja habe ich, laut Tutorial ist das die Zusammenfassung

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

Autor: Sparki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probiere mal
for(int i=0;i<7;i++)
{
uart_putc(s[i]);
}
anstatt uart_puts(s);

Autor: Eric S. (eric996)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: zero (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probiere mal zum Test

s="4321";

Autor: SoLaLa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bevor das Rätselraten weitergeht solltest Du mal den ganzen Code posten

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Eric S. (eric996)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.