Forum: Mikrocontroller und Digitale Elektronik Datenübertragung Serielle Schnittstelle


von Benjamin Frankenreiter (Gast)


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!

von AndreasH (Gast)


Lesenswert?

Vom PC oder Mikrocontroller? Wenn PC, welches Betriebssystem?
Wenn Controller, welcher?

Ansonsten benutz mal die Suchfunktion im Code-Forum.
Da gibt es reichlich Beispiele

Grüße
Andreas

von Benjamin Frankenreiter (Gast)


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!

von peter dannegger (Gast)


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

von Heiko Maier (Gast)


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!!!

von thkais (Gast)


Lesenswert?

Mal ne ganz dumme Frage: Im Unterricht wurde die Funktionsweise der
seriellen Schnittstelle überhaupt nicht besprochen???

von Benjamin Frankenreiter (Gast)


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!

von Rufus T. Firefly (Gast)


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.

von Jürgen Schuhmacher (Gast)


Lesenswert?

Sieh mal hier: www.iftools.com ... -> CTB-Library. Das ist auch hier im
Forum schon mehrfach angesprochen worden. Da gibt es ein Beispiel.
Ansonsten benutzt du DEV CPP und eines meiner Beispiele:
http://home.arcor.de/juergen.schuhmacher/programming%20with%20wxwidgets.html

von Maximilian L (Gast)


Lesenswert?

was mich mal interessieren würde: auf was für einer schule bist du?
 so was 'tolles' machen wir nie :(

von Benjamin Frankenreiter (Gast)


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!

von Mike (Gast)


Lesenswert?

Jedes Terminalprog hat auch ein Eingabefenster, um Zeichen zu senden.
Wie du sie vom MC bekommst steht in dessen Datenblatt. Gleich neben der
Stelle, wo man findet, wofür UART steht.

von Heiko Maier (Gast)


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?

von Rufus T. Firefly (Gast)


Lesenswert?

@Heiko:
Was exakt für ein Terminalprogramm verwendest Du?
Ist sichergestellt, daß die Baudrate des µC korrekt ist?

von Stulle (Gast)


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.

von Heiko (Gast)


Angehängte Dateien:

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?!?

von Jürgen (Gast)


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....

von Heiko (Gast)


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...

von Heiko (Gast)


Angehängte Dateien:

Lesenswert?

Hier ist die Aufgabenstellung die wir bekommen haben. Wir müssen nun
noch die Baudrate einstellen und was zum µC senden...



Wenn jm. was ähnliches schonmal hatte - posten - Danke!

von Heiko (Gast)


Lesenswert?

Wie sende ich was vom PC aus an den Controller (Tastendruck soll ein
Ereignis am Controller auslösen)


danke!

von heiko (Gast)


Lesenswert?

weiß wirklich niemand wie ich vom pc aus was zum µC schicken kann?!?


Danke!

von Tom (Gast)


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

von Benjamin Frankenreiter (Gast)


Lesenswert?

Wo kann ich denn eigentlich den Wert, den mir der µC an den PC sendet
"abholen" um in dann in einem C-Programm zu visualisieren?
Kann mir da jemand weiterhelfen?

von Tobi (Gast)


Lesenswert?

schau dir mal createfile, readfile, und setcommstate an

von Benjamin Frankenreiter (Gast)


Angehängte Dateien:

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!

von Benjamin Frankenreiter (Gast)


Angehängte Dateien:

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?

von Rufus T. Firefly (Gast)


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)

von AndreasH (Gast)


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

von Benjamin Frankenreiter (Gast)


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?

von Benjamin (Gast)


Angehängte Dateien:

Lesenswert?

habe es nun hinbekommen.


für alle die auch solch ein problem haben -> der sourcecode

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
Noch kein Account? Hier anmelden.