www.mikrocontroller.net

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


Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian Wille (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: niglo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Andy,

Zeig uns doch mal dein Programm auf dem MC.

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

MfG, Niglo.

Autor: Andy (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uwe (Gast)
Datum:

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

MFG Uwe

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: niglo (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: jobuma (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: jobuma (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.