Datenübertragung Serielle Schnittstelle

Gast #155111
Lesenswert?

Ich muss im Rahmen eines Schulprojekts mit Hilfe der Seriellen
Schnittstelle einen Code zum PC übertragen, den ich zuvor an einem
Mikrokontroller eingelesen habe! Kann mir bitte jemand erklären wie
genau die Serielle Schnittstelle funktioniert und wie ich sie
ansprechen kann?
Für eure Hilfe wäre ich sehr dankbar!
Gast #155113
Lesenswert?

Vom Pc soll dem Mikrokontroller (Infineon C515C, 8051-Familie) über den
Com-Port ein Tastaturkommando ünermittelt werden, worauf dann der
AD-Umsetzer den Spannungswer eines Widerstandthermometers einliest und
diesen an den Pc übermittelt.
Das Betriebssystem des PCs ist Win 2000.
Ich bin eigentlich ein Anfänger und weiß nicht mal wie ich die Daten,
bzw. das Tastaturkommando übermitteln soll!
Gast #155114
Lesenswert?

Auf der PC-Seite nimm ein Termimalprogramm (Hyperterminal) und auf der
8051-Seite die Funktion printf() bzw. falls Du Codespeicherprobleme mit
der Eval-Version bekommst, nimm itoa() und puts().

Einstellen der UART nicht vergessen (siehe Beispiel hello.c).


Peter
Gast #155115
Lesenswert?

Hi

ich habe in der Schule das gleiche prob.


Es ist so das ein analoges Thermometer an den µC (C515C-L)
angeschlossen wird. In dem Controller soll ne umwandlung vollzogen
werden also der 10 Bit A/D im µC benutzt werden. Es soll dann am RS232
die verarbeiteten Daten zum PC [OS egal] geschickt werden. Dort sitzt
ein C++ App welches die Daten grafisch auswertet.

Vorallem der Transfer über die RS232 (also Senden vom µC aus & empf. am
PC) is 'n bissl verzwickt. Wer mal was ähnliches hatte - posten. THX!!!
Gast #155117
Lesenswert?

Nein, es wurde nichts besrprochen!
Wir(unsere Gruppe) haben die Aufgabe später unsere Ergebnisse der
Klasse zu präsentieren! Inklusive der Funktionsweise der RS232.
Kann mir mal bitte jemand sagen was UART heißt und was man darunter
versteht?
Ausserdem suchen wir ein Sniffertool, dass uns die Datenübertragung
anzeigt!
Danke für eure Hilfe!
Gast #155118
Lesenswert?

UART = universal asynchronous receiver/transmitter (universeller
asynchroner Empfänger/Sender)

Andere Bezeichungen sind ACE (asynchronous communications element) oder
gar ACIA (asynchronous communication interface adapter) - gemeint ist in
allen Fällen effektiv das gleiche.
Oft wird auch ein D oder ein Q als Präfix vorangestellt, das aussagt,
daß zwei oder vier Schnittstellen in einem IC zusammengefasst werden.

Ein Unterschied dazu stellen synchrone serielle Schnittstellen dar, die
zusätzlich zu den Daten auch ein Taktsignal übertragen (SPI/I²C fallen
beispielsweise in diese Kategorie).

Auf einem Windows-PC kann man mit Portmon (www.sysinternals.com, freier
download) die Aktivitäten der seriellen Schnittstelle abhören.
Gast #155121
Lesenswert?

Die Übertragung von dem Mikrocontroller zum PC hab ich jetzt so weit,
aber jetzt muss ich noch ein Tastaturkommando vom PC an den
Mikrocontroller übertragen und ich weiß nicht wie ich dass machen soll!

Kann mir da bitte jemand helfen?!
Ich bin übrigens auf dem Technischen Gymansium und habe als Hauptfach
Informationstechnik!
Gast #155123
Lesenswert?

Ich habe folgendes Problem, ich schreibe 00h in das
Sende-und Empfangsregister des µC und schaue mir dann mit dem
Terminalprogramm an, was der µC sendet. Da kommen dann aber
irgendwelche
wirren Zahlen an, aber nicht 00h, was ich eigentlich übertragen
wollte!
Kann mir da jemand bitte helfen?
Gast #155125
Lesenswert?

Ich hatte die falsche Bautrate eingestellt (51 Serie). Der Controller
sollte in einer Endlosschleife von 0..255 jeden Wert zum Terminal
senden. Es kam immer etwas anderes an. Ich war der Meinung der
Controller sendet mit 9600 in wirklichkeit waren es aber 19600 Baud.
Gast #155126
Lesenswert?

ftp://test0711.te.ohost.de/tmp/rofl.zip



Das ist der Code den ich bisher zum Testen geschrieben habe (Keil
µVision). Wenn ich ihn jedoch übertragen will kommt "Connection To
Target System Lost"!


da dachte ich mit nur wtf - habt ihr ne ahnung?

irgendwelche fehler im Code?!?
Angehängte Dateien:
Gast #155127
Lesenswert?

Hallo,

da ich mich mit ähnlichen Problemen rumschlage (ich habe eine fertige
Baugruppe mit unbekannter Controller-Soft aber ein Steuerprogramm unter
DOS) wo ich die verwendeten Parameter rausbekommen möchte habe ich ein
sehr gutes Terminalprogramm genommen an welchem man viel einstellen
kann. Es läuft allerdings unter DOS.
Es nennt sich TERM und ist von einem (leider schon verstorbenen)
Funkamateur DL5FBD.
Du findest es glaube nur noch auf der Seite von Symek (www.symek.de)
Es ist in Deutsch.

Notfalls kann ich es Dir auch schicken.

Viel Erfolg von Jürgen....
Gast #155128
Lesenswert?

Ich habe jetzt rausbekommen an was es lag...

Ich musste nach dem Debuggen mit einer Schleife noch warten bis ich auf
Transmit gehen konnte, da sonst ein Übertragungsfehler auftaucht.
Anscheinend schmiert der µC sonst ab (in den Debug-Mode komme ich, aber
Transmit geht nicht) - also bei RS232 Kommunikation immer ne Schleife
rein falls es Probleme gibt ;P



Bis zum nächsten Problem dann...
Gast #155132
Lesenswert?

Hi

Ich hab sowas ähnliches mit einem MSP430 von Texas Instruments gemacht.
Die serielle Datenübertragung war dabei das kleinste Problem - gute
Beispiele findet man im Internet, beispeilsweise unter www.mathar.com.

Der MSP430 hat ein Sende- und ein Empfangsregister. Will ich Daten vo
uC zum PC senden, so schreibe ich diese ins Senderegister. Kommen Daten
vom PC ins Empfangsregister, so wird eine Interrupt Service Routine
aufgerufen und ich kann mit den Daten machen was ich will. Steht alles
im Handbuch/Datenblatt des uCs. Codebeispiele für den MSP findest du
auf der TI-Seite.

Versuch als erstes ein Echo-Programm zu schreiben, dass dir den vom PC
gesendeten Buchstaben wieder zurück sendet. Sebastian von
www.mathar.com macht das in einem Tutorial und ich finde das ein sehr
gutes Beispiel für den Anfang. In Sachen RS-232 musst du dich natürlich
erst selbst ein wenig schlau machen, aber auch das sollte mit einer
halben Stunde recherche kein Problem sein.

Gruss Tom
Gast #155135
Lesenswert?

So...

ich binn jetzt soweit - ich hab ein COM+ Programm geschrieben.
Allerdings hängt es sobalt ich was in das Memo Feld eingebe sich auf.
Meine Vermutung ist das es an der Sperrung der RS232 Schnittstelle
unter WinXP liegt. Es währe toll wenn einer von euch den Code mal
anschaut und mir vllt. noch den einen oder anderen Tip geben kann.

Habe WinXP / Win2k

Habe den Borland C++ Builder 5 benützt...


Danke!
Angehängte Dateien:
Gast #155136
Lesenswert?

Ich habe noch ein Problem und zwar betrifft das die Paritätsprüfung,
ich habe einen Modus ausgewählt, bei dem ich ein Paritätsbit übertragen
kann. Die Frage ist nur wie kann ich dann auf dem Rechner
die Parität überprüfen?

Kann mir da jdn. helfen?
Angehängte Dateien:
Gast #155137
Lesenswert?

Was hat das mit COM+ (dem Nachfolger von DCOM) zu tun?
Was magst Du mit "der Sperrung der RS232 Schnittstelle unter WinXP"
meinen?

Wenn die übertragene Parität nicht mit der erwarteten übereinstimmt,
dann gibt es einen "parity error", den man unter anderem mit der
etwas widersprüchlich benannten Win32-API-Funktion ClearCommError
abfragen kann.

  "If a communications port has been set up with a TRUE
  value for the fAbortOnError member of the setup DCB
  structure, the communications software will terminate
  all read and write operations on the communications
  port when a communications error occurs.
  No new read or write operations will be accepted
  until the application acknowledges the communications
  error by calling the ClearCommError function.

  The ClearCommError function fills the status buffer
  pointed to by the lpStat parameter with the current
  status of the communications device specified by the
  hFile parameter."

(aus der Dokumentation von ClearCommError)
Gast #155138
Lesenswert?

Hallo,

ich vermute mal, dass es hieran liegt:
ctmoNew.ReadTotalTimeoutMultiplier = 0;

Damit lässt Du Windows unendlich lange warten ohne Timeout.
Ich setze den Wert immer auf 1.

Um die Paritätsprüfung brauchst du dich nicht zu kümmern.
Das macht der Portbaustein selber. Du stellst nur ein, dass die Parität
Even oder Odd ist
BuildCommDCB("9600,N,8,1", &dcbCommPort);
Kenne BuildCommDCB jetzt nicht auswendig. Wahrscheinlich muss es bei
Even dann so aussehen:
BuildCommDCB("9600,E,8,1", &dcbCommPort);

Grüße
Andreas
Gast #155139
Lesenswert?

Ist das Normal, dass nach dem 3. oder 4. Übertragenen Signal sich das
Programm aufhängt? Das ist voll komisch es funktioniert am Anfang und
ich bekomm auch ein sinnvolles richtiges Ergebnis, aber dann hängt sich
das Projekt.
An was könnte das liegen?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren