Forum: Mikrocontroller und Digitale Elektronik UART-Übertragung von "0"


von Andy (Gast)


Lesenswert?

Hallo zusammen,

ich übertrage 10 Byte an den MC über das UART und dieser sendet dann 
wieder 10 Byte als Bestätigung an den PC zurück.
Das funktioniert einwandfrei, aber sobald bei den zum MC gesendeten 
Bytes eine Null vorkommt (eine "echte" Null, keine ASCII-Null), 
funktioniert das nicht mehr.

Ist das normal, bzw. weiß jemand was die Ursache ist?

Danke im Voraus
Andy

von Oliver (Gast)


Lesenswert?

Hallo Andy,

ist nicht normal. UART funktioniert via fester Abtastung, unabhängig vom 
Übertragenem Datum.

Was funktioniert denn da nicht? Geht es etwas genauer.
Hilfsfunktion schreiben, die die empfangen Bytes 1 zu 1 zurücksendet. 
Mögliche Ursache liegt in der Auswertung Deiner 10 Byte im MC.

Grüße
Oliver

von Sebastian Wille (Gast)


Lesenswert?

Hi Andy,

ich hatte schon ähnliche Probleme: Da wurde die "echte" 0 oder auch gar 
1-6 nicht dargestellt. Mit einer niedrigeren Baudrate hat alles 
geklappt. Beim USART klappt's sogar mit höheren Baudrates noch super.

Sebastian

von niglo (Gast)


Lesenswert?

Hi Andy,

Zeig uns doch mal dein Programm auf dem MC.

Aber bitte mit Erklärung wo es zum Problem kommt.

MfG, Niglo.

von Andy (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Oliver und Sebastian,

das MC-Programm ist eine 0815-Anwendung, um das PC-Programm (von mir
geschrieben, momentan noch in der Entwicklungsphase) zu testen.
10 Bytes werden zum MC gesendet und zur Kontrolle nach ca. einer
Sekunde wieder zum PC geschickt. Auf dem PC wird Sende- und
Empfangsstring angezeigt. D.h. 123456789a zum MC gesendet und dann
23456789ab empfangen. Das Ganze läuft mit 4800Bd.
Sende ich z.B. 123406789a, kommt oft nichts zurück, manchmal erst nach
paar Sendeversuchen und dann stehen ab der Stelle, wo die "0" war,
falsche Werte. Wahrscheinlich liegt's an der PC-Anwendung.
Wenn es jemanden interessiert - ich hab das Assembler-Programm mal
angehängt.

MFG
Andy

von Uwe (Gast)


Lesenswert?

Hi!
So bescheuert wie das Progr.auch aussehen mag, aber funktionieren
müsste es. Allerdigs "123456789a zum MC gesendet und dann
23456789ab empfangen" macht das Progr. wohl eher nicht.


MFG Uwe

von Andy (Gast)


Lesenswert?

Hallo Uwe,

uups, habe hier schon die Schritte zum Inkrementieren von jedem Byte
rausgenommen und Byte 3/4 sind getauscht.
so dass dann 124356789a empfangen wird.
Dem Leser sei versichert, das immer korrekt übertragen wird, solange
keine Null mit drunter ist... :) Die Baudrate runtersetzen auf 1200 hat
leider auch nichts gebracht.

MFG
Andy

von Uwe (Gast)


Lesenswert?

Hi!
Nimm doch mal ein anderes Terminalprogr, das mit der 0 ist nicht
erklärlich.

MFG Uwe

von Andy (Gast)


Lesenswert?

Hallo,

habe es mit Hyper Terminal probiert.
Wenn ich eine Datei mit 10 Nullen als Textdatei sende, funktioniert es
(wie erwartet), da ja die ASCII-Null (30) gesendet wird.
Sende ich nicht als Textdatei, kommt es zu einem TimeOut bei Hyper
Terminal. Es funktioniert also auch hier nicht.
By the way, mit welcher Taste(nkombination) kann ich von einem
Terminalprogramm eine "echte" Null senden, geht das überhaupt?
Oder basiert die ganze Übertragung nur auf ASCII-Zeichen, so das z.B.
eine 200 mit drei Bytes übertragen werden muß?
Ich komme hier echt nicht weiter.

MFG
Andy

von niglo (Gast)


Angehängte Dateien:

Lesenswert?

Hi.

Sorry, ichhab geglaubt, dass dein Programm nicht geht.

Probier mal dieses Terminalprogramm (im Anhang).
Im Terminalmodus kann man zwischen ASCII-Code und einfach nur der
Hexzahl umschalten. Leider weis ich aber nicht mehr wie. Ich glaub
irgend was mitUmschalt oder STRG. Na ja vielleicht findest du es raus.

MfG, Niglo

von jobuma (Gast)


Angehängte Dateien:

Lesenswert?

Hi Andy,
habe Dein Prog getestet und es läuft bei mir ohne Probleme.

Kleiner Schönheitsfehler:
Beim Rücksenden ist das Zeichen 3 und 4 vertauscht.
Ist aber ein Prog-Fehler. Du schickst erst Byte 4 und dann Byte 3
zurück. (Siehe Code)

Ansonsten funktioniert's einwandfrei. Habe es bei mir mit 8Mhz und
Baud 9600 getestet. Kommt nach dem 10. Zeichen alles so zurück wie
gesendet (ausser eben Byte 3 und 4 vetauscht).

Hab hier ein Terminal Programm mit welchem du Zeichen aber auch Bytes
senden kannst, bzw. die empfangenen Daten als Zeichen und als Byte
siehst.

Wenn Du mir Deine eMail zukommen lässt schick ich's Dir. Sind nämlich
2 Dateien. 1. eine .exe und 2. eine .dll
Bzw. ich häng hier gleich die exe dran und im nächsten Beitrag die dll.
ok. Beide Datien ins gleiche Verzeichnis.

Gruß
jobuma

von jobuma (Gast)


Angehängte Dateien:

Lesenswert?

So, hier die dll.

Noch zur Info:

links deine einstellungen für die Com-Schnittstelle machen, bzw die
Com-Schnittstelle auswählen. Wichtig: Unten bei Buffer am besten 1000
einstellen. Weiss nich genau was das ist, hatte da aber mal 1
eingestellt und das TerminalProgramm hat mir sämtliche Daten einfach
geschluckt.

Dann mit 'Open Com' den Com-Port öffnen.

Im Feld SendText kannst Du ein Zeichen senden. Wird auch sofort nach
der eingabe gesendet. Also bei 'A' wir der der Wert 65 verschickt
(eben Ascii-Code von A).

Im Feld Send Byte kannst Du den entsprechenden Ascii-Code eingeben.
Also für ein großes A musst Du dann hier 65 eingeben und mit 'Return'
bestätigen. Damit wird der Wert 65 über die Schnittstelle verschickt.

Hoffe ich konnte Dir weiterhelfen und viel Glück.

Gruß
jobuma

von Andy (Gast)


Lesenswert?

Hallo jobuma,

das funktioniert ja einwandfrei mit dem Dual-Terminal!!!
Da liegt es doch an meiner PC-Anwendung.
Aber jetzt weiß ich wenigstens, wo ich zu suchen habe.

Vielen Dank nochmal für Deine Hilfe und auch an die anderen, die sich
mit meinem Problem beschäftigt haben.

MFG
Andy

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
Noch kein Account? Hier anmelden.