-         

Ergebnis 1 bis 3 von 3

Thema: Hilfe bei Midi

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    672

    Hilfe bei Midi

    Anzeige

    Hallo,

    ich habe mal wieder ein Problem. Ich möchte meinen Behringer DSP-1100 via Midi steuern. Genauer gesagt möchte ich die von mir gespeicherten Presets wechseln. Laut Anleitung des DSP-1100 ist dies möglich mit dem Befehl ProgrammChange (Midi-Kommando 0xC0).

    Auf Wikipedia ist die Midi-Schnittstelle gut erklärt: http://de.wikipedia.org/wiki/Musical...ital_Interface

    Ich habe also folgende Hardware dazu gebaut:

    Klicke auf die Grafik für eine größere Ansicht

Name:	Midi.gif
Hits:	9
Größe:	4,5 KB
ID:	27454

    Und folgenden Code geschrieben:

    Code:
    #define AVRGCC
    #include <avr/io.h> 
    #include <compiler.h>
    #define Midi_1    PORTD = ~(~PORTD | (1<<PD5))
    #define Midi_0    PORTD = (PORTD | (1<<PD5))
    #define Midi_ControlerChange  0xB0
    #define Midi_ProgrammChange   0xC0
    #define Midi_BitTime    32
    #define Midi_BytePauseTime   1000
     
    void Midi_sendByte (U8 dataByte)
    {
     Midi_0;                 // Start-Bit
     _delay_us (Midi_BitTime);
     
     U8 i1;
     for (i1 = 0; i1 < 8; i1++)            // 8 Daten-Bits:
     {
      if ((dataByte & 1) == 0)
       Midi_0;
      else
       Midi_1;
      _delay_us (Midi_BitTime);
      dataByte = dataByte>>1;
     }
     Midi_1;                 // Stop-Bit
     _delay_us (Midi_BytePauseTime);
    }
     
    int main(void)
    {
     DDRB =  0b00000111;
     PORTB = 0b11111000;
     DDRD =  0b00110110;
     PORTD = 0b11001001;
     Midi_1;
     _delay_ms (500);
     
     Midi_sendByte (0xC1);
     Midi_sendByte (3);
     Midi_sendByte (4);
     
     while (1);
    }
    Aber es funktioniert nicht. Aber warum?

    Für die Übersichtlichkeit hier, und um andere Fehler durch beeinflußung auszuschließen habe ich das restliche Programm entfernt.

    Dummerweise habe ich erst nach der Fertigstellung der Hardware bemerkt, dass alle anderen Projekte im Netz den internen USART dafür verwenden. Dieser Pin ist bei mir schon für etwas anderes verwendet. Aber bei 31250 Baud Taktrate dachte ich mir solle ein Software-USART kein Problem sein.
    Der verwendete ATtiny4313 läuft an einem 4,000000 MHz Quarz. Die 32µS Delay für die Baudrate sollten damit also genau eingehalten werden können. (sind 128 Clocks für das Delay)

    Der DSP-1100 ist korrekt auf Midi-Empfang konfiguriert. Ich habe den Omni-Mode aktiviert, damit der verwendete Kanal erst mal egal ist. Aber auch verschiedene Kanäle habe ich schon ausprobiert.

    An der Midi-Out-Buchse des DSP-1100 habe ich eine LED angeschlossen. Diese flackert kurz, wenn ich ein Programm am DSP von Hand wähle. Der DSP sendet es dann über seine Midi-Out Buchse. Leider habe ich kein Speicher Oszi, um mir den Datenstrom anzuschauen.
    Wenn ich die LED an die Midi-Through Buchse anschließe flackert die LED genauso, wenn meine Schaltung die Daten überträgt. (Die Schaltung ist an Midi-In angeschlossen; Midi-Through wird dann wieder 1:1 so ausgegeben, was empfangen wurde) Also sollte meine Hardware funktionieren. Und die Polarität der Bits mit Midi_0 und Midi_1 auch.

    Wer findet den Fehler?

    Viele Grüße
    Andreas

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    672
    Hallo,

    ich habe mir jetzt doch die Mühe gemacht und die zwei Pins getauscht, so dass der Midi-Datenstrom am TxD-Pin des Atmels hängt. Dadurch wurde noch eine weitere Invertierung des Signal nötig, aber jetzt läuft alles. Ich sende die Daten jetzt über den internen UART.

    Aber damit ein Lerneffekt bleibt: Warum funktioniert mein Software-UART nicht?

    Viele Grüße
    Andreas

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    672
    Hallo,

    schade, dass sich hier niemand beteiligt. Mein Problem besteht nämlich immer noch. Ich hoffe auf ein bisschen Denkanstöße.

    Ich habe die Schaltung seit gestern im endgültigen Betrieb. Das heißt, ich habe sie in das Gehäuse des DSP-1100 eingebaut:

    Klicke auf die Grafik für eine größere Ansicht

Name:	Foto.jpg
Hits:	5
Größe:	53,0 KB
ID:	27529

    Rechts kommt aus dem DSP-1100 (das obere Gerät) die IR-Empfangsdiode, sowie eine rot/grüne LED als Status-Anzeige. Und die Buchse zum Verstärker, über die ich dessen Ausgänge schalte.

    Zweck des ganzen war den Verstärker per Fernbedienung entweder auf Kanal A oder auf Kanal B zu schalten und im DSP die entsprechende Equalizer-Kurve aufzurufen. Beide Geräte waren vorher nicht fernbedienbar.

    Das funktioniert alles bestens. Aber nach einiger Zeit empfängt der DSP keine Midi-Signale mehr. Er hat eine Status-LED, die blinkt sobald Midi-Befehle für ihn empfangen werden. Diese bleibt dann aus. Die Befehle werden auch nicht mehr umgesetzt. Meine Schaltung um den Tiny4313 läuft aber noch. Ich kann die Kanäle schalten, sowie die Geräte (DSP und Verstärker) ein- und ausschalten. Alles über Fernbedienung. Lediglich der Midi-Teil funktioniert nicht mehr.

    Folgendes habe ich bisher erfolglos probiert:

    den DSP aus- und wieder einschalten
    die Tiny4313-Schaltung reseten
    die Tiny4313-Schaltung vom Strom nehmen und wieder einschalten
    die Firmware nochmal auf den Tiny4313 flashen (Strom blieb die ganze Zeit über dran)

    Erst wenn ich den Strom für beide Geräte (DSP und Tiny) für ein paar Minuten weg nehme funktioniert wieder alles. Scheinbar genügt aber nur den DSP abzuschalten. Das ist aber nur eine Vermutung. Gestern Abend, bevor ich ins Bett gegangen bin habe ich alles noch mal probiert und es ging wieder alles, bis auf die Midi-Befehle. Jetzt heute früh nach dem Einschalten geht wieder alles. Eingeschaltet habe ich über die Fernbedienung, das heißt über Nacht ist der Tiny4313 durchgelaufen und hat heute früh einwandfrei funktioniert.

    Nun bin ich etwas ratlos. Ich habe im moment keine Ahnung, wo ich nach der Ursache suchen soll. Hat jemand eine Idee?

    Mein erster Gedanke war vielleicht ein Wärmeproblem, da der Verstärker unten drunter schon ganz schön heizt. (Keine Angst, der DSP ist ein "kurzes" Gerät. Das kommt auf dem Foto nicht rüber. Dort wo der Verstärker seinen Leistungskühlkörper hat sind oben die Lüftungsschlitze komplett frei.
    Das Erklärt aber nicht, warum ein paar Minuten abschalten schon das Problem löst. Der Verstärker ist dabei durchgelaufen und hat eher weiter geheizt. Die Kombi steht hier schon seit Jahren. Der DSP hat in seiner Funktion kein Problem mit der Wärme vom Verstärker.

    Mein Tiny4313 läuft an einem 4,000000 Mhz Quarz (4,0000-HC49U-S von Reichelt). Wie Temperaturstabil sind die denn? Da habe ich bis jetzt noch keine Erfahrungen mit. In den Datenblättern habe ich lediglich folgendes gefunden:

    Temperature Tolerance (std.) / Temperaturtoleranz ?f/f ±30ppm, ± 50ppm

    Kann mir das jemand erklären?

    Viele Grüße
    Andreas

Ähnliche Themen

  1. MIDI (bzw. RS232) Übertragunsfehler bei langen Kabeln
    Von Bääääär im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 28.10.2008, 20:37
  2. Antworten: 9
    Letzter Beitrag: 02.01.2008, 22:05
  3. Tiny2313 MIDI RX
    Von tholan im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 08.02.2007, 13:45
  4. Hilfe bei Fusebits bei einen Mega16
    Von PsychoElvis64 im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 25.12.2006, 19:24
  5. MIDI per Funk
    Von ankage im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 12.04.2006, 15:39

Berechtigungen

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