PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RS232 keine Verbindung. Was mache ich falsch?



fred84b
02.08.2008, 18:50
Hallo Leute

Folgendes: ich habe mir eine Schaltung gemäss https://www.roboternetz.de/wissen/images/6/65/Avrtutorial_grundschaltung_max232.gif zusammengebastelt, allerding funktioniert die Übertragung mit UART nicht und ich weiss nicht woran es liegt. Wenn ich es mit dem PC verbinde, werden die gesendeten Bytes nicht empfangen.

Ich arbeite mit Lochrasterplatinen und habe das UART-Modul auf eine eigene Platine gepackt. Ich nehme an, dass das Problem hier liegt. Ein Softwarefehler ist aber auch nicht auszuschliessen…

So sieht die Platine aus:
Vorderseite:
http://n.ethz.ch/~bourgeof/tmppics/RS232_voderseite.JPG
Rückseite:
http://n.ethz.ch/~bourgeof/tmppics/RS232_ruckseite.JPG

Erklärung:
Von der 4-poligen Steckleiste kommt RXD & TXD vom uC (Atmega32) plus noch +5V und GND
Von der 3-poligen Steckleiste kommt RXD & TXD vom PC plus GND


Im Anhang ist noch die Lochmaster-Datei.

Übrigens ich habe ein MAX232CPE von Maxim und im Datenblatt steht, man solle 1uF Kondensatoren benutzen. Ich habe 4,7uF eingesetzt (für C1-C4). Spielt das eine Rolle?

Hier noch das Quellcode für meine Tests:

'################################################# ##
'step5.bas.BAS
'für
'RoboterNetz.de AVR Tutorial in RN-Wissen
'
'Autor: Frank Brall
'Weitere Beispiele und Beschreibung der Hardware
'unter
' http://www.Roboternetz.de oder
' http://www.Roboternetz.de/wissen
'################################################# ######


$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000
$baud = 9600

Config Portb.1 = Output

Config Pind.7 = Input
Portd.7 = 1


Do
If Pind.7 = 1 Then
Portb.1 = 1 'Pin wird auf High, also 5V geschaltet
Print "Schalter nicht gedrückt"
Else
Portb.1 = 0 'Pin wird auf Low, also 0V geschaltet
Print "Schalter gedrückt"
End If
Wait 1
Loop

End


Hat jemand eine Idee woran es liegen könnte? Oder wie kann ich feststellen, wo das Problem liegt? Welche Spannungen sollte ich z.B. bei TXD bekommen, wenn etwas gesendet wird?

raggy
02.08.2008, 20:24
Hallo Fred84b
Du solltes erstens dann auch 1uF nehmen, die Kondensatoren haben die Aufgabe einer Ladepumpe.Um 12V- u.12V+ fuer die RS232 .
Zum anderen hast du ein Null-Modemkabel dazwischen? Bei dem Kabel sind RX----TX u.TX------RX gekreuzt.
Bzw kommt da etwas an, Buchstaben -salat oder zeichen.
Zum anderen Kondensator nochmal ueberpruefen ob Du + u. - vertauscht hast.
Gruß raggy

fred84b
02.08.2008, 22:04
Hi raggy

Ich habe dank dir schon grosse Fortschritte gemacht!

Es gab zwei Probleme.
1.Das Problem mit dem Kreuzen. Es war tatsächlich gekreuzt. Obwohl ich selber ein Kabel zurechtgebastelt habe… naja habe wohl irgendwo was falsch gemacht. Aber das Hauptproblem war Nr.2
2.Nämlich: ich hatte beim Ausprobieren das AVR-ISP Dongle am uC steckengelassen und es beim PC entfernt. Und das hat, aus noch ungeklärten Gründen, meine Schaltung lahmgelegt…

Jetzt kommt aber das nächste Problem: die Zeichen werden am Computer falsch empfangen, bzw es kommen Sachen wie "ääüü[¨üüöö]". Ich habe noch nicht gross herumexperimentiert, aber ich nehme an, das ist ein kleineres Problem. Ich habe lediglich die Databits-Länge beim Terminal verändert (und es kam nicht besser).

Gruss und Danke
Fred

CowZ
02.08.2008, 23:17
Hi,

dann liegt es (ziemlich) sicher an der Baudrate. Einen µC-Programmfehler von dir kannst du ziemlich einfach ausschließen:
Nimm dem Mikrocontroller aus der Schaltung raus (also nur den MAX232) und verbinde die Tx/Rx-Leitungen, die du eigentlich an den Mikrocontroller anschließen würdest. Dann solltest du aufm PC immer genau das erhalten, was du auch gesendet hast.
Wenn das ohne Probleme klappt, sieht's schonmal recht gut aus für die Schaltung des MAX232s.

Danach kannst du dich um den Mikrocontroller kümmern, wobei du vorallem auf die Baudrate achten solltest. Ist ein externer Quarz angeschlossen und sind die Fuses richtig eingestellt? (Läuft der Mikrocontroller wirklich auf dem richtigen Takt?)

Dein Programm hab ich mir erstmal nicht näher angeguckt, das sollte vielleicht jemand anders machen, der sich auf BASCOM versteht.

Gruß, CowZ

raggy
02.08.2008, 23:50
Hi fred84b
Das mit 1Mhz (1000000 Hz) ergibt 7,84% erro und ich darf annehmen das
es der Takt des Atmega32 ist ( ??) dann duefte die Fehlerquote noch höher liegen.
besorg Dir einen Externen Quarz 3686400 Hz
In Bascom Option-->Compiler-->Communication ist kann man sehen welcher Quarz wieviel % erro hat.je naeher Null je besser.
Der interne Takt des Atmega** unterliegt zu vielen schwankungen zB.Temperatur.Der PC soll die selbe Baudzahl haben wie der Atmega.
und 8.n.1.Flußsteuerung keine!
Gruß raggy

fred84b
03.08.2008, 08:29
Ja! Über Nacht ist es mir auch eingefallen. Ich benutze tatsächlich noch den internen Takt. Wird wohl daran liegen.

Ich habe schon eine 16MHz Quarz gekauft, habe sie aber noch nicht eingebaut.

Gruss,
fred

raggy
03.08.2008, 10:28
Hallo fred84b
Noch einen Tip besorg Dir im Internet mal ein gutes Terminal Programm zb. HTerm
Zum anderen hier ist auch eine Suche im Forum
da gibt mann den Begriff ein den man sucht und unten das Forum.
ZB. UART
Forum :Bascom ......
Man kan aus nichts so gut lernen,wie aus den Fehlern anderer.ich habe auch so angefangen.
Gruß raggy und viel Spaß.

fred84b
03.08.2008, 10:39
So, jetzt hat es geklappt.
Quarz eingebaut und schon war die Übertragung fehlerfrei.

Danke raggy und CowZ!
Gruss, fred

Zapo.
11.08.2008, 21:12
könntest auch auf internen Takt 4Mhz / 9600 stellen oder 8Mhz - funktioniert für deine Anwendung genausogut ohne ext. Quarz...!