Hallo Forum, ich suche mal wieder nach einem Baustein, den es wahrscheinlich garnicht gibt... Aktuell plane ich ein Gerät, dass über eine Sub-D-Stecker (25Pol) Signale ausgeben soll. Die Belegung ist dabei identisch mit der eines normalen Druckerports -> http://www.dl1ayu.de/Projekte/Bauteile/Druckerport.html Auf meiner Platine werden allerdings die Signale von mehreren ICs erzeugt. D.h. auf den Datenbits 1 und 2 liegen die Signale vom IC 1, auf 3 und 4 die Signale von IC 2 und so weiter. Das Problem ist, das an meiner Hardware auch Geräte mit anderer Belegung betrieben werden sollen. Da die Signale aus unterschiedlichen ICs stammen, kann ich das auch nicht so einfach in Software umschalten lassen. Ein Geräte erwartet die Signale von IC 1 z.b. an Pin 1&2, das nächste Gerät an Pin 3&7. Natürlich kann ich dafür einfach Adapter löten. Ich würde aber gerne, auch um Fehler zu vermeiden, die Umschaltung vom Gerät vornehmen lassen. Bei den Signalen handelt es sich um 5V TTL-Signale mit max. 200kHz. Die "Durchreichung" der Signale sollte ohne bzw. mit gleichmäßiger Verzögerung erfolgen. Eine Umschaltung im laufenden Betrieb ist nicht nötig, beim Einschalten wird das IC einmal mit den Schaltzuständen geladen und soll diese dann beibehalten. Mein erster gesuchter Baustein wäre also ein IC, das - Acht Ein- und acht Ausgänge hat - Jeden dieser Eingänge auf einen beliebigen Ausgang schalten kann, Doppelbelegungen sind nicht nötig - Die Belegung von einem Controller über I2C, RS232 oder wie auch immer erhält - Die Belegung bis zu einem Reset beibehält - und 5V TTL-Signale mit max. 200kHz verarbeiten kann, ohne nennenswerte Abweichungen in den Signalen zu erzeugen Außerdem suche ich noch nach einem Umschalt-Baustein. Dieser Baustein soll haben: - zwei Bytes als Eingang, ein Byte als Ausgang - Umschaltung zwischen Eingangs-Byte eins und zwei per TTL-Signal - auch wieder für 5V TTL 200kHz Bei beiden ICs bleibt die Flussrichtung der Daten immer gleich, d.h. Umschaltung zwischen Eingang und Ausgang ist nicht nötig, Ausgänge bleiben immer Ausgänge. Dankeschön!
Hi Atmega16 RS232 Kopplung zu PC Parametriersoftware auf PC Nun die Frage, wie gut bist du ausgerüstet und kannst du AVR sowie PC programmieren, dann ist diese Aufgabe ein Kinderspiel. Ansonsten, tja, dann suche einen Kollegen Freund Kumpel, der dir das umsetzt. Wenn ichs richtig verstanden habe, hast du Geräte A,B C usw. und jedes dieser Geräte bekommt 2 TTL Signale, allerdings nicht immer an der selben Anschlußklemme. Also möchtest du dem Controler sagen, es ist jetzt Gerät x angeschlossen, bitte beschalte den Stecker entsprechend. Software PC kleine Datenbank ca. 1 Woche Software µC reine Logik ca. 1 Tag Hardware Controller, Max232 + Kleinkram sowie Stecker und Lochraster ca. 10-15 € Viel Spaß Gruß oldmax
Danke, mit einem Atmega geht das sicher problemlos, das wäre auch meine Lösung dazu gewesen. Ich hatte nur gehofft, das es für diese Anwendung schon fertige ICs gibt. Eine PC-Software zu der eigentlichen Hardware muss ich eh noch schreiben, da würde ich das Menü dann mit einbauen.
ich schrieb:
> Ich würde ein kleinen CPLD nehmen
Kennst du da zufällig einen brauchbaren für meine Anwendung?
Also nicht zu teuer, am besten bei Reichelt zu bekommen. Damit wollte
ich mich eh mal beschäftigen, steige aber nicht so ganz durch.
Hi CPLD ist glaube ich nicht die richtige Wahl. Es sollen mehrere Geräte versorgt werden. Nunmacht es abernicht Sinn, jedesmal das Programm umzuschreiben, sondern ich meine, eine Parametrierung per PC und der Controler weiß, "Aha, das ist der Typ, der auf Pin 3 und 7 schaut, also Eingangsbit 0 auf 3 und Eingangsbit1 auf 7" und fertig. Würd ich's machen müssen, ein kleines Delphi-Tool mit einr Drop-Down Liste der möglichen Geräte zur Auswahl und dann ein serielles Kommando mit einem Steuerwort zum Controller. Vielleicht im Delphi noch eine Parameterebene, wo den Geräten die Signalbelegung beigebogen wird. Zuerst werden dir Geräte definiert im Parametrierformular. Danach RS 232 koppeln und Controllerschaltung zwischen Aus- und Eingangssignale schalten. Da das Programm auf dem µC relativ klein und einfach ist, dürften bei 16 MHz Übertragungen von 200 KHz kein Problem sein. Das Programm wär dann etwa so
1 | Loop: RCall Read_Port ; ein Eingangsbyte lesen un in Variable schreiben (3) |
2 | LDS Temp, Steuerwort ; Steuerwort, welches der PC sendet (2) |
3 | CPI Temp, 0 ; gibt es einen Steuerwert 0 (1) |
4 | BREQ Loop ; kein Steuerwort, dann warte auf eines (2/1) |
5 | CPI Temp, 1 ; Gerät 1 angeschlossen (1) |
6 | BRNE Chk_Dev2 ; wenn nicht, dann prüfe auf Gerät 2 (2/1) |
7 | RCALL Set_Dev1 ; Aufruf der Schatmatrix (3) |
8 | RJMP End_Loop ; (2) |
9 | Chk_Dev2: |
10 | CPI Temp, 2 ; Gerät 2 angeschlossen (1) |
11 | BRNE Chk_Dev3 ; wenn nicht, dann prüfe auf Gerät 2 (2/1) |
12 | RCALL Set_Dev2 ;(3) |
13 | RJMP End_Loop ; (2) |
14 | Chk_Dev3: |
15 | |
16 | |
17 | End_Loop: |
18 | RCall Write_Port ; und Ausgabe durchführen (3) |
19 | RJMP Loop ; und von vorn (2) |
20 | |
21 | Set_Dev1: |
22 | LDS Reg8, Chanel_1 ; Chanel_1 ist gelesener Wert vom Port (2) |
23 | ANDI Reg_8, 0b00000011 ; nur die Nutzbits maskieren (1) |
24 | ROL Reg_8 ; (1) |
25 | ROL Reg_8 ; (1) |
26 | ROL Reg_8 ; (1) |
27 | ROL Reg_8 ; Ergebnis ist 0b00011000 (1) |
28 | Push Reg_8 ; merken (2) |
29 | ANDI Reg_8,0b00001000 ; gültiges Bit aumaskieren (1) |
30 | STS Help_Var, Reg_8 ;(2) |
31 | POP Reg_8 ;(2) |
32 | ANDI Reg_8,0b00010000 ; gültiges Bit aumaskieren (1) |
33 | ROL Reg_8 ; (1) |
34 | ROL Reg_8 ; (1) |
35 | ROL Reg_8 ; Ergebnis ist 0b10000000 (1) |
36 | LDS Reg_9, Help_Var ; Register 9 mit abgelegtem Wert laden(2) |
37 | Or Reg_8, Reg_9 ; und Bits wieder zusammenbringen (1) |
38 | STS Ausgabe, Reg_8 ; Ausgabewert eintragen (2) |
39 | RET ;(4) |
Die Zahlen in den runden Klammern sind die Cyklen. Fangen wir mit der Erbsenzählerei an. Das Auswerteprogramm für ein Gerät hat 28 . Dazu kommt die Hauptschleife mit 20 . Die Ein- und Ausgaberoutinen werden auch so ca. 30 haben. demnach ist das Proramm mit 80 Cyklen durchlaufen, d. h. in ca. 5 nS (200KHz) Vielleicht hilft's dir bei deiner Entscheidung Gruß oldmax
Ein CPLD ist die einfachste und zuverlässigste Lösung. >Nunmacht es abernicht Sinn, jedesmal das Programm >umzuschreiben, sondern ich meine, eine Parametrierung per PC und der >Controler weiß, "Aha, das ist der Typ, der auf Pin 3 und 7 schaut, also >Eingangsbit 0 auf 3 und Eingangsbit1 auf 7" und fertig. Du hast glaube ich keine Ahnung was man mit einem CPLD machen kann, oder? Das wird gar kein Programm getauscht. Du programmierst nur einmalig deinen Multiplexer ein, den du mit ein 2 oder 3 Steuersignalen einstellt welcher Eingaang auf welchen Ausgang geht. Ein passendes CPLD wäre z.B. das XC 9572-15 PC44 für 5,95€ bei Reichelt Die Auswahl ist hier nicht die größte, wegen deiner Vorderung an 5V. Die meisten neueren CPLDs unterstützen keine 5V mehr. Dein Controller mit seinen 80 Zyklen braucht übrignds keine 5ns sondern 4000ns (4us) bei 20MHz. Damit fällt diese Lösung weg.
ach ja, dein 2. IC den du suchst (Umschaltbaustein) kannst du übrigends in den gleichen IC (CPLD) programmieren. Beim CPLD den ich dir vorgeschlagen habe hast du übrigends deutlich kleinere Verzögerungen und damit Signalverfälschungen als beim Mikrocontroller. Da könntest du dann auch mit einigen MHz dran gehen.
Hi @ Christian-k In Mathe war ich wohl nich besonders, obwohl die Rechnung gar nich sooo verkehrt war, denn das Ergebnis 200khz stimmt. (ich besserwisser) Ok, ich hab keine Ahnung, was ein GPLD kann, hab damit noch nicht gearbeitet und in sofern hast du recht. Die Aussage von mir bezieht sich auf die Info aus dem Netz, dort steht, das man Logikgatter programmiert. Aus der Beschreibung im ersten Post hab ich entnommen, das verschiedene Geräte unterschiedliche Biteingänge haben, die Quelle dazu aber immer gleich sein soll. Wenn's mit einer Logik allen möglichen Geräten einfach zugeordnet werden kann, ähnlich meiner Beschreibung, ohne nennenswerte Verzögerung sollte man diese nehmen. Mir war (und ist ) bloß nicht klar, wie ich die beiden Komponenten einfach zusammenstecken soll und eine Parametrierung per PC (RS232 ?) vornehmen kann. Irgendwie nuß dem programmierten Gatter doch gesagt werden, es ist Gerät 57 am Stecker. Ist dies seriell jederzeit ohne Änderung der Logik mitteilbar ? Nun gut, ich hab das Problem nicht, daher ist deine Antwort eher für den Abwaschkönig... Gruß oldmax
Du kannst in das CPLD auch einen UART, SPI Schnittstelle oder sonstwas einbauen das die Eingänge dann eben auf die entsprechenden Ausgänge schaltet. Sind eben nur ein paar Multiplexer, mehr nicht. Und diese kannst du entweder von Eingangspins aus steuern, oder eben über den einprogrammierten UART. Das kannst du machen wie du willst. Ein Signal von 200kHz (also Flankenwechsel alle 2,5us) mit einem Programm abzutasten das 4us Zykluszeit hat eben deutlichen Einfluss auf das Signal. CPLD, bzw. FPGAs werden dort eingesetzt wo es zeitkritisch ist, bzw parallele Bearbeitung gefordert ist. Und in diesem Fall ist ein 6€ CPLD deutlich besser geeignet als alles andere.
Hehe, da hat oldmax schon gleich eine Überlegung von mir ausgesprochen. Jetzt müsste ich nurnoch kapieren, wie man dem CPLD beibringt, eine I2C-Schnittstelle zu besitzen und darüber seine Einstellungen in Empfang zu nehmen. Mir geistert ständig was von Hardware-Beschreibungssprache VHDL im Kopf rum. Aber wie soll ich ein I2C-Interface in Hardware beschreiben? In C wäre das eine kleine Übung... Hat da jemand mal ein Tutorial zur Hand? Bahnhof FPGA, CPLD, sind für mich absolutes Neuland. Ich würde mich allerdings gerne da einarbeiten. Wahrscheinlich kann ich mein Atmega- und Logik-IC-Grab in einen einzigen FPGA stecken und umgehe dadurch auch gleich das Problem mit der Umschaltung, das macht die Sache interessant. Für mich ist ein FPGA ein IC mit konfigurierbaren Logikgattern. Also kann ich am PC eine Schaltung zusammenprogrammieren, die ich sonst mit 74HCirgendwas hätte aufbauen müssen. Aber wie kann ich denn so einem Ding beibringen, eine Konfiguration von der SD-Karte zu lesen, ein Display zu steuern, etc.? Ist das nicht grausam viel Arbeit und für einen normalsterblichen Hobby-Bastler unlösbar? Einen Atmega 128 aus Logikgattern nachzubauen kanns ja auch nicht sein, dann kann ich auch gleich den Atmega einlöten.
>Einen Atmega 128 aus Logikgattern nachzubauen kanns ja auch nicht sein, >dann kann ich auch gleich den Atmega einlöten. Genau das wird aber gemacht. Das hat den Vorteil dass du sämtliche Hardware die du im Controller hast bei Bedarf in den FPGA programmieren kannst. Du bist nicht auf die Hardware des fertigen controllers begrenzt. Du könntest z.B. 20 serielle Schnittstellen einbauen usw.
Wobei es in deinem Fall unsinnig wäre einen Controller in einen FPGA zu implementieren. Du brauchst ja nur ein I²C Interface und eine Hand voll Multiplexer
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.