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.