Hi, ich habe vor Jahren eine Platine gebaut, die seriell von einem PC bis zu 12 Werte von 1 - 256 bekommt. Diese Zahlen werden in Bits gewandelt und in ein serielles Schieberegister gegeben. Es gibt ein negatives Startbit und dann 256 positive Bits, von denen halt die bis zu 12 übermittelten gesetzt werden sollen. Das ganze mit 9kHz. Das ganze läuft bisher sehr zuverlässig mit CControl2, 4*64Bit Schieberegister und vielen Logikbausteinen. Ich möchte es jetzt neu bauen, da es erweitert werden muss. Ausserdem kann die Gegenstelle auch Bits setzen, die ich gerne ausgewertet haben möchte. Bisher kann ich nur 4 auswerten über feste Vergleicher. Das soll dann über die serielle angefragt werden können. Jetzt die Frage ob es mit einem FPGA machbar ist. Ich habe ein Testboard mit Spartan 3 und spiele damit bisher nur etwas rum. Muss ich dafür einen Microprozessor ins FPGA mit einbinden? Weis halt nicht wie ich die 256Bits einfach detektieren kann, evtl. über einen mitlaufenden Zähler und ob es überhaupt so viele FlipFlops gibt für den Schieber. Hoffe ich habe mich verständlich ausgedrückt und vielleicht kann mit einer Auskunft geben. Gruß Thorsten
@ Thorsten F. (tfol) >Jetzt die Frage ob es mit einem FPGA machbar ist. Sicher. Aber der FPGA wird sich tödlich langweilen. Selbst ein kleiner AVR wird das tun. Die paar Bits raus und rein klimpern ist Peanuts. >Muss ich dafür einen Microprozessor ins FPGA mit einbinden? Nö. Eine einfacher UART + bissel Logik reicht. >Weis halt nicht wie ich die 256Bits einfach detektieren kann, evtl. über >einen mitlaufenden Zähler und ob es überhaupt so viele FlipFlops gibt >für den Schieber. Weder noch. Nimm den klassischen UART, dann klappt auch die PC-Anbindung problemlos. MFG Falk
Falk Brunner schrieb:
> Sicher. Aber der FPGA wird sich tödlich langweilen.
Hi,
ich habe kein Problem damit wenn sich einer langweilt, besser als heiss
vor Stress.
Ich möchte halt die Platine so klein wie möglich halten.
Schieberegister, Ladeumschaltung für den Schieber, Takterzeugung, und
Rest wären schon wieder mehrere Bausteine die ich vermeiden wollte...
Thorsten
> Es gibt ein negatives Startbit und dann 256 positive Bits, von denen > halt die bis zu 12 übermittelten gesetzt werden sollen. Ich habe das Protokoll nicht kapiert... :-/ > Ich möchte halt die Platine so klein wie möglich halten. > Schieberegister, Ladeumschaltung für den Schieber, Takterzeugung, und > Rest wären schon wieder mehrere Bausteine die ich vermeiden wollte... Aber auch das Wegführen vieler Leitungen von einem zentralen Baustein (FPGA) braucht Platz auf der Platine... Und die Schieberegister könntest du mit einer geeigneten Gehäuseform (TSOP und kleiner) schön skalieren. Für diese (etwas undurchsichtige) Schieber-Ladeumschaltung kannst du ja dann ein CPLD nehmen.
Sicher ist das möglich. Schieberegister bzw. FlipFlops sind genügent vorhanden. Wenn man einen ganzen Softcore in einem FPGA rein bekommt, dann doch wohl auch deine "kleine" Schaltung. Ein Softcore ist dabei kein muß - erleichtert aber unter Umständen die Arbeit.
> Sicher ist das möglich. Schieberegister bzw. FlipFlops sind genügent > vorhanden. Aber die Frage mit dem Takt wäre noch zu klären... > Wenn man einen ganzen Softcore in einem FPGA rein bekommt, > dann doch wohl auch deine "kleine" Schaltung. Ein Rennwagen, der locker 300 fährt, ist nicht unbedingt auch für den gemächlichen Stadtverkehr geeignet...
ich hab zwar auch nicht alles von der Aufgabenstellung verstanden, denke aber die Logik durch ein CPLD zu erstzen wäre hier sinnvoller, da wahrscheinlich nicht massenhaft FlipFlops sondern eher viele I/Os benötigt werden. Viel mehr als ein FF pro Eingang scheint nicht nötig zu sein. Vielleicht kannst du nochmal genauer beschreiben, was das Ding machen soll...
Hi, also die Platine steuert ein Gerät, wobei 256 Befehle gesendet werden können. Es gibt eine Clock-Leitung und eine für die Befehle. Clock 9kHz Bits gibt es ein negatives Startbit und dann sollen bis zu 12 Bits von meiner Platine gesetzt werden. Heisst ich sende am PC 9, 45, 72 seriell rüber, dann soll das Startbit kommen, dann 8 takte nichts, 1 takt high, 35 low, 1 high, usw. Das dann über ein Schieberegister, das es schön zuverlässig kommt. Ausserdem kann das externe Gerät z.B. die Bits 40, 48 setzten, das muss ich dann zur Anzeige bringen an den PC. Achja, und über I2C gebe ich es auch an ein Display zur Ansicht. Es soll halt so sein, das es auch flexibel ist, nicht so wie jetzt mit den 1000 festen Gattern. Evl. einen AVR und CPLD. Schöner wäre es aber alles in einem IC zu haben. Deshalb die Frage ob es machbar wäre bevor ich mich komplett verrenne. Gruß Thorsten
> Heisst ich sende am PC 9, 45, 72 seriell rüber, dann soll das Startbit > kommen, dann 8 takte nichts, 1 takt high, 35 low, 1 high, usw. Das ist ein Protokollwandler. Dazu nimmst du am besten einen uC. > Das dann über ein Schieberegister, das es schön zuverlässig kommt. Für das SR kannst du problemlos und ideal ein CPLD nehmen. > Evl. einen AVR und CPLD. Richtig. > Schöner wäre es aber alles in einem IC zu haben. Das Thema FPGA bringt dir aber garantiert (!!!) einige Überraschungen. > Deshalb die Frage ob es machbar wäre bevor ich mich komplett verrenne. Es ist machbar. Aber es ist nicht sinnvoll.
Danke Lothar, werde mir noch mal das CPLD-Board ansehen was in der Firma liegt. Conrad hat ja auch welche für ein paar Euro. Müssen halt mindestens 256 FlipFlops drin sein für den Schieber... Danke für Eure Meinungen, immer wieder anregend. Gruß Thorsten
Thorsten F. schrieb:
> Conrad hat ja auch welche für ein paar Euro.
Ich habe zwar den Versender aus Sande mit R gemeint und auch
geschrieben, wurde anscheinend editiert.
Keine Ahnung ob Conrad so was auch hat, kaufe da nicht mehr.
Thorsten
> Müssen halt mindestens 256 FlipFlops drin sein für den Schieber...
Das würde ich nicht machen, denn dann brauchst du ja auch 256 IO-Pins
(wenn ich das richtig verstanden habe) und damit hast du wieder das
Layout-Problem...
Hi, der XC2C384 hat 386 Macrozellen (und FlipFlops) und 114 Pins auf 3*3 cm. http://www.xilinx.com/publications/prod_mktg/CPLD_CoolRunnerII_table.pdf Wenn es ein einfaches Schieberegister-IC als SMD gibt mit 256 Bit würd ich auch den nehmen und einen kleineren CPLD. Kennt einer so ein IC? Google bringt mich da nicht wirklich weiter. Thorsten
Thorsten F. schrieb: > der XC2C384 hat 386 Macrozellen (und FlipFlops) und 114 Pins auf 3*3 cm. Und kostet bei digikey stattliche 20 Euronen... Auf der selben Fläche (9cm²) kann ich locker 114/8 = 14 Schieberegister für 20 Cent verbauen: 74HCT165 Gehäuse SOT763-1 2.5 x 3.5mm von NXP... :-o Wenn du wirklich so ausschliesslich auf den Platz fixiert bist, warum nimmst du dann nicht ein BGA-Gehäuse? :-/
@Lothar Miller (lkmiller) Benutzerseite >Wenn du wirklich so ausschliesslich auf den Platz fixiert bist, warum >nimmst du dann nicht ein BGA-Gehäuse? :-/ Loser! Ein richtiger Mann (tm) nimmt einen blanken Die ;-)
Falk Brunner schrieb: > Loser! Ein richtiger Mann (tm) nimmt einen blanken Die ;-) Ich habe leider keine Erfahrung mit dem Golddraht um den dann zu verdrahten.. ;) Also Platzbedarf und Preis sind nicht der Hauptfaktor, es geht mir hauptsächlich darum flexibel zu bleiben für die nächsten Jahre und Projekte. Will da auch 20 Platinen von bauen. Deshalb will ich so wenig Bauteile für die Logik wie möglich haben. Alle Eingänge mache ich über Optokoppler, Ausgänge über Treiber-IC. Ein Microprozessor, z.B. AVR 2560 und dann viele Pins mit dem dem CPLD verbinden scheint mir eine gute Maßnahme zu werden. Ich muss mich noch mal in die ISE einarbeiten und schauen wie ich das mit dem Schieberegister am einfachsten mache. Thorsten
@Thorsten F. (tfol) >Deshalb will ich so wenig Bauteile für die Logik wie möglich haben. Dann nimm einen Mikrocontroller. >Alle Eingänge mache ich über Optokoppler, Ausgänge über Treiber-IC. So wirklich klar ist dein Problem aber nicht. Willst du 256 Signale per Optokoppler ausgeben? Dann ist der Platzbedarf für ein paar Schieberegister wohl keine Thema. >Ein Microprozessor, z.B. AVR 2560 und dann viele Pins mit dem dem CPLD >verbinden scheint mir eine gute Maßnahme zu werden. Nöö, das ist reine Panik. Wenn du nichtmal ansatzweise weißt, was du willst, und wie man das sinnvoll umsetzt, bringt dir das auch nix. >Ich muss mich noch mal in die ISE einarbeiten und schauen wie ich das >mit dem Schieberegister am einfachsten mache. Nöö, du musst mal was über Netiquette lesen und dein Problem gründlicher darstellen. Dann kann man dir helfen. MFG Falk
Lothar Miller schrieb: > Auf der selben Fläche (9cm²) kann ich locker 114/8 = 14 Schieberegister > für 20 Cent verbauen: 74HCT165 Gehäuse SOT763-1 2.5 x 3.5mm von NXP... > :-o Der 74HCT165 ist nur 8 Bit, davon würde ich ja 32 benötigen... da nehme ich lieber 4 * 64Bit Shift Register, z.B. den CD4031. Thorsten
Falk Brunner schrieb: > Dann nimm einen Mikrocontroller. habe ich doch vor, zusammen mit einem CPLD für die Logik > So wirklich klar ist dein Problem aber nicht. Willst du 256 Signale per > Optokoppler ausgeben? Dann ist der Platzbedarf für ein paar > Schieberegister wohl keine Thema. Nein, es ist ein serielles Protokoll, das dauernd gesendet werden muss. Es gibt eine Leitung, mit der Clock und eine Leitung mit den Daten, die werden hier Bits genannt. Habe ich oben mindestens 2 mal schon beschrieben. Ausserdem Optokoppler für Eingangssignale, nicht für das erzeugte Signal. Deshalb will ich einen 256Bit ShiftRegister mit 256Bits setzten und das dann dauernd mit der Clock ausgeben, so lange bis ein anderes Datenwort gesendet werden muss. > Nöö, das ist reine Panik. Wenn du nichtmal ansatzweise weißt, was du > willst, und wie man das sinnvoll umsetzt, bringt dir das auch nix. Ich weis genau was ich will, habe es ja schon konventionell am laufen, nur ist es nicht flexibel und muss dauernd an den Platinen was ändern. > Nöö, du musst mal was über Netiquette lesen und dein Problem > gründlicher darstellen. Dann kann man dir helfen. Danke, aber wenn ich andere Beiträge mit meinem Vergleiche schneide ich schon sehr gut ab was Umgangston und Bedürfnis zur Erklärung betrifft. Es ist halt nicht immer leicht, Sachen die für mich klar sind für andere greifbar zu machen. Kann ja auch nicht für andere lesen, wenn die nur überfliegen oder sich sofort ihr eigenes Bild machen... Thorsten
@ Thorsten F. (tfol) >Der 74HCT165 ist nur 8 Bit, davon würde ich ja 32 benötigen... >da nehme ich lieber 4 * 64Bit Shift Register, z.B. den CD4031. Und was machst du dann mit deinen 64 Bit IM IC? Dort kommt man nur wieder seriell ran. Dashalb ist es höchste Eisenbahn, dass du mal konret dein Vorhaben beschreibst. Sonst wird wieder mal endlos aneinander vorbeigeredet. MFG Falk
Falk Brunner schrieb: > Und was machst du dann mit deinen 64 Bit IM IC? Dort kommt man nur > wieder seriell ran. Dashalb ist es höchste Eisenbahn, dass du mal konret > dein Vorhaben beschreibst. Sonst wird wieder mal endlos aneinander > vorbeigeredet. Seriell laden, umschalten, dauerhaft seriell ausgeben. bis neues Wort ausgegeben werden soll, dann über PC Daten empfangen, umwandeln, seriell in den Schieber, umschalten und dauerhaft seriell ausgeben. Clock 9KHz. Thorsten
@ Falk Brunner Mein erster Beitrag ganz oben, erster Satz: Thorsten F. schrieb: > Hi, > > ich habe vor Jahren eine Platine gebaut, die seriell von einem PC bis zu > 12 Werte von 1 - 256 bekommt. Diese Zahlen werden in Bits gewandelt und > in ein serielles Schieberegister gegeben. Erweiterung: und werden dann dauerhaft seriell ausgegeben. Thorsten
@ Thorsten F. (tfol) >Nein, es ist ein serielles Protokoll, das dauernd gesendet werden muss. >Es gibt eine Leitung, mit der Clock und eine Leitung mit den Daten, die >werden hier Bits genannt. >Habe ich oben mindestens 2 mal schon beschrieben. Sehr bruchstückhaft. >Ausserdem Optokoppler für Eingangssignale, Wieviele? > nicht für das erzeugte Signal. >Deshalb will ich einen 256Bit ShiftRegister mit 256Bits setzten und das >dann dauernd mit der Clock ausgeben, so lange bis ein anderes Datenwort >gesendet werden muss. Das kann ein kleiner AVR mit 8 Pins locker. Deine 256 Bit = 64 Byte liegen als Daten im RAM. >Ich weis genau was ich will, habe es ja schon konventionell am laufen, Aber deine Beschreibung ist für Aussenstehende unverständlich und unvollständig. >Danke, aber wenn ich andere Beiträge mit meinem Vergleiche schneide ich >schon sehr gut ab was Umgangston und Bedürfnis zur Erklärung betrifft. Ich habe nicht deinen Umgenagston bemängelt, lediglich den Umfang und die Verständlichkeit deiner Problembeschreibung. >Es ist halt nicht immer leicht, Sachen die für mich klar sind für andere >greifbar zu machen. Tja, das ist aber notwednig, wenn dir andere helfen sollen. > Kann ja auch nicht für andere lesen, wenn die nur >überfliegen oder sich sofort ihr eigenes Bild machen... Geh mal davon aus, dass Leute wie ich das nicht nur überfliegen. Aber Rätselraten, Vermuten und in die Glaskugel schauen mache ich auch nicht. MfG Falk
Ich fasse mal zusammen so wie ich es verstanden haben. Es gibt eine Verbindung zu PC (UART/RS232?), von dort werden 12 Bytes an Daten empfangen Es gibt ein paar Eingänge per Optokoppler Aus den Daten vom PC und den Signalen der Optokoppler wird ein 256 Bit Datenstrom generiert, welcher permanent mit 9 kHz als Takt und Daten ausgegeben wird. Das alles macht dir ein kleiner AVR mühelos. In einem einzigen IC. Was willst du mehr? Ein ATtiny2313 sollte reichen. Der hat 2kB Flash und einen Hardware-UART. Kann man easy in C programmieren, ist hier vollkommen ausreichend. Dazu ein FT232 als Verbindung zum PC und fertig ist die Laube. MFG Falk
Falk Brunner schrieb: > Ich fasse mal zusammen so wie ich es verstanden haben. > > Es gibt eine Verbindung zu PC (UART/RS232?), von dort werden 12 Bytes an > Daten empfangen > Es gibt ein paar Eingänge per Optokoppler > Aus den Daten vom PC und den Signalen der Optokoppler wird ein 256 Bit > Datenstrom generiert, welcher permanent mit 9 kHz als Takt und Daten > ausgegeben wird. Zusammenfassung ist schon sehr gut. Seriell per RS232. Eingang über Optokoppler ist hier eigendlich nur das Bitwort, das ich selber rausgebe und vom externen Gerät erweitert werden kann, wenn dort z.B. Fehler auftreten. Clock lese ich auch wieder ein, falls es zu einem Kurzschluss auf der Leitung kommt. Dann gibt es noch Reset-Eingang und Status. Es wird erst ein negativer Puls als Startpuls erzeugt, dann kommen die 256 Takte, in denen die Bits gesetzt werden können, dann beim 256. negativen Takt wieder der nagative Startimpuls. usw. > Das alles macht dir ein kleiner AVR mühelos. In einem einzigen IC. Was > willst du mehr? > > Ein ATtiny2313 sollte reichen. Der hat 2kB Flash und einen > Hardware-UART. Kann man easy in C programmieren, ist hier vollkommen > ausreichend. Dazu ein FT232 als Verbindung zum PC und fertig ist die > Laube. Das Problem ist, wenn ein neues Wort gesendet wird per PC über RS232 und ich es umwandeln muss, dann ausgebe als serielles Wort und dann noch per I2C das Display neue schreibe, es zu Problemen auf der Datenleitung kommt. Die Bits müssen exakt mit der Clock gesetzt werden, bei genau 9kHz. Da gab es immer wieder Probleme, deshalb das Schieberegister. Dann will ich die eingehenden Bits ja auch auswerten. Ich setzte z.B. Bit 9, 52, 75, 78, 90, 212 das Gerät draussen Bit 40, 48 Dann muss der Prozessor die 2 Bits erkennen und ausgeben. Das habe ich bisher nicht sauber hinbekommen, es kam immer wieder zu ausreissern, deshalb die normalen Logikbausteine. Das läuft seid Jahren ohne Probleme, täglich stundenlang. Der Prozessor darf sich bei mir ruhig langweilen. FT232 nutze ich jetzt auch schon. Frage war ja nur ob es mit dem FPGA sinnvoll machbar wäre. Es ist kein Spielzeug was ruhig mal ausfallen darf. Es steuert teure Geräte die zuverlässige Signale benötigen. Denen möchte ich halt was flexibles neues gönnen. Thorsten
@ Thorsten F. (tfol) >Das Problem ist, wenn ein neues Wort gesendet wird per PC über RS232 und >ich es umwandeln muss, dann ausgebe als serielles Wort und dann noch per >I2C das Display neue schreibe, es zu Problemen auf der Datenleitung >kommt. >Die Bits müssen exakt mit der Clock gesetzt werden, bei genau 9kHz. Nichts leichter als das. Der Timer und seine Output Compare Funktion sind deine Freunde. Das ganze mit dem Interrupt garniert, und fertig ist die Laube. >Da gab es immer wieder Probleme, deshalb das Schieberegister. Man muss "nur" richtig programmieren, dann geht das locker ohne Schieberegister. >Dann will ich die eingehenden Bits ja auch auswerten. >Ich setzte z.B. Bit 9, 52, 75, 78, 90, 212 >das Gerät draussen Bit 40, 48 >Der Prozessor darf sich bei mir ruhig langweilen. >FT232 nutze ich jetzt auch schon. Wie fein. >Frage war ja nur ob es mit dem FPGA sinnvoll machbar wäre. Nein. > Es ist kein Spielzeug was ruhig mal ausfallen darf. Das FPGA ist schon sehr zuverlässig, hier aber massiv überdimensioniert. MFG Falk
Falk Brunner schrieb: > Das FPGA ist schon sehr zuverlässig, hier aber massiv überdimensioniert. Deshalb bin ich ja schon auf den CPLD umgeschwenkt. Ich bin halt ein gelernter Elektroniker (KEFU), der die Logik liebt und auch gerne einsetzt. Hat für mich was zuverlässigeres als ein paar Zeilen Code. Verbinde natürlich auch gerne beides miteinander. Meine letzten Platinen hatten eigentlich immer einen Prozessor mit drauf. Ich werde mir mal was auf Papier zusammenstricken, vielen Dank für die konstuktive Kritik und der netten Hilfe. Thorsten
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.