Forum: Mikrocontroller und Digitale Elektronik SoftUART für MIDI - richtig so?


von Hugoderwolf (Gast)


Lesenswert?

Ich will einen MIDI-Input für meine Schaltung, die bisher nur aus 'nem
8515 und einem 16x4-LCD besteht, implementieren, aber das eingebaute
UART des uC will ich mir noch für andere Dinge (wenn das Ding mehr kann
soll es evt. per RS232 konfiguriert werden können) aufheben. Daher will
ich das lieber über ein eigenes Software-UART lösen, dabei lerne ich
wenigstens noch was.
Leider sind meine Infos noch etwas Lückenhaft, ich habe aber einen Plan
und bitte euch, den kurz querzulesen:

Erstmal per Opto-Koppler einen ordentlichen Pegel vom MIDI-Kabel holen.
Input-Leitung darüber an einen Interrupt-Pin anschließen.
Wenn das Startbit kommt, wird ein Interrupt ausgelöst, der wiederum
sich selbst erstmal von der Leitung nimmt und fix einen Timer startet,
der gemäß der Baudrate die 8 Datenbits holt, sich das Stoppbit kurz
ansieht, sich deaktiviert und dann wieder den Interrupt am Pin
aktiviert. Dabei würde ich eine Zählvariable zu Anfang auf 8 setzen und
solange sie nicht 0 wird das Bit entgegennehmen. Dann nach jedem Bit
freilich den Zähler dekrementieren und anschließend vergewissern, dass
das Stoppbit kommt. Wenn Stopp ist, ein Statusbit setzen, das im
Mainloop abgefragt und entsprechend behandelt wird. Klingt schonmal
ganz nett.

- Würde das auch jemand machen, der sich damit auskennt, oder gibt es
elegantere Lösungen?
- Was mache ich eigentlich, wenn nicht wie erwartet das Stoppbit (Low)
kommt, sondern das Ding auf einmal High ist?
- Dass bei MIDI 8 Datenbits kommen ist anhand des Protokolls klar, aber
wie ist es mit 'nem Parity-Bit? Und werden nicht zufällig 2 Stoppbits
gesendet?
- Was würdet ihr noch an Fehlerbehandlung einbauen?

von Rahul (Gast)


Lesenswert?

Soft-UARTS werden hier im Forum mehrfach beschrieben.
Atmel hat auch eine Application Note zu dem Thema.
Da Du ja scheinbar nur einen Empfänger realisieren willst, hält sich
der Aufwand in Grenzen. (Ein Nur-Sender ist noch einfacher...).

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.