PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] USART: sendchar () - Problem mit Integer



erik_wolfram
10.03.2013, 20:16
Hallo,

ich komme einfach nicht weiter voran da ich an einem kleinem?! Problem scheitere - im Simulator funktioniert alles, doch wenn ich das Programm auf dem Microcontroller ausführe werden die Zeilen ausgelassen/übersprungen.

Hier mal Ausschnitte aus dem Quellcode:


void sendchar (unsigned char c)
{
while (!(UCSR0A & (1 << UDRE0))) // Warten, bis Senden möglich ist
{
; // tu was
}

UDR0 = c; // schreibt das Zeichen aus 'c' auf die Schnittstelle
}



unsigned char mychar;
uint8_t i;

....

i = 1;
mychar = (int) i;
mychar = i;
sendchar (mychar);

sendchar (i);

sendchar ((int) i);

sendchar ((char) i);
sendchar (' ');


Lediglich die letzte Zeile wird übertragen: " " (Leerzeichen).
Laut Simulator müssten alle Variationen funktionieren!

Ich habe auch die Funktion sendUSART () ausführlich getestet - es gibt keinerlei Fehler bei der Übertragung von langen Strings!

Ich stehe mit meinem Latein am Ende - denn leider komme ich ohne die Lösung dieses Problems nicht weiter.
Ich hoffe hier kann mir jemand bitte aushelfen?

Ich suche eine einfache Möglichkeit zur Übertragung der 8-Bit Integer Werte die möglichst rechenarm ist - und aus der Theorie geht ja hervor, dass 8-Bit Integer und Char das gleiche sind....

Gruß Erik

MagicWSmoke
10.03.2013, 20:38
Wenn die Ausgabe des Terminals nicht auf Hex o.ä. steht, dann wirst Du bei ASCII 1 nicht viel zu sehen bekommen.

erik_wolfram
10.03.2013, 20:43
Die "normale" Ausgabe von Strings funktioniert ja Problemlos! Diese werden korrekt übertragen!
Aber möchte ich ein einzelnes Zeichen eines 8-Bit Integers üebrtragen kommt garnichts an - also auch keine falschen Zeichen - als ob die Zeilen nicht existieren!

Ich verwende Putty - das macht eigentlich keine Probleme (Anderes habe ich auch getestet) - aber die fehlenden Zeichen deuten für mich eher auf ein C-Problem hin!

MagicWSmoke
10.03.2013, 20:54
Schreib' doch mal i = 65 und probier's nochmal. Hast Du in 'ner ASCII-Tabelle nachgesehen, was ASCII 1 bedeutet ?

erik_wolfram
10.03.2013, 21:08
...das ist peinlich...

Mir war leider nicht bewusst, dass es noch Befehle im ASCII-Code gibt - diese wurden natürlich ausgeführt.... hatte Versuchsweise die 7 getestet und mich gewundert warum es plötzlich immer BING machte.... so funktioniert natürlich alles:


mychar = (char) i + '0';
sendchar (mychar);


Vielen Dank für die Hilfe :)

Klebwax
11.03.2013, 06:19
Mir war leider nicht bewusst, dass es noch Befehle im ASCII-Code gibt - diese wurden natürlich ausgeführt.... hatte Versuchsweise die 7 getestet und mich gewundert warum es plötzlich immer BING machte.... so funktioniert natürlich alles:


mychar = (char) i + '0';
sendchar (mychar);


Und was passiert, wenn i = 12 ist?

MfG Klebwax

ePyx
11.03.2013, 07:11
Und was passiert, wenn i = 12 ist?

MfG Klebwax

Dann gibt es ein Sternchen ;) Spaß beiseite, dafür gibt es Funktionen wie itoa, dtostrf oder die xyprintf-Derivate. Die haben als Ergebnis meist eine konvertierte Zeichenfolge, die du dann zeichenweise senden kannst.

Man muss das Rad ja nicht immer neu erfinden.