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
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
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
Hi Andy, Zeig uns doch mal dein Programm auf dem MC. Aber bitte mit Erklärung wo es zum Problem kommt. MfG, Niglo.
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
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
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
Hi! Nimm doch mal ein anderes Terminalprogr, das mit der 0 ist nicht erklärlich. MFG Uwe
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.