Niemand eine Idee? =(
Hallo,
mal wieder ein kleines RS232-Problem über das ich seit zwei Tagen brüte...
Über einer Konsolenanwendung in C (selbsterstelltes Programm in CodeBlocks) sende ich Zeichen, Bytes und Strings zu meinem Mikrocontroller.
Der Mikrocontroller ist in Bascom programmiert, tut aber eigentlich nichts weiter zur Sache.
In dem C Programm gebrauche ich die Header-Datei rs232.h.
Kleines Schema der Programms, das auf dem PC arbeitet:
So in etwa sieht das PC-Programm aus.Code:#include "rs232.h" int main(){ unsigned char zeichen; int COM=2; *\Entspricht COM3\* if(OpenComport(COM,19200)){ printf("COM3 nicht erreichbar!");} else{ printf("COM3 aktiv!");} printf("Bitte ein zu sendendes Zeichen eingeben: "); fflush(stdin); scanf("%c",&zeichen); SendByte(COM,zeichen); printf("\n"); }
Das µC-Programm (eigentlich mit LCD Display) in BASIC als Schema:
Folgendes Problem habe ich:Code:$baud=19200 Dim Empangen as Byte Cls Locate 1,1 Lcd "Empangen:" Do If Ischarwaiting() = 1 Then Empangen = Inkey() Locate 2,1 Lcd Empangen Loop End
Wenn ich den USB/RS232-Wandler in den USB-Port einstecke und dann ein Zeichen von meinem C-Programm in den µC schicken möchte erscheint auf meinem LCD-Display immer eine 0
nachdem ich das Zeichen gesendet habe. Das heißt ja eigentlich, dass mein µC etwas empfangen hat, das aber nur eine 0 ist, die aus dem Puffer geholt wurde.
Das Problem habe ich solange, bis ich ein Zeichen über das RS232-Terminal in Bascom sende. Egal ob ich eine 0,1,2,3.... sende, nachdem ich über das Terminal ein Zeichen versandt habe, kann ich auch über mein C-Programm ein Zeichen senden, welches dann korrekt auf dem LCD erscheint.
Nach einem Neustart des Controllers bleibt das immernoch so. Wenn ich allerdings den USB/RS232 Adapter entferne und neu einstecke, kommt das selbe Problem wieder bis ich ein Zeichen über das Terminal sende.
Ich hab so viel probiert...Hat jemand eine Idee was das ist???
Danke! =)
Niemand eine Idee? =(
Ganz schnell geschossen:
Code:$baud=19200 Dim Empangen as Byte Cls Locate 1,1 Lcd "Empangen:" Do If Ischarwaiting() = 1 Then Empangen = Inkey() Locate 2,1 Lcd Empangen End If Loop End
Grüße
Thomas
Danke =)
Aber abgesehen von den eingefügten Leerzeichen im If/Then Zweig ist das doch das gleiche Programm...Was meinst du damit?
Gruß,
Peter
Nein, nein.... =) Ich habe den Code in der Pause von der Firma aus aus dem Kopf abgetippt...Dumm, dass mir so ein Fehler unterlaufen ist..
Das End If ist natürlich mit im Code drin.. Wie gesagt, wenn ein Zeichen vom Terminal-Programm aus (also quasi per Hand) eingetippt wird, dann klappt es danach auch mit dem normalen von mir programmierten C-Programm auf dem Rechner...Bis man dann halt den USB/RS232-Adapter wieder vom Rechner trennt und neu aufsteckt...
Sendet denn ein Terminal-Programm beim ersten Mal eine besondere Zeichenfolge oder eine Art Konfiguration..Weil mein C-Programm sendet ja nur die nackten Bytes...
Morgen früh wollte ich mir mal einen zweiten USB/RS232-Adapter besorgen und dann einmal versuchen zwei virtuelle COM-Schnittstellen an meinem PC einzurichten.
Dann öffne ich zwei Terminal-Programme und sende Daten von dem Einen zum Anderen (COM3 zu COM4) und dann auch mal mit meinem Programm...
Vielleicht gibt mir das Aufklärung...wenn es denn funktioniert mit den USB-Adaptern wie ich das vorhabe...
Es sei denn jemand hat noch eine Idee. Das wäre echt toll...ist aber scheinbar ein Fehler, den scheinbar nur wieder ich habe =)
Oder es liegt an dem Header rs232.h . Aber dann hätten ja schon Andere so ein Problem gehabt...
Klingt als fehlt Deinem Csharp Sender ein EOL?! (0x0d)
Hey,
das EOL-Zeichen wird bei meinem C-Programm gar nicht verwandt, da es ja auch keinen Zeilenumbruch erzeugt.
Was du sagst ist schon richtig, denn wenn das EOL-Zeichen nicht gesendet wird, dann kann auch eine INPUT-Anweisung in Bascom nicht erfüllt werden,
da dieser Befehl auf EOL wartet bis das Programm im Controller weiterläuft. Mit EOL hatte ich also auch anfangs in einem anderen Programm Probleme.
Danke trotzdem für deine Anregung.
Ich habe mir einen zweiten USB/RS232-Adapter besorgt und einmal versucht eine Verbindung aufzubauen.
Vorgehensweise:
-Einstecken beider Adapter in die USB-Ports.
-Mein C-Programm sucht sich selbstständig nach dem Start den ersten freien COM-Port (COM3)
-Im üblichen Windows-Hyperterminal erstelle ich eine Kommunikation über COM4
-Über das C-Programm versende ich ein Zeichen (z.B. 1,2,5,g,d,h,i, usw.) und bestätige die Eingabe mit Enter um scanf zu befriedigen.
-Im Hyperterminal kommt nichts an.
-Ich schließe das C-Programm und öffne das Terminal in Bascom mit Kommunikation über COM3.
-Ich tippe auf der Tastatur auf eine Taste (z.B. 1,2,3, usw.). Bestätigung mit Enter ist hier nicht erforderlich.
-Das Zeichen wird anstandslos im Hyperterminal angezeigt.
-Ich öffne nun mein C-Programm und es wird wie zuvor COM3 erkannt.
-Ich tippe ein Zeichen ein und bestätige die Eingabe mit Enter.
-Das Zeichen erscheint wundervoll in Hyperterminal.
Von nun an funktioniert die Kommunikation wunderbar.
Bis ich dann den Konverter wieder vom USB-Port trenne und neu aufstecke...
Ich stehe immernoch vor einem Rätsel...
Kennt jemand vllt ein Terminal-Programmm, dass auch unsichtbare Zeichen wie z.B. das 0x0d nach dem Empfang anzeigt?
Ich bin mir fast sicher, dass so ein doofes Zeichen bei der ersten Übertragung gesendet wird, welches mein C-Programm nicht sendet.
Oder spricht das Terminal in Bascom die serielle Schnittstelle anders an????
Lesezeichen