Forum: Mikrocontroller und Digitale Elektronik RS232 und MIDI mit dem selben Controller


von Blablubb (Gast)


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!

von Rufus Τ. F. (rufus) Benutzerseite


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.

von der alte Hanns (Gast)


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

von spess53 (Gast)


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

von Olaf (Gast)


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

von Seppi (Gast)


Lesenswert?

Oder Software UART. Da kannst du mit delays sehr gut auf die benötigte 
Baudrate kommen.

von Thomas E. (thomase)


Lesenswert?

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.

von der alte Hanns (Gast)


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.

von Blablubb (Gast)


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!

von spess53 (Gast)


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

von der alte Hanns (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von der alte Hanns (Gast)


Lesenswert?

Danke für die Information, hatte ich mir nicht klargemacht.
Andererseits: bislang wurde ein PC nirgendwo erwähnt.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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.

von der alte Hanns (Gast)


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.

von Karl H. (kbuchegg)


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.

von Gerhard (Gast)


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

von spess53 (Gast)


Lesenswert?

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

von der alte Hanns (Gast)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

Hi

>Macht alleine weiter.

Wenn ich deine Rechnerei sehe ist es auch besser so. Schon mal ins 
Datenblatt gesehen?

MfG Spess

von drummer (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.