PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RP6 mit RS232 verbinden ohne max232/pegelwandler?



-schumi-
05.04.2010, 17:51
Es geht darum: Ich hab eine 200Mhz/32MB Ram/Win98SE-Mühle OHNE USB Anschluss... Jetzt möchte ich gerne da drauf Programme für den RP6 schreiben und vor allem rüberladen

Für eine Kommunikation brauche ich ja folgende Verbindung:

RP6:---------------------------------------RS232:

Tx / Pin 3------>-------->------->----->RxD / Pin 2
Rx / Pin 2------<--------<-------<------TxD / Pin 3
MRESET / Pin 1----<-------<--------<--DTR / Pin 4
GND / Pin 9------------------------------GND / Pin 5

(--> zeigt auf den Empfänger der Daten)

ABER:
Der RP6 hat an seiner Schnittstelle 0-5V TTL-Pegel und die RS232 hat den -+12V Pegel

RP6:
0 = +5V
1 = 0V

RS232: (Je nach PC weichen die 12V um mehrere Volt ab)
0 = +12V
1 = -12V

(Aus https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=35899&highlight=usb+interface, Zitat von 'Pex': "Beim UART werden 0 und 1 mit +5V und 0V dargestellt, bei der RS232 mit etwa +12V und etwa -12V.
")

Um dieses Problem zu beheben kann man ja den max232 Pegelwandler benutzen, aber Versand- und Nachnamekosten von mehreren € sind für ein einziges kleines Bauteil, das man für 55Cent im Briefumschlag versenden könnte ja nicht gerade unerheblich

Jetzt weis ich aber nicht, ob die folgende Lösung funktioniert:



Von Tx nach RxD muss man ja so wandeln:
+5V ----> +12V
0V ----> -12V

Allerdings tut bei mir die RS232 auch bei 0V so als ob es -12 währen und schon bei 4.5V so als ob es 12 währen (mit weniger als 4.5V hab ich es nicht probiert), es ist also völlig überflüssig das zu wandeln.


Von TxD nach Rx und von DTR nach MRESET muss man so wandeln:
+12V -----> +5V
-12V ------> 0V

die -12V kriegt man ja einfach mit einer Diode auf 0V
Und die +12V leitet man dann in einen Spannungsteiler um auf +5V zu kommen (siehe Bild)

Und jetzt meine Fragen:
1. Funktioniert das ganze überhaupt??
2.Welche Widerstände?
R2=R1*(Uaus/(Uein-Uaus))
R2=R1*0,7143
Was ist denn gut? - große oder kleine Widerstände, bzw. wie klein/groß?

MFG
-schumi-

PS: ich bin auch für andere Schaltungen dankbar, die man mit Widerständen und logik ICs der SN 74er Reihe zu machen sind (habe immer 4 Gatter: AND, NAND, EXCLUSIVE OR, OR, NOR). Auch noch Transistoreren aus Radio unbekannten Typs vorhanden.

uwegw
05.04.2010, 18:50
Hier gibt es ne Scahltung mit Standardbauteilen:
http://www.klaus-leidinger.de/mp/Mikrocontroller/AVR-Prog/AVR910-schalt.jpg
(alles, was links von den beiden 27pF Kondensatoren ist). Was RX und TX ist, sieht man am AVR.

-schumi-
06.04.2010, 09:29
Vielen Dank für den Link!

Werd mir das Teil mal ausdrucken und Studieren..


Hab bei meiner Schaltung mit dem Multimeter mal nachgemessen: bin da wo der RP6 drangesteckt wird immer auf 0V oder ca. 4.5V --> passt also (oder sind 4.5V zu wenig??)
Zwischen RxD an der RS232 und Tx vom Roboter hab ich noch eine Diode reingeklemmt, damit nur der RP6 Strom an den PC geben kann, aber nicht andersherum (wer weis schon ob der PC bei RxD nicht doch mal Saft draufgibt und dann den Atmega grillt?)
GND hab ich ohne Irgendetwas dazwischen verbunden..

RESULTAT (Ich hab übrigens das M32-Board benutzt, das kostet weniger wenn ichs schrotte):
1. wenn man den "Adapter" am PC, dann am RP6 ansteckt, dann den RP6 einschaltet
------> Display tut so als ob der Kontrast nicht richtig eingestellt ist, RP6Loader kann keine Verbindung aufbauen

2. wenn man den "Adapter" am PC ansteckt, den RP6 einschaltet, dann am RP6 ansteckt
------> Erst macht der Roboter gar nichts. *Klick* auf Verbinden im RP6Loader, Display tut wieder so als ob der Kontrast nicht stimmt, Loader kann keine Verbindung aufbauen

Keine Ahnung warum das nicht Funktioniert, für Hilfe immer dankbar :-)

Und noch was: Ich hab den unbelasteten Spannungsteiler benutzt, bin also davon ausgegangen dass die Eingänge vom RP6 nicht sonderlich viel Strom verbraten - ist das richtig oder hab ich nur Glück gehabt, dass das raufladen von Programmen mit den USB-Teil noch klapt, also nichts kaputt gegangen ist?

MFG
-schumi-

PS: Wer aus welchem Grund auch immer einen Spannungsteiler an die RS232 basteln will: Innenwiederstände beachten! (bei mir etwa 400 Ohm) Die stellen dann R1 dar
Ich hab erst mal doof geglozt, wie bei meinem Spannungsteiler nur 0.5V rauskahmen.. :-s

Richard
06.04.2010, 09:47
Es geht auch einfacher, ein Widerstand un eine Diode reichen.
Mit Der Diode kappt man die Negative RS232 Spannung gegen GND
ab. Dann sind zwar noch - 0,6 V an RDX vom µC, aber das kann der
ab. Als Schutz gegen einen zu hohen Eingangsstrom dann noch einen
Serien R von ca. 1k8 in die Datenleitung. Der PC erkennt auch noch 4,5 V
als H und 0V als L an. So habe ich das immer früher bei den PIC`s
gemacht. Aber daran denken das + 12V = Low und -12 V als Hight
vom PC gewertet werden (Negative Logik)! Bei Bascom kann man das
sogar einstellen...bei C ? Ansonsten noch nen Inverter benutzen....=
die Daten mit XOR behandeln.

Gruß Richard

-schumi-
06.04.2010, 14:04
Aber daran denken das + 12V = Low und -12 V als Hight
vom PC gewertet werden (Negative Logik)!

Das ist glaube ich auch der Grund, warum meine 1. Schaltung nicht funktioniert hat.. ich bastel gerade an einer 2., die mithilfe von Transistoren arbeitet (um die ganze Sache umzudrehen, funzt super) und dem Link von uwegw basiert. (hab schon einen Transistor verbruzelt, das hat vieleicht gestunken 8-[ )

sobald es funktioniert oder auch nicht und ich ratlos bin melde ich mich wieder

(dann werd ich mir auch die Mühe machen und einen schönen Plan malen, dann braucht keiner mehr das Risiko der Atmegaverschrottung eingehen - was aber nicht heissen soll, dass die Schaltung nicht auf eigene Gefahr zu benutzen sein wird! ;-))

MFG
-schumi-

-schumi-
06.04.2010, 17:18
Es funktioniert noch immer nicht..

Ich hab das mit den Transistoren so gemacht, dass -12V an RS232 zu +5V am RP6 werden und +12V an RS232 zu 0V am RP6 werden
Ausserdem wird Tx am RP6 bei 0V zu +5V an RS232 und +5V werden zu 0V
(Schaltung siehe angehängtes Bild)

Ich habe auch Festgestellt, das das MRESET-Signal nicht bei DTR sodern bei RTS gesetzt wird :-s
(hab dann auch DTR durch RTS ersetzt, aber es hat nichts geholfen)

liegt das daran, dass ich den Treiber auf der CD nicht installiert hab? Das ist doch eigentlich nur ein USB-treiber, also für den COM-Port nicht nötig, oder??
Auch im Loader langsamere Übertragungsgeschwindigkeit und Resetsignal invertieren einstellen hats nicht besser gemacht
(Aber es liegt nicht daran, das der Prog/Uart-Port kaputt währe, der funktioniert mit dem USB-Teil immer noch allerbestens)

Richard
06.04.2010, 18:25
Versuche es mal so, beide R`s ca 1k8 Diode 1n4148...Dann die
Empfangenen und zu sendenden Daten mittels xor Verknüpfung
invertieren. Es kann sein das der R an tx vom µC entfallen kann/muß,
den habe (ich) dazu geplant die Originalschaltung war glaube ich
ohne. Das mit den PIC`s wo ich das so gemacht habe ist ca. 20 Jahre
zurück........

Daten = Daten xor 0Hff
Print Daten

b.z.w.

Input daten

daten = daten xor 0Hff

Print daten

Gruß Richard

-schumi-
06.04.2010, 18:42
b.z.w.

Input daten

daten = daten xor 0Hff

Print daten

kann ich leider nicht, weil ich 1. den sourcecode vom loader nicht hab und 2. kein java kann

werd mich heute Abend mit deinem Vorschlag mal befassen.. - DANKE!

MFG
-schumi-

PS:
Input daten
Bist wohl auch ein Q(uick)- und/oder FreeBASICer, häh?

Richard
06.04.2010, 19:01
Früher habe ich nur in Assemler gearbeitet, jetzt nach den Neuanfang
ist Bascom erst einmal einfacher mit Java hat das nichts zu tun und
eine xor Verknüpfung kann man auch mit C machen. :-)

Gruß Richard

-schumi-
07.04.2010, 17:48
So, ich bin ein gutes Stück weiter gekommen, hänge jetzt aber doch wieder...

In den Plan von Richard wollte ich noch einen XOR-logikIC einbauen, der mir dann das Signal umdreht. Der hat aber nur eine maximale Ausgangsspannung von ca. 2V, also wahrscheinlich zu wenig. Jetzt hab ich noch mal die Schaltung mit den Transistoren aufgebaut.

Ich kann:
Im Terminal durch eingeben von "s" oder durch "Start" im Hauptmenü das Programm auf dem RP6 starten

Ich kann nicht:
- Verbinden
- Prog hochladen

Das MRESET-Signal wird jetzt auch wieder mit DTR gesendet
Das Problem liegt offensichtlich daran (nach viiiieelen Messungen mit dem Multimeter) daran, dass RxD an der RS232 das Signal vom RP6 nicht aufnimmt..
Es ändert sich der Status an der Zugangsleitung zu RxD aber!!
d.h:
- ich klicke auf "Verbinden"
- Port wird geöffnet
- recht kurze wartezeit
- an der Leitung zu RxD steigen die normalen 0V auf wahrscheinlich +5V an (ich kann das nicht so genau sagen, weil das Signal so schnell wieder weg ist, das die "MAX"-imal -Funktion nur ca. 2V registriert. Das Multimeter ist aber auch nicht gerade ein Profi-teil..)
- Es dauert noch ca. 2.5 sec., dann eine Meldung dass der Controler nicht antwortet

Ich habe auch eine anderen Transistor verwendet, so dass das Signal an der Leitung zu RxD an der RS232 von +5V auf 0V sinkt

RxD funktioniert aber (von wegen Kabelbruch oder so..), denn wenn ich während des Verbindungsvorgangs mit dem Draht ein paar mal gegen Vcc tippe sagt der Loader, dass die Controler-ID falsch ist und desshalb ein Fehler in der Übertragung aufgetreten ist..

jetzt erschließen sich mir ein paar Fragen:
1. was ist der Standartzustand and RxD von der RS232, -12V oder +12V??
2. wie muss meine Schaltung in etwa ausschauen, damit der aktuelle Pegel an der RS232 deutlicher wird?? (also möglichst -9V und +9V, den Saft dafür kann man sich ja einfach aus so nem Blockakku wie in Fernbedienungen holen)

MFG
-schumi-

Richard
07.04.2010, 18:21
Mit xor macht man das in Software. Bei Hardware nimmt man einfach
Inverter oder halt Transistoren. RDX vom PC ist über einen internen
Pull Up auf + 12 V geschaltet, das sollte man mit dem Multimeter gegen GND messen können. RXD wird dann von µC TXD halt nur immer auf
GND gezogen.

Gruß Richard

-schumi-
08.04.2010, 17:01
Juchu, es funktioniert! - fast zumindest..

Einen Schaltplan hab ich angehängt
Und das Resetsignal kommt defenitiv von RTS und nicht von DTR!
Die LED hat nur den Zweck anzuzeigen, ob der RP6 angeschlossen ist. Ausserdem hab ich noch einen Kondensator reingehängt um die Spannung ein wenig zu stabilisieren, es geht aber auch ohne


Ich kann:
- Programme starten/stoppen (über das Menü oder das Terminal)
- Lesen was mir der Roboter schickt
- Dem Roboter Eingaben senden (wie z.B. "s")
- Den Roboter resetten

Ich kann nicht:
- Die Controller-ID rauslesen (bzw. verbinden)

ABER:
Laut dem was ich kann müssen ja alle Leitungen korrekt funktionieren
Ausserdem brauche ich zum raufladen der Progs auch die Controller-ID. Damit er die kriegt muss ich die Übertragungsgeschwindigkeit auf LowSpeed stellen und RP6 im Resetmodus halten. Also so, dass auch auf dem Display nichts steht. Wenn ich dann ein Prog rübergeladen hab muss ich den Button zum Dauerresetmodus deaktivieren und wieder aktivieren um wieder eins rüberzuladen.
Wenn ich aber den RP6 im Resetmodus halte und dann auf Verbinden gehe sagt der Loader, dass die ID falsch ist!

Woran kann das liegen?!? Wenn ich ein Prog rüberlade kriegt er die ID ja auch!

Ausserdem währe es deutlich besser, wenn ich den Roboter nicht jedes mal wieder in den Dauerresetmodus bringes müsste..

MFG
-schumi-

radbruch
08.04.2010, 17:50
Hallo


- Programme starten/stoppenDie Steuercodes im Terminalmodus kennst du sicher auch:

Strg-s für Starten, Strg-r für Stoppen und Strg-d für Hex-Datei übertragen.

Gruß

mic

-schumi-
08.04.2010, 18:24
Die Steuercodes im Terminalmodus kennst du sicher auch:

Strg-s für Starten, Strg-r für Stoppen und Strg-d für Hex-Datei übertragen.

Das funktioniert im Hauptfenster mit den Buttons auch..
(Beim Hex-Datei-laden muss ich vorher eben den RP6 in den Dauerresetmodus bringen)

Das Hauptproblem ist ja, dass ich die richtige Controller-ID einfach nicht kriege. Die einzige Situation wo die ID richtig übertragen wird ist wenn ich dauer-resette und dann auf "Upload" klicke oder im Terminal STRG-d eingebe.

Wenn ich in den Dauerresetmodus gehe und dann verbinden will (also so, dass dann anschließend normalerweise akkuspannung usw. im Statusfenster stehen) dann überträgt er die ID falsch
Wenn ich nicht in den Dauerresetmodus gehe sagt der Loader, dass der Controller nicht antwortet

Um aber Text im Terminal zu lesen und zu senden muss nur der Port geöffnet sein (nicht verbunden, nur offen!), sonst nichts

MFG
-schumi-