mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme serielle Datenübertragung


Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Juergen Roeck (stumpjumper)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Juergen Roeck (stumpjumper)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.