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