Hallo Andreas und Dino,
>Was wäre wenn du die Interupts in der Routine des Motors erst
>deaktivierst und dann wieder anschaltest, wenn du fertig damit bist?
danke, das macht der Prozessor sowieso, weil das I-Flag innerhalb einer
Interruptroutine weitere Interrupts verhindert.
Das Problem ist eher, dass wenn bereits ein TWI-Interrupt läuft (dann
auch weitere Interrupts gesperrt sind), ein anstehender Motor-IRQ bis zu
Ende der TWI-Routine warten muss.
Wenn ich in der TWI-Routine weitere (Motor-)Interrupts freigebe, treten
weitere TWI-Interrupts auf, was eigentlich nicht sein sollte (?).
>Das kann nur bei relative schlichter Programmierung oder
>Schrittfrequenzen > 20kHz der Fall sein.
Die Interruptroutine für den Motor läuft mit 64 KHz, fragt einen Encoder
ab und sendet bei jedem vierten Aufruf neue Daten zum Motortreiber, also
mit 16 KHz. In den anderen drei Aufrufen werden Berechnungen
durchgeführt (Schrittzähler erhöhen, Mikrostep-Sinustabelle auslesen
usw.). Die CPU ist etwa 2/3 ihrer Zeit im Interrupt.
Die Störungen bringen den Motor nicht aus dem Tritt, also keine großen
Probleme. Man fühlt und hört es aber am Motor, etwa wie ein leichter
Lagerschaden oder Sandkörnchen im Lager. Nicht so gut, wenn man eine
Präzisionsmaschine (Teleskopmontierung) damit antreiben will.
>Aber wenn Du unbedingt den TWI-Int vermeiden möchtest, laß ihn doch
>einfach deaktiviert und frage hin und wieder das Flag ab.
Danke, ich wusste nicht, das es so einfach ist. Einen TWI-Master habe
ich so schon programmiert, aber ich dachte, ein Slave könnte vom
sendenden Master 'überfahren' werden, wenn er mal nicht rechtzeitig
reagiert.