Hallo Kollegen,
habe mich in einem Horrornachtszenario zur richtigen Lösung für mein
Problem durchgeackert.
Jetzt hab ich noch folgendes Problem:
dazu der folgende Code ausschnitt vor dem Einstieg in die
Endlosschleife.
Folgendes Vorgehen bringt komische Ereignisse.
Ich lade mein Programm auf den uC. Dann beende ich den Compiler. Ich
starte Matlab und führe folgenden Code aus:
1 | s1=serial('Com6')% Comport Spezifikationen von Com6 werden in s1 %gespeichert.
|
2 | fopen(s1);% serieller port wird geöffnet.
|
Da der uC schon vorher gestartet ist, hat Matlab keine Bytes auf der
seriellen Schnittstelle vom Serial_WriteText8..) empfangen, da Matlab
erst später geöffnet wurde. Wenn ich jetzt das Programm mit Reset
nochmal starten lasse, kann ich die Strings, die von Serial_WriteText
gesendet wurden,empfangen.
Folgendes Problem dabei: Bei der ersten Ausführung von Serial_WriteText
empfängt Matlab einen komischen String ('235§$% §§$% PRO ready for
receiving'). Wird dieser Text ein zweites mal gesendet, dann kann Matlab
ihn ohne Probleme lesen.
FRAGE: Liegt das Problem an Matlab oder am uC...sprich gibt es
irgendwelche Initialisierungsmöglichkeiten, die solch einen falsche
Rückgabe vermeiden??
ps. Baudraten und sonstige spezifikation sollten auf beiden Seiten
gleich sein.
zum uC: (Conrad projectboard, MEGA32 ,Language: CompactC)
Danke für eure hilfe
Gruss Luiz
1 | void main(void)
|
2 | {
|
3 | ..... some declarations ........
|
4 | // Set display messages:
|
5 |
|
6 | rmsg1="C-Control PRO ready for receiving\r\n";
|
7 | Serial_Init_IRQ(RS232,RS232Buffer,100,100,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD19200);
|
8 | Serial_WriteText(RS232,rmsg1); //Hier wirds falsch //gesendet
|
9 | Serial_WriteText(RS232,rmsg1); //Hier wird s richtig //gemacht
|
10 |
|
11 |
|
12 | .... some more things
|
13 |
|
14 | }
|
15 |
|
16 | //Function definitions:
|
17 | //void Msg_WriteText(char text[]);
|
18 | //Beschreibung
|
19 | //Es werden alle Zeichen des char array bis zur terminierenden Null //ausgegeben.
|
20 | //Parameter
|
21 | //text -->Zeiger auf char array
|
22 |
|
23 | //void Serial_Init_IRQ(byte serport,byte ramaddr[],byte recvlen,byte //sendlen,byte par
|
24 |
|
25 | //Die serielle Schnittstelle wird für die Benutzung im Interrupt Modus //initialisiert. Der Anwender muß eine
|
26 | //globale Variable als Puffer bereitstellen. In diesem Puffer werden die //empfangenen Daten, sowie die zu
|
27 | //sendenden Daten abgelegt. Die Größe des Puffers muß die Größe des //Empfangspuffers plus die Größe
|
28 | //des Sendepuffers plus 6 sein . Der Sende- und der Empfangspuffer kann //maximal
|
29 | //255 Zeichen aufnehmen.
|
30 | //Für par wird der Wert durch Oderieren der vordefinierten Bitwerte //zusammengestellt. Man oderiert erst
|
31 | //Zeichenlänge, dann Anzahl der Stopbits und dann Parity. Z.B. "SR_7BIT | //SR_2STOP | SR_EVEN_PAR" für
|
32 | //7 Bit pro Zeichen, 2 Stop Bit und gerade Parität. Diese Werte sähen in //BASIC Syntaxwie folgt aus:
|
33 | //"SR_7BIT Or SR_2STOP Or SR_EVEN_PAR". Die Baudrate wird als Teilerwert //angegeben, wie in der
|
34 | //Tabelle spezifiziert.
|