Hallo NG, kann mir bitte jemand ein paar Dinge erklären und warum die so sind? - asyncron und syncron - Flusssteuerung - kann ich mit einem 1:1 Kabel Daten in eine Richtung übertragen? - Muss die Baud-Rate auf beiden Geräten gleich eingestellt sein, oder funktionierts auch, wenn z.B. der Empfänger eine höhere eingestellt hat? Vielen Dank! Peter
Da empfehle ich doch glatt mal http://de.wikipedia.org/wiki/RS_232 Wenn du einzelne gezielte Fragen hast, kannst du wieder fragen, aber ganze Aufgaben wird hier wohl keiner für dich lösen.
In einem anderen Thread wurde mir gesagt, dass ich ein 1:1 Kabel brauche, um Daten vom AT91SAM7S256 auf meinen PC zu schicken. Wenn ich mir aber hier das aus Wikipedia durchlese, denke ich doch eher an ein Nullmodem-Kabel, oder lieg ich da falsch? Mir wäre es halt wichtig, dass ich wenigstens mal das richtige Kabel habe, das ich brauche. Sonst helfen ja die ganzen Tests nichts... In Wikipedia (Auszugsweise): """""""""""""""""""""""""""""""""""" Um zwei Geräte über die serielle Schnittstelle zu verbinden, müssen die "hörenden" mit den "sprechenden" Leitungen verbunden werden, d. h. TxD muss mit RxD und CTS mit RTS verbunden werden. - Handelt es sich um eine Verbindung von Terminal bzw. Rechner (DTE – data terminal equipment) mit Stecker zu einem Modem (DCE – data circuit-terminating equipment) mit Buchse, ist ein 1:1-Kabel nötig. - Handelt es sich dagegen um eine Verbindung zweier gleicher Geräte (z. B. zweier PCs), so sind die Leitungen zu kreuzen. Ein solches Kabel nennt man Nullmodem-Kabel. """"""""""""""""""""""""""""""""""""
Peter Pippinger wrote: > In einem anderen Thread wurde mir gesagt, dass ich ein 1:1 Kabel > brauche, um Daten vom AT91SAM7S256 auf meinen PC zu schicken. > Das kann man so nicht sagen. Das hängt davon ab, welche Buchse (oder Stecker) auf deinem Board montiert ist. Am einfachsten ist es, du schnappst dir ein Multimeter und misst das einfach mal an den Pins aus. > In Wikipedia (Auszugsweise): > """""""""""""""""""""""""""""""""""" > Um zwei Geräte über die serielle Schnittstelle zu verbinden, müssen die > "hörenden" mit den "sprechenden" Leitungen verbunden werden, d. h. TxD > muss mit RxD und CTS mit RTS verbunden werden. > > - Handelt es sich um eine Verbindung von Terminal bzw. Rechner (DTE – > data terminal equipment) mit Stecker zu einem Modem (DCE – data > circuit-terminating equipment) mit Buchse, ist ein 1:1-Kabel nötig. > > - Handelt es sich dagegen um eine Verbindung zweier gleicher Geräte (z. > B. zweier PCs), so sind die Leitungen zu kreuzen. Ein solches Kabel > nennt man Nullmodem-Kabel. > """""""""""""""""""""""""""""""""""" Das ist in der Theorie schön und gut. In der Praxis erlebt man da aber immer wieder Überraschungen. Daher -> Mit einem Voltmeter hast du in 20 Sekunden identifiziert ob das Kabel gekreuzt sein muss oder nicht. Wenn du einen 9-poligen Stecker/Buchse hast, dann liegen die relevanten Signale an Pin 2/3. Nimm dein Voltmeter und sieh nach auf welchem der beiden Pins eine Spannung von ca. -8V (oder weniger) anliegt. Ist es Pin 2, dann ist dieser Pin der Tx Ausgang und muss mit dem Rx Eingang am PC verbunden werden. Dieser liegt am PC ebenfalls auf Pin 2 und du brauchst daher ein nicht gekreuztes Kabel, ein sog. 1:1 Kabel (und damit dann auch Pin 3 -> Pin 3 ) Ist es Pin 3, dann ist dieser Pin mit Pin 2 am PC zu verbinden. Dazu brauchst du ein gekreuztes Kabel, ein sog. Nullmodem Kabel (und damit dann auch Pin 2 -> Pin 3) Wenn das Kabel an beiden Enden eingesteckt ist, dann muss auf den beiden Datenleitungen im Ruhezustand jeweils ca -8V oder weniger anliegen. Wenn du das falsche Kabel hast, dann ist nur eine Leitung bei -8V, die andere liegt ca. auf Masse.
> Wenn du einen 9-poligen Stecker/Buchse hast, dann liegen die > relevanten Signale an Pin 2/3. Am 25-poligen Stecker auch. Ansonsten klasse Beschreibung !
????? jetzt habe ich mal mein DEV-Board einfach nur so angeschlossen, ohne dass ein Programm von mir läuft. Dabei fand ich nur auf PIN2: -5,5V. Auf allen anderen 0V. Auf dem PC siehts folgendermaßen aus: Pin 3,4 und 7: -6.6V Sagt dieses Ergebins jemand etwas bezüglich des Kabels, das benötigt wird?
Ok, sorry Holger. Komme nur gerade irgendwie nicht weiter :-( Dann hätte ich noch ne Frage: Ich habe so einen USB auf RS232 "Stecker". Mein Windows erkennt diesen auch als COM-Port. Dann sollte es doch funktionieren - da die Schnittstelle ein Männchen ist - dass ich das Teil so wie es ist in das Dev-Board stecke. Das müsste doch dann einer 1:1 Verdrahtung gleichkommen, oder? Die Sechskantschrauben vom DEV-Board habe ich dazu von der Buchse entfernt.
Peter Pippinger wrote: > ????? > > jetzt habe ich mal mein DEV-Board einfach nur so angeschlossen, ohne > dass ein Programm von mir läuft. > Dabei fand ich nur auf PIN2: > -5,5V. Auf allen anderen 0V. > > Auf dem PC siehts folgendermaßen aus: Pin 3,4 und 7: > -6.6V > > Sagt dieses Ergebins jemand etwas bezüglich des Kabels, das benötigt > wird? Ja. Welchen Teil der Beschreibung, dass jeweils der Pin der negative Spannung führt mit dem Pin auf der Gegenseite der keine Spannung führt (wir reden ausschliesslich von den Pins 2 und 3 auf beiden Seiten) verbunden werden muss, hast du nicht verstanden?
....vllt. sollte man ihm noch sagen, daß gegen Pin5(GND) gemessen werden sollte. Bei 25 pol. ist das der Pin 7. Oder aber v24-Tester einschleifen. guude ts
Hallo, ich bin echt am verzweifeln hier. Habe jetzt alles mögliche probiert, aber ich checks einfach nicht :-( Hat vielleich jemand ein simples "Hallo Welt" als Binary oder Source (egal ob ASM oder C), damit ich wenigstens mal das Board testen kann... Ich habe die Datenleitungen in allen Möglichen Verknüpfungen zueinander gestellt. Mal 2+3 gekreuzt. Mal mit Pin5 mal ohne. Mal mit dem Rest 1:1 usw. Im Hyperterminal wird absolut nicht dargestellt :-( Die Einstellungen im Hyperterm: 9600-8-N-1 Flusssteuerung keine. Hier der Code. So wie es aussieht ergibt das Warten auf Ready in write_char obendrein noch ne Endlosschleife :-( Vielleicht nochmal zum Kabel: Welche Pins werden überhaupt gebrauch? Reichen PIN2 + PN3 + GND (PIN5)? Vielen Dank für jeden Tip! Peter Hier die beiden Routinen (die Kommentare sind noch nicht überarbeitet): ----------------------------------------------------------------------- write_char: // -------------------------------------------------------------- // warten auf ready // -------------------------------------------------------------- // Basisadresse setzen LDR r0, =USART_BASE ready: LDR r1, [r0, #USART_US_CSR] AND r1, r1, #BIT1 CMP r1, #BIT1 BNE ready // Wert an Basisadresse + Offset schreiben ldr r8, =(0x6A & 0x1FF) // sollte ein "j" ergeben, oder? STR r8, [r0, #USART_US_THR] // -------------------------------------------------------------- // Zurueck aus Subroutine MOV pc, r14 init_usart0: // -------------------------------------------------------------- // Basisadresse setzen LDR r0, =PIO_BASE // zu schreibender Wert LDR r1, =(BIT5 | BIT6 | BIT21 | BIT22) // Wert an Basisadresse + Offset schreiben STR r1, [r0, #PIO_PDR] // zu schreibender Wert LDR r1, =(BIT5 | BIT6 | BIT21 | BIT22) // Wert an Basisadresse + Offset schreiben STR r1, [r0, #PIO_ASR] // zu schreibender Wert LDR r1, =0 // Wert an Basisadresse + Offset schreiben STR r1, [r0, #PIO_BSR] // -------------------------------------------------------------- // Basisadresse setzen LDR r0, =PMC_BASE // zu schreibender Wert LDR r1, =1000000 // Wert an Basisadresse + Offset schreiben STR r1, [r0, #PMC_PCER] // -------------------------------------------------------------- // Basisadresse setzen LDR r0, =USART_BASE // zu schreibender Wert LDR r1, =117 // Wert an Basisadresse + Offset schreiben STR r1, [r0, #USART_US_BRGR] // zu schreibender Wert LDR r1, =0 // Wert an Basisadresse + Offset schreiben STR r1, [r0, #USART_US_TTGR] // zu schreibender Wert // LDR r1, =100111000000b LDR r1, =0x08c0 // Wert an Basisadresse + Offset schreiben STR r1, [r0, #USART_US_MR] // -------------------------------------------------------------- // Basisadresse setzen LDR r0, =PDC_BASE // zu schreibender Wert LDR r1, =(256 | 1) // Wert an Basisadresse + Offset schreiben STR r1, [r0, #PDC_PTCR] // -------------------------------------------------------------- // Basisadresse setzen LDR r0, =USART_BASE // zu schreibender Wert LDR r1, =0x50 // Wert an Basisadresse + Offset schreiben STR r1, [r0, #USART_US_CR] // -------------------------------------------------------------- // Zurueck aus Subroutine MOV pc, r14
Ja, Pin 2, 3 und 5 werden benötigt. Auf Pin 5 (GND) kann ganz und gar nicht verzichtet werden, das ist das Bezugspotential. Pin 3 (TxD) ist die Sendedatenleitung des PC. Die muss mit der Empfangsdatenleitung (RxD) Deines µC verbunden werden. Natürlich nicht direkt, sondern über einen geeigneten V24-Empfängerbaustein wie einen MAX232. Pin 2 (RxD) ist die Empfangsdatenleitung des PC und ist mit der Sendedatenleitung (TxD) des µC zu verbinden. Auch hier nicht direkt, sondern über einen geeigneten V24-Senderbaustein wie einen MAX232. Wenn Dein µC nicht sendet, muss zwischen seiner TxD-Leitung und Masse eine Spannung messbar sein. Dafür reicht ein simples Aldi-Multimeter. An der TxD-Leitung zwischen µC und MAX232 muss eine Spannung von 5V messbar sein, an der zwischen MAX232 und PC hingegen eine Spannung von etwa -10V. Bezugspotential ist natürlich Masse (GND).
>- Muss die Baud-Rate auf beiden Geräten gleich eingestellt sein, oder >funktionierts auch, wenn z.B. der Empfänger eine höhere eingestellt hat? Die Baudrateneinstellung ist fakultativ, das sie von den Geraeten sowieso ignoriert wird. Die beiden Geraete waehlen die geeignete Baudrate selbst, da sie klueger als der Benutzer sind und zudem ueber geheimes Zusatzwissen verfuegen. ;-)
Die Baudrate Sender / Empfänger muss gleich sein, denn ein Bit hat ja eine bestimmte Impulslänge die vom Receiver erkannt werden muss nachdem das Startbit erkannt wurde. Wäre die Baudrate des Empfängers doppelt so hoch wie die des Senders hätte der Empfänger schon 8 Bits "gesehen" obwohl der Sender erst 4 gesendet hat. Das dabei nur Mist rauskommt ist klar. Ebenso muss Tx des Transmitters mit Rx des Receivers verbunden werden und Rx des Transmitters mit Tx des Receivers, auch wenn sich das jetzt blöd anhört. Basis der Verbindung ist natürlich die gemeinsame GND-Leitung. Geht man von einer Standart PC-Schnittstelle aus, dann sind natürlich alle Tx usw. an der gleichen Position und man braucht ein "gekreuztes" Nullmodem-Kabel um die Verbindungen Tx-Rx herzustellen. Bei manchen Ports wie z.B. beim STK500 sind die Ports schon so verdrahtet, das man nur ein "grades" Kabel braucht. Der logische Lo-Pegel entspricht +12 Volt auf der RS-232 (Kabel)Seite, ein logischer Hi-Pegel entspricht -12 Volt bei RS-232. Dabei kommt es so genau auf die Spannung gar nicht an: Ein Bereich von +-3 bis +-18 Volt ist zulässig. So, Ende des Romans. ;-)
JUHUUUUUU!!! Es klappt! Wenn ich euch erzähle, woran es gelegen hat, werden sich einige bestimmt an den Kopf langen... Ich hatte diverse BASE-Adressen in den Headerdefinitionen falsch. Jetzt läufts auf Anhieb! Die LED auf dem Board blinkt und ein Zeichen (j) erscheint im Hyperterminal :-) Echt genial. Das beste daran ist, dass mir immer mehr klar wird, wie der kleine ARM funktioniert. NO RISC NO FUN sag ich da blos :-) Und fürs Protokoll: die Datenleitungen (PIN2+3) und GND (PIN5) sind jetzt 1:1 verdrahtet.
Sorry, aber für mich sieht das eher so aus, als wüsstest du da nicht so ganz bescheid, was du da überhaupt machst, oder?
Hab ich ja auch nicht behauptet. Für mich ist der ARM der Einstieg in die Mikrocontroller-Technik (nach wie vor als Hobby und nicht als Beruf!). Bislang wuste ich nichts über die Dinger. Und die paar Schritte zu meinem persönlichem Ziel, die ich bislang gegangen bin funktionieren soweit. Das reicht mir vollkommen und macht bis auf manche Rückschläge auch total Spaß. So long, Peter
Hallo NG, eine Frage hätte ich noch: ich setzte doch hier die Baudrate vom USART. LDR r0, =USART_BASE LDR r1, =313 STR r1, [r0, #USART_US_BRGR] wieso muss ich 313 schreiben? Mein Board läuft doch mit 18MHz. Damit sollte sich folgende Rechnung ergeben: 18000000 / (9600 * 16) Das würde aber dann den Wert 117 zur Folge haben. Dann klappts allerdings nicht. Also nicht falsch verstehen: Ich kann mit der Lösung leben, aber leider verstehe ich diesen Teil nicht ganz... Gruß, Peter
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.