Das macht auf dem Raspi auch nicht das User-Programm, sondern die Firmware, genauso wie bei RS232, I2C und SPI. Ich schubse ja auch nicht einzelne Bits auf die RS232, sondern schreibe ein Byte und die Firmware / Hardware übernimmt die zeitgenaue Zerlegung in Bits.mschnell hat geschrieben:"Vorgibt" schon, dann muss das Timing aber auf wenige Prozent konstant bleiben. Davon kann man bei einem User-Programm, das in einem Betriebssystem läuft i.A. nicht ausgehen.
Allerdings ist sowas auch in Software machbar, wenn man die Priorität hochsetzt. Das habe ich mal für die softwaretechnische Erzeugung von MM-Steuersignalen für digitale Modellbahn an der RS232 gemacht. Man sollte sowas nur kurzzeitig machen, weil man sonst den Rechner blockiert, und man wissen was man tut.
Es wird glaube ich bei einigen AD-Wandlern gemacht, wo der Slave den Takt solange verzögert, bis die Wandlung fertig ist. Und es kann bei Eeproms sinnvoll sein, wo ein Page erase oder Page write schon mal ein paar msec dauern kann.mschnell hat geschrieben:Hardware-Chips sind ja im Allgemeinen "beliebig" schnell und brauchen das nicht.
Ich glaube nicht, dass der TO sich das Protokoll gebastelt hat. Ich fürchte, er startet einfach die Wandlung und macht dann ein delay(1000), weil die Wandlung 750msec dauert, und liest dann wieder aus.mschnell hat geschrieben:Das I²C-Protokoll - oder sonst irgendeinen getimeten direkten Hardware-Zugriff in einem User-Programm (das in einem Betriebssystem läuft) zu basteln, halte ich ohnehin für ziemlich daneben.
Leider findet man diese Unart in vielen "Tutorials" zu den Sensoren. Ok, ich gebe zu, ich mache das auch manchmal, wenn ich etwas teste. Aber nicht für ein Programm, welches dann vielleicht noch eine Gui hat (Memo.Lines.Add...), und wo der Nutzer dann erstmal 4sec nicht weiss, ob das Programm überhaupt noch läuft. Einige OS schießen Programme, die mehr als 2sec hängen gnadenlos ab.