Liste der Anhänge anzeigen (Anzahl: 1)
Midi nur wenn es kalt ist, oder wie stabil ist ein Quarz?
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:
Anhang 28790
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
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo,
ich habe heute mal den DSP geöffnet und ihr hattet recht. Es ist ein CNY17-Optokoppler am Midi-Eingang verbaut:
Anhang 28801
Allerdings ist es ein CNY17-3. Ich habe mal ins Datenblatt geschaut. Der CTR Wert unterscheidet sich vom Typ 2. CTR sagt mir aber nichts. In den Rise- und Fall-Zeiten sind beide gleich.
Ich habe testweise einen 220R auf meiner Platine überbrückt, wie von euch vorgeschlagen, leider hat dies nicht geholfen. Als nächstes werde ich einen PC900 ausprobieren. Gibt es eventuell noch andere Vorschläge für passende Optokoppler?
Da das Ding offen war hier ein Bild des 7805:
Anhang 28802
Und dem LED-"Weihnachtsbaum":
Anhang 28803
Das Gehäuse wird nach einiger Zeit "handwarm". Aber bei den derzeitigen Außentemperaturen funktioniert die Midi-Übertragung auch nicht, wenn das Gerät lange Zeit aus war.
Viele Grüße
Andreas