Laden...

Wartezeit um die 10µs erstellen (beim Zugriff auf einen Mikrocontroller)

Erstellt von pidi vor 12 Jahren Letzter Beitrag vor 12 Jahren 3.895 Views
P
pidi Themenstarter:in
58 Beiträge seit 2008
vor 12 Jahren
Wartezeit um die 10µs erstellen (beim Zugriff auf einen Mikrocontroller)

Hallo,

ist es irgendwie möglich eine so kurze und vor allem konstante Wartezeit zu programmieren?

Es geht darum das ich Daten vom PC zu einem µC schicken muss. Und der µC halt etwas langsam ist und jedesmal eine kurze Arbeitszeit von ca. 10µs braucht bevor das nächste Datenbyte kommen und ausgewertet werden kann. Und wenn ich am PC die Datenbytes ohne Wartezeit rausschiese kommt mein µC nicht mehr hinterher.

Mir fällt nur Thread.Sleep(1); ein, was für meine Zwecke auch ideal wäre, aber leider kommt man dabei nicht unter 1ms. Und der kleinste Timer Intervall ist auch 1ms.
1ms ist für meine Zwecke aber ein Unding. Bei ein paar hundert kB zieht sich das bis zu 30 min in die Länge.

Danke und Grüße

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo pidi,

Mikrosekunden kannst du gleich vergessen. Selbst Millisekunden sind ein Problem. Das Thema (Timer, Genauigkeit, Echtzeit* usw.) wurde schon öfter besprochen. Bitte benutze die Forumssuche und poste die besten Treffer hier. Vielen Dank!

herbivore

5.742 Beiträge seit 2007
vor 12 Jahren

Hallo pidi,

du könntest Thread.SpinWait probieren.

Aber Achtung: Um 10µs zu haben, musst du auf schnelleren Rechnern höhere Werte angeben. Am besten also den Wert via Stopwatch bei jedem Programmstart ermitteln und lieber noch ein wenig zu lange warten.

@herbivore: Das Problem ist IMHO ein wenig anders - es geht um eine _Mindest_zeit, die gewartet werden soll, nicht um eine genaue Zeit.

P
pidi Themenstarter:in
58 Beiträge seit 2008
vor 12 Jahren

OK,

danke für die (leider schlechte) Antwort.

Werde mich mal ins Thema einlesen und dann weitersehen.

5.742 Beiträge seit 2007
vor 12 Jahren

danke für die (leider schlechte) Antwort.

Was empfindest du jetzt "schlecht" an den Antworten?
Hast du den Ratschlag von herbivore beherzigt und die Forumssuche benutzt?

Und hast du die Methode überhaupt einmal ausprobiert?

P
pidi Themenstarter:in
58 Beiträge seit 2008
vor 12 Jahren

Mikrosekunden kannst du gleich vergessen. Selbst Millisekunden sind ein Problem.

Das finde ich eine leider schlechte Antwort.
Schlecht im Sinne von: "schlechte Nachrichten für mich" und nicht im Sinne von: herbivore schreibt schlechte Antworten.

Und ja, ich lese mich grad ein, wie ich doch schon geschrieben habe.

156 Beiträge seit 2010
vor 12 Jahren

Es geht darum das ich Daten vom PC zu einem µC schicken muss. Und der µC halt etwas langsam ist und jedesmal eine kurze Arbeitszeit von ca. 10µs braucht bevor das nächste Datenbyte kommen und ausgewertet werden kann.

hö?! ... was für einen µC verwendest Du und wie überträgst Du die Daten? ... im Normalfall sollte das Seriell sein ... wenn da ein Byte ankommt tritt er in den entsprechenden Interrupt und nimmt erst dann das nächste Byte entgegen wenn er den Interupt verlassen hat ... oder anders gefragt - was machst Du?

P
pidi Themenstarter:in
58 Beiträge seit 2008
vor 12 Jahren

Hallo mogel,

ja im normalfall sollte das so sein.

Aber ich habe ein Programm geschrieben mit dem ich den µC per USB (FTDI) mit einer .hex Datei flashen kann.
Das heisst ich schick erstmal die 4 Adress Bytes, dann 256 Bytes an Code Daten, dann die Checksum und dann ich kriegen mein ACK bzw. NACK vom µC. Das Spiel geht so lange bis alle Daten drüben sind.
Und genau diese 256 Byte sind das Problem, da sollte dazwischen immer ne kleine Wartezeit sein sonst mach der µC nicht mit.

Und µC seitig kann ich ja nix machen denn der befindet sich im System Memory Boot Mode, da hab ich kein Einfluss drauf.

M
1.439 Beiträge seit 2005
vor 12 Jahren

Welchen Mode(MPSSE, BitBang, UART) vom FTDI verwendest du?

P
pidi Themenstarter:in
58 Beiträge seit 2008
vor 12 Jahren

Ich benutze Bit Bang. MPSSE kann mein FTDI nicht, das können nur die FT2232C Typen.

M
1.439 Beiträge seit 2005
vor 12 Jahren

Der FTDI unterstützt leider keine hardwareseitigen Delays. Allerdings kannst du je nach Protokoll, durch senden von Dummy-Bytes ein Delay erzeugen.

P
pidi Themenstarter:in
58 Beiträge seit 2008
vor 12 Jahren

Danke dir. Guter Tip.

Ich denke aber das der µC dann das Dummy Byte als echtes Byte annimmt und mein Programm im µC nach dem flashen Schrott ist. Denn wie gesagt der µC befindet sich im Hersteller eigenen System Memory Boot Mode. Da nimmt der alles mit was ihn füttere. Und die Checksum wird dann auch beim Teufel sein.

Von der Grundidee aber net schlecht. Ich werde darüber nachdenken.

Im Moment habe ich es auf die Holzfäller Methode gelöst und einfach ne for Schliefe zwischen den Datenbytes eingebaut die ne kurze Weile sinnlos vor sich hinzählt.

156 Beiträge seit 2010
vor 12 Jahren

Denn wie gesagt der µC befindet sich im Hersteller eigenen System Memory Boot Mode. Da nimmt der alles mit was ihn füttere.

dann solltest Du mal beim Hersteller nachfragen ... entwder Du machst was falsch oder der µC