Moin Leute, ich habe die Schaltung im Anhang hier aus dem Forum übernommen da ich je nach Bestückung RS232 oder RS485 kommunizieren will. Der RS232 Teil funktioniert wie er soll (D7 gebrückt, ohne R17). Jetzt wollte ich mal den RS485 Teil auf einer anderen Platine testen, das heißt der ganze RS232 Teil ist nicht bestückt genauso wie R17 und D6 da ich vorerst nur senden will. Wie muss der Pegel an der Transmit Leitung sein damit ich senden kann? Sollte die Schaltung denn so funktionieren? Der 75176 ist ein wenig warm. Grüße Christian
Gast
#4241655
Ich war mal so frei ...
Gast
#4241659
Hi Masseverbindung zur Gegenstelle vorhanden? MfG Spess
Hey, sorry für das Bild auf dem Kopf, kommt nicht wieder vor, ja Masseverbidung ist vorhanden. Die Transmitleitung wird aber noch nicht angesteuert, was muss diese denn für einen Pegel haben wenn ich etwas senden will?
Gast
#4241746
Mein nicht vorhandenes Datenblatt des 75176 sagt die Leitung muß auf high liegen. Etwas warm werden die 176 immer, sie verbrauchen auch gut Strom.
Klopp den 75176 in die Tonne. Der verbrennt 40mA ohne etwas dafuer zu tun. Modernere Chips laufen mit zB 0.4mA.
Gast
#4241777
spess53 schrieb: > Hi > > Masseverbindung zur Gegenstelle vorhanden? > > MfG Spess wozu? Stefan
Stefan schrieb: > spess53 schrieb: >> Hi >> >> Masseverbindung zur Gegenstelle vorhanden? >> >> MfG Spess > > wozu? Damit das Differenzsignal innerhalb des Arbeitsbereiches liegt. Kurt
Gast
#4241808
Kurt B. schrieb: > Damit das Differenzsignal innerhalb des Arbeitsbereiches liegt. > > Kurt Inwiefern hat das Differenzsignal zwischen A und B einen Bezug zur Masse, solange ich mir meine saubere differentielle Übertragung nicht durch den meistens überflüssigen Bias versaue. Stefan
Gast
#4241815
Hi >Inwiefern hat das Differenzsignal zwischen A und B einen Bezug zur >Masse, solange ich mir meine saubere differentielle Übertragung nicht >durch den meistens überflüssigen Bias versaue. Lies dir das https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CCQQFjAAahUKEwiOjuqet7jHAhUFPxoKHd0AC_A&url=http%3A%2F%2Fwww.ti.com%2Flit%2Fan%2Fsnla049b%2Fsnla049b.pdf&ei=Vy_WVc6GBYX-aN2BrIAP&usg=AFQjCNFP1T__GMeEkt8jhZLIrR7nFkPXBw mal durch. MfG Spess
So ich melde mich denn mal zurück. Ich habe nun den Schaltplan so umgesetzt bis auf D6. Ist die Diode denn notwendig wenn rein RS232 Receiver verbaut ist? Der Sender sendet nun auch was er soll aber er bekommt was er gesendet hat auch direkt wieder zurück. Da ich einen Atmega162 verwende mit 2 UARTS hab ich in der UART0 Empfangsroutine folgendes stehen:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Das heißt alles was an UART0 ankommt wird parallel an UART1 ausgegeben. Und nun bekomme ich im gleichen Moment das zurück was UART0 sendet. Das ist doch nicht normal oder? Weiterhin kann ich nicht empfangen über RS485 liegt das an der fehlenden Diode und R17? Grüße Christian
Chris T. schrieb: > Der Sender sendet nun auch was er soll aber er bekommt was er gesendet > hat auch direkt wieder zurück. Der Empfangsteil des 75176 ist ja auch die ganze Zeit aktiv und liest das zurück, was du auf's Kabel gibst. Wenn du das verhindern möchtest, musst du das TRANSMIT Signal auch an Pin 2 (Rx Enable) des 75176 anschließen -- bei high wird dann der Empfänger abgeschaltet. Das Signal darf erst wieder low werden, wenn das letzte Bit gesendet ist. Sebastian
Danke für die Ausführung, jetzt weis ich damit schon mal bescheid. Mache Grand meine ersten Gehversuche mit RS485 auf Hardwarelevel.(Sonst war immer ein Konverter dazwischen) Gibt's denn noch Anmerkungen dazu das ich nichts empfangen kann? Woran könnte das liegen? Edit: ICh empfange schon "etwas" aber das hat nicht viel mit den gesendeten Bytes zu tun, manchmal FF, FE, FD ... Sollte ich mal R17 entfernen?
Wenn du nur RS485 bestückt hast, kannst du Pin 1 vom 75176 direkt mit dem AVR verbinden, D6 wird also überbrückt und kann entfallen. Ich nehme an, das meinst du? Ob R17 vorhanden ist oder nicht sollte dann keine Rolle spielen.
Ja das meine ich.
Gast
#4242786
Bitte nicht übel nehmen, aber kann es sein das dir noch nicht bewußt ist das der RS485 so wie im Schaltplan dargestellt eine sogenannte halbduplex Verbindung darstellt. Das bedeutet es kann immer nur eine Sation geben die sendet und alle anderen haben geälligst nicht zu senden. (So wie früher, in der vor Handy zeit beim Funk) Das bedeutet wenn du mit dem Senden fertig bist (und das Letzte Bit die UART verlassen hat) muss die TRANSMIT Leitung wieder auf null gesetzt werden. Wenn mehrere Teilnehmer gleichzeitig den TRANSMIT auf 1 haben geht müll über die Leitung, und der wird auch prompt als solcher empfangen. Ist jetzt einfach mal eine Vermutung weil du sagst RS485 ist für die was neues auf dieser Ebene. Viele Adapter machen das automatisch. Udo
Sind A und B am 75176 richt herum angeschlossen? Sonst geht's auch nicht. Hast du ein Oszilloskop? Ich würde TRANSMIT zum Testen fest auf 0 legen, von einem anderen RS485-Gerät Daten senden und mit dem Oszi die Rx Leitung am 75176 anschauen. Da muessten dann gueltige UART-Frames zu sehen sein. Sebastian
Hm ich hab jetzt mal die Transmitleitung gemessen, die ist immer high obwohl ich Sie eigentlich auf Low schalte. Jetzt zweifle ich aber auch die anderen Pins auf den Port bleiben high obwohl ich die auf low setze:
1 | |
2 | |
3 | |
Alle Pins auf Ausgang und Pin4 und 5 auf low... Edit: PIN3 kann ich schalten, 4 und 5 nicht, wird wohl am Prozessor liegen. Ich nehm mal ein anderen Pin für Transmit.
Welcher Prozessor? JTAG-Fuse aktiv?
BINGO, Sebastian, ich hab zwar die Pinbelegung vor mir aber hab nicht auf die alternativen Funktionen der Pins geachtet, man o man, Datenblatt lesen... Also ich kann abwechselnd senden und empfangen aber nur wenn ich den Code ändere, wie lange vor dem Senden muss der Transmit Pin denn high sein? Mit folgendem Code kann ich nur empfangen:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
Wenn ich TR_PORT &= ~(1<<TR_PIN); auskommentiere dann wird gesendet aber ich kann natürlich nicht mehr empfangen.
Die Zeit zwischen TRANSMIT high und Senden steht im Datenblatt des 75176, ist auf jeden Fall weniger als 100 ns. Ich denke nicht, dass das hier ein Problem ist. Dein Code ist nicht vollständig. Wo kommt wert_anfordern her? Wann wird es gesetzt? Wass willst du überhaupt erreichen? Was für Geräte hängen am Bus? Wer sendet wann? Siehe Antwort von Udo oben, du musst dir den genauen Ablauf überlegen, wann gesendet und wann Empfangen werden soll. Aus dem Code lässt sich das nicht erkennen, weil der Empfangsteil fehlt. Sebastian
So hier mal der ganze Code: Ich will erstmal nur langsam an den Bus heran. Der atmega senden ca. alle 10 Sekunden ein paar Bytes, zwischen dieser Zeit sollte ich ja auch antworten dürfen. Später gibt es nur einen Master der den Slave zum Daten senden auffordert.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
116 | |
117 | |
118 | |
119 | |
120 | |
121 | |
122 | |
123 | |
124 | |
125 | |
126 | |
127 | |
128 | |
129 | |
130 | |
131 | |
132 | |
133 | |
134 | |
135 | |
136 | |
137 | |
138 | |
139 | |
UART1_Transmit() wartet bis der Sendepuffer leer ist (Flag UDRE), schreibt dann ein neues Byte in den Sendepuffer und kehrt sofort zurück. Im Hintergrund schickt der UART nun langsam ein Bit nach dem anderen auf die Reise... während dein Programm parallel weiter läuft! Wenn du also sowas schreibst...
1 | |
2 | |
...wird TRANSMIT mitten in der Übertragung abgeschaltet. Du brauchst etwas in dieser Richtung (Register auf deinen unbekannten Prozessor anpassen, ungetestet):
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
Gast
#4242992
Hi Zum Umschalten kann man auch TXC-Interrupt nutzen. Der wird ausgelöst, wenn das ein Byte vollständig gesendet wurde und im Sendepuffer der U(S)ART kein weiteres Byte vorhanden ist. MfG Spess
Danke an euch hab es jetzt so gelöst, jetzt funktioniert schon mal das senden und empfangen. Bei RS232 musste ich mir nie Gedanken ums senden machen, einfach übergeben und gut wars ;) Naja jetzt kanns endlich weiter gehen. Ich bedanke mich erst mal für die Hilfe hier.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.