Forum: Mikrocontroller und Digitale Elektronik I/O Verteiler/Umschalter


von Abwasch K. (abwaschkoenig)


Lesenswert?

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!

von oldmax (Gast)


Lesenswert?

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

von Abwasch K. (abwaschkoenig)


Lesenswert?

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.

von ich (Gast)


Lesenswert?

Ich würde ein kleinen CPLD nehmen

von Abwasch K. (abwaschkoenig)


Lesenswert?

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.

von oldmax (Gast)


Lesenswert?

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

von Christian K. (christian-k)


Lesenswert?

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.

von Christian K. (christian-k)


Lesenswert?

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.

von oldmax (Gast)


Lesenswert?

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

von Christian K. (christian-k)


Lesenswert?

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.

von Abwasch K. (abwaschkoenig)


Lesenswert?

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.

von Christian K. (christian-k)


Lesenswert?

>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.

von Christian K. (christian-k)


Lesenswert?

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
Noch kein Account? Hier anmelden.