RS232 und MIDI mit dem selben Controller

Gast #3882997
Lesenswert?

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!
Persönliche Seite #3883002
Lesenswert?

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.
Gast #3883040
Lesenswert?

> 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).
Gast #3883091
Lesenswert?

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
Gast #3883098
Lesenswert?

> 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
Gast #3883222
Lesenswert?

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.
Gast #3883263
Lesenswert?

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!
Gast #3883275
Lesenswert?

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
Gast #3883296
Lesenswert?

> 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 %.
Persönliche Seite #3883345
Lesenswert?

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.
Gast #3883414
Lesenswert?

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.
#3883546
Lesenswert?

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.
Gast #3883565
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren