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!
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
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!
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
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!!!
Mal ne ganz dumme Frage: Im Unterricht wurde die Funktionsweise der seriellen Schnittstelle überhaupt nicht besprochen???
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!
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.
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
was mich mal interessieren würde: auf was für einer schule bist du? so was 'tolles' machen wir nie :(
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!
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.
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?
@Heiko: Was exakt für ein Terminalprogramm verwendest Du? Ist sichergestellt, daß die Baudrate des µC korrekt ist?
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.
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?!?
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....
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...
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!
Wie sende ich was vom PC aus an den Controller (Tastendruck soll ein Ereignis am Controller auslösen) danke!
weiß wirklich niemand wie ich vom pc aus was zum µC schicken kann?!? Danke!
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
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?
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!
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?
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)
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
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.