Hallo,
ich habe vor einiger Zeit hier im Forum schon mal mein Problem mit einer Midi-Übertragung beschrieben. Leider habe ich noch keine Lösung gefunden. Ich wollte mich mal wieder drum kümmern, deshalb dieses neue Thema hier.
Es geht um die Steuerung eines DSP-Prozessors an meiner Hifi-Anlage über seine Midi-Schnittstelle. Die Midi-Sequenzen zum steuern kommen von einem ATTiny4313. Der Tiny läuft an einem 4,0000 MHz Quarz und hat einen Infrarot-Empfänger, über den ich RC-5 Code von meiner Fernbedienung empfange. Dieser Empfang klappt immer und einwandfrei. Ich kann dies prüfen, da ich über die Fernbedienung Das Power-Relais für den DSP steuern kann. Die Tiny-Schaltung ist immer an Strom, um auch im "Standy-By" die IR-Signale zum einschalten zu empfangen.
Grundsätzlich: Die Erzeugung der Midi-Squenzen funktioniert. Aber nur, wenn die Schaltung "kalt" ist. Mein alter Beitrag hier im Forum ist vom Februar. Da habe ich die Schaltung und die Software entwickelt. Es hat während der Entwicklung immer einwandfrei funktioniert. Die Fehlfunktion habe ich dann erst im tatsächlichen Einsatz festgestellt. Wenn der DSP einige Zeit an ist, und es im Gehäuse wärmer wird mag er keine Midi-Signale mehr empfangen. Aktuell im Sommer wenn es warm ist funktioniert der Empfang auch nach einer Abkühlungszeit nicht mehr.
Ich verstehe das nicht, denn für diese Probleme habe ich ja extra einen Quarz verbaut. Es ist dieser hier: http://www.reichelt.de/index.html?AC...;ARTICLE=32837
Laut Datenblatt möchte er 20pF Kondensatoren, bestückt habe ich diese 22pF: http://www.reichelt.de/index.html?ACTION=3;ARTICLE=9281
Da der Empfang grundsätzlich im kalten Zustand funktioniert gehe ich davon aus, dass die Hard- und Software korrekt ist. Trotzdem hier ein Ausschnitt der Midi-Schaltung:

Und hier zur Übersicht die relevanten Code-Teile für das Übertragen der Midi-Daten:
Code:
#define AVRGCC
#include <avr/io.h>
#include <compiler.h>
#define Midi_BAUD 31250l
#define Midi_UBRR (F_CPU / (Midi_BAUD * 16) - 1)
void Midi_sendData (U8 channel, U8 command, U8 data1, U8 data2)
{
U8 statusByte = (command & 0xF0) + ((channel - 1) & 0xF);
while (!(UCSRA & (1<<UDRE)));
UDR = statusByte | 0x80;
while (!(UCSRA & (1<<UDRE)));
UDR = data1 & 0x7F;
while (!(UCSRA & (1<<UDRE)));
UDR = data2 & 0x7F;
}
int main(void)
{
DDRB = 0b00000111; // IOs konfigurieren
PORTB = 0b11111000;
DDRD = 0b00110110;
PORTD = 0b11001001;
UBRRH = (U8)(Midi_UBRR>>8); // Midi-Baud-Rate setzen:
UBRRL = (U8)Midi_UBRR;
UCSRC = (1<<UCSZ1) | (1<<UCSZ0); // 8 Bit, 1 Stopp-Bit, kein Parity
UCSRB = (1<<TXEN); // USART für Midi-Übertragung initalisieren
UCSRA = 0;
if (DSP_defeat_status)
Midi_sendData (Midi_channel, Midi_ControlerChange, 19, 1);
else
Midi_sendData (Midi_channel, Midi_ControlerChange, 19, 2);
}
Hat vielleicht jemand eine Idee, woran das liegen kann?
Zur vollständigkeit hier noch der Link zum alten Thread vom Februar: https://www.roboternetz.de/community...Hilfe-bei-Midi
Viele Grüße
Andreas
Lesezeichen