Hallo,

ich verwende einen µC ATXMega ATXMega256A3BAU (32MHz), und versuche den Laser-Rotations-Scaner X4 von YDLIDAR auszuwerten.

Dabei habe ich ein Problem bei dem ich einfach nicht weiter komme, und hoffe das mir hier jemand einen Tipp geben kann.
Ich hatte bereits einen Tread bei https://www.mikrocontroller.net/topic/488656#new eröffnet. Leider blieb dieser unbeantwortet.

Hallo,

ich oute mich mal als Anfänger und Programmierleihe. Also bitte nicht
erschlagen.

Für ein Bastelprojekt versuche ich den Laser-Rotations-Scaner YDLIDAR X4
auszuwerten. Leider klappt nicht alles so wie es soll. Das Programm
läuft und es werden mir auch plausible Werte angezeigt. Auf das letzte
halbe Grad Auflösung oder den letzten 1/4mm habe ich bewusst verzichtet.
Zum ersten mal habe ich mich an einen Ringbuffer gewagt, dort vermute
ich auch das Problem.

Der Sensors Selbst sendet seine Daten kontinuierlich über UART (Baud
128000).

Vor jedem Schreibvorgang in den Buffer wird dieser auf 0 geprüft. Das
ist manchmal nicht der Fall. Manchmal heißt: das es immer an einer
anderen Stelle im Buffer vorkommt. Woher diese Werte kommen konnte ich
nicht herausfinden. Da die Werte in dieser Reihenfolge oder an dieser
Stelle zuvor nicht empfangen wurden. Den Empfang habe dafür mittels LA
mitgeschrieben. Auch ein löschen, des Buffers, nach Abarbeitung eines
vollständigen Datensatzes bis zum nächsten Header hat nichts geholfen.
Auch habe mindestens 3 mal geprüft ob wirklich alle Pakete aus dem
Datensatz abgearbeitet werden.
Zweiter Punkt warum ich vermute das es am Ringbuffer liegt. Die
CheckCode Auswertung (Prüfsumme) löst aus, aber nur wenn ich beim lesen
aus dem Ringbuffer über das Bufferende komme. Und dann auch nur in ca.
5% der Fälle.

Ich Denke ich habe einen Fehler im Code, den ich einfach nicht finden
kann.

Anbei das Lauffähige Minimalprogramm. Ohne die Datei LCD, da hier nur
ganz simple ein 0815 LCD angesteuert wird. Ohne LCD-Anzeige (ja mit
delay...) tritt der Fehler häufiger auf...

µC: ATXMega256A3BAU (32MHz)

Ich hoffe jemand ist so nett und kann mir einen Tipp geben, wo ich den
Fehler noch suchen kann.

vielen Dank schonmal
Mittlerweile habe ich noch etwas weiter gesucht. Wenn ich mir einen Fehlerhafte Auswertung einen Datensatzes mitschreibe und manuell auswerte, kann ich Feststellen das 6 Byte einfach verschwunden sind. Diese wurden aber eindeutig vom Sensor übertragen, dies habe ich mit einen LA mitgeschrieben. Bufferoverflow an der UART-Schnittstelle löst nicht aus.
Für die Überprüfung habe ich mir eine Excel-Tabelle erstellt. Diese kann man hier leider nicht Hochladen. Daher muss ein Ausdruck reichen. Links ist der Ausgewertete Datensatz zu sehen, dieser ist eingerahmt. Rechts ist der empfangene Datensatz dargestellt, orange markiert sind die fehlenden Byte. Ich kann mir leider keinen Reim darauf machen wo diese hin sind.

wäre schön wenn Jemand noch einen Tipp für mich hätte.

Anbei das Datenblatt des Sensors, der Ausdruck (PDF) der Excel Auswertung, und das Programm. Wenn es irgendwo hilft...

Danke schonmal





YDLIDAR X4 Development Manual.pdf
Winkelauswertung eines Datensatzes.pdf
.c