SoftUART für MIDI - richtig so?

Gast #157993
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?
Gast #157994
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...).

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.