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
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.
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
> 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.