2 Programme Parallel mit Interrupts

Gast #782907
Lesenswert?
• ▲
▼
Hallo Leute,

ich sitze hier vor einen kleinen Problem. Ziel ist es eine Ausgabe über 
ein LCD Display zu machen und 'gleichzeitig' einen Schrittmotor zu 
betreiben.

Der Gedanke war dieses mit Hilfe von 2 Interrupts zu machen.
Ich hab 2 Programme für die jeweiligen Abläufe. Diese werden von 2 
Timern über Interrupts aufgerufen.

Leider klappt das nicht. Es scheint als würden sich die Interrupts 
gegenseitig blockieren. Ich habe schon getestet die Interrupts manuell 
wieder freizugeben: "sei" und dann ein "ret" sowie das  ganze über ein 
"reti" zu machen.


Kann mir da vielleicht jemand ein paar Tips geben oder mir vielleicht 
sagen ob das vom Ansatz her falsch ist ?


grüße

Timo
#782923
Lesenswert?
• ▲
▼
Warum willst Du das Display auch über Interrupt steuern ?

Beim Schrittmotor macht es Sinn, damit die Pulse schön synchron kommen 
und der Motor rund läuft.
Beim LCD macht es keinen Sinn.

Mach' ne Hauptschleife für das LCD und Interrupts für den Motor.
Übrigens sollen die Interrupt Routinen kurz sein, also keine großen 
Berechnungen in der Motor Interrupt routine machen, sondern eventuell in 
der Hauptschleife die Daten vorbereiten.
Gast #782924
Lesenswert?
• ▲
▼
Hallo Teemo,

eigentlich ist die Sache ganz einfach: In der Hauptschleife schaust Du 
nach wieviele Schritte Du gehen mußt und schreibst das in eine globale 
Variable. Dort kannst Du auch Dein Display ansteuern. Der Timerinterrupt 
ist nur dazu da, den Schrittmotor anzusteuern. Dabei entscheidet die 
Zykluszeit des Timers über die Schrittgeschwindigkeit des Motors.

Gruß Matthias
Gast #782927
Lesenswert?
• ▲
▼
Hallo Teemo

wenn Du 2 Prozesse steuern willst dann würde ich nur den Zeitkritischen 
Prozess in die Interruptroutine stecken den anderen im normalen 
Programmablauf.

Die Schrittmotor Routine würde ich in den Interrupt bearbeiten,
und die LCD Ansteuerung im normalen Programmablauf.

MfG
Torsten
Gast #782930
Lesenswert?
• ▲
▼
Danke für die schnelle Antwort. Also Lange-Warte-Schleifen habe ich 
extra vermieden.

Ich hab die Datei hochgeladen. Hier ist der Link :
http://imojo.de/code.txt

Das Problem umfasst folgende Funktionen :

go_lcd (wird durch Interrupt aufgerufen um das LCD Display anzusteuern)

und
go_sm (um den Schrittmotor aufzurufen)


Die Funktionen alleine und für sich funktionieren. Nur leider nicht 
zusammen.


Bitte nicht meckern für den teilweise unübersichtlichen Code.... es 
handelt sich hierbei um die Arbeit eines Anfängers :D


Grüße

Timo
Gast #782936
Lesenswert?
• ▲
▼
Vorschlag zur Interrupt-Service-Routine (ISR):

ISR
  if Timer1_Flag == true
  {
    Schrittmotor-Routine
  }

  if Timer2_Flag == true
  {
    LCD-Modul-Routine
  }
  reti

Alternativ könnte auch nur die Motor-Routine mittels Interrupt 
abgearbeitet werden, da die LCD-Routine vielleicht etwas 
zeitunkritischer ist:

main
  if Timer2_Flag == true
  {
    LCD-Modul-Routine
  }

  call Irgendwas1
  call Irgendwas2
  call Irgendwas3
  goto main

ISR
  if Timer1_Flag == true
  {
    Schrittmotor-Routine
  }
  reti
Gast #782951
Lesenswert?
• ▲
▼
Der Code wurde nun aktualisiert. Die LCD Funktion wird in der Mainloop 
aufgerufen. Der Interrupt springt in die SM Motor Funktion.
http://imojo.de/code.txt

Das Resultat ist foglendes :


Der Schrittmotor läuft und macht das was er soll. Leider dsa LCD Display 
nicht mehr :(  Das reagiert gar nicht mehr.


Ich fummel hier weiter rum aber falls jemand noch ne Idee hat wär ich 
dankbar



THX
Timo

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren