Hallo, in meinem Steuergerät gibt es verschiedene CAN Botschaften, die in unterschiedlichem Zyklus gesendet werden. Dabei varriert der Zyklus zwischen 100ms und 250ms. Wie setze ich das im C-Code um? Benötige ich für jede Botschaft bzw. Gruppe mit gleicher Zykluseit einen eigenen Timer? Gibt es eine elegantere Lösung?
Berechne das kleinste gemeinsame Vielfache der Sende-Frequenzen, lasse einen Timer mit dieser Frequenz laufen und zähle pro Nachricht eine Variable hoch, um die Frequenz zu teilen.
Ein System ohne Zeitbasis wirst Du sicher nicht bauen, oder? Also nutze sie. So wie Du die Aufgabe verbal beschreiben kannst, so kannst Du das Zeitverhanlten auch in dem Programm umsetzen.
Eine weitere Möglichkeit: Mit einem timer einen Interrupt von 1ms erzeugen. Für jede CAN message eine Variable als Counter einrichten, die im Interrupt hochgezählt wird. Dazu noch jeweils die Zykluszeit definieren. Nach Erreichen der gewünschten Zykluszeit die Message senden und die Variable wieder zurück setzen.
Dieter M. schrieb: > Mit einem timer einen Interrupt von 1ms erzeugen. Ist identisch zu meinem Vorschlag wenn man annimmt dass das kleinste gemeinsame Vielfache der Frequenzen 1kHz ist.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.