Forum: Compiler & IDEs Probleme mit der seriellen Kommunikation


von Steffen Brüssel (Gast)


Lesenswert?

Hi,
ich sende Daten (Zahlen) als char array zuwischen PC und Atmega 16 hin
und her.
Die Zahlen werden als Bytes verpackt d.h. ich müsste Zahlen im Bereich
0-255 bzw -128-127 pro Byte senden können.
Leider kommen Zahlen größer als 127 nur als 63 an. also 0011_1111.
Ich finde den Fehler nicht. Leider ist das mit dem debug bei der
Seriellen Kommunikation ncith so leicht, aber bevor es an die UART im
MC geht lasse ich den Wert über die LEDs ausgeben und da stimmt der
Wert noch. Auf dem PC kommt leider im Empfangspuffer(ich nutze die C#
express beta, weil das die sereielle Schnittstelle recht einfach zu
beherrschen ist).

Hier mal meine Uart sendemethoden. Sind die üblichen halt nochn bissel
für mich angepasst.

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
}

wen es wundert, dass ich die Läng mit angebe, das liegt daran, dass ich
den gesammten Wertebereich eines Bytes brauche ich kann also nicht auf
null oder enter oder ähnlich abfragen.

Ich wär Euch für schnelle Hilfe oder Denkanstöße dankbar

Gruß

Steffen

von Steffen Brüssel (Gast)


Lesenswert?

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.

von tex (Gast)


Lesenswert?

Ist die Parität und Anzahl der Stopbits auf beiden Seiten gleich
eingestellt?

von Steffen Brüssel (Gast)


Lesenswert?

Es liegt nicth am MC die Daten kommen am PC einwandfrei an. das Problem
muss also in meinem C# Programm sein.
Die einstellungen für die serielle-Schnittstelle hab ich schon x mal
kontrolliert....:(

gruß

steffen

von Steffen Brüssel (Gast)


Lesenswert?

Ich habs

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


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

von Mirki (Gast)


Lesenswert?

Ich weiss, hat nichts mit dein Problem zu tun, aber kannst Du mal was
näheres über das "C# express beta" erzählen ?

mirki

von Steffen Brüssel (Gast)


Lesenswert?

Was willst du denn wissen?
Das ist sozusagen die c# auskopplung aus dem, hoffendlich dieses Jahr
erscheinendem, Visual Studio 2005.
Es nutzt das Framework 2.0 beta. Der Vorteil(für mich im moment
wichtig) zum aktuellen 1.1 Framework ist, dass es eine Klasse
SerialPort gibt. Hier kann ich sehr einfach alles Parametrieren. Es
gibt events die ausgelöst werden, wenn der PC etwas empfangen hat.
Auf dem framework 1.1 muss man sehr viel mehr 'drumherum'
programmieren. Ich fand das zu aufwändig. Zumal ich mich ja nicht
primär um die Entwicklung einscher Schnittstellenkommunikation kümmere
sondern diese nur nutzen will.

Die beta kannste bei MS herunterladen. Auch das komplette Visual Studio
2005 beta. Andernfalls kannst du es auch für 5 Euro auf DVD nach hause
geschickt bekommen.

Steffen

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.