Hi! Habe ein Gerät mit einem Atmega16 gebaut. Dieses sendet mir ständig Daten. Aufgebaut hatte ich die Schnittstelle wie in dem AVR-Tutorial unter dem Link 6. Das UART. Hierfür habe ich kein sogenanntes Nullmodemkabel verwendet. Der Empfang mit Labview funktioniert einwandfrei. Ich kann aber von Labview aus nichts senden. Auch wenn ich zwei Rechner direkt miteinander verbinde und über den hyper terminal irgend etwas versenden möchte, funktioniert das nicht. Wenn ich über Labview was sende, sagt mir der Baustein zum Versenden, dass er die zu sendende Anzahl von bytes auch gesendet hat. Fragen: 1. Was ist überhaupt die Eigenschaft eines Nullmodemkabels, bzw. keines Nullmodemkabels? 2. Wo liegt vieleicht mien Problem? Viele Grüsse, hoffe auf baldige Antwort, Marcel
Bei einem Nullmodemkabel ist die Kreuzung mehrerer Leitungen wichtig: http://www.hardwarebook.net/adapter/serial/nullmodem.html Also Stecker 1 Stecker 2 Pin 2 Pin 3 Pin 3 Pin 2 Pin 4 Pin 5 Pin 5 Pin 4 Pin 6 Pin 20 Pin 20 Pin 6 (Masse nicht vergessen !!) Wenn du auf Handshaking verzichten willst, so reicht die Kreuzung von Pin 2 und 3 und natürlich noch die Masse. Ein normales Kabel (also kein Nullmodem) verbindet die Pins zwischen den beiden Steckern einfach 1:1
Ein Nullmodemkabel kreuzt RxD und TxD, was ein "ungekreuztes" 1-zu-1 Kabel nicht tut, daher dessen Name ;-) Wenn also empfangen, aber nicht gesendet werden kann, dann kann das Kabel nicht Schuld sein - es sei denn es ist defekt. > Wenn ich über Labview was sende, sagt mir der Baustein zum > Versenden, dass er die zu sendende Anzahl von bytes auch gesendet > hat. Wenn du kein Hardware- oder Softwarehandshake implementierst, hat es auch keine Chance herauszufinden, ob die Daten wirklich dort angekommen sind, wo sie hin sollen. Die Meldung ist daher nicht wirklich wertvoll.
Das Kabel müsste ich aber dadurch testen können, dass ich es rumdrehe. Wenn ich vom Mikrocontroller aus das Kabel einmal sorum und dann wieder andersherum verwendet und der Computer nur vom controller empfängt, dann funktioniert das.
Ich frage noch mal anders. Wenn ich KEIN Nullmodemkabel verwende, dann sind die Adern des Kabels nicht verkreuzt und somit muss der TX vom µc mit rx vom PC verbunden werden. TX vom PC muss mir rx vom µc verbunden werden. Richtig? Bei mir ist das gerade ein bischen verbaut alles. Komme aber an den MAX232 ran. Muss somit nur wissen, was die PINbelegung an der Steckerbuchse der RS232 Scgnittstelle an meinem Rechner ist. kann mir jemand sagen, wie diese exakt am Rechner ist? Bei der Verbindung zwischen µc und MAX232 ist definitiv alles in Ordnung. Bei der Verbindung zweier PCs mit diesem Kabel hat es deswegen nicht geklappt, weil es kein Nullmodemkabel ist, richtig? Also, was meint ihr?
Habe im Netz die Belegung vom PC gefunden. Zwischen MAX 232 und PC ist auch alles in Ordnung, wenn die meine Annahme von oben stimmt. Woran kann es jetzt liegen? Softwareproblem: RX am µc auf Eingang gestellt, UART auf senden und empfangen eingestellt. Was brauche ich noch? Ist das jetzt richtig, dass ich nur zwei Rechner mit einem Nullmodemkabel verbinden kann? Meiner Meinung nach ist das so? Somit wäre mein Kabel und die Verbindung in Ordnung und es müsste an der Programmierung des µc (Atmega16) liegen? Hie der code der Initialisierung der UART (wie gesagt, senden funktioniert, aber empfangen nicht): UCSRB |= ( 1 << TXEN ); // UART TX einschalten; Hiermit Sendebetrieb möglich UCSRB |= ( 1 << RXEN ); // UART RX einschalten; Hiermit Empfangsbetrieb möglich UCSRC |= ( 1 << URSEL )|( 3<<UCSZ0 ); // Asynchron 8N UBRRH = 0; UBRRL = 103; /* Asynchronous Normal Mode, U2X=0, UBRRL=((16MHz/16/baudrate)-1)=103,1666dez=1100111bin Error=0,2% */ void IOINIT_init(void) { DDRD=50; // PD1,PD4,PD5 auf Ausgang gesetzt. Der Rest auf Eingang PORTD=PORTD | 48; // Setzen von PD4, PD5 auf 1, damit die LEDs nicht leuchten } Hat vieleicht jemand noch eine Idee?
Wenn du testen willst ob die Verbindung zum µC wirklich OK ist dann solltest du die Vebindung zwischen MAX232 und Mega16 unterbrechen können. RX mit TX verbinden und mit einen Terminal-Programm was senden, dann solltest du ein Echo bekommen. Wenn das so ist dann ist Hardwaremässig alles OK.
evtl. klappt die Verbindung nur, wenn die 3 PC-Handshake-Leitungen (Eingänge) auf positivem Niveau (+4..+12V) liegen. Oder sicherstellen, dass in den Seriellen Einstellungen Handshake auf OFF oder NONE steht. Das Problem bei den NullModemKabeln ist, dass es unterschiedliche Varianten gibt: da die Std-PC-Serielle 3 Ausgänge und 5 Eingänge hat, gibt es mannigfaltige Kombinationsmöglichkeiten. Hätte man das von Haus aus auf 4+4 oder 5+5 festgelegt.... wäre so manchem viel Ärger erspart geblieben. Beim Thema Serieller wird auch viel gepfuscht, ich habe schon kommerzielle Adapterkabel gesehen, bei denen zwei Ausgänge zusammengeschaltet waren. Der Tip von Hubert ist immer hilfreich. Wenn das mal klappt, hast Du schon fast gewonnen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.