Hallo Zusammen Ich bin dabei ein PWM an der LPT Schnittstelle zu programmieren. Als Betriebssystem ist FreeDOS im Einsatz. Nun wird aber das PWM durch irgend etwas gestört, etwa einmal pro Sekunde... Die Vermutung liegt deshalb nahe, dass dabei ein Interrupt dazwischen greift. Folgende Interrupts habe ich bereits ausgeschaltet, jedoch ohne erfolg: OUT (&H21), &b11111111 'Interrupts deaktivieren 'bit 7 = 0 enable parallel printer interrupt 'bit 6 = 0 enable diskette interrupt 'bit 5 = 0 enable fixed disk interrupt 'bit 4 = 0 enable serial port 1 interrupt 'bit 3 = 0 enable serial port 2 interrupt 'bit 2 = 0 enable video interrupt 'bit 1 = 0 enable keyboard, mouse, RTC interrupt 'bit 0 = 0 enable timer interrupt Gibt es noch andere Interrupts die das Problem verursachen könnten ? Kenne mich damit zuwenig aus...
das wird doch nichts. Steck ein 50cent µC an den LPT Port und schon kannst du ein paar PWMs ausgeben ohne das jemand dich stört. Ein PC ist von der Technik überhaupt nicht dazu geeignet. Es gibt bei neueren PCs (du schreibst ja nicht mal was es für eine CPU ist) sogar Prozesse die von Bios gesteuert werden. Irgendwas mit Powermanagemt/ACPI diese können sogar den BS Rechenzeit wegnehmen.
Peter II schrieb: > Es gibt bei neueren PCs (du schreibst ja nicht mal was es für eine CPU > ist) sogar Prozesse die von Bios gesteuert werden. Der "System Management Mode". Einer der vielen Gründe, weshalb exakte Laufzeiten auf PCs verdammt schwer vorhersagbar sind. https://en.wikipedia.org/wiki/System_Management_Mode: "Operations in SMM take CPU time away from the OS, since the CPU state must be stored to memory (SMRAM) and any write-back caches must be flushed. This can destroy real-time behavior and cause clock ticks to get lost." "The SMM may disrupt the behavior of real-time applications with constrained timing requirements." Und insbesondere: "By design, the operating system cannot override or disable the SMI." Was auch besser so ist, denn da kann Steuerung dabei sein, deren Versagen die Hardware schrotten kann. Wenn man partout mit PCs auf dieser Zeitebene Hardware kontrollieren will, dann sollte man das Gerät aus dem Museum klauen. So circa bis 386 sollte man auf der sicheren Seite sein. PCs sind für sowas nicht gebaut. Microcontroller sind es.
:
Bearbeitet durch User
Michael L. schrieb: > Folgende Interrupts habe ich bereits ausgeschaltet, jedoch ohne erfolg: Seit dem PC/AT verwenden PCs zwei kaskadierte Interruptcontroller; Dein Ansatz befriedigt aber nur einen Interruptcontroller. Der zweite Interruptcontroller hat die I/O-Adresse 0xA0/0xA1.
Wenn er den Kaskade-IRQ 2 abgeschaltet hat, dann sollte der sekundäre eigentlich komplett weg sein.
Das denkt man sich so, nur korreliert das irgendwie überhaupt nicht mit den genannten Bits der Bitmaske. Mir scheint das ganze Grundkonzept irgendwie kaputt zu sein. (Nicht nur das des PC, das ist es schon lange, sondern die Idee, mit einem PC durch Bitfrickeln am Frickelport eine PWM zu erzeugen)
Rufus Τ. Firefly schrieb: > Das denkt man sich so, nur korreliert das irgendwie überhaupt nicht mit > den genannten Bits der Bitmaske. Um die Situation von PCs dieses Jahrhunderts in dieser Frage wirklich genau zu verstehen, muss man vermutlich ein paar Kilo Doku wälzen. Zumal das, was man von dem Kram in der XT/AT-Ansicht zu sehen kriegt, ohnehin eine nur unveränderte wirkende antike Scheinfassade eines viel komplexeren Gebildes ist. Eine Fassade, die nur dazu da ist, Bootloader (oder notfalls auch DOS) zu starten, und dann alsbald durch das eigentliche Gebilde ersetzt wird. Darauf, dass sich ein PC im Laufzeitverhalten exakt so verhält, wie ein zu schnell geratener PC/AT, würde ich keinen Pfennig setzen. Insofern ist der Ansatz schlichtweg sinnlos.
:
Bearbeitet durch User
A. K. schrieb: > Insofern > ist der Ansatz schlichtweg sinnlos. Es wurde wohl schon millionenmal geschrieben, dass ein PC mit DOS, Windows oder auch Linux kein Echtzeitsystem ist. Trotzdem scheint sich diese Erkenntnis einfach nicht durchzusetzen. Der Ansatz, aus einem Non-RTS ein Realtime-System zu machen, indem man einfach alle Interrupts abschaltet, ist an Absurdität nicht mehr zu überbieten. Das liegt etwa auf dem Niveau, im Auto die Zündkabel rauszureissen, um die Störungen im Radio zu beseitigen. Gruss Reinhard
Besten Dank für eure Antworten. Ich habe noch eine andere "fremde" Software, die ebenfalls ein PWM am LPT erzeugt. Dort wird dies jedoch mit einem Timer realisiert, und funktioniert natürlich einiges besser. Wenn meine Software das gleiche PWM erzeugen kann, ist das Ziel erreicht !! Mir ist natürlich klar, das mit einem normalen PC nie ein 100% RT System zustande kommt. Es muss nur so gut wie die fremd Software funktionieren. Zurück zum Thema: Mein Gedanke: Timer mit einem Wert laden, ist der Timer auf 0, wird eine ISR aufgerufen, und der Ausgang am LPT gesetzt. Und so weiter.... Mit dem Timer 2 (H43) habe ich schon einige versuche gemacht, aber ich habe keine Ahnung wie das mit dem Interrupt funktioniert, wenn der Timer auf 0 ist. Wie wird eine ISR definiert, die dann ausgeführt werden soll ? Welches interrupt wird überhaupt auftreten ?
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.