Hallo Zusammen Ich möchte Euch um Rat fragen betreffend der Programmierung des UART0 auf meinem Glyn Board EVBM16C/62P Zum schreiben des Codes verwende ich den Tasking Compiler. Ich habe an UART0 einen Transponderleser "CONRAD" angeschlossen Die Daten welche ich empfangen möchte mit 9600 baud sind: <STX> [Byte1] [Byte2] [Byte3] [Byte4] <EOT> [Byte1]... usw. sind ASCII codes STX ist 002 EOT ist 004 ******************************************************************* Nun der Buffer wird gefüllt mit Zeichen, das ist OK. Das Startbit und das Stoppbit schlagen aber nicht an. weiss jemand wieso? ist meine initialisierungsroutine nicht korekt? Was müsste geändert werden? um obengenannte Daten zu empfangen Ist U0BRG = 0x67 in der initialisierungsroutine richtig für 9600 baud? - ich schnalle es noch nicht ganz. wie man das berechnet. vielleicht kann mir das jemand mal erklären? Ist die Auswertroutine für die seriellen Daten so in Ordnung? Das müsste man doch so machen können? Vielen Dank Gruss Oliver Hat jemand ein Lösungsvorschlag für dieses Problem? wie ich auch die anderen Bytes auswerten kann. Stimmt die Initialisierung? Evt. mache ich einen Grundsätzlichen Fehler, welchen ich mir gerne erklären lasse. oder Hat jemand eine lauffähige Routine um diese eingehenden Daten aus 4 Bytes abfragen zu können? Besten Dank jetzt schon Oli Antworten
Hi Oli. @"Ist U0BRG = 0x67 in der initialisierungsroutine richtig für 9600 baud?" Ja, wenn Deine System Clock auf 16 MHz steht(clock division factor = 1, kann man bei mir im Compiler(Tasking EDE) einstellen). Berechnung: System Clock durch 16 teilen, dann durch die gewünschte Baudrate und dann minus 1. Das Ergebnis ist der Wert des BRG. z.B: ( (16000000 / 16) / 9600 ) - 1 = 103. (== 0x67) Mit "Startbit" und "Stopbit" meinst Du sicher "Startbyte" und "Stopbyte"!?! Kann nicht sagen, warum's nicht tut, weil man die Initialisierung im Quelltext nicht sehen kann. Grundsätzlich (nach kurzem überfliegen) würd ich sagen, dass man das so machen kann. Gruß, uli P.S: Anbei meine "se_initialize_port()" - Routine.
Danke Uli für Deine Info bezüglich der Programmierung des UART0 Deine Erklärungen sind gut und auch für mich als "Anfänger" gut verständlich. Nun sind mir schon wieder einige Dinge klarer geworden Ich werde mal wieder weiterprobieren, werde mich dan wieder melden Nochmals besten Dank Gruss Oliver
Hallo Ich weis, das ist bereits ein ziemlich alter Thread, jedoch habe auch gerade ein vergleichbares Problem und bin per Zufall hier gelandet. Im Sourcecode von Uli ist mir dabei ein kleiner Fehler aufgefallen: Er setzt das UiBRG-Register praktisch als erstes bei seiner Initialisierung. Laut Datenblatt (für meinen M30626FHPFP) sollte man jedoch zuerst das UiC0 Register setzen, bevor man ins UiBRG-Register schreibt. (Jedenfalls wenn man an den CLK0 und CLK1 Bits des UiC0-Registers etwas ändert) Damit ist zwar mein Problem noch nicht gelöst, aber ich wollte das nur ergänzen, damit möglichst keine Fehler durch solche Vorgaben entstehen. Gruss, Andreas
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.