Gleich mal Vorweg, mit X-MEGA hab ich noch nicht gebastelt, mit den normalen ATMEGA's kenn ich mich schon einigermassen aus.
Ich würde das Empfangssignal noch mal mit nem Oszi anschauen. Sind es wirklich 2 Stopp Bits, passt die Geschwindigkeit und Polarität des Signals?
Wenn das geht und trotzdem beim PC und deinem Controller unterschiedliche Werte ankommen, hast Du eventuell ein Problem in Deiner Auswertesoftware.
Du könntest dein PC Interface ja auch mal als USART Sender verwenden und gucken, ob deine Auswertesoftware alle Bytes erkennt. ( Datei vorbereiten und "Text Senden" ).
Wie erkennst Du den Anfang eines Frames?
Werden tatsächlich alle Bytes erkannt und abgespeichert?
Bei manchen Controllern ist der USART Empfänger doppelt gepuffert. Das bedeutet es kann ein Byte im Übergabepuffer stehen und ein weiteres im Empfangsregister.
Es wird aber nur ein Interrupt generiert. Das müsstest Du dann aber selber überprüfen.
Ich mach mir da immer einen Ringpuffer, der von einer RxD Interruptroutine befüllt wird.
Eine Hauptroutine liest die Werte dann aus.
Wenn Du sicher den Anfang eines Frames detektieren kannst, ist es auch möglich die Werte direkt in eine Tabelle zu schreiben.
Das würde ich dann vorerst mal Byteweise machen.
Ein Buffer Overflow muss auch erkannt werden, da damit ja auch Bytes verloren gehen. = 2 Bytes wurden empfangen, das erste Byte aber gelöscht, da es nicht abgeholt wurde. Trotzdem wird nur ein Interrupt generiert.
Lesezeichen