Brauche Echtzeit für RS232-Interface

Message
Author
User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#16 Post by Janka »

Meine Aussage ist: Wer misst wie du, misst Mist. Du zählst pro Schleifendurchlauf jeweils 1 "Mikrosekunde", tatsächlich braucht ein Durchlauf aber wohl ca. *4* Mikrosekunden. Das liegt einfach daran, dass die time() und localtime()-Aufrufe in deiner Schleife eben auch Ausführzeit brauchen.

Ein Hardwaretimer wird zum Beispiel von usleep() angestoßen. Du beauftragst den Kernel, dich nach n Mikrosekunden wieder zu wecken. Und das macht der Kernel dann auch. Darauf kannst du dich im Echtzeitmodus verlassen, wenn es keinen Prozess mit höherer Priorität gibt.

Ob der Echtzeitmodus an ist, kannst du zum Beispiel mit einer Endlosschleife ausprobieren. Ist der Prozess im Echtzeitmodus, darfst du nach Programmstart den Stecker ziehen.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

pcAlko
Posts: 70
Joined: 14. May 2007 19:27

#17 Post by pcAlko »

nur das ist ja das Problem!
wenn ich das Programm welches ich zuvor aufgelistet habe starte
ist überhauptnichts blockiert!
was mach ich dann falsch, wenn wir das mit der falschen Zeitmessung auser acht lassen??

8) pcAlko

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#18 Post by Janka »

Das muss bei dem Programm zuvor ja auch so sein. usleep(1) weist den Kernel an, für eine µs mal ein anderes Programm ablaufen zu lassen. Probier mal folgendes Programm aus:

Code: Select all

#include <sched.h>
#include <stdlib.h>
#include <unistd.h>

void setprio&#40;&#41;
&#123;
  const struct sched_param sp=
  &#123;
    sched_priority&#58; 1,
  &#125;;

  if &#40;sched_setscheduler&#40;0, SCHED_FIFO, &sp&#41;<0&#41; 
  &#123;
    perror&#40;"sched_setscheduler"&#41;;
    exit&#40;EXIT_FAILURE&#41;;
  &#125;

&#125;

int main&#40;int argc, char* argv&#91;&#93;&#41;
&#123;
  unsigned long int i,j;

  setprio&#40;&#41;;

  for &#40;i=0; i<2000000000; i++&#41; j++;

  return 0;
&#125;
Bei mir ist der Rechner für ca. 10 Sekunden nach Aufruf des obigen Binaries nicht mehr bedienbar, danach ist das Programm durch und alles ist wieder normal.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

pcAlko
Posts: 70
Joined: 14. May 2007 19:27

#19 Post by pcAlko »

eben nicht! (ich habs ausprobiert)
ich kann nämlichl unschalten
oder auch glxgears starten.
auch wenn ich das Programm nicht im root ausführe kommt kein Fehler.
warum funktioniert das bei mir nicht?
hast Du irgend eine Idee?

8) pcAlko

PS%: kann es sein weil ich einen Dual Core habe
dass mir der Computer das ausgleicht
und nur mehr auf der 2. CPU läuft?
wenn ich zwei glxgears starte
schaut es aber trotzdem laut der Systemüberwachung aus,
als ob er dafür beide CPU's verwendet.

nein Doch nicht :) jetzt hab ichs nochmals mit einer längeren Zeit versucht.
Bei Deinem Programm schnalzt die Benutzerlast der CPU natürlich ganz nach oben.
glxgears braucht zwar nur die Hälfte, aber dafür Benutzer- und Systemlast.
wenn ich nun Dein Programm starte wird die erste CPU beansprucht
und beim Start der beiden glxgears sehe ich dadurch dass auch die Systemlast gebraucht wird dass sie nur auf der 2. CPU laufen.
sobald Dein Programm beendet ist werden die glxgears auch auf beide CPUs aufgeteilt.
das funktioniert ja super! :wink:
naja, ist ja auch Linux.

jetzt muss ich nur noch dass mit der Laufzeit in den Griff bekommen.
hast Du irgend eine Idee wie ich die gebrauchten Mikrosekunden
der anderen Befehle abstoppen kann?
wäre echt super!!

8) pcAlko

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#20 Post by Janka »

Achja, Dual Core! Ja, wenn du zwei Prozessorthreads hast, ist natürlich nur einer die ganze Zeit beschäftigt. Der andere kann ganz normal weiterarbeiten. Zum Entwickeln ganz praktisch, aber Tests solltest du zusätzlich noch auf einer Einprozessormaschine machen.

Dass du keinen Fehler erhälst, kann daran liegen, dass deine Distribution einen RLIMIT_RTPRIO > 0 gesetzt hat. In diesem Fall dürfen auch normale Benutzerprozesse Echtzeitscheduling bis zu eben dieser Priorität anfordern.

$ man sched_setscheduler

Abstoppen kann man blockierend mit usleep() oder nichtblockierend mit setitimer(). Du kannst dich bei einem Echtzeitprozess wie gesagt darauf verlassen, dass die Zeiten stimmen. Zusätzliche Kontrolle ist nicht notwendig. Deshalb heißt das ja Echtzeit.

Wichtig ist halt nur, dass kein anderer Echtzeitprozess mit höherer Priorität gerade ebenfalls lauffähig ist.

Wenn du kleinere Einheiten als einen Timer-Tick (10ms, 4ms oder 1ms, je nach Kernel-Einstellung) abstoppen willst, solltest du usleep() benutzen, das wird dann in eine passende Busy-Loop übersetzt. Wenn das Programm ständig laufen soll, ist es aber besser, die Hardware auf Interruptbetrieb umzubauen.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

pcAlko
Posts: 70
Joined: 14. May 2007 19:27

#21 Post by pcAlko »

Hallo Janka!

Nochmals danke für Deine Starthilfen!
Ich bin derzeit schon fest beim programmieren
und habe mich deshalb nie gemeldet.

Diese Rechnungen aus dem Buch "Elektronik am PC" stimmen anscheinend nur für Windows. Die geben einen korrekturfaktor von 1.0000000001 an.
Wenn ich einen fixen wiederstand ausmesse komme ich auf 0.283...
Obwohl ich mir die Spielerei mit dem Messen im Heißwasser nicht nehmen lasse,
werde ich wohl auf deinen Vorschlag mit dem DS1820 zurückgreifen.
Woher bekommt man den eigentlich?
Muss ich den direkt in Daallas bestellen?

Der Grund liegt auber nicht nur bei der genauigket.
Ich brauche sicher mehrere Thermometer
und die alle ausmessen!?
und dann hab ich ja nicht so viele anschlüsse!
Gibt es nicht auch einen RS232-Adapter für die USB Schnittstelle?
Hast Du eine Ahnung wie ich damit arbeiten kann?
vor allem wie ich dann die Adressen der Ports finde.
Ich muss mal beim Conrad anfragen ob er solche Adapter hat.

So, jetzt kommt noch ne Frage!
Hoffe es wird Dir nicht zuviel.

Dazu etwas hintergrund info:
Die Temperaturmessung brauche ich dazu um einen Ventilator zu steueren.
Bei einer gewissen Temperatur den einzuschalten wäre ja kein Problem,
aber da ich den Ventelatur stufenlos regeln möchte
brauche ich irgend eine Dimmer-Funktion.
Ich schätze das ist jetzt nur ne Elektronische Frage!
Hast Du davon auch etwas Ahnung?

mfg.
8) pcAlko

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#22 Post by Janka »

pcAlko wrote: Obwohl ich mir die Spielerei mit dem Messen im Heißwasser nicht nehmen lasse,
werde ich wohl auf deinen Vorschlag mit dem DS1820 zurückgreifen.
Woher bekommt man den eigentlich?
Muss ich den direkt in Daallas bestellen?
Den bekommt man bei verschiedenen Elektronikversendern, bei Conrad.de kostet einer etwa 4,60&#8364;+ Versand. Oder du nimmst den Vergossenen mit 2m Anschlusskabel für 12&#8364;.

Wenn du zwei Chips kostenlos haben willst, erfindest du eine Firma (Vorname Nachname ist auch ein Firmenname) und füllst das "Samples"-Formular auf Maxims Webseite aus. 2 Stück bestellen, nicht mehr und nicht weniger -- das ist normal.

Außerdem brauchst du noch einen Onewire-Adapter. Dafür kannst du den DS2480-Chip nehmen (gleich 2 als Sample mitbestellen) -- den kann man über einen MAX232 (kaufen, dafür ein Sample anzufordern wäre etwas frech) an einen RS232-Port anschließen.

Oder du kaufst (wieder im Versand) einen fertig aufgebauten Hostadapter DS9097U (RS232) oder den DS9490(USB). Die kosten allerdings um die 20&#8364;.
Der Grund liegt auber nicht nur bei der genauigket.
Ich brauche sicher mehrere Thermometer
und die alle ausmessen!?
und dann hab ich ja nicht so viele anschlüsse!
Du kannst beliebig viele dieser DS1820 (und andere Onewire-Chips) parallel an einen Hostadapter (z.B. DS2480) anschließen. Das ist neben der schon werkseitig vorgenommenen Kalibrierung ja der große Vorteil dieser Chips.

Dazu etwas hintergrund info:
Die Temperaturmessung brauche ich dazu um einen Ventilator zu steueren.
Bei einer gewissen Temperatur den einzuschalten wäre ja kein Problem,
aber da ich den Ventelatur stufenlos regeln möchte
brauche ich irgend eine Dimmer-Funktion.
Übliche Ventilatoren für 12V kann man mit einer Gleichspannung von 5..12V betreiben. Bei 5V läuft er dann halt langsamer. Es muss aber eine gesiebte Gleichspannung sein, auf Zerhacktes (Dimmer) reagieren solche Lüfter sehr ungnädig. Im Prinzip musst du dir für den Lüfter also einen einstellbaren DC/DC-Wandler bauen oder kaufen. Ein simpler Low-Drop-Linearspannungsregler geht natürlich auch, wird aber widerum heiß.

Stufenlos ist aber sowieso Quatsch. Wärmeprozesse haben eine sehr lange Zeitkontante, da reichen 3 Stufen (aus, langsam, schnell) vollkommen aus. Dann kann man mit zwei MOS-Transistoren relativ verlustarm 5V, 12V oder halt gar nichts aus dem Rechnernetzteil an den Lüfter legen.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

pcAlko
Posts: 70
Joined: 14. May 2007 19:27

#23 Post by pcAlko »

Ja, das hört sich ja alles super an!
Aber ich glaube das mit einem 12 V Ventilator wird meinen Bruder nicht zufrieden stellen.
Es geht nämlich um 2 80ger Rohre die er im Raum verlegt hat
da dieser eine ziemliche überhöhe hat.
Er will wenn im Winter geheizt wird
und die Hitze sich oben staut
die Wärme über diese Rohre nach unten transportieren.
Er hat dafür bereits 2 Wechselstrom Ventilatoren mit 230 V
Diese soll ich jetzt mit einem Dimmer ansteuern.
hast Du da irgend eine Idee?
oder ist es auch da besser wenn ich dass nur über die 2 Stufen realisiere?

8) pcAlko

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#24 Post by Janka »

Wechselstromlüfter haben immer Käfigläufer-Asynchronmotoren, meistens noch dazu als Spaltpolausführung. Die kann man über die Spannung an der Hauptwicklung so gut wie gar nicht in der Geschwindigkeit steuern, ein Dimmer wird vermutlich wegen des hohen Blindleistungsbedarfs beim Anlauf nicht mal funktionieren oder sogar kaputtgehen.

Hier würde es sich tatsächlich anbieten, zwei Lüfter zu benutzen, und dann eben 0,1 oder 2 davon einzuschalten, je nach Temperaturdifferenz.

Ist dein Bruder übrigens vollkommen allergiefrei? Falls nicht, sollte er die Luft im Zimmer lieber nicht zu sehr umwälzen, schon gar nicht im Winter, wo man das Fenster ungern aufmacht. Ein ständiger Luftzug über dem Boden verhindert schließlich auch, dass der Staub sich niederlegen kann -- so bleibt der Milbendreck ewig in der Luft...

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

_pcAlko

Bestellung:

#25 Post by _pcAlko »

Hallo Janka!

Ich habe mir die Website mal angesehen,
habe auch gefunden wo ich die Sampels angebe.
aber schon mit der ersten Angabe die ich machen soll
kann ich nichts anfangen.

Device* ?
für * steht darunter:
* A -T, +T or /T&R at the end of a part number indicates tape and reel. -D is used to denote drypack. The # symbol indicates RoHS compliant. A plus (+) in the part number indicates lead-free (also RoHS.).

keine Ahnung was ich da angeben soll
wenn ich da Linux als mein Device angebe
wird das wohl nicht viel bringen :)

Customer Part or
Reference Number# ist klar
da geb ich die Bezeichnungen zb. DS18S20 an
DS1820 gibt es nicht mehr

Annual Usage macht mich alerdings auch stutzig:
ich werde da wohl weniger als 1 eingeben müssen.
Hoffentlich bekomme ich dann nicht immer zugeschickt
"was ist los
wann kaufen sie endlich bei uns"

ok, eigentlich weiss ich nur nicht was ich beim Device eintragen soll

8) pcAlko

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#26 Post by Janka »

Device: Der Chip, den du anforderst. Logisch, oder?

Der Buchstabe hinten ist die Gehäusebauform und ob das Ding für Bestückungsautomaten auf der Spule oder in einem Rähmchen kommt. Für Samples ist das ziemlich egal, aber du kannst ja mal auf die erste/zweite Seite des jeweiligen Datenblattes gucken, da steht die Zuordnung unter "Order Information" drin.

Customer Part or Reference Number ist deine Projekt- oder Kundennummer, falls du schon mal was bestellt hast. Also frei lassen.

Was du bei Annual Usage angibst, ist doch egal. Trag da "100" ein, mach ich auch immer. Dann wissen die schon, dass du erstmal sondierst. Das ist ja der Sinn von Samples.

Normalerweise schicken die dir dann alle Jubeljahre mal ein Heftchen mit Infos zu neuen Chips zu, mehr passiert da nicht.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

_pcAlko

Bestellung:

#27 Post by _pcAlko »

Da bin ich jetzt aber neugierig.
Ich hab jetzt keinen letzten Buchstaben angegeben
hoffe das passt.

Wie lang dauert das eigentlich bis ich den erhalte?
Wird der echt aus Dallas geschickt,
oder haben die eh eine Filiale hier irgendwo in Europa?

Nach deiner Beschreibung
"Du machst das immer so"
Kann man da öffters Samples bestellen?
Wenn ich den Firmen-Name Ändere
reicht das?
die Adresse bleibt ja immer gleich

mal sehen was passiert!

8) pcAlko

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#28 Post by Janka »

Komisch Vorstellungen hast du da. Die Firma heißt Dallas Semiconductor, gehört jetzt zu Maxim. Das Zeug kommt aus Irland oder GB, da haben die ihre Europa-Zentrale. Üblicherweise ist der Brief mit den Chips nach spätestens 14 Tagen da.

Und ja, da kann man öfter Samples bestellen. Natürlich immer andere Chips. Das ist ganz billige Werbung für die, dafür ist der Service doch da. Genau wie bei vielen anderen Halbleiterherstellern.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

pcAlko
Posts: 70
Joined: 14. May 2007 19:27

#29 Post by pcAlko »

Hallo Janka.

OK, :oops:
ich dachte mir eigentlich dass Du darauf abziehlst.
Mir kommt gerade in den sinn dass ich den MAX232 vergessen habe zu bestellen!
Eine Beispiel-Software dürfte eigentlich nicht so dass problem sein
nur einen Schaltplan hoffe ich schon dass dabei ist.

Mich würde interresieren wo Du dein Wissen her nimmst.
Hast Du selbst eine Firma
mit der Du Software für solche Halbleiterprodukte schreibst und vertreibst?

Also wenn die Teile dann Da sind
brauche ich sicher Deine Unterstützung
wie man so einen MAX 232 anschließt.
Der hat ja einen haufen Haxen!!

Ich hätte das ganze ja vom Conrad bezogen,
aber ich habe dort den DS2480 nicht gefunden!
statdessen zeigt er mir die Hutschiene DPP480-24-1
um 166 Euro an!?
ist das das gleiche Teil?
und wenn ja, wofür kann man das alles verwenden?
Um Hüte aufzuhängen bevorzuge ich doch etwas billigeres. :mrgreen:


oops > ich sehe gerade
statt dem DS2480 wäre doch der DS9490R besser gewesn.
der braucht nämlich keinen MAX232
jedenfalls nach diesem owfs-link den Du mir geschickt hast
kann ich den bei MAXIM noch nachbestellen? vielleicht auch als Sample?
Auf der owfs.org ist ein Link richtung Linux-Magazin
das mit der USB-Schnittstelle schaut ja nicht schlecht aus
leider ist die Software in Perl
alles andere ist wieder in Englisch
können die sich nicht auf Deutsch einigen :wink:
ja ok, Englisch ist noch nie so mein Ding gewesen.

8) pcAlko

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#30 Post by Janka »

Da http://www.datasheetcatalog.com/
und da http://www.alldatasheet.com/.
bekommt man Datenblätter zu allen möglichen und unmöglichen Bauteilen. Im Datenblatt gibt es meist eine "Application Note", das ist eine Beispielschaltung. Außerdem gibt es fast immer beim Hersteller selbst Datenblätter zum Runterladen.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Post Reply