Arduino Micro - Wie Buffer leeren?

Funktionen wie readBytesUntil() (siehe #17) sind bei hohen Geschwindigkeiten schon mal problematisch, da man zwischen den einzelnen Bytes nichts anderes tun kann. Es wird einfach gewartet bis x Bytes da sind.

while(Serial.read ... schon den UART Empfangspuffer löschen. Kostet eben auch seine Zeit. Wenige ms.

Falsche Größenordnung. Dauert schon einige µs, aber wenn vorher >1000 ms getrödelt wurde und der Serial1 interne Eingangspuffer übergelaufen war, kommt es darauf garnicht an.

Natürlich könntest du was spezielles in die Standard-core libraries einbauen, und z.B. dann mit Serial1.clearInputBuffer() oder so aufrufen. Das wäre dann unwesentlich schneller als

     while (Serial1.read() != -1) {} // clear input buffer

bedeutet einige Fummelei und wäre in der nächsten Version wieder draussen.

Mein Haupt-Punkt ist aber: nützt dir das überhaupt was oder willst du, wenn dein Sketch endlich mal wieder Zeit hat, zu lesen was labview für sich hin gesendet hat, die letzten 8 Zeichen auswerten und je nach dem noch auf 0 .. 8 weitere Zeichen warten? Oder sonst was mit dem letzten Inhalt des Puffers anfangen? (z.B. Die letzte komplette 8-Zeichen Sequenz verwenden)

Dann wäre ein komplettes clearInputBuffer() , egal wie realisiert, gar nicht sinnvoll.

Hallo,

bin gerade im Datenblatt zu meinem ATTiny841 über flush gestolpert. Steht tatsächlich drin zum löschen des Empfangspuffers. :o

18.8.7 Flushing the Receive Buffer
The receiver buffer FIFO will be flushed when the receiver is disabled, i.e., the buffer will be emptied of its contents.
Unread data will be lost. To flush the buffer during normal operation, due to for instance an error condition, read the
UDRn until the RXCn flag is cleared.
The following code example shows how to flush the receive buffer.

void USART_Flush( void )
{
unsigned char dummy;
while ( UCSRnA & (1<<RXCn) ) dummy = UDRn;
}

Ironie der Geschichte will nicht aussterben.

Ist auch möglich, dass man sich auch hier gezielt an Java angelehnt hat, wie an anderen Stellen auch. In den diversen Java Stream Klassen gibt es flush() für Ausgangspuffer, aber nicht für Eingangspuffer.

Hallo zusammen, sorry dass ich mich so spät erst wieder zurückmelde... tatsächlich war viel los, was mein Programm betrifft. Ich habe nun eine Lösung gefunden. In Labview war es jetzt doch einfacher als ich erwartet hatte möglich, das Singal so downzusampeln dass die Strings jetzt viel langsamer kommen und der Arduino die Menge gut verarbeiten kann. Ich bin sicher dass da das ein oder andere Problem in meinem Code ist, welches das Programm so langsam macht, habe aber leider keine Zeit mehr, das noch zu überarbeiten und bin froh dass es einfach funktioniert. Vielen vielen Dank für eure große Mühe und eure vielen Vorschäge!! Viele Grüße

Also wieder einmal jemand, den Lernen nicht interessiert, sondern nur wie man den wackligen Kram doch abgeben kann, ohne sich weiter damit auseinanderzusetzen.

Traurig.

...ohne sich weiter damit auseinanderzusetzen. Traurig.

ja. Aber effizient. Und mit ein Grund für den Erfolg der Arduino-Plattform. Man kriegt erstaunlich viel ans Laufen, ohne sich viel mit den sonst üblichen Details auseinandersetzen zu müssen.

Und ob man sich, soweit unbedingt erforderlich, in ein vorhandenes Labview- oder ein Arduino-Programm einarbeitet, ist letztlich egal.

Weiterhin alles Gute, Maren89 ;)

Wenigstens hat die Nachwelt was von dem Thread

Da die Lösung nicht zum Problem passte (war zu langsam), wurde das Problem geändert (sendet jetzt viel langsamer).

Ich betrachte das nicht als Effizienz.

Hallo zusammen,

ich persönlich sehe es als sehr beachtlichen Lernfortschritt meinerseits an, das Programm zum Laufen gebracht zu haben, ohne davor irgendwelche Erfahrungen bei der Programmierung mit Arduino gehabt zu haben :) Hätte ich bei dem Projekt kein Interesse an Lernzuwachs und Lösungsfindungen gehabt, so wäre ich nun mit Sicherheit nicht an dem jetzigen Punkt angelangt. Die Abgabe des Projekts ist kommenden Woche, was mir tatsächlich keinerlei Spielraum mehr lässt, mich um weitere Details zu kümmern, aber nicht ausschließt mich damit nach Projektabgabe ohne Zeitdruck intensiv weiter zu beschäftigen :)

Viele Grüße und Danke für eure Unterstützung!

2 Tage und unsere geballte Hilfe hätten sicher genügt auch das Problem der langsamen Arduino-Datenverarbeitung zu finden, erkennen, Dir zu erlähren und lösen. Ich glaube wir sind auch dazu bereit Dir zu helfen, wenn Du nach dem Abgabetermin immernoch versuchen Willst den Sketch zu beschleunigen. Grüße Uwe

Hallo,

ich finde es auch Schade das gerade jetzt abgebrochen wurde. Aber ich kann mir auch vorstellen wie es ist, als Schüler nehme ich an, etwas zu haben was erstmal funktioniert und den Lehrer zufrieden stellt. Und nun kommen Ferien.

Nur den kompletten Sketch hättest du uns dennoch zeigen können. Egal welchen du nun abgeben wirst. Hier wird bestimmt viel Potential verschenkt den wir bestimmt finden würden.

Falls wirklich noch Interesse besteht, nur zu ... wenn du wirklich was lernen möchtest.

@ Whandall: der Nachwelt hilft es auf jeden Fall wie Micha schon anmerkte. Wir gehen davon nicht unter. :)

hi,

das ist es auch, was mir fehlt: warum wurde nie der arduino-sketch gepostet?

gruß stefan

Eisebaer: hi,

das ist es auch, was mir fehlt: warum wurde nie der arduino-sketch gepostet?

gruß stefan

Soll ich jetzt meine Kristallkugel für Deine Frage hervorziehen oder um den Fehler im Sketch zu finden? ;) ;) ;) Grüße Uwe

Doc_Arduino: @ Whandall: der Nachwelt hilft es auf jeden Fall wie Micha schon anmerkte. Wir gehen davon nicht unter. :)

Micha ?

ElEspanol: Micha ?

Hallo Spanier,

nicht mal mehr das funktioniert in dem Thread ... Zu langsame Verarbeitung, zu viel Input. :) Entschuldigung.