PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RS Flip Flop mit i2c Bus



stiebel
10.07.2013, 08:54
Hallo Forum,
ich brauche einen Speicher, den ich bitweise setzen kann, mit einem gemeinsamen Reset löschen kann und per i2cbus auslesen kann.

Ich habe 32 Eingänge.
Die dümmste Variante wäre ein RS-FlipFlop, bei dem ich den Ausgang in einen i2c Multiplexer gebe.
Die billigsten RS-FlipFlops sind 4er, die Multiplexer 8er, ich brauche also 2 Flipflop-chips und einen Multiplexer,
also drei Chips pro 8 Eingänge.
Hierbei verbinde ich dann alle 8 Reset-Eingänge der FlipFlops.
Geht, aber es geht bestimmt besser.

Was mir vorschwebt ist ein Chip mit 8 Set-Eingängen und einem i2cbus,
so dass ich per i2c die Eingänge freischalte, dann irgendwann per i2c auslese und danach per i2c alle resete

Wichtig ist, dass ich ein D-Type Flip Flop nicht gebrauchen kann, denn die zu puffernden Signale kommen nicht getaktet,
sondern willkürlich. Ich muss als speichern, ob irgendwann nach dem letzten Reset ein Eingang oben war.
Das geht meines Wissens mit einem d-type Flip Flop nicht, sondern ich brauche ein echtes RS FlipFlop,
wobei dies ja wie schon gesagt gerne ein "common-Reset" FlipFlop sein kann.

Kenn da jemand ein Bauteil, oder soll ich es mit der 3-Chip Lösung bauen?

Gruß
Roland

PICture
10.07.2013, 09:32
Hallo!


Wichtig ist, dass ich ein D-Type Flip Flop nicht gebrauchen kann, denn die zu puffernden Signale kommen nicht getaktet, sondern willkürlich. Ich muss als speichern, ob irgendwann nach dem letzten Reset ein Eingang oben war.

Für mich ist es Quatch, weil wenn D = 1 ist, dann nach jedem Reset jede positive Flanke des T (Takt) Eingangssignals wird Q des Flip-Flops (FF) setzten. Bei einem JK-FF, bei J = 1 und K = O wird es jede negative Flanke tun.

Vor der "µC Era" habe ich D- und JK-FF's u.a. zum hardwaremässiger Tastenentprellung verwendet. ;)

BMS
10.07.2013, 10:25
Hallo,
so ganz hab ich den Zusammenhang noch nicht nachvollzogen. Sollen am Ende 32 Eingänge auf Pegeländerungen überwacht werden?
Reichen nicht einfach 4x PCF8574 I2C-Portexpander? Oder ein Mikrocontroller mit "genügend" Eingängen? Der Rest wäre dann Software.
Wenn es Änderungen der Eingangspegel gibt, kann über die INT-Leitung die Steuerung veranlasst werden, alle Eingänge abzufragen und die Änderungen feststellen, wenn z.B. der vorige Zustand in einem Mikrocontroller gespeichert wurde.
Grüße,
Bernhard

stiebel
10.07.2013, 20:11
Ok, ich glaube ich erklär lieber mal die Anwendung:
Ich habe einen Ball, der 40MHz Trägerfrequenz 1200Hz PWM getaktetes IR-Licht aussendet.
Dieser Ball rollt sehr schnell über ein Feld.
Mein Roboter muss "sehen", wo der Ball ist.
Ich habe vor, ihn mit 32 Lichtsensoren zu versehen.
Wenn ich nun bei jeder Pegeländerung eines der Sensoren per INT den µc aufrufe, macht der nichts anderes mehr.
Ich muss also getaktet abfragen. Wenn aber jetzt genau auf meiner Abfrage das 1200 HZ PWM Signal unten ist, sehe ich nichts.
Daher möchte ich speichern, wenn der Sensor etwas gesehen hat, regelmäßig abfragen (100Hz) und danach wieder reseten.
Ist keiner der 32 Eingänge high, sehe ich den Ball nicht.
Ist nur einer high und das mehrmals, ruht der Ball.
ändern sich die Eingänge bewegt sich der Ball langsam
und sind mehrere Eingänge nebeneinander high ist der Ball schnell vorbeigerollt.

So in etwa...

Gruß
Roland

White_Fox
10.07.2013, 21:36
...und einfach einen zweiten Microcontroller mit genügend Beinchen nehmen?
Dann lässt du den die Sensoren auswerten, so schnell wie er kann, und I²C ist von Natur aus an Board.

Edit:
Wenn du vergangene Zustände speichern willst, (wenn du das überhaupt noch willst, denn bei einem Takt PWM (1,2kHz) hätte ein Mikrocontroller mit 16MHz schon über 13000 Takte hinter sich, genug um 32 Pins abzufragen) mußt du die Eingänge dann wohl mit einem Flipflop versehen.
Das wäre allerdings sehr aufwändig und ob es dann noch lohnt wieder ne andere Frage.

seite5
11.07.2013, 23:36
hi,
ich würde auch eher einen "grossen" µC nehmen (xmega128a1), die 32 Ausgänge auf 4 Ports - sind 4 Ints, nicht 32 - in der ISR das (oder die) angesproche Bit(s) ermitteln
und das Ergebnis der jeweiligen ISR evtl. auf eine unsigned long Variable "mappen". Über I2c externe Hardware abzufragen dürfte eher "länger" dauern.
mfg
Achim