....Wenn ich das Terminal innerhalb des PCs mit 2 Commports verbinde, dann klappt das prima. ...
wofür soll das denn gut sein he...lol...damit findest du nicht den fehler innerhalb des pc.
Hallo Zusammen,
wir haben das rn-Board mit dem 2560 Controller.
Wir haben die RN-Control per USB (UART) mit dem PC verbunden und auf dem PC ein Terminal gestartet.
Zu Tests habe ich ein Bascom Programm geschrieben, welches alle ankommenden Zeichen an der UART-Schnittstelle sofort wieder rauschickt.
Sendet man mit dem Terminal zum Beispiel "Test" an den Controler, so erwiedert dieser auch sämtliche Zeichen und sendet "Test" zurück.
Bei einem Wort mit 5 Buchstaben z.B. "Start" wird das 4. Zeichen verschluckt und nur "Stat" zurück an das Terminal gesendet.
Wenn ich das Terminal innerhalb des PCs mit 2 Commports verbinde, dann klappt das prima.
Vielleicht hat jemand einen Tip woran das liegen könnte ?
Vielen Dank im vorraus
Folgender Programm Code befindet sich auf dem Atmel:
Code:$regfile = "m2560def.dat" $hwstack = 82 '80 $framesize = 68 ' 64 $swstack = 68 '44 $crystal = 16000000 'Quarzfrequenz $baud = 9600 'Config Scl = Portd.0 'Ports fuer IIC-Bus 'Config Sda = Portd.1 Sound Portg.5 , 400 , 450 'BEEP Sound Portg.5 , 400 , 250 'BEEP Sound Portg.5 , 400 , 450 'BEEP Config Pind.5 = Output Led Alias Portd.5 Config Pine.5 = Input USB Alias Pine.5 'Ist 1 wenn USB angeschlossen 'Usb Schnittstelle UART initialisierung Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Open "com4:" For Binary As #4 'USB Buchse 'Initialisierung LCD Config Pinf.6 = Output Lcd_rw Alias Portf.6 Lcd_rw = 0 Config Lcd = 20 * 4a , Chipset = Ks077 Config Lcdpin = Pin , Db4 = Portf.3 , Db5 = Portf.2 , Db6 = Portf.1 , Db7 = Portf.0 , E = Portf.5 , Rs = Portf.7 Config Lcdbus = 4 Initlcd 'Ansteuerung LCD Cls Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte Lcd "Test-Platine" Print #4 ,"Test-Platine" Locate 2 , 1 Lcd "Initialisierung" Print #4 ,"Initialisierung" Locate 3 , 1 Lcd "Ausgabe" Print #4 ,"Initialisierung" Locate 4 , 1 Lcd "" Dim B As Byte Dim L As Integer L = 1 'Schleife Tastatureingabe replay Do B = Inkey(#4) 'Waitms 500 If B <> 0 Then Print #4 , Chr(b) Locate 4 , L Lcd Chr(b) L = L + 1 End If Loop End
....Wenn ich das Terminal innerhalb des PCs mit 2 Commports verbinde, dann klappt das prima. ...
wofür soll das denn gut sein he...lol...damit findest du nicht den fehler innerhalb des pc.
Die Verbindung der 2 Commports war nur zum Testen.Ob das Terminal die Daten korrekt sendet und empfängt oder der Fehler schon im Terminal liegt... ALso virtuelle Verbindung im Terminal und beide Comports des PCs mit einem COM-Kabel verbunden...
Dazu habe ich das Terminal dann 2x gestartet und jeweils mit einem Comport vorbunden, sozusagen als Chat
Das Problem ist aber beim Microcontroller.
Ich sende mit dem Terminal ein Wort zum COntroler.
Dieser empfängt das und soll es 1zu1 wieder zurück schicken.
Leider kommt dann der 4. Buchstabe des Wortes nicht an, also:
Start -> Stat
Komischerweise funktioniert ein 4 zeichen Wort Problemlos
Test -> Test
Habe ich einen Fehler im Bascom oder wo liegt denn mein Fehler ?
Ich verstehe das nicht
Hm, also 16MHz und 9600 Baud...
klingt eigentlich gut: 0,8% fehler sollte eigentlich noch gehen. (Man sagt maximal 1%)
siehe hier: http://www.mikrocontroller.net/artic...Tutorial:_UART
Ansonsten kannst du es nur mit nem krummen Quarz probieren. Dadurch geht die Fehlerrate runter (nicht immer aber öffters)
Ansonsten: Was zeitg er denn auf dem LCD an? Start oder auch nur Stat?
Ach ja: und was passiert denn wenn du ein längeres Wort mit z.B. 12 Zeiche oder so sendest? fehlt dann immer jeder 4. Buchstabe oder wie schauts dann so aus?
Wer aufhört besser zu werden, hat aufgehört gut zu sein
Jeder I/O Port kennt drei Zustände: Input, Output, Kaputt
Auf dem LCD wird auch nur Stat angezeigt.
Irgendwo wird also mein 4. Zeichen verschluckt.
Der Text, welcher beim Starten des Programms gesendet wird:
Test-Platine
Initialisierung
Initialisierung
Kommt auch ohne Fehler im Terminal und auf dem LCD-Display an. Es liegt also wohl Tatsächlich am Empfangen und Weiterverarbeiten...
Kann eine Änderung des Quarzes den gewünschten Erflog bringen ?
Okay, also ich sehe grad das ich mich verrechnet hatte:
9600 Baud und 16MHz ergeben laud Bascom berechnung 0,16% Fehler. Also absolut top.
Also ich vermute das sich dein Controller dabei etwas "verschluckt" durch das senden und wieder empfangen.
Schreib deine Schleife mal (nur zum testen) folgender maßen (der rest gleich wie oben):
PS: Die Variable L kannst du dir auch sparen
So und dann sag mal was dein LCD so ausspucktCode:Do B = Inkey(#4) 'Waitms 500 If B <> 0 Then Locate 4 , L Lcd Chr(b) L = L + 1 End If Loop
Wer aufhört besser zu werden, hat aufgehört gut zu sein
Jeder I/O Port kennt drei Zustände: Input, Output, Kaputt
wie sieht es eigentlich mit 6-stelligen Texten aus? kommt dann statt "Start2" "Sta2"???
Gruß, AlKi
Jeder Mensch lebt wie ein Uhrwerk, wie ein Computer programmiert...
==> UMPROGRAMMIEREN!
Kubuntu
Hallo, leider konnte ich das erst jetzt testen...
Mit dem Code von robodriver wird das Wort "Start" nun korrekt auf dem Display angezeigt.
Wenn ich aber das Wort "Starte" eingeben dann wird auch hier nur "stare" angezeigt.
Das Problem hat sich jetzt also um ein Zeichen verschoben...
Vielen Dank
wie sieht es bei deinem alten code aus?
ich hätte nämlich gerade auf eine zu klein deklarierte Variable getippt, kenn mich aber in dem bereich senden/empfangen noch nicht so gut aus....
Gruß, AlKi
Jeder Mensch lebt wie ein Uhrwerk, wie ein Computer programmiert...
==> UMPROGRAMMIEREN!
Kubuntu
Wenn man bei der alten Version ein Wort mit 5 Buchstaben sendet "Start2", dann erhält man als Ausgabe auf dem Display und dem Terminal "Stat2"
Er verschluckt also immer das 4. Zeichen
Lesezeichen