32Bit-Zahl als Bit-Array / --> Einlesen eines Absolutwertgebers

Hi michael_x

das ist viel Input. Das muss ich erst mal sacken lassen.

(Wodurch ändert sich denn der Wert des data - Pins ? Da ist doch sicher irgendwo ein Clock Puls...)
Probierst du gerade, das Rad neu zu erfinden? (Das soll keine Kritik sein, nur sollte man vor dem Neu-Erfinden wissen, was es schon gibt)

Gott beware. Ich will sicher nichts neu erfinden, was es bereits gibt. Bin aus angeborener Faulheit immer froh, wenn ich was vorhandenes verwenden kann.

Du hast richtig erkannt: Ich habe zwei Eingänge. eine Clk- und einen Data-Impuls. Um genauer zu sein: Ich lese will eine Absoluwertgeber einlesen. Bei jeder positiven Flanke des CLK wird der Data-Eingang gelesen.
Das "Telegramm" ist ca. 10ms lang. In dem "Telegramm" bekomme ich ein 24 Bit Datenpaket.

shiftin() kann (so viel ich aus der Reference gelesen habe) nur ein Byte??

Ja, für die Maschinenbefehle ( Assembler )
" Die meisten Befehle brauchen nur 1 Zyklus ", meine ich irgendwo gelesen zu haben, aber genauer weiss ich nicht. Tip: Datenblatt .
Für unsereins ist eher interessant, wie gut der Compiler arbeitet, bzw. wie man ihn unterstützen kann.

Hab einige "Tests" gemacht:
Das Unterprogramm in der loop 50 mal aufgerufen. Am Ende der loop die Zeit mit millis() gemessen. Dann das Unterprogramm 100x aufgerufen. Den Zeitunterschied berechnet.... durch 50 geteilt....
--> Meine Unterprogramm "Takt ()" dauert ~21µs.(Beim Schreiben auf Bit"31" des "Long". Seltsam: Beim Schreiben auf Bit "0" ist es ~1,6µs schneller.

Das mit der Frage nach den 3Byte Datenformat war nur deshalb, weil dann das Vorzeichenbit automatisch an die richtigen Stelle gekommen wäre.

long bit = 0x00001;
long distance = 0;
...
void Takt() {
newdata = HIGH;
if ( !digitalRead(data)) distance |= bit;
bit <<= 1;
}

Sorry: das hab ich leider überhaupt nicht verstanden. Dazu fehlts mir wohl an C-Grundlagen.