Hi Leute, ich versuche schon seit Tagen zwischen uC und Pc eine verbindung via UART und RS323 Schnittstelle herzustellen Dabei soll der uC etwa 400 Hex Zahlen an den PC senden das gelingt aber erst immer nach einer gewissen Zeit, das heißt der uC beginnt mit den senden und nachdem schon etwa 40 bis 60 Byte's auf der Datenautobahn abgerauscht sind empfängt der PC auch mal was, den Rest bekommt er einwandfrei mit nur eben der Anfang bringt Schwierigkeiten Alle Einstellungen über Baut Stopbit sind korrekt Hatte jemand schon mal etwes ähnliches?
Welche Software benutzt du auf PC-Seite? Vielleicht verschluck die die Zeichen.
Hi, du nennst die RS232 "Datenautobahn"? Das ist doch eher eine Datenlandstrasse :) Mhh. Poste doch mal deinen Code. Ansonsten wirklich mal ein anderes Terminal benutzen, auch wenn der Fehler ziemlich eigentümlich erscheint.
Hi Zu Thorsten. So kommt es mir auch vor. Ich denke der PC benötigt eine kleine Zeit um "Aufzuwachen" (synchronisieren oder so etwas ähnliches) und da huschen ihm immer ein paar Byte's durch die Lappen Ich benutze auf PC-Seite ein selbstgeschriebenes Programm in Borland C++ das unter DOS läuft(Eingabeaufforderung). Die Routienen zum einlesen der Daten müßten aber funsen da es immer die selben sind und nach einer gewissen Zeit das ganze auch tadellos funktioniert. Zu Thomas: OK ich nehme die Autobahn zurück, Landstraße ist, glaub ich auch, doch richtiger:) Hier ist der Code(chen) des uC .nolist .include"8515def.inc" .list .def cnt = r18 .def prm1 = r17 .def temp = r16 .equ CLOCK = 4000000 .equ BAUD = 9600 .equ UBRRVAL = CLOCK/(BAUD*16)-1 .equ Ram =$060 .cseg rjmp Initial ; Einsprung nach Reset ZRegNull: ; Anfangsadresse des Ramspeicher ; in den Z-Pointer laden ldi ZH,high(Ram) ldi ZL,low(Ram) ret ;------------------------------------------- LoescheSpeicher: ; Ramspeicher von $060 bis ; $0FA0 auffüllen rcall ZRegNull ldi temp,$00 LS01: st z+,temp inc temp cpi ZL,$50 brne LS01 cpi ZH,$02 brne LS01 ret ;------------------------------------------- SendeSpeicher: ; Den Inhalt des Speichers an der ; UART Schnittstelle aussenden rcall ZRegNull sbi UCR,TXEN OT1: ld prm1,Z+ rcall SendDat cpi ZL,$50 brne OT1 cpi ZH,$02 brne OT1 ret ;---------------------------------------------- SendDat: serout: sbis USR,UDRE ; Warten bis UDR für das nächste ; Byte bereit ist rjmp serout nop nop nop nop out UDR, prm1 nop nop nop ret ; zurück zum Hauptprogramm ;----------------------------------------------- Main: ; Hauptprogramm rcall LoescheSpeicher rcall SendeSpeicher Ma1: rjmp Ma1 ;-------------------------------------------- Initial: ; Stackpointer initialisieren ldi temp, LOW(RAMEND) out SPL, temp ldi temp, 2 out SPH, temp ; Baudrate einstellen ldi temp, 77 out UBRR, temp rjmp Main
Ich hatte mal ähnliche Probleme. Bei mir lag es daran, daß beim Reset des Controllers ein kurzer Impuls auf der TX-Leitung durchrutschte und so dem PC ein Start-Bit suggerierte. Die Anschließend gesendeten Daten paßten dann nicht mehr ins Timing (z.B. falsches Stop-Bit). Nachdem ich nach der Initialisierung des UART eine Warteschleife von der Dauer von 2 Bytes eingebaut hatte, war das Problem erledigt. Allerdings sind mir bestenfalls 3-4 Bytes durch die Lappen gegangen.
Hallo, glaube ich hab den Fehlerteufel entdeckt. Hab mein Programm auf PC-Seite auf ein Minimum abgespeckt(nur noch Port überwachen + empfangene Daten anzeigen) und siehe da, es funst. Also Schande über mein Haupt:(( Hab da wahrscheinlich 'ne C-Funktion erwischt die den Rechner leicht aus der Bahn wirft(kommt davon wenn man vorgekauten Müll benutzt und sich nicht die Mühe macht alles selber zu schreiben) Möchte mich noch bei allen bedanken die ihre grauen Zellen in Wallung brachten und sich den Kopf über meine Problemchen zerbrachen. Gentleman's es war mir'ne Ehre mit Euch zusammen arbeiten zu dürfen Also dann vielen Dank und ab zum nächsten Bug
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.