PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Aktivitätsanzeige an serieller Schnittstelle



Bot-Builder
16.10.2009, 10:03
Hi!

Seit einiger Zeit schon bastel ich an einem eigenen und damit maßgeschneiderten MC-Board rum. Bin noch nicht sehr weit, Controller läuft soweit, ISP funktioniert und einige LEDs funzeln auch. Jetzt habe ich gerade die serielle Schnittstelle ans Laufen bekommen, auch Dank einigen Tips hier aus dem Forum. Ganz klassisch mit MAX 232 nach Datenblatt. So weit, so gut.

Da ich bei der Entwicklung viele blöde Fehler gemacht habe (Pinbelegung vom Stecker, Verbindungskabel usw.) habe mir zur Fehlerbeseitigung als "Aktivitätsanzeige" einfach LEDs mit Vorwiderstand an die TX bzw. RX Leitungen gelegt. Hat mir auch so weit gute Dienste geleistet.

Nun möchte ich auch das fertige Board mit LEDs als "Aktivitätsanzeige" ausstatten. Um aber bei höheren Baudraten die Signale nicht zu stark zu belasten, habe ich Transistoren als Treiber benutzt. Funktioniert bei TTL-Pegel ganz gut, die +/- 12V Seite funktioniert noch nicht, ist aber auch bestimmt hin zu bekommen.

Jetzt aber endlich zu meiner Frage. Gehe ich mit den Transistoren den richtigen Weg oder gibt es andere, bessere Lösungen für das Problem? Ich bitte um Nachsicht, wenn die Frage einem Profi zu einfach erscheint. Ich bin leider nicht wirklich vom Fach.

Bin über jeden Tip dankbar.

Gruss

Bot-Builder

Besserwessi
16.10.2009, 12:09
Die LED direkt mit Vorwiderstand ist auch bei höheren Baudraten kein Problem. Man sollte aber 2 low current oder besser helle LEDs (antiparallel) nehmen. Ein Widerstand von etwa 4,7 K trennt die LED von den gar nich so hohen Frequenzen.

Bot-Builder
17.10.2009, 20:38
Die LED direkt mit Vorwiderstand ist auch bei höheren Baudraten kein Problem.

Okay, das macht die Sache deutlich einfacher.



...
(antiparallel)
...


Leucht mir für den Teil mit richtigem RS232-Pegel, also +/- 12V ein. Du meinst in etwa so, richtig?


https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=2398


Aber für den TTL-Pegel Teil funktioniert das so doch nicht, oder? Im ersten Moment habe ich dann an so etwas ähnliches gedacht.

https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=2399

Würde für jede der beiden Leds einzeln angeschlossen funktionieren. Aber wenn beide angeschlossen sind würden beide dauern leuchten.

Ist natürlich auch nicht antiparallel. Oder bleibt für den TTL-Teil nur die Lösung mit einer LED und Vorwiderstand?


mfG

Bot-Builder

Besserwessi
17.10.2009, 21:02
Das für die +-12 V war genau so gemeint.
Nur die bedeutung bei der RS232 ist so, dass +12 V für eine 0 und -12 V für eine 1 stehen, wenn ich micht richtig erinnere.

Die Version für 5 V funktioniert so wie auch schon geschrieben in der Regel noch nicht (könnt mit 2 blaugrünen oder blauen LEDs gehen). Da einfach 2 Widerstände für die beiden LEDs, ruhig auch etwas größer. Wenn einem die Last zu groß ist, dann besser ein TTL bzw., HC-MOS-Gatter davor, z.B. 74HC14 oder so.

PICture
17.10.2009, 21:25
Hallo!

@ Bot-Builder

Nur die Schaltung aus deinem oberen Schaltplan kann mit zwei gleichen LEDs zwei gleiche Spannungen mit gleicher Helligkeit anzeigen. Bei LEDs mit diversn Farben (Durchflußspannungen) muss man die gleiche Helligkeiten (fürs Auge) mit unterschiedlichen Vorwiderstanden einzeln einstellen.

Bei der unteren Schaltung werden die LEDs zwar gleichzeitig, aber wegen fehlendem Vorwiderstand bei starker Spannungsquelle leider nicht lange leuchten... :(

Wenn eine LED ab bestimmter Spannung leuchten soll, müsste man seriell mit der LED eine Zener-Diode mit entsprechender Spannung schalten.

MfG

Bot-Builder
18.10.2009, 10:58
...
Nur die bedeutung bei der RS232 ist so, dass +12 V für eine 0 und -12 V für eine 1 stehen, wenn ich micht richtig erinnere.
...
Da einfach 2 Widerstände für die beiden LEDs, ruhig auch etwas größer. Wenn einem die Last zu groß ist, dann besser ein TTL bzw., HC-MOS-Gatter davor, z.B. 74HC14 oder so.


Du hast natürlich mit dem Signalpegel Recht. Muss umgekehrt sein.

Das mit den zwei Widerständen habe ich noch nicht so ganz kapiert, werde es aber gleich mal auf einem Steckbrett ausprobieren.

Aber Du hast weiter oben was zum Thema Frequenzen gesagt.

https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=2400

Wenn also ein Zeichen '1010 1010' übertragen wird, kommt ich bei 9.600 Baud auf eine Frequenz von 57,6 kHz. Stimmt die Überlegung so oder ist da ein Denkfehler drin?

Könnte man damit die genaue Baudrate messen? Ich komme deshalb darauf, weil ich bei meinem Aufbau auch einen Baudratenfehler (ungeeignete Quarzfrequenz) gehabt habe. Um da genau zu sein müsste man aber wissen die lange die Ruhepause zwischen zwei Zeichen ist auch wenn kontinuierlich Zeichen gesendet werden.

Konkret stelle ich mir vor man misst mit einem Controller einfach die Zeit zwischen den Flankenwechseln und rechnet dann die konkrete Baudrate hoch. Macht so etwas Sinn?

mfG

Bot-Builder

cmock
18.10.2009, 15:31
baud sind (in diesem fall) bit/sekunde, deine grundfrequenz liegt also bei 9600Hz.

das mit der baudratenmessung funktioniert so, wenn du ein definiertes bitmuster hast.

cm.

Bot-Builder
18.10.2009, 17:21
baud sind (in diesem fall) bit/sekunde, deine grundfrequenz liegt also bei 9600Hz.


Klar! ](*,) Bit / Sekunde und nicht Zeichen pro Sekunde!

Und beim näheren Hinschauen hat sich dann auch die Frage nach der Ruhepause zwischen den Zeichen erledigt (glaube ich zumindest!). Denn in meinem ersten Signaldiagramm ist auch noch ein Fehler. Stopbit hat logischen Pegel 1, also ergibt sich dann folgendes Diagramm.

https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=2402

Die Startbedingung ist die steigende Flanke vom Startbit, richtig? Da Ruhe logisch 1 ist, muss Startbit logisch 0 sein. Stopbit ist logisch 1. Also braucht es bei kontinuierlichem Zeichenfluss keine Ruhepause. Das sehe ich doch jetzt richtig, oder?

Um einen kontinierlichen Pegelwechsel auf der Leitung zu erzeugen braucht es dann allerdings eine ungewöhnliche Einstellung der Übertragung: 7Bit, even Priority, 1 Stopbit.

Liege ich jetzt richtig?

Richard
19.10.2009, 18:51
Moin moin.

Der Ruhezustand von TXD ist H, das Startbit beginnt mit der fallenden Flanke.

Ich habe mal eine Automatisch Baudratenerkennung "gebastelt".
Dazu habe ich immer als erstes Byte 01010101 gesendet und
eine Bitweite gemessen. Dann 1/2 BItweite hinzuaddiert damit
beim Einlesen in der Bitmitte gelesen wird. Das erste Byte diente nur
zur Zeitmessung, danach wurde dann (beim Lesen) mit dem Startbit
+ 1/2 Bitlänge angefangen und mit Bitlänge eingelesen.

Gruß Richard

Bot-Builder
19.10.2009, 20:34
Moin!



...
Der Ruhezustand von TXD ist H, das Startbit beginnt mit der fallenden Flanke.
...


Mit der (logisch) fallenden Flanke von log 1 auf log 0, aber mit steigenden (Signal-)Flanke von -15 auf +15. Korrekt?!?

Das mit der Baudratenerkennung werde ich auch mal versuchen. Findest Du den Code vielleicht noch? Mit "Beispiel" arbeitet es sich leichter :-b

Vielen Dank schon mal

mfG

Bot-Builder

Richard
20.10.2009, 07:59
Mit der (logisch) fallenden Flanke von log 1 auf log 0, aber mit steigenden (Signal-)Flanke von -15 auf +15. Korrekt?!?




Moin moin.

Eher umgekehrt. Ich meine die Tatsächlich anliegende Spannung,
nicht die negative Logig, halte einfach einmal ein Multimeter an
TXD vom PC wenn nichts Übertragen wird.

Gruß Richard

Bot-Builder
20.10.2009, 09:17
Moin!



Wie sich erkennen lässt, sind die Datenleitungen invertiert, das heißt in diesem Fall, dass eine logische 0 durch eine Spannung von +3V bis +12V repräsentiert wird. Eine logische 1 hingegen durch eine Spannung von -3V bis -12V. Wenn keine Daten übertragen werden (Ruhezustand), dann liegen an der Datenleitung -3V bis -12V an. Jede Datenübertragung beginnt mit einem Startbit, welches dazu dient Sender und Empfänger zu synchronisieren. Der Pegel der Datenleitung wechselt also von logisch 1, dem Ruhezustand, auf logisch 0.


Aber grau ist alle Theorie. Heute Abend werde das Multimeter nehmen und nachmessen. Dann ist man schlauer.

Einen schönen Tag.

mfG

Bot-Builder