PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 2 Interrupts gleichzeitig???



x8r
22.01.2006, 17:12
Hallo,
ich mache mir gerade ein kleines Program zur Ansteuerung von 2 Schrittmotoren. Wenn ein Takt von einem anderen controller kommt soll der jeweilige Motor einen schritt vorwärts bzw. rückwärts machen (wird über ne zweite leitung gesteuert).
Eigentlich will ich mit bitwait im prog warten bis ein takt kommt, aber wenn in der zwischenzeit ein Takt für den anderen Motor käme würde dieser übersehen.
Also will ich das ganze über interrupts laufen lassen.
Ich könnte natürlich den einen Takt mit bitwait lesen und den anderen mit nem interupt, aber das wäre irgenwie unsauber.
Gibt es eine möglichkeit, dass zwei Interrupts gleichzeitig ausgelöst werden dürfen?
Kann man auch irgendwie zwei programme gleichzeitig laufen lassen?
Hat jemand von euch eine andere Idee?
Mit freundlichen Grüßen
Jan

PicNick
22.01.2006, 17:21
Klassisch wäre die Variante, INT0 für den einen und INT1 für den anderen Motor zu verwenden (type "Help" for help).
Kommt viel darauf an, was der Controller sonst noch zu tun hat.

ruediw
22.01.2006, 17:25
Gleichzeitig kann man nie in einem uP oder cC zwei Programme
laufen lassen. Höchstens scheinbar, vorausgesetzt der uC unterstützt
das und Du setzt ein Real Time OS ein.
Dies ist nur bei Zeitkritische Nnwendungen notwendig (komerziell).
Aber wieso so kompiziert ?
Wenn dein uC sowieso auf Pulse eines anderen uC reagieren soll,
wieso nicht auf Kommandos reagieren die der andere uC
über IIC, RS-485 oder SPI schickt ?
Wenn Du den seriellen Interrupt benutzt, musst Du in deiner ISR
einfach sofort das Kommando übernehmen. Du Speicherst es in einer
Globale Puffervariable und setzt ein globales Flag dass ein neues Kommando
abrufbar ist.
Danach kannst Du es im Hauptprogramm auswerten und dementsprechend ragieren. Danach setzt du das Flag wieder zurück.

x8r
22.01.2006, 17:38
ich dachte es wäre am einfachsten mit impulsen :?
Ich habe auch schon überlegt das ganze über ein Netzwerk zu schicken aber da ich eher noch ein Anfäger bin wollte ich erstmal die Figer davon lassen.
Ich denke, dass ich es erstmal mit der unsauberen Methode machen werde; den einen Motor mit nem Interrupt und den anderen mit bitwait.
Ich habe in der Hilfe gelesen, dass wenn während eines Interrupts ein anderes ausgelöst wird, sich der Controller dies merkt. Führt er denn nach beendigung des ersten Int das zweite aus?
MfG
Jan

PicNick
23.01.2006, 09:30
Das merkt er sich wie ein Elefant. Allerdings, wenn zweimal der selbe interrupt kommt, geht einer verloren

x8r
23.01.2006, 19:49
Ok, danke für eure Antworten!
Ich werde das ganze jetzt mit den beiden Interrupts proggen. Die Programme die durch die Interrupts ausgelöst werden dauern ja nicht allzulang und es ist egal, wann die Schritte ausgeführt werden sodern dass sie ausgeführt werden.
Danke für eure super Hilfe; Hoffentlich kann ich euch auch mal helfen! :D
MfG
Jan