PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage wegen temporärem Hirnblackouts



Ingo
28.11.2006, 14:33
Hallo Forum,

ich habe gerade eine totale Sonnenfinsternis im Hirn. Ich möchte mit einem GAL oder PALCE 8 Stück T-FF nachbauen. Sinn der Sache ist der, daß aus 8 Tastern Toggeltaster werden. Habe aber gerade überhaupt keine Idee, wie ich herangehen soll. Tretet mich mal bitte in die richtige Richtung....

Gruß Ingo

guidob
28.11.2006, 17:30
Hallo Ingo,

QTT.r = Pr + (!CLR * !T * QTT) + (!CLR * T * QTC);
QTC.r = CLR + (!PR * !T * QTC) + (!PR * T * QTT);

War es das was du suchst?

guidob

buz11
28.11.2006, 17:44
QTT.r = Pr + (!CLR * !T * QTT) + (!CLR * T * QTC);
QTC.r = CLR + (!PR * !T * QTC) + (!PR * T * QTT);
Oh Gott!
Und ich dachte, µC-programmieren in Asm wäre kompliziert :rolleyes: ...
Ist nicht chinesisch lernen einfacher :confused: ?

Ingo
28.11.2006, 17:57
Hallo guidob,




Hallo Ingo,

QTT.r = Pr + (!CLR * !T * QTT) + (!CLR * T * QTC);
QTC.r = CLR + (!PR * !T * QTC) + (!PR * T * QTT);

War es das was du suchst?

guidob

ich bin mir jetzt nicht ganz sicher. Ich programmiere mit PALASM. Die Syntax ist etwas anders. Sind die Ausrufezeichen Negationen? Ich muß mir das 500 Seiten starke Handbuch des Assemblers doch mal zu Gemüte führen. Welche Syntax ist das? VHDL? Damit habe ich noch keine Berührung gehabt. Bisher reichte boolesche Algebra eintippen, assemblieren und fertich.

Im Prinzip möchte ich das Ganze taktunabhängig machen. Es soll am korrespondierenden Ausgang lediglich beim Tastendruck das Signal getoggled werden. Also, Taster 1 gedrückt, Lampe 1 geht an. Taster 2 gedrückt Lampe 2 geht an... Dann Den Taster 1 wieder gedrückt, Lampe 1 geht aus.
Mit µC wäre es kein Thema, aber PLD`s habe ich bisher nur in kombinatorischer Logik genutzt. Jetzt wird es "registered" und da fehlt mir offen gesagt etwas der Plan. Wenn ich die Ausgänge latched mache, dann hängt wieder alles am Takt, um die Werte in die Ausgangsregister zu übernehmen. Hmm, im Moment ist der Kopf vermutlich zu klein.

Gruß Ingo

Gruß Ingo

guidob
28.11.2006, 18:23
Hallo Ingo,

die Syntax ist willkürlich sollte aber unter PALASM ähnlich aussehen. ! ist NOT (ev. /),
* ist UND und + ist ODER.

Ohne RegisteredMode? Dann vergißt er doch nach Loslassen des Tasters seine
Stellung wieder. Für die Register brauchst du einen Takt, der sollte schön
langsam sein, dann werden die Taster dadurch entprellt (so 100 Hz oder weniger).

@ BUZ11: Und erst die Fehlersuche! Richtig spaßig. :D

guidob

Ingo
28.11.2006, 19:03
Hallo guidob,




Hallo Ingo,

die Syntax ist willkürlich sollte aber unter PALASM ähnlich aussehen. ! ist NOT (ev. /),
* ist UND und + ist ODER.

Ohne RegisteredMode? Dann vergißt er doch nach Loslassen des Tasters seine
Stellung wieder. Für die Register brauchst du einen Takt, der sollte schön
langsam sein, dann werden die Taster dadurch entprellt (so 100 Hz oder weniger).

@ BUZ11: Und erst die Fehlersuche! Richtig spaßig. :D

guidob

Die Verknüpfungszeichen sind genauso. Die Negation ist der /.
Klar, ohne registered geht da nichts. Ich dachte, es gibt einen Trick um um den Takt herum zu kommen. Aber ich werde es doch so machen. An den CLK Pin einen schönen Takt und fertig. Jetzt noch eine Frage. Beim nächsten Takt übernimmt der Ausgang dann nicht wieder die losgelassene Taste?

Gruß Ingo, dem Assembler leichter fällt.

guidob
28.11.2006, 19:35
Hihi,


Beim nächsten Takt übernimmt der Ausgang dann nicht wieder die losgelassene Taste?



das steht doch in den Gleichungen. :p

Wenn /T (Taste losgelassen) wird QTT=QTT und QTC=QTC. Es bleib talso unverändert.
Wenn T (Taste gedrückt) wird QTT=QTC und QTC=QTT. Toggle.

Gruß guidob

Ingo
29.11.2006, 07:14
Moin guidob,




Hihi,



das steht doch in den Gleichungen. :p

Wenn /T (Taste losgelassen) wird QTT=QTT und QTC=QTC. Es bleib talso unverändert.
Wenn T (Taste gedrückt) wird QTT=QTC und QTC=QTT. Toggle.

Gruß guidob

Ich hatte eine Nacht zum "drüber Schlafen", allerdings kann ich mit QTT und QTC immer noch nicht viel anfangen.

Palasm sagt zum T-FF folgendes.

input.T= (boolean equation)
Das klingt recht simpel.

Ich werde einen 22V10 verwenden. Da hätte ich 10 Kanäle mit T-FF, einen General Reset und wenn unbedingt nötig einen CLK. Ich muß mir am Wochenende noch mal ernsthaft Gedanken zum Thema machen. Im Moment habe ich es noch nicht wirklich geschnallt.

Gruß Ingo

Ingo
29.11.2006, 07:40
Hallo nochmal,


so, jetzt hoffe ich es zu haben. Schaut mal auf die Gleichung. Kann das funktionieren?

out1.T:= in1* /reset* /out1
/out1.T:= (in1* /reset *out1) + reset

Zur Erklärung:

out1 = Ausgang 1. T-FF
in1 = Eingang 1. T-FF
reset = General Reset für alle T-FF

Hmm, ob das so funzt?

Gruß Ingo

guidob
29.11.2006, 11:58
Hallo Ingo,

QTT und QTC sind frei gewählte Namen für die Ausgänge, Pre (preset) und CLR und T
ebensolche für die Eingänge.

Das .T steht doch sicher für Tristate, ist also Widerspruch zu Registered, was ich
durch .r aktivieren möchte. Nach meinen Gleichungen benötigst du pro FF zwei
Ausgänge, so daß du zwei 16V8 verwenden könntest. Mal gespannt, ob du es
ökonomischer hinbekommst.

Hmm, doch, mit AUS1 und /AUS1 geht es ev. mit einem Ausgang.

guidob

Edit: Ooops vergessen (neuer Syntaxversuch irgendwann paßt es hoffentlich):

out1 := /in1 * /reset * out1 + in1 * /reset * /out1;

Ingo
29.11.2006, 12:16
Hallo guidob,


Hallo Ingo,


Das .T steht doch sicher für Tristate,


guidob

Nö, das .T steht für Toggle. Deshalb war ich ja so erstaunt, das das so simpel sein soll. Ich werde am Wochenende mal basteln. Habe gerade erfahren, daß meine Wochenendschicht abgesagt ist. *freu*

Gruß Ingo

Ingo
04.12.2006, 07:13
Hallo Leute,

heute mal ein Update zum Problem.
Am Wochenende habe ich diverse Methoden getestet und bin dabei zu keinem Ergebnis gekommen. Ich habe das Problem dann mit einem 89C55 erschlagen.

Gruß Ingo

elmar
31.12.2006, 13:57
Hi,

im Prinzip handelt es sich bei der Aufgabenstellung lediglich um einen 1-bit counter bzw. um einen Teiler (durch 2). Bei TTL-gattern würde man dafür ein JK-MS FF benutzen wobei J und K auf +Ub liegen.

Guck Dir einfach das Ersatzschaltbild eines JK-MS FF an (Aus standard TTL Gattern, z.B. NAND). Das einfach im GAL abbilden und fertig.

Problematisch ist gerade beim GAL das prellen der Taster. Also eine RC schaltung für jeden Taster, der den Impuls wärend des prellens aufrecht erhält oder man muß im GAL die Klassische Entprellschaltung (Via FF) nachbilden, dazu braucht man dann aber zwei Leitungen pro Taster!

Gruß
Elmar

Ingo
31.12.2006, 14:46
Hi Elmar,




Hi,

im Prinzip handelt es sich bei der Aufgabenstellung lediglich um einen 1-bit counter bzw. um einen Teiler (durch 2). Bei TTL-gattern würde man dafür ein JK-MS FF benutzen wobei J und K auf +Ub liegen.

Guck Dir einfach das Ersatzschaltbild eines JK-MS FF an (Aus standard TTL Gattern, z.B. NAND). Das einfach im GAL abbilden und fertig.

Problematisch ist gerade beim GAL das prellen der Taster. Also eine RC schaltung für jeden Taster, der den Impuls wärend des prellens aufrecht erhält oder man muß im GAL die Klassische Entprellschaltung (Via FF) nachbilden, dazu braucht man dann aber zwei Leitungen pro Taster!

Gruß
Elmar

Die Funktion an und für sich ist mir schon klar. Nur bin ich durch die Vorgabe 10 Eingänge und 10 Ausgänge gewissermaßen Hardwaremäßig eingeengt. Der 22 V 10 wäre optimal gewesen. Leider verballerd das Projekt zu viele Hardwareresourcen, so daß ich mindestens 2 PLD benötigt hätte. Daher der Entschluss, das Ganze mit einem µC zu machen. Da bot sich gleich die Möglichkeit, 16 In und 16 Out zu verwenden. Mit I²C und Portexpandern wären dann alle Hardwarebeschränkungen aufgehoben. Aber derzeit werden so viele I/O's nicht benötigt.

Gruß und guten Rutsch an alle. Und seht zu, daß das Feuerwerk euch nicht die Birne verkohlt...
Ingo, der heute noch zig Kilo's an Batteriefeuerwerk in den stürmischen Nachthimmel blasen will / muß.

elmar
31.12.2006, 18:14
Hi,

nimm besser einen µC. Das ist eionfacher zu realisieren, wenn der auch mehr Hardware braucht (z.B. Quarz) und bei dem die Gefahr eines Absturzes besteht. Dafür kann der das entprellen gleich mit übernehmen.

So ein AT89c2051 ist billig (<€3 mit Quarz und notwendigem Gerümpel) und hat 15 portpins.
Die Taster in eine 3x3 Matrix anschließen (6 pins für bis zu 9 Taster) und es bleiben 9 pins als Ausgang übrig.

Nimm einen langsammen quarz, dann schluckt der wenig strom und "strahlt" weniger. Um EMV abstrahlungen an der Tastatur fast vollständig zu eliminieren machst Du folgendes:

Alle Zeilen auf LOW legen und die Spalten im polling abfragen. Ist eine Spalte LOW geworden, dann ist eine Taste gedrückt. 1..2ms warten bis prellen vorbei ist und erneut gucken ob ereignis immer noch da ist. Also jetzt handeln und feststellen welche Taste genau gedrückt wurde. Zeilen also alle wieder auf HIGH setzen und da die Spalte ja bekannt ist, diese dann auf LOW. Jetzt gucken, welche Zeile daraufhin LOW wurde und man kennt Zeile und Spalte der gedrückten Taste, die Information ist jetzt eindeutig. Jetzt funktion auslösen, und warten bis die Taste wieder losgelassen wurde um mehrfachauswertungen zu vermeiden. Spalten wieder auf HIGH und Zeilen wieder auf LOW für das nächste mal und von vorne anfangen

Pseudocode:

(1) Zeilen auf LOW, Splaten auf HIGH
(2) Spalten abfragen. Wenn "111", weiter bei (2)
(3) 1..2ms warten
(4) Spalte merken, wenn doch nicht (="111") weiter bei (2) (Fehlimpulse ignorieren)
(5) Spalte LOW setzen und Zeilen auf HIGH
(6) Zeile abfragen
(7) Wenn Zeile "111" (nichts gedrückt) weiter bei (2)
(8) Aus Zeile und Spalte Taste bestimmen und Funktion auslösen
(9) Warten bis Taste losgelassen wurde und weiter bei (1)

Diese Methode ist äußerst EMV störungsarm, spart strom und ist sicher. Zucken der Leitungen wird ignoriert, nur richtiges drücken eines Tasters wird erkannt. Wer weniger als 2ms drückt ist selber schuld ;)

Gruß
Elmar