Funktions- und Timersuche

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Snoda
User
Beiträge: 32
Registriert: Mittwoch 1. Februar 2006, 14:34

Bin ganz neu hier, wie ihr merken werdet. :)

Also erst mal ein freundliches Hallo!

Habe mal zwei Fragen, auf die ich keine richtige Antwort gefunden hab.
Bin zwar kein totaler Neuling, aber auch nicht der absolute Freak, also bitte versucht eure Antworten einfach zu fassen, danke für das Verständnis!

Also folgendes:

1.) Steuere über Parallelport am Rechner ein LCD display. Mein prog funzt eigentlich ganz gut, aber da das disp nur eine bestimmte Zahl an Befehlen/Minute schafft ist es notwendig kleine Pausen einzulegen. Jeglicher Timer den ich kenne läuft aber nur im Millisekundentakt. Die Verzögerung sollte aber kleiner 100um sein. Gibts da was, damit der Prozessor nicht durch unnötige for x in range-Schleifen ausgelastet wird?

2.) Diese Frage ist bestimmt schnell beantwortet. Suche einen Befehl, mit welchem sich Tastendrücke aufangen lassen, also ohne Enter-bestätigung, zur "Echtzeitsteuerung". also das was in anderen Sprachen "getkey" oder Keypressed" heißt. Noch zu erwähnen wäre dass das prog ohne GUI läuft, also ohne TK oä.

Hoffe ich nerv euch nicht zu sehr.... Danke schon mal!!! :D :D
Hello world!
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Frage: Was wäre so schlimm daran, das Display nur einmal pro Millisekunde oder, oh Schreck, sogar nur einmal alle 10 Millisekunden zu aktualiseren?

In Kinofilmen wird die Leinwand auch nur 24 mal pro Sekunde, d.h. alle 42 ms aktualisiert.
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Snoda hat geschrieben:Bin ganz neu hier, wie ihr merken werdet. :)

Also erst mal ein freundliches Hallo!

Habe mal zwei Fragen, auf die ich keine richtige Antwort gefunden hab.
Bin zwar kein totaler Neuling, aber auch nicht der absolute Freak, also bitte versucht eure Antworten einfach zu fassen, danke für das Verständnis!

Also folgendes:

1.) Steuere über Parallelport am Rechner ein LCD display. Mein prog funzt eigentlich ganz gut, aber da das disp nur eine bestimmte Zahl an Befehlen/Minute schafft ist es notwendig kleine Pausen einzulegen. Jeglicher Timer den ich kenne läuft aber nur im Millisekundentakt. Die Verzögerung sollte aber kleiner 100um sein. Gibts da was, damit der Prozessor nicht durch unnötige for x in range-Schleifen ausgelastet wird?

2.) Diese Frage ist bestimmt schnell beantwortet. Suche einen Befehl, mit welchem sich Tastendrücke aufangen lassen, also ohne Enter-bestätigung, zur "Echtzeitsteuerung". also das was in anderen Sprachen "getkey" oder Keypressed" heißt. Noch zu erwähnen wäre dass das prog ohne GUI läuft, also ohne TK oä.

Hoffe ich nerv euch nicht zu sehr.... Danke schon mal!!! :D :D

Dann setze halt einen time.sleep aller 4 instruktionen wenns denn sein muss, oder schreib ein addon was den TSC ausliest, genauer kriegst du es nicht ;-)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Snoda hat geschrieben: Suche einen Befehl, mit welchem sich Tastendrücke aufangen lassen, also ohne Enter-bestätigung, zur "Echtzeitsteuerung".
Hi Snoda!

Eventuell hilft dir das "readline"-Modul. Unter Unix/Linux funktioniert es direkt aus Python heraus. Unter Windows musst du es extra installieren.

http://python.org/doc/2.4.2/lib/module-readline.html

Die andere Variante. Rufe unter Linux dein Programm mit "cat | python programmname.py" auf und arbeite "sys.stdin" Zeichen für Zeichen ab. Das sollte aber nur eine Notfallmaßnahme sein.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

1.) Steuere über Parallelport am Rechner ein LCD display. Mein prog funzt eigentlich ganz gut, aber da das disp nur eine bestimmte Zahl an Befehlen/Minute schafft ist es notwendig kleine Pausen einzulegen. Jeglicher Timer den ich kenne läuft aber nur im Millisekundentakt. Die Verzögerung sollte aber kleiner 100um sein. Gibts da was, damit der Prozessor nicht durch unnötige for x in range-Schleifen ausgelastet wird?
Jeglicher Standard-OS-Timer hat höchtens 1 Jiffie-Auflösung, und das ist 10ms. Bei Windows wirst Du mit time.sleep() niemals eine höhere Auflösung hinkriegen, unter Linux möglicherweise 1ms Auflösung wenn Du den System-Timer des Kernels auf 1000Hz gestellt hast.

Wenn Du eine bessere Auflösung brauchst mußt Du mit einem Realtime-Betriebssystem rumspielen, hierzu gibts auch für den Linux-Kernel Patches. Dein Programm kann dann einen Timer beim Betriebssystem registrieren der häufiger aufgerufen wird, und bekommt im Gegensatz zu einem "normalen" Betriebssystem auch die Garantie dass er tatsächlich nach xyz us aufgerufen wird, und nicht frühestens oder später.

Sonst: busy loop macht das ganz genau so. Warum ist das so schlecht? Und: ich hab schon relativ oft Daten über den Parallelen-Port ausgegeben, warum reicht da die Auflösung die time.sleep() bereitstellt nicht?

Es ist Blödsinn ein externes LCD mit 100us Reaktionszeit anzusprechen, da sich das Display sowieso nicht so schnell updaten kann, mit relativ großer Sicherheit.

--- Heiko.
Snoda
User
Beiträge: 32
Registriert: Mittwoch 1. Februar 2006, 14:34

Joghurt hat geschrieben:Frage: Was wäre so schlimm daran, das Display nur einmal pro Millisekunde oder, oh Schreck, sogar nur einmal alle 10 Millisekunden zu aktualiseren?

In Kinofilmen wird die Leinwand auch nur 24 mal pro Sekunde, d.h. alle 42 ms aktualisiert.
Entschuldigt die späte Antwort! Und Danke für alle Antworten!
Aber zu der Sache mit den Aktualisierungsraten: Das ist ein alphanumerisches Display, HD44780 Controller. Also muss ich jedes Zeichen einzeln übertragen. Wenn ich für ein Zeichen also 10ms Wartezeit einplane sind das bei 80 Zeichen 800ms, das fällt dann schon auf. Habe zum Beispiel ein frequenzspektrum als Winamp-plugin programmiert, das sieht schlimm aus, selbst bei 1ms! Wird wahrscheinlich daran liegen, dass die Timer nicht schnell genug aufgerufen werden. Nur zur Info - das ganze läut unter Windows... :(

Wegen den Tasten hab i noch nicht so richtig raus, werd mich wohl doch mal mit dem englischen Text rumplagen müsssen...
Hello world!
Antworten