watterott ;title =
Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 33

Thema: MIDI Monitor mit Bascom und Atmega8

  1. #1
    Kabelträger
    Registriert seit
    28.12.2016
    Beiträge
    15

    MIDI Monitor mit Bascom und Atmega8

    Hallo Experten!
    Mein aktuelles Projekt ist ein MIDI - Monitor, welcher die Midi Telegramme, welche von einem Keyboard kommen, zu decodieren. Die ersten Versuche waren mit Atmega8 und einem LCD Display, auf dem zumindest die Keyon Keyoff note und Lautstärke Telegramme in Echtzeit sichtbar werden sollten! Als hardware habe ich einen Opto-Koppler, über diesen lese ich am PinportD.0 (RXD) über den UART in Bascom meine Bytes.
    Leider läuft es nicht so, wie ich möchte. Ich kann mittels Waitkey sehr wohl eine Tastenbetätigung erkennen (dez.144) kann über einen weiteren waitkey das nächste Byte für die Note und mit einem dritten waitkey auch die Lautstärke decodieren. Jedoch ist das Timing bzw. anscheinend die Leseroutinen nicht schnell genug. Wenn mehrere Tasten oder auch nur eine Taste zu schnell hintereinander betätigt wird, werden Informationen verschluckt. Habe auch mit Ischarwaiting und anschließendem Auslesen schon getestet, aber es war alles zu langsam.
    Jetzt meine Frage: Wer hat scho mal in Bascom MIDI-Daten mitgelesen? Oder wer kann helfen, damit die Abfrage schneller wird? Welche Möglichkeiten gibt es da noch? Mit lieben Grüßen hpt

  2. #2
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    368
    Das ist wirklich zu langsam.
    Hier wurde sowas im Prinzip erklärt.
    Ich weiss natürlich nicht ob dir das weiterhilft,weil mit MIDI hatte ich noch nichts gemacht
    obwohl der Serielle Datenempfang im Prinzip immer gleich ist.
    http://bascom-forum.de/showthread.ph...light=serialin
    Geändert von DON (28.12.2016 um 17:03 Uhr)
    Ein Mensch mag noch so herausragende Fähigkeiten haben – wenn er arrogant und selbstsüchtig ist, sind sie nichts wert.
    Konfuzius


  3. #3
    Kabelträger
    Registriert seit
    28.12.2016
    Beiträge
    15
    Hallo Don ! Danke für die rasche Info! Ich teste und probiere, aber bei mir scheint "Serial0charmatch" nicht zu funktionieren! Jedenfalls gelingt es mir anscheinend nicht, auch nur einen Einsprung in diese Sub-Routine zu erreichen! Es toggelt (blinkt) auch keine Leuchtdiode, obwohl ich sonst nichts in der Sub-Routine ausführen lasse. Bei den Erläuterungen für die Bedingung, wann eingesprungen wird, d.h. wann ein Interrupt ausgelöst wird, ist mir dieses "Config Serialin = Bufferd, Size=30, Bytematch =13 " suspekt. Heißt das - wenn eine 13 (CR) kommt, dann wird die Sub angesprungen? Ich habe es mit Bytematch =144 versucht, das ist ein Byte, welches jedesmal nach einem Tastendruck verlässlich kommt, aber es passiert nichts....
    Eigentlich möchte ich ja nur schauen, 1. kommt eine 144 (Taste wurde gedrückt) 2. Dann ist das nächste Byte die "Note" (welcher Ton) und das übernächste Byte wäre die Lautstärke. Also zusammengefaßt - ich suche nach "144" und möchte dann die beiden folgenden bytes so schnell wie möglich auslesen.

  4. #4
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    368
    Heißt das - wenn eine 13 (CR) kommt, dann wird die Sub angesprungen?
    Genau weil dann ist die Senden zu ende.
    Es sieht fast so aus als wäre im MIDI-Protokoll kein 13 vorgesehen
    also must du Bytes zählen.
    https://www.hdm-stuttgart.de/~curdt/...mierzewski.pdf
    Ein Mensch mag noch so herausragende Fähigkeiten haben – wenn er arrogant und selbstsüchtig ist, sind sie nichts wert.
    Konfuzius


  5. #5
    Kabelträger
    Registriert seit
    28.12.2016
    Beiträge
    15
    Bytes zählen gut und schön - aber wie komm ich dazu? Was ist notwendig, damit "Serial0charmatch" aufgerufen wird? Reicht das "Config Serialin = Bufferd, Size=3, Bytematch =144 " für ein starten des Subroutine? Dez.144 (bedeutet Taste gedrückt )und dieses Byte kommt jedesmal wenn ich eine Taste am Keyboard drücke! Steht in Bytematch=144 , 144 auch als dezimale Zahl? Oder woran kann es noch liegen, dass die Subroutine nicht aufgerufen wird?

  6. #6
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    368
    So lange du nicht weißt ob überhaupt ein endzeichen kommt solltest du erst prüfen wie das Datenpaket aussieht.
    Kannst du das an den PC anschließen und dir das Protokoll auf einen Seriellen Tool anschauen .(Gibt es hier im Forum)
    http://bascom-forum.de/showthread.ph...ull=1#post1877
    Ein Mensch mag noch so herausragende Fähigkeiten haben – wenn er arrogant und selbstsüchtig ist, sind sie nichts wert.
    Konfuzius


  7. #7
    Kabelträger
    Registriert seit
    28.12.2016
    Beiträge
    15
    Es gibt im Prinzip immer Pakete mit 3 Byte die mich interessieren! Das letzte Byte ist nicht immer gleich (Lautstärke), aber das erste der 3 Bytes ist immer Dez. 144!

  8. #8
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    368
    array machen.
    Dim Array(10) As Byte und das als overlay mit dem rs232 buffer machen.
    Ein Mensch mag noch so herausragende Fähigkeiten haben – wenn er arrogant und selbstsüchtig ist, sind sie nichts wert.
    Konfuzius


  9. #9
    Kabelträger
    Registriert seit
    28.12.2016
    Beiträge
    15
    Servus Don! Wahrscheinlich überschätzt du meine Fähigkeiten. Ich komme eher von der Löterseite und bin als Tipper nur Halbwissender um nicht zu sagen ein Imperte (Gegenteil von Experte) . Erlaube mir deshalb die Frage, wie bekomme ich vom UART Daten in ein Array? Gibt es dafür vielleicht irgendwo Beispiele wie man das machen kann ? Bin für jede Hilfestellung sehr dankbar!

  10. #10
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    368
    Config Serialin = Buffered , Size = 10
    Dim Array(10) As Byte At _rs232inbuf0 Overlay
    _rs232inbuf0 ist der von bascom erzeugte Buffer
    und mit dem overlay hast DU gleich alles im Buffer.
    Jetzt kannst du bequem den Buffer auslesen.
    Ein Mensch mag noch so herausragende Fähigkeiten haben – wenn er arrogant und selbstsüchtig ist, sind sie nichts wert.
    Konfuzius


Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •