PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bei serieller Übertragung wird aus zahlen über 127 eine 63



BomberD
13.01.2005, 06:57
Hi,
ich habe folgendes Problem.
Wenn ich mit dem ATMega 16 Zahlen über 127 durch die serielle schnittstelle sende kommen auf der pc seite nur 63 an.

Ich verwende WinAVR in einer aktuellen Version.
Die Methoden zur Datenübertragung verarbeiten nur char Variablen, so dass ich vorher meine 8bit integer zu chars convertieren muss.Hier tritt das Problem noch nicht auf. Ascii Zeichen werden Problemlos übertragen.

Die beiden Sende-Methoden:

void USART_transmit (unsigned char c) {
while (!(UCSRA & (1<<UDRE))) {}
UDR = c;
}

void USART_transmit_string (unsigned char *string,unsigned char lenght) {
while (!(UCSRA & (1<<UDRE))) {}
for(int i=0;i<lenght;i++)//while ( *string!=0x00)//while ( *string)
USART_transmit (*string++); //geht im string weiter und gibt zeichen für zeichen aus
}

kann mir jemand bei dem Problem helfen?

BomberD
13.01.2005, 09:52
Ich habe jetzt direkt in der UART:Transmit Methode eine 255 übertragen
also ohne Parameterübergabe. Resultat ist, dass auch eine 63 auf dem pc
erkannt wird. Eventuell liegt das Problem am C# :(
Ist als ob er Daten die ausserhalb des 7-bit ascii bereiches einfach 63
setzt.

PicNick
13.01.2005, 09:59
Hi, check einmal die Einstellungen des Terminal: 8N1 is gefragt
daß ASCII geht, ist logo, is ja alles UNTER 127
mfg robert

BomberD
13.01.2005, 10:21
Danke für die Antwort.
8bit no Parity und 1 stop ist eingestellt beiderseits.
Vielleicht isses nochn bug im framework 2.0b.
Ich versuchs mal mit anderen Terminals. ComTerm hat ne hex Auswertung. vielleicht sieht man das was.

BomberD
13.01.2005, 10:50
so gewiss ist jetzt dasses nicth am mc und dessen programmierung ligt am pc kommt alles richtig an. d.h. meine funktionen in c# müssen fehlerhaft sein... :( *grummel*

PicNick
13.01.2005, 11:08
Hi, der Fehler wäre zu massiv, als daß er ein Bug in irgendeiner Entwicklersaftware/library sein könnte. So leid es mir tut, da musst du was mülliges reingeschrieben oder unterlassen haben.
viel Glück ! mfg robert

BomberD
13.01.2005, 11:19
Das scheint am encoding zu liegen. Man kann für das SerialPort objekt im c# 2005 das Encoding und Decoding einstellen.
wenn ich statt Ascii auf utf 8 stelle wird nicht 63 angezeigt sondern gar nix. Irgendwo hier musses haken.
Ich würds gern gar nicth codiert oder decodiert haben. Nur ganz normal als Byte.

Naja. Wenn ichs raushab dann melde ich mich nochmal.

BomberD
13.01.2005, 11:28
Hast du ne Ahnung wie man ds Encoding umgehen kann?
Der haut immer das raus was nicht einem Encoding standard entspricht. bei Unicode z.b. geht die 128 und die 252 aber die 24 nicht.
bei ascii gibts den oben geschilderten Fehler.

Man das nervt vielleicht ;) Das ist hoffendlich der letzte Fehler zu meinem Funktionierenden ModBus ....

BomberD
13.01.2005, 11:39
Ich habs ;)

es lag an dieser Zeile. Bwziehungsweise an deren nicht VOrhandeinsein.

sp.Encoding = System.Text.Encoding.GetEncoding("iso-8859-9");

PicNick
13.01.2005, 11:55
Wieder mal: kaum macht man es richtig, geht's auch schon, is nich' zu fassen :D mfg

bluebrother
13.01.2005, 12:49
also wenn ISO encoding wirst du eher ISO-8859-1 oder ISO-8859-15 haben wollen, das ist das in unserer Ecke übliche "latin1" bzw. "latin9". 8859-9 is irgendwas Osteuropäisches oder Asiatisches. Warum dein c# da ein Encoding haben will versteh ich aber nicht so ganz, schließlich kriegst du ja auch "nur" einen Stream aus Bytes. Hat ja keiner gesagt dass das Zeichen sein müssen (ich mach hier u.a. binäre Datenübertragung. Sieht mit nem Terminal witzig aus:).

BomberD
13.01.2005, 13:59
der scheint das schon für die anzeige als string umzusetzten.
jedenfalls kantet er alles was er nicht kennt raus.
Zumindest gehts jetzt endlich ;) das ist die hauptsache.

Wieder mal: kaum macht man es richtig, geht's auch schon, is nich' zu fassen mfg
ich bin völlig entsetzt. kaum zu fassen. untragbar.

Ist blöd wenn man da stunden sucht nix findet und dann nur sone olle Zeile einfügen muss. Bin über die eigenschaft echt nur zufällig gestoßen. Bin auch davon ausgegangen das byte byte ist. Woher soll man denn wissen dass er jedes empfangene Byte unbedingt in ein schema reinpressen will...

PicNick
13.01.2005, 15:49
Ich versteh' dich. Man sagt ja immer, der Computer macht das, was man reinschreibt, und nicht das, was man meint. Gut.
Wenn das @³%@ Gerät aber nichteinmal mehr das macht, was ich reinschreib', sondern das, was ER meint, wird's kritisch.
mfg robert