PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 8 bit zu 256 möchlichkeiten



Ofenrohr
06.11.2005, 16:18
hallo,

ich habe mal wieder ein kleines problem:

ich habe die 8 bits vom parallelport. sowie 8 relaiskarten. bisher haben mir immer 8 an/aus schalter total gereicht.
aber jetzt würde ich gerne dise 8 bits kaskadieren und somit statt 8 schaltmöglichkeiten 256 haben.

ich weis bloß nicht im entferntesten, wie ich das anstellen soll. kann mir jemand einen tip geben, wie ich die relaiskarten schalten muss, damit ich eben dies erreiche?

mfg ofenrohr

Ringo
06.11.2005, 16:27
Du willst mehr Relais an deinem LPT Port ansteuern? dann such mal nach Schieberegister! Damit sollte es funktionieren!

MfG
Ringo

SprinterSB
06.11.2005, 16:37
Kommst du an Control-Ports ran? Also an andere Ports als die 8 Datenports. Also Kontrolle von Softwareseite.

PICture
06.11.2005, 18:05
Hallo Ofenrohr!
Werden mehr Relays gleichzeitig gesteuert? Was möchtest Du lieber ausbauen Soft- oder Hardware?
MfG

Ofenrohr
07.11.2005, 14:16
also, es ist relativ egal, ob ich per soft oder hardware mehr raushole.

ich besitze 8 relaiskarten und ich kann alles pins vom parallelport ansteuern.

ich habe mir etwas zu den schiebereglern rausgesucht und wenn ich es richtig verstanden hab, dann ist es eine datenbank, in der mehrere bits hintereinander eingespeichert werden.
ich möchte aber 256 möglichkeiten im gleichen moment haben.
also in etwa so:

bit1: true
bit2: true
bit3: false

bisher habe ich immer so gearbeitet: LED 1 leuchtet wenn bit 1 ture ist, wenn bit 1 false ist, dann nicht.
das gleiche für led 2 und led 3.

jetzt soll es aber so sein:
alle bits zusammen sollen als wert betrachtet werden. wenn man z.b. für die bits zahlen nähme, sähen die so aus:
bit 1: 1
bit 2: 2
bit 3: 4
jetzt addiere ich die zahlen und kann somit feststellen, welche kombination ich habe (genau andersrum mache ich es im programm: ich habe 8 bits, die ich addiere und das ergebnis dann auf den port schalte)

wenn also wie beim ersten beispiel gezeigt die bits gesetzt sind, dann würde ich damit die 3. (1+2) möglichkeit ansprechen.

mfg ofenrohr

SprinterSB
07.11.2005, 14:27
Mit den 8 Ports kannst du eben nur 8 Relais steuern...

Schieberegister. Du schiebst die Daten in die Register. 32 Schieberegister zu je 8 Bit. Wenn die Bits an ihrem Ort angekommen sind, werden sie an die Ausgänge geladen und stehen an den Relaiskarten zur Verfügung. Nachteil: jedesmal, wenn sich ein Relais ändern soll, müssen alle 256 Bits erneut rausgehauen werden.

Als Portbelegung ginge sowas:
1x serielle clock
1x strobe für die Ausgänge
4x serielle Daten

An jeden der 4 'serielle Daten'-Ports hängst du 8 der Schiebeteile, hintereinander kaskadiert. Das macht 4*8*8 = 256 Ports am Ausgang.

Geschwindigkeitsprobleme sollten nicht so dramatisch sein, weil Relais ja eh nicht sooo schnell geschaltet werden können.

Klaus_0168
07.11.2005, 15:50
Hi Ofenrohr,

der 74164 ist ein 8Bit-Schieberegister mit parallelem Ausgang. Schau Dir doch mal das Datenblatt an.

Grüße Klaus

SprinterSB
07.11.2005, 16:41
Eher empfehlen würde ich den 74595, weil beim 74164 während des Schiebens die Ausgänge flattern. Gibt's auch in C-MOS: 74HC595 bzw 74HCT595 oder CD4094, 74HC4094 etc für wenige Cent.

PICture
07.11.2005, 19:42
Hallo Ofenrohr!
Du kannst ruhig die Schieberegister 164 nehmen, weil das von @SprinterSB erwähnte "flimmern", wird die Relais nicht stören, wenn die Bits in die Register genug schnell eigeschoben werden.
MfG

SprinterSB
07.11.2005, 20:07
Hallo Ofenrohr!
Du kannst ruhig die Schieberegister 164 nehmen [....] wenn die Bits in die Register genug schnell eigeschoben werden.
MfG

Eben das kann man auf einem PC nicht sicherstellen.

Wenn sich das Betriebssystem dazu entscheidet, bei einem wahnsinnig wichtigen Tooltip die Farben zu animieren oder die Platte zu bedienen, kann das schon ein Weilchen dauern. Ich gehe mal davon aus, daß Ofenrohr kein Echtzeit-Betriebssystem fährt. Ne Hardware, die das Wackeln der Portpins übernimmt, hat man auch nicht.

Der eine Cent von einem 74HC164 zu einem 74HC595 ist nun auch nicht die Welt. Wenn die Relais doch Zicken machen, hat man die 30 Cent zum Fenster rausgeschmissen und kann nochmal alles von vorne anfangen.

PICture
08.11.2005, 07:40
Hallo SprinterSB!
Ich bin nur ein Elektroniker und an das habe ich nicht gedacht. Ich habe immer meine Hardware unter DOS mit ASM gesteuert. Also mit ASM unter Windows kann man nichts sinvolles mit Hardware machen, oder?
Schöne Grüsse!

SprinterSB
08.11.2005, 08:23
hmmm, ob man mit ASM oder C/C++ da ran geht, dürfte kein so großer Unterschied sein. Ich denk schon, daß man unter Windows/Linux sinnvoll mit Hardware arbeiten kann. Softwareseitig braucht man ne API, durch die man auf die Regsister/Schnittstelle greifen kann. Teilweise verbietet einem Windows das, und man muss spezielle Treiber installieren wie giveio.sys, spezielle Funktionen benutzen. Unter java+Windows geht's mit der javax.comm.

Wenn man bestimme Zeiten einhalten muss, sieht's natürlich trübe aus. Wenn der eigene Thread/Prozess geschedult wird und erst mal andere Sachen an die Reihe kommen, kann das wie gesagt dauern. Unter Java das auf ner VM läuft ist das nochmals verschärft. Ich würd mich auch wundern, wenn irgendwo Maximalzeiten angegeben/dokumentiert/spezifiziert wären, nach denen der eigene Task spätestens fortgesetzt wird.

Ich erinner mich da an ne namhafte Firma, die ihre Kransteuerung per Python-Skript realisiert hatte und sich wunderte, daß das "alles irgendwie nicht funktioniert".

Doch zurück zum Thema. Bei der von oben Problemstellung liegt die Lösung ja nahe, wie skizziert. Man bekommt zwar kein besseres Echtzeitverhalten, aber immerhin sind die Ausgänge einer solchen Schaltung *immer* konsistent. Und das bei 256 Lines, das schafft kein Controller!

Wenn die Software für 8 Lines schnell genug ist, sollte es auch mit 256 machbar sein, zumal hinten Relais hängen, wo es auf 100ms früher oder später nicht ankommt. Wird nur etwas Bit-Gefummel. Evtl kann man auch alle 8 Data-Ports verwenden und das Raustakten über Steuerleitungen machen. Dann hätte man nicht 4*8 Schiebegegister, sondern 8*4 und wäre doppelt so schnell.

msp
08.11.2005, 10:50
hi,

versuch es mit multiplexern und flipflops, so hab ich das mal gemacht.


gruss
msp

Ofenrohr
08.11.2005, 16:18
vielen dank für die antworten.

ich werde mich mal mit dem 74HC164 versuchen...

und ich benutze übrigens linux ;)

mfg ofenrohr

PICture
08.11.2005, 16:59
Hallo SprinterSB!
Vielen Dank für Deine Erklärung! Ich bin vom PC auf PIC als Steureiheit umgestiegen und ales was damit verbunden ist, in Kauf genommen. Damit bin ich zufrieden, weil ich ohne kompliezierten Software, die ich nicht mehr durchblicke, meine Hardware steuern kann.
Schöne Grüße!

SprinterSB
08.11.2005, 23:05
Auch Linux ist nicht echtzeitfähig.

Zweckmässig ist es, erst mit der Software anzufangen. Wenn du die hast, kannst du in ner Endlosschleife irgendwelche Daten raushauen (ohne Hardware dahinter) um dir ne Vorstellung von den Maximalzeiten zu besorgen. Du wirst am besten abschätzen können, ob die Zeiten für dich annehmbar sind.

Die Lösung mit Multiplexern hat das Konsistenzproblem ebenfalls nicht. 17*74154/(74)4514 oder (74)4515 und Latches dahinter. Die Schaltung wird dann nur etwas komplizierter.