Hi. Ich hab ein Messsystem aufgebaut, dass seine Messdaten per serieller Schnittstelle an einen PC senden soll. Der verwendete µC ist der PIC18F14K50 und an Software benutze ich den C18 Compiler und die Microchip IDE. Mein Problem ist, dass ich auf der PC Seite nicht alle Daten empfange, sondern nur ein Teil davon. Ich vermute den Fehler bei der Seriellen Kommunikation, da der Sensor soweit funktioniert (mit Oszi verifiziert). Am PC kommen nur alle 102 Messwerte an. Der Sendeteil des Programms sieht wie folgt aus: ... char Buffer; char result; OpenUSART( USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH,77 ) while(!DataRdyUSART()); //Warten bis Daten empfangen result = ReadUSART(); for (i = 0; i<102;i++) { Buffer = ReceiveValue(); //8- Bit Messwert empfangen while(!TXSTAbits.TRMT); //warten bis bereit zum Senden TXREG = Buffer; // Senden } ... ReceiveValue liefert ein Byte (char) zurück. Zur Kontrolle habe ich in dem Buffer einen festen Wert zugewiesen: Buffer = 'X'; PC seitig sehe ich im Terminalprogramm und auch in Matlab, den Wert 0x53 also 'S'. Habt ihr ne Idee, was ich verbockt habe? Mir fällt langsam nichts mehr ein, woher der Fehler kommt. Vielen Dank schon mal
Manuel schrieb: > Zur Kontrolle habe ich in dem Buffer einen festen Wert zugewiesen: > Buffer = 'X'; > PC seitig sehe ich im Terminalprogramm und auch in Matlab, den Wert 0x53 > also 'S'. Versteh ich das richtig, dass dein PIC jetzt prinzipiell einfach nur Zeichen zurückschicken soll, die er empfangen hat. Nur das du das so umgeändert hast, dass immer ein 'X' zurück geschickt wird. > Habt ihr ne Idee, was ich verbockt habe? Wenn der Empfänger etwas anderes erkennt, als der Sender weggeschickt hat, dann ist das ein deutlicher Hinweis darauf, dass die Baudrate nicht exakt stimmt.
Ich möchte mich da anschliessen, Du solltest mal prüfen ob auf beiden Seiten die gleiche Baudrate eingestellt ist. Dabei auch unbedingt die Anzahl der Stopbits und der Parität prüfen
Nachtrag zu meiner vorherigen Antwort: Ich kenne den PIC nicht, gehe ich richtig in der Annahme daß mit diesem Teil der Interrupt abgeschaltet wird > USART_RX_INT_OFF & < Ich würde hier Interrupts zulassen und eine kleine Serviceroutine dazu machen. Ausserdem zum testen noch die Anregung das mal mit Hilfe einer LinuxCD z.B. Knoppix zu testen (falls Du Dich damit anfreunden kannst). Von der CD booten und in einer Console den Befehl "cat /dev/ttySx" eingeben. Das x muß durch 0 für COM1 bzw. 1 für COM2 ersetzt werden. Du solltest am Bildschirm die gesendeten Zeichen sehen, Baudrate etc. siehe vorige Antwort.
Hi Danke für die Antworten. Wie ihr vermutet habt lag es an der Baudrate. Ich hab das Programmgerippe, das ich benutzt hab nicht genau durchgesehen. Auf jeden Fall war noch die PLL aktiv, d.h. die Baudrate vom µC war ein ganz andere. Dann hat es natürlich in Matlab auch nicht richtig funktioniert. Nun hab ich die PLL deaktiviert und nun funktionuerts wunderbar. Vielen Dank
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.