Hallo Leute, ich habe folgendes Problem: In meinem Projekt verwende ich einen ATMEGA mit externem 16MHz Quarz. Das Gerät soll sowohl eine MIDI- als auch eine RS232-Schnittstelle unterstützen. Im gegenwärtigen Zustand läuft die MIDI-Kommunikation super stabil, die RS232-Geschichte aufgrund des Baudratenfehlers jedoch nicht. Hat jemand eine Idee, wie ich das lösen kann, ohne eine dezidierte CPU mit entsprechendem Takt für entweder MIDI oder RS232 zu benötigen? Für Hinweise aller Art im Voraus vielen Dank!
Externe UART verwenden (es gibt von NXP beispielsweise Varianten, die per SPI oder sogar I2C angesteuert werden können). Die braucht dann allerdings zumindest ihren Baudratenquarz. Oder: µC mit nicht ganz so primitiver UART-Hardware verwenden. Es gibt µCs mit UARTs, deren Baudratengeneratoren auch aus "glatten" Quarzfrequenzen genaue Standardbaudraten erzeugen können.
> Für Hinweise aller Art im Voraus vielen Dank!
Ebenfalls!
Um welche UART-Geschwindigkeit geht es denn? Bei einem oberflächlichen
Blick in die Tabelle des Datenblatts sehe ich nur eventuelle Probleme
bei 115200 Bd (sowie 230400).
Hi >Hat jemand eine Idee, wie ich das lösen kann, ohne eine dezidierte CPU >mit entsprechendem Takt für entweder MIDI oder RS232 zu benötigen? Wie tolerant ist MIDI? Mit einem Baudratenquarz von 14,7456MHz kommst du mit Double Speed auf 31240Bd. MfG Spess
> Hat jemand eine Idee, wie ich das lösen kann, ohne eine dezidierte CPU > mit entsprechendem Takt für entweder MIDI oder RS232 zu benötigen? Beerdige die AVRs und verwende Controller mit fraktionalem Vorteiler. Olaf
Oder Software UART. Da kannst du mit delays sehr gut auf die benötigte Baudrate kommen.
Blablubb schrieb: > Im gegenwärtigen Zustand läuft die > MIDI-Kommunikation super stabil, die RS232-Geschichte aufgrund des > Baudratenfehlers jedoch nicht. Die RS232 läuft mit 38K4 bei 16 MHz mit 0,2% Fehler. Wo ist das Problem? mfg.
Selbst die 115200 Bd mit den 2.1 % sollten eigentlich laufen. Es ist zu vermuten, dass das Problem an ganz anderer Stelle liegt, aber nicht erkannt wird wegen einer geistigen Fixierung auf theoretische 0.0000 % Abweichung.
spess53 schrieb: > Wie tolerant ist MIDI? Mit einem Baudratenquarz von 14,7456MHz kommst du > mit Double Speed auf 31240Bd. Lt. http://www.gweep.net/~prefect/eng/reference/protocol/midispec.html sind +/- 1% erlaubt (die offizielle Spec von midi.org ist kostenpflichtig...). Ich werde es übers Wochenende mal ausprobieren, hoffentlich habe ich einen 14,7456Mhz Quarz da. Ansonsten sehen die NXP-UARTS nicht schlecht aus, es gibt auch welche von Microchip, das wäre aber aufgrund des zusätzlichen Aufwands nur 2. Wahl, wenn es mit dem anderen Quarz nicht geht. der alte Hanns schrieb: > Selbst die 115200 Bd mit den 2.1 % sollten eigentlich laufen "Eigentlich" geht es auch. Aber offensichtlich läuft die Schnittstelle nach einigen Sekunden, spätestens aber einer Minute kontinuierlicher Datenübertragung aus der Synchronisation und produziert Frameerrors, was mich zu der Annahme führt, dass es mit dem Baudratenfehler zu tun hat. Natürlich habe ich schon darüber nachgedacht, ob meine Software buggy ist, aber die selbe C++ Klasse bedient auch den MIDI-UART, mit dem es noch nie Probleme gab, auch bei Sysex-Dumps mit etlichen kiB oder einem hohen Aufkommen an Echtzeit-Nachrichten (CC, PC, Note On/Off). Die geistige Fixierung ist weniger das Problem, ich wäre unabhängig von der Fehlergröße einfach zufrieden, wenn ich meine Daten heile über den Draht brächte. @der alte Hanns: Welche anderen Probleme würden Dir denn einfallen? Vielen Dank und Grüße!
Hi >spätestens aber einer Minute kontinuierlicher >Datenübertragung aus der Synchronisation und produziert Frameerrors, was >mich zu der Annahme führt, dass es mit dem Baudratenfehler zu tun hat. Unwahrscheinlich. RS232 synchronisiert sich mit jedem Startbit. MfG Spess
> läuft die Schnittstelle ...
Dazu gehören zwei, und die Verdrahtung gibt es auch noch.
Im übrigen sind mir die Informationen zu dürftig, pardon, allein die
Zeitspanne bis wir erfuhren, dass es sich um 115200 Bd handelt.
Ansonsten: wie wär's mit 76800 Bd, die müssen laufen, bei 0.2 %.
der alte Hanns schrieb: > Ansonsten: wie wär's mit 76800 Bd, die müssen laufen, bei 0.2 %. Wenn die Gegenstelle ein PC mit seiner Onboard-Schnittstelle ist, hilft das nicht; diese Baudrate kann ein PC nicht verwenden. Dessen UART erzeugt die Baudraten aus einem 1.8432-MHz-Taktsignal; mit dem üblichen hardwarebedingten Vorteiler von 16 ist die höchste Baudrate 115200. Und da der Baudratenteiler diese Baudrate durch eine Ganzzahl teilt, ist die nächstniedrigere Baudrate 57600, und die darauffolgende nächstniedrigere 38400.
Danke für die Information, hatte ich mir nicht klargemacht. Andererseits: bislang wurde ein PC nirgendwo erwähnt.
Blablubb schrieb: > In meinem Projekt verwende ich einen ATMEGA > mit externem 16MHz Quarz. Blablubb schrieb: > Das Gerät soll sowohl eine MIDI- als auch eine > RS232-Schnittstelle unterstützen. Nimm einen XMEGA. Hat einen fraktionalen Baudratenteiler. Problem gelöst. Olaf schrieb: > Beerdige die AVRs Nicht nötig.
Also, vor die Wahl gestellt, würde ich, dem Vorschlag von spess folgend, beim bestehenden System bleiben und mir für 10 ct oder so einen Quarz mit 14.7456 MHz kaufen, oder auch 18.4320, falls das der unbekannte ATmega kann.
Das > "Eigentlich" geht es auch. Aber offensichtlich läuft die Schnittstelle > nach einigen Sekunden, spätestens aber einer Minute kontinuierlicher > Datenübertragung aus der Synchronisation und produziert Frameerrors, > was mich zu der Annahme führt, dass es mit dem Baudratenfehler zu tun hat. klingt allerdings, wie spess schon angemerkt hat, weniger nach einem Baudratenfehler als nach einem anderen Problem. Wenn eine RS232 erst mal synchronisiert hat, dann bleibt sie das auch. Eine RS232 hat keinen akkumulativen Fehler, der sich von einem übertragenen Byte auf das nächste auswirkt. Genau dazu gibt es Stop und Startbit, die das abfangen. Das Stopbit liefert einen kleinen zeitlichen Buffer und mit dem nächsten Startbit wird neu synchronisiert. Allenfalls könnte man mal probieren, ob eine Einstellung von 2 Stopbits beim Sender was verändert.
hallo, verwende die uart-schnitttstelle des atmega128 und atmega16 mit 16mhz quarz schon seit jahren. als gegenstelle sind div. geräte (u.a drucker, pc,..) im einsatz und es gibt keinerlei probleme. der minimale fehler durch den quarz liegt im tolerablen bereich 8wie auch schon erwähnt). frage: wie sieht die gegenseite aus? was verstehst du unter : >Aber offensichtlich läuft die Schnittstelle >nach einigen Sekunden, spätestens aber einer Minute kontinuierlicher >Datenübertragung aus der Synchronisation und produziert Frameerrors wo hast die die frameerrors festgestellt? hast du schon mal mit einem rs232-sniffer "mitgelauscht"? gruss gerhard
Hi
>... oder auch 18.4320, falls das der unbekannte ATmega kann.
Bei 18.432MHz ist der Fehler für die 31250Bd größer als bei 14,7456MHz.
MfG Spess
> Bei 18.432MHz ist der Fehler für die 31250Bd größer als bei 14,7456MHz.
14745600 / 472 = 31240.6779661
18432000 / 590 = 31240.6779661
Macht alleine weiter.
Hi
>Macht alleine weiter.
Wenn ich deine Rechnerei sehe ist es auch besser so. Schon mal ins
Datenblatt gesehen?
MfG Spess
Altersschwacher Rechenkünstler der andere auch nicht besser, reitet bei MIDI auf einem Fehler von 0,4% rum
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.