PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 3 fach RS232 Umschalter mit PIC aufbauen?



Marco85
29.06.2007, 16:36
Also auf der Arbeit soll ich eine Box bauen mit folgenden Eigenschaften:

2x RS232 zum PC (main und aux)
3x Anschlüsse für Barcodescanner mit jeweils 2x RS232
ein paar Ein- u. Ausgänge für die Scanner

ich möchte das man einen von den 3 Barcode-Scannern auswählen kann der dann mit dem PC verbunden wird. Ich habe die schaltung schon mit kleinen Relais aufgebaut ist aber nicht so das wahre.

Jetzt meine Frage: ist es zu aufwändig es mit einen PIC zu machen?

mfg
Marco

PICture
29.06.2007, 16:56
Hallo Marco85!

Ist es nicht zu aufwendig Deine Frage, ohne Schaltplan der funktionierenden Schaltung mit Relais, zu beantworten ? :)

MfG

Marco85
29.06.2007, 20:06
hab jetzt kein schaltplan da, ich möchte im groben nur wissen ob man z.B. einen 1 zu 3 Umschalter für RS232 Verbindungen mit einem PIC verwirklichen kann, dass heißt an einem PIN gehen Daten vom Scanner rein und wahlweise aus Pin 2,3 oder 4 wieder raus zum PC.

vielen Dank
Marco

PICture
29.06.2007, 20:40
Ich habe selber sowas noch nicht gemacht, aber theoretisch sollte es gehen, weil man ein Portpin an anderen kopieren kann. Das mussen quasi gleichzeitig zwei Pins RX und TX kopiert werden, das auch kein Problem ist. Wenn der PIC mit 4 MHz arbeiten würde, die Verzögerung wird im µs Bereich liegen und sollte nicht stören. Die Umschaltung kann man z.B. mit 3 Tasten oder einem Schiebeschalter (braucht man keine Entprellung) realisieren. Der Code scheint ganz simpel zu sein. Es werden MAX232 pro RS-232 also bei 3 auf 1 Umschalter 4 St. benötigt, weil ein PIC nur 5V Signale umschalten kann.

MfG

Marco85
20.08.2007, 10:17
also ich hab jetzt mal ein bild angehängt,
kann mir vielleicht jemand sagen welche Befehle ich dafür benutzen muss/kann?
Pins kopieren hört sich leicht an aber wie könnte der Programmablauf sein?
Und wie macht man die Umschaltung mit 3 Taster?

ich hoffe auf antworten sonst komme ich hier nicht weiter.

mfg
Marco

(an die nicht beschalteten Pins der MAX232 kommen die Schnittstellen der Barcode Scanner)
die oberen 3 MAX232 sind für die Barcode Scanner, der untere MAX232 ist für die PC-Verbindung

Maxigraf
20.08.2007, 12:46
Prinzipiell könntest du eine Art Schleife machen, die überprüft welcher Knopf gedrückt wurde und dann entsprechend zu ner anderen Schleife springt.

Also in der Art:
BTFSS PortA,0 ;also falls die Taster an PortA hängen
GOTO USE1
BTFSS PortA,1
GOTO USE2
BTFSS PortA,2
GOTO USE3

Und das eventuell in jede Schleife einbaun

Die Schleifen wären dann so aufgebaut:

USE1
MOVFW PortB ;gesamten PortB nach W
ANDLW B'11110000' ;wir wollen ja nur die Pins<4:7> z. B.
MOVWF TEMP ;zur Ausgabe müssen die Werte noch in den unteren Bereich
SWAPF TEMP ;daher einfach in nen Temp Register kopieren und die oberen 4 Bit mit den unteren 4 vertauschen
MOVFW TEMP ;wieder zurück
MOVWF PORTC ;Ausgabe an PortC
GOTO USE1 ;Und wieder von vorne

Die anderen würde ich ähnlich aufbauen
Wobei ich jetzt davon ausgegangen bin, daß IC3a ein Input und IC1a ein Output is. (Du hättest dann etwa eine Verzögerung von 17 µs)

Wenn die Daten auch in die andere Richtung müssen, müßte man vorher die Ports auf Out/Input entsprechend umschalten und das selbe Spiel in die andere Richtung durchführen.

kalledom
20.08.2007, 14:31
Hallo Marco85,
wozu nimmst Du für eine einfache Umschaltung einen PIC ?
Wenn Du sowieso auf TTL-Pegel runter mußt (mit dem MAX232), kannst Du auch den Multiplexer CMOS 4052 mit 2 x 4 Kanälen nehmen, da ist keine Software für erforderlich.

Marco85
20.08.2007, 16:44
Ich wollte einen PIC benutzen da ich noch andere Signale schalten möchte, und für die Auswahltaster (die jeweils einen Scanner aktivieren) wären auch wieder Bauteile nötig.
Außerdem muss ich jetzt in der Ausbildung eh PIC-Programmierung lernen.

viele Grüße
Marco

Maxigraf
20.08.2007, 17:34
Mir is noch was eingefallen...
Es gibt doch bei dem RS232 Zeugs genau definierte Ein- bzw. Ausgänge, oder?

Wenn darüber Daten übertragen werden, wäre es vielleicht sinnvoller die einzelnen Bits abzufragen und entsprechend zu setzen und dann halt auch nur auf der einen Seite als Input zu setzen und auf der anderen Seite aus Output bzw. umgekehrt bei ner Leitung in die andere Richtung.

Also in etwa so:

BTFSS PORTB,0
GOTO $+4 ;bin mir ned ganz sicher vllt auch $+6 oder so ;)
BSF PORTC,0 ;das GOTO soll eben hinter diesen Befehl springen
GOTO $+4
BCF PORTC,0 ;bzw. hinter diesen

Ich hoff, daß dir das halbwegs hilft?
Ich bin mir da zum Teil selber nicht ganz sicher, ob das so funktioniert...

theborg
20.08.2007, 17:45
Hm müsste es nicht gehen 3x Software RS232 und dann je nach Auswahl einfach das mapping der Ports zu ändern ?

Mobius
20.08.2007, 21:06
Hm müsste es nicht gehen 3x Software RS232 und dann je nach Auswahl einfach das mapping der Ports zu ändern ? Würd auch gehen, mach bräuchte aber überhaupt keine 3 Software-RS232, es genügt 2x RS232. Einer Richtung PC, einer, der auf den ausgewählten Port horcht. Aber wieso einfach, wenn es auch konpliziert geht ;)?

Nein, die Beste Lösung ist, wenn man jetzt von dem Mux absicht, das genu 0 Aufwand zu programmieren ist, den PIC einfach eines der drei Barcode-RS232 zu samplen und die eingelesenen Werte direkt auf den Port des PCs zu schreiben (halt, wie Maxigraf vorgeschlagen hat). Und wenn der PIC mit 20MHz hochgetaktet wird, ergibt sich eine Verzögerung von weniger als eine 1µs.
Der Code würde dann ungefähr so aussehen:



#define _PCTX PORTA,1 ; input
#define _PCRX PORTA,2 ; output
#define _CODE1TX PORTB,1 ; input
#define _CODE1RX PORTB,1 ; output

[......]

mux1:
btfss _CODE1TX
bcf _PCRX
btfsc _CODE1TX
bsf _PCRX
btfss _PCTX
bcf _CODE1RX
btfsc _PCTX
bcf CODE1TX
return


Ist nicht effektiv, was den Programmspeicher angeht, aber es ist schnell und es erzeugt keine glitches bei den Ausgängen. Im schlimmsten fall dauert es, wenn man jetzt den "call mux1" des Hauptprogrammes nicht miteinberechnet 10 Cycles (mit dem return), das ergibt eine Verschiebung von 2 µs zwischen zwei abtastungen des Ports, d.h. alles < 400KBaud (100K Buffer für das Hauptprogramm) sollte keine Probleme bereiten.

Ich hoff, ich hab mich net verrechnet :D
lg
Mobius

€dit: fragt mich bitte net, wieso das zentriert ist, ich hab keinen blassen schimmer, es sollte eigentlich in einem Codeblock eingebettet sein -.-

kalledom
21.08.2007, 10:14
Würd auch gehen, mach bräuchte aber überhaupt keine 3 Software-RS232, es genügt 2x RS232. Einer Richtung PC, einer, der auf den ausgewählten Port horcht. Aber wieso einfach, wenn es auch konpliziert geht ;)?Ich habe den Fragesteller so verstanden, daß eine RS232-Schnittstelle zu einer von 3 möglichen RS232-Schnittstellen 'durchgeschaltet' werden soll. Das bedeutet: 1 Ausgang und 1 Eingang für die eine SIO und 3 Ausgänge und 3 Eingänge für die anderen SIOs.
Damit wird Deine Routine 3 mal erforderlich. Vor diesen 3 Routinen müssen zusätzliche Befehle stehen, mit denen verzweigt wird.
Zwischendurch soll, so ich das richtig verstanden habe, ein Schalter für die Auswahl einer SIO abgefragt werden.

Ist nicht effektiv, was den Programmspeicher angeht, aber es ist schnell und es erzeugt keine glitches bei den Ausgängen. Im schlimmsten fall dauert es, wenn man jetzt den "call mux1" des Hauptprogrammes nicht miteinberechnet 10 Cycles (mit dem return), das ergibt eine Verschiebung von 2 µs zwischen zwei abtastungen des Ports, d.h. alles < 400KBaud (100K Buffer für das Hauptprogramm) sollte keine Probleme bereiten.Und, der PIC soll noch mehr 'Dinge' leisten; es kommen noch weitere Befehle hinzu. Der End-Zustand ist unbekannt.
Wie groß wird dann die Verzögerung für die Weitergabe der seriellen Bits ?
Da nicht ständig mit der gleichen Anzahl Befehle zu rechnen ist, wird die Verschiebung auch noch unterschiedlich sein.
Es ist meiner Meinung nach nur über einen Change-Port-Interrupt lösbar, eine immer gleiche Verzögerung zu erreichen. In der ISR ergibt die Abfrage des 'Auslösers', Verzweigung und Übertragung des Zustands eine (fast) immer gleiche Anzahl Befehle und damit eine (fast) gleiche Verschiebung der seriellen Bits.
Die Abfrage des Wahlschalters ist vollkommen zeit-unkritisch und kann in der Hauptprogramm-Schleife mit den restlichen 'Tätigkeiten' durchgeführt werden.

Marco85
22.08.2007, 11:09
... mmhh, ich glaube ich nehme doch den 4052 um die Signale umzuschalten und steuer ihn mit dem PIC. Es sei denn jemand hat Lust mir das ohne 4052 zu programmieren. ich kanns jedenfalls nicht (noch nicht)

Aber wie mache ich die Tastensteuerung?. Hab es schon mal mit Logikbausteinen gemacht (RS-FlipFlop & Oder) aber mit einem Pic noch nicht.
Möchte, dass immer nur ein Scanner aktiviert ist, sobald ein Taster für einen anderen Scanner betätigt wird sollen die anderen deaktiviert werden.
und ich brauche zwei ausgangs-pins für die beiden 4052.

vielen dank für die vielen Antworten
Marco