Forum: Compiler & IDEs Uart sendet nur mist


von Martin (Gast)


Lesenswert?

Hallo

hall=0;

oldtick=tick;
uart_puts("Tk");
uart_puts(utoa(tick,buffer,10));
uart_puts("\n");



Ich hoffe ihr könnt mir mit diesem Problem helfen

tick ist gleich 3000-15000
Wenn ich jetzt die beiden unteren // auskommentiere funktioniert es. 
Wenn ich die beiden allerdings mitsende kommt bei meinem Hterm ( 
Hyperterminal) nur mist an 
<\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0> 
<\0><\0><\0><\0>Tk<\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\ 
0><\0><\0><\0><\0><\0><\0><\0><\0>  sowas....
tick ist eine 16bit Variable daher hatte ich utoa benutzt.
Warum kommt dann am Hyperterminal nixs vernünftiges an?
Max232 hab ich kontrolliert wenn ich den Attiny2313 rausmache die beiden 
Pins ( RXD TXD verbinde ) kommt am Pc das an was der Pc auch 
losgeschickt hat daher muss es am Code liegen.
uart_puts ist die Library von Peter Fleury
20 MHZ Quartz  38400 Baudrate Double rate == Fehler 0,160%

Ich hoffe ihr könnt mir helfen
mfg Martin

von Klaus W. (mfgkw)


Lesenswert?

Wenn du so programmierst, wie du auch deine Fehler beschreibst, dann 
könnte es daran liegen.

von Bernd (Gast)


Lesenswert?


von Peter D. (pdiener) Benutzerseite


Lesenswert?

Hallo Martin,

1
uart_puts(utoa(tick,buffer,10));
Wird so nicht funktionieren. utoa schreibt das Ergebnis in buffer rein 
und gibt als Rückgabe ein Statusbyte (z.B. für Erfolg) zurück. Das 
verwendet man üblicherweise so:
1
char buffer[16];
2
3
utoa(tick,buffer,10);  //Inhalt von Ticks in einen String umwandeln und in Buffer schreiben
4
uart_puts(buffer);     //Den String aus Buffer über die Schnittstelle senden

Grüße,

Peter

von Stefan E. (sternst)


Lesenswert?

Peter Diener schrieb:

> Wird so nicht funktionieren. utoa schreibt das Ergebnis in buffer rein
> und gibt als Rückgabe ein Statusbyte (z.B. für Erfolg) zurück.

Welche Doku hast du denn, die das behauptet?
utoa gibt üblicherweise einfach nur den Pointer zurück, den es als 
zweiten Parameter übergeben bekommt, damit man es genau so verwenden 
kann, wie vom OP geschrieben.

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Entschuligung, ich habe das mit sprintf verwechselt.

Das "Tk" wird ja offenbar richtig ausgegeben. Daher ist die 
Schnittstelle vermutlich richtig eingestellt und uart_puts funktioniert 
auch.

Da fallen mit dann noch zwei Möglihkeiten ein:

1. uart_puts kann keine so langen Strings, weil irgend ein Buffer zu 
klein eingestellt ist. Oder es ist non-blocking und wird zu oft 
aufgerufen.

2. buffer ist zu klein, um die Umwandlung in einen String durchzuführen.

Grüße,

Peter

von Klaus W. (mfgkw)


Lesenswert?

tja, und das ist alles Spekulation, solange man nur die
Originalfrage sieht. Und die ist grottenschlecht, und scheint
auch nicht mehr besser zu werden.
Kein verwertbarer Quelltext, keine Angaben zur Umgebung,
unbracuhbare Fehlerbeschreibung ("sowas").

Viel Spaß beim Fehlersuchen!

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Warum schreibst du nicht die komplette Deklaration ALLER von dir 
verwendeten Variablen hin?
Stattdessen lieferst du unnötigen Scheiß wie hall oder oldtick (wobei 
der Typ hier immernoch unbekannt ist).

Aber dein Fehler dürfte mal wieder der typische Deppenfehler sein: 
Welchen Typ hat buffer und wie groß ist er?

bitte nur Code als Antwort und kein Gestammel!

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.