Problem mit 2. Serieller Schnittstelle

tfv

Neues Mitglied
21. Juli 2011
2
0
0
74
Sprachen
Hallo,

ich möchte an einem ATnega1284P, der in ein NETIO-Board eingebaut ist, beide serielle Schnittstellen (Hardware) in Betrieb nehmen.
Die erste Schnittstelle ist sowieso über einene MAX232 und eine 9pol-Dsub-Buchse herausgeführt, also kein Problem.

Die zweite serielle Schnittstelle liegt am Pin D2 (Ich brauche nur RxD, will also mit dem Prozessor Signale lesen, die ich vom PC schicke, diese lasse ich mir dann über die erste serielle Schnittstelle wieder ausgeben.)

Der Sourcecode ist eigentlich ganz unspektakulär, aber leider kommen nicht die richtigen Zeichen an.

Code:
$regfile = "m1284pdef.dat"

$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100
$baud = 9600
$baud1 = 9600

Dim B As Byte


Config Com2 = 9600 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0

Enable Interrupts

Config Serialin1 = Buffered , Size = 20
Open "COM2:" For Binary As #2


Print "Start"

Do
   Print "Loop: test serial port 2"
   If Ischarwaiting(#2) = 1 Then
      B = Inkey(#2)
      Print B ; "-" ; Chr(b) ; " from port 2"
   End If
   Waitms 500
Loop

End

Wenn Ich die Dsub-Stecker so verbinde, dass das Signal direkt in die Schnittstelle 1 eingespeist wird, kommen die richtigen Buchstaben zurück. (Im Programm muss dazu bei ischarwaiting und inkey das "#2" rausgenommen werden)

Wenn ich jedoch in die Schnittstelle 2 einspeise (elektrisch habe ich die Pegelwandlung sowohl mit einem Transistor als auch mit einem MAX232, wie hier beschrieben http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART versucht), werden in beiden elektischen Varianten die Buchstaben wie folgt (reproduzierbar) zerhächselt:

Ein gesendetes A wird zu 95 (statt 65), B -> 47, C -> 94, D -> 23, E->93, F-> 46, G-> 92

Ich glaube eigentlich nicht, dass es an der Schaltung liegt, weil beide Schaltungen denselben Fehler liefern. Habe nur ein Selbstbauoszi (Mikrofonoszi Laptop), die Signale schauen eigentlich brauchbar aus.

Mir gehen die Ideen aus, was ich falsch gemacht haben könnte oder wie ich weiter testen kann.

Bin für jeden Hinweis dankbar!

Thomas
 
Hallo Thomas,
das sieht mir wie ein invertiertes Signal aus.
Nimm doch mal Clockpol=1. Ich denke, dass das dafür gemacht ist.
 
Hallo HinterBlauenAugen,

danke für dein schnelles Feedback.

Deine Ursachenanalyse perfekt ins Schwarze getroffen, das Signal war invertiert.

Eine Veränderung in der Config COM2 Zeile auf Clockpol = 1 hat leider überhaupt nichts an der Ausgabe geändert, die Werte bleiben identisch. Wenn Clockpol wirklich die Invertierung einschaltet (Ich habe da in der Doku noch keine genaueren Infos gefunden), würde das Experiment bedeuten, dass der Config COM2 Befehl nicht oder auf die falsche Schnittstelle wirkt. ????

Ich konnte jedoch durch elektrische Invertierung (weiteren Transistor dazwischen) die richtigen Signale erzeugen.

Ganz verstanden habe ich den Effekt noch nicht (auch weill ich Dachte, bei der Umwandlung von RS232 auf UART, also 12V auf 5V, müsste das Signal einmal invertiert werden), aber zumindest ist das Problem gelöst.

Also nochmal ein großes Dankeschön, manchmal ist wirklich extrem hilfreich, wenn andere schlauer sind ;-)

Thomas
 
Eine Veränderung in der Config COM2 Zeile auf Clockpol = 1 hat leider überhaupt nichts an der Ausgabe geändert, die Werte bleiben identisch. Wenn Clockpol wirklich die Invertierung einschaltet (Ich habe da in der Doku noch keine genaueren Infos gefunden), würde das Experiment bedeuten, dass der Config COM2 Befehl nicht oder auf die falsche Schnittstelle wirkt. ????
kann man die Taktpolarität nicht nur bei der SPI-Schnittstelle umstellen ? ... Hmmm komisch :confused:
Clockpol heißt ja nix anderes als Clock-Polarity. Also Taktpolarität.

Für die XMegas steht in der Bascom-Referenz folgendes ...
The CLOCKPOL for the SPI mode has been removed, it will be added to a configuration command for the SPI.

Im Datenblatt zum Mega1284 steht unter Punkt 19.4.4 folgendes ...
The UCPOLn bit UCRSC selects which XCKn clock edge is used for data sampling and which is used for data change. As Figure 19-3 on page 178 shows, when UCPOLn is zero the data will be changed at rising XCKn edge and sampled at falling XCKn edge. If UCPOLn is set, the data will be changed at falling XCKn edge and sampled at rising XCKn edge.
Also nach meiner Meinung bringt dir das beim Asynchronen Betrieb der Schnittstelle garnix. Es heißt ja auch nicht DATAPOL sondern CLOCKPOL. Man kann also nur umstellen bei welcher Flanke (positiv oder negativ) sich die Daten am Ausgang ändern oder am Eingang gesampelt werden.

Da wird wohl nen Transistor als Inverter fällig ...

Gruß
Dino
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)