Hallo, ich hoffe, daß mir hier jemand weiterhelfen kann. ich habe auf einer seperaten Platine (Lochraster) einen Pegelwandler mit einem Max3232 aufgebaut mit fünf 100nF Kondensatoren (keine Elkos, einer ist ein Stützkondensator). Als Zuleitung zum PC habe ich ein ca. 1.20m langes Flachbandkabel genommen, daß per Klemm-Schneide Technik auf der einen Seite einen 9 Pol. Stecker (female) hat, auf der anderen Seite so ne 2x5 polige Buchse, die ich auf eine Stiftleiste draufstecken kann. Zur Mikrocontroller-Platine verbinde ich den Pegelwandler über ein ca. 15cm langes Flachbandkabel. Der Mikrocontroller (Mega128L) wird mit 7.3728MHz getaktet. 1. Das erste Problem tritt auf, wenn ich nur den Pegelwandler über das 1.20m Kabel mit dem PC verbinde und ihn an 3.5V hänge. Wenn ich ein Terminalprogramm starte und mit einer Hand den Pegelwandler "streichel", dann empfängt er hunderte von 0x00 ... Ist der Aufbau so kritisch? Muß ich da was spezielle beachten? Der Pegelwandler ist auf der Lochrasterplatine mit Kupferlackdraht "gefädelt". Könnte das daran liegen? 2. Wenn ich den Pegelwandler mit dem 15cm Kabel mit dem Mikrocontroller verbinde und was sende, dann empfange ich ebenfalls nur 0x00. Baudrate habe ich auf 2400 eingestellt und kein Handshake. Steckerbelegungen stimmen 100%. Das habe ich mindestens 100 mal nachgeprüft. Ich habe die ganze Nacht experimentiert und bin jetzt mit meinem latein am Ende. Bin für jeden Tip dankbar. Hier der Source, den ich zum senden verwende: typedef unsigned char BYTE; #define UART1_BAUDRATE 2400 #define UART1_UBR (AVR_CLK/(16*UART1_BAUDRATE)-1) int main(int argc, char* argv[]) { usart1_init(); while(1){ usart1_sendByte('K'); } } return 0; } void usart1_init(){ //Baud Rate setzen UBRR1H = (BYTE)(UART1_UBR>>8); UBRR1L = (BYTE)(UART1_UBR); //Frame Format setzen //1 StartBit, 8 DatenBits, keine Parität 1 StopBit UCSR1C = (3<<UCSZ10); //Receiver und Transmitter einschalten UCSR1B = (1<<RXEN1)|(1<<TXEN1); } void usart1_sendByte(BYTE data){ //Warte bis Transmit Buffer leer ist while ( !( UCSR1A & (1<<UDRE1) ) ); //Data in den Buffer schreiben (startet die Übertragung) UDR1 = data; } Gruß, Klaus
Sorry, noch ein kleiner Nachtrag: ich habe mein programm so modifiziert, daß er erstmal 4 LEDs der Reihe nach eingeschaltet werden, bevor er in die Endlosschleife übergeht, um zu senden. Solange noch nichts gesendet wird steht das Terminalprogram still, sobald gesendet wird erhalte ich nur 0x00. Das heisst irgendwas funktioniert, aber was anderes wiederum nicht :-) Achso...Ich benutze nicht wirklich ein Terminalprogramm, sonder ein tool, daß sich "UART Monitor nennt". Aber das ist ja egal... Wenn ich das 1.20 Kabel mit ein paar Drähten zu einem zu einem "Loopback"-Kabel mache, dann sehe ich das was ich sende sofort. Das heisst. Kabel ist i.O. und ich weiss wo Pin 2+3 liegen :-) Masse ist auch vorhanden. Gruß, Klaus
Die RS-232-Pegel sind gegen Streicheln immun. Die MAX232-Anschlüsse zum 128-er dürften aber CMOS-Characteristik haben. D.h. wenn Dein 128 im Reset ist bzw. der TXD Pin nicht als Output arbeitet, dann kannst Du mit Sicherheit Pulse in diese hochohmige Leitung reinstreicheln. Häng doch mal ne Pull-Up z.B. 1kOhm mit ran, dann sollte das behoben sein. Peter
Hallo Peter, erstmal danke für deine Antwort. Die Sache ist aber so, daß ich dieses Streichel-Problem habe, obwohl der MAX3232 nicht mit dem 128´er verbunden ist. Das heisst der Max ist nur mit dem PC verbunden. Ich habe heute nacht auch erst das Forum hier durchsucht, bevor ich meine Frage gepostet habe, aber anscheinend bin ich der einzige mit einem derartigen Problem. Ich werde das mit dem Pullup trotzdem mal probieren. Gruß, Klaus
Hallo Klaus Wenn die Eingänge des MAX3232 nicht verbunden sind also freiliegen sind sie auf unbestimmten Potential(irgendwo zwischen 0 und 5V)wenn du streichelst verändertst du das Potential und wenn da LOW oder HIGH erkannt wird geht das auch entsprechend raus.Sobald die Leitung auf LOW geht wird das als Startbit angesehen.Das du lauter nullen bekommst liegt wahrscheinlich an deinem Terminalproggi das die die Framingerrors nicht anzeigt.Ein Pullup löst das Problem. Sobald der Mikrocontroller aus dem Reset ist ist das Problem auch gelöst es sei denn die PIN's sind Hochohmig geschaltet. CU Wolfram CU Wolfram
Hallo, vielen Dank für die Tips bezüglich des "Streichelns" ;-) Den anderen Fehler habe ich mittlerweile auch gefunden. Mein Terminalprogramm empfängt jetzt alles was ich sende und keine 0x00 weit und breit :-) Der Fehler lag daran, daß ich vergessen habe die usart1_sendByte() Prozedur als Prototyp zu deklarieren. avr-gcc hat mir das aber komischerweise nicht als Fehler angezeigt, sondern nur als warning. Nachdem ich den Prototyp deklariert habe, lief es auf Anhieb. Das war ne schwere Geburt, aber die Hauptsache ist, daß es jetzt läuft. Vielen Dank nochmal für euere Antworten. Schönen Tag noch, Klaus
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.