PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Midi nur wenn es kalt ist, oder wie stabil ist ein Quarz?



Bumbum
31.07.2014, 18:23
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?ACTION=3;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:

28790

Und hier zur Übersicht die relevanten Code-Teile für das Übertragen der Midi-Daten:



#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/threads/64184-Hilfe-bei-Midi

Viele Grüße
Andreas

wkrug
31.07.2014, 20:52
Was ist denn beim MiDi Interface Eingang für ein Optokoppler verbaut?
Ganz oft wird da ein CNY17 II verwendet. Mit diesem Sch... Ding hab ich mich schon viel geärgert.
Ein PC900 oder ein Vergleichstyp funktionieren dagegen meistens problemlos.

Peter(TOO)
01.08.2014, 03:19
Hallo Andreas,

Überbrücke testweise einmal einen der beiden 220R Widerstände.

Dann wird der Optokoppler mit 7.5mA anstatt 5mA betrieben.
Wenns an der mangelnden Empfindlichkeit des Optokopplers im warmen Zustand liegt, sollte es zumindest besser werden.

MfG Peter(TOO)

BMS
01.08.2014, 09:07
Hallo,
Die MIDI-Baudrate von 31250Bd wird bei 4MHz und dem UBRR=7 exakt getroffen, es gibt also schon mal keinen systematischen Timing-Fehler.
Wie lange ist denn die Pause zwischen zwei aufeinanderfolgenden MIDI-Paketen? Wenn ununterbrochen gesendet wird, gibt es Probleme mit der Synchronisierung. Dann muss nach dem letzten Byte eine Pause von z.B. 1-2 Bitdauern eingehalten werden, um beim nächsten Paket wieder synchronisieren zu können.
Grüße, Bernhard

Besserwessi
01.08.2014, 10:32
Die Quarze sind schon recht Temperaturstabil. Auch ein schlechter Quarz sollte mit 100 ppm/K und vielleicht 30 K Abweichung von der Nenntemperatur nur 0,3 % bei der Frequenz daneben liegen. Auch mit falschen Werten für die Kondensatoren kann man den Quarz kaum so weit verstimmen, dass die Frequenz zu weit abweicht. Die Gefahr wäre da eher das der Quarz dann bei höherer Temperatur (des ICs) nicht mehr schwingt, wenn die Kondensatoren grenzwertig sind.

Empfindlicher auf die Temperatur sind Optokoppler.

Bumbum
01.08.2014, 19:33
Hallo,

vielen Dank für die Hinweise. An dem Empfänger hätte ich jetzt gar nicht gedacht. Aber ihr seid euch da ja recht einig. Bei einem Kaufgerät für den professionellen Bühneneinsatz hätte ich nicht an solche grobe Fehler gedacht, wie ihr sie beschreibt.

Im DSP ist ein 7805 an den Boden geschraubt und nutzt das Gehäuse als Kühlkörper. Vom Trafo kommen 2x 12V AC. Den Strom habe ich nicht gemessen, aber die Spannungsdifferenz und die vielen LEDs lassen schon ahnen, dass das Gehäuse nach etwas Betrieb zur Heizung wird.

Ich werde den DSP mal aufschrauben und schauen was für Optokoppler verbaut sind. Ich könnte theoretisch sogar dahinter einspeisen, wollte mir die galvanische Trennung aber bewahren, da es um Audio geht und meine Schaltung mit dem Atmel noch mit anderen Geräten meiner Anlage verbunden ist.

Der Tipp mit dem Überbrücken der 220R ist auch gut. Ich werde berichten. Vielen Dank bis jetzt!

@BMS: Den Quarz habe ich extra so gewählt, dass die Baudrate genau getroffen wird. Ich vermute, dass seine Frequenz auch stabil ist und bleibt, sonst würde die RC-5 Auswertung auch irgendwann aus dem Ruder laufen.
Zwischen den "Datenpaketen", also den 3 Midi-Bytes ist immer sehr lang Pause. Es wird bei jedem Tastendruck auf die Fernbedienung jeweils ein Midi-Befehl generiert. Bis ich dann wieder drücke vergehen Sekunden.

Viele Grüße
Andreas

Besserwessi
01.08.2014, 21:26
Der RC-5 Code ist wohl schon weniger Zeitkritisch als die UART Übertragung für Midi. Möglich wäre ggf. noch, dass da zwar ein 4 MHz Quarz dran hängt aber immer noch der interne Takt genutzt wird. Allerdings hat man da ja nur 1 MHz oder 8 MHz so ohne weiteres zur Auswahl.

Das Problem sind da halt leicht Optokoppler weil es für die einfachen Typen da mit der Geschwindigkeit schon eng wird. Auch die Treibertransistoren könnte auf die Temperatur reagieren, allerdings ist da die Richtung eher mehr Stromverstärkung bei steigender Temperatur - das sollte also eher weniger Problem machen. Sofern es nicht extrem heiß wird sollten auch Leckströme nicht das Problem werden.

Bumbum
02.08.2014, 16:04
Hallo,

ich habe heute mal den DSP geöffnet und ihr hattet recht. Es ist ein CNY17-Optokoppler am Midi-Eingang verbaut:

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:

28802

Und dem LED-"Weihnachtsbaum":

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

radbruch
02.08.2014, 16:47
Hallo

Analog bin ich ja eher ahnungslos, aber bei deiner Schaltung hätte ich Bedenken:

https://www.roboternetz.de/community/attachment.php?attachmentid=28790&d=1406823552

Selbst wenn V14 durchgesteuert ist würde ich an der Basis von V6 noch soviel Spannung erwarten, dass ich für das Sperren von V6 keine Garantie übernehmen würde.

Gruß

mic

P.S.: Hat sich erledigt. In der Sättigung hat der BC547 eine CE-Spannung von unter 250mV bei der hier verwendeten Einstellung ICE=5mA und IB von ca. 4,3mA:
http://www.fairchildsemi.com/ds/BC/BC547.pdf

Schönes WE noch...

Besserwessi
02.08.2014, 21:19
Die Größe CTR ist das Current transfer ratio, also das Verhältnis aus Phototransistor Strom und LED Strom beim Optokoppler.

Den Strom für die LED zu erhöhen kann ggf. helfen, wenn das Problem eine abnehmende Intensität der LED ist, also ein zu kleines CTR bei hoher Temperatur. Es kann die Sache aber auch verschlechtern, weil der Optokoppler dann (stärker) in die Sättigung geht und damit langsamer wird. Beim Optokoppler wüste ich jetzt keine 1:1 alternative - die schnelleren haben mit 8 Pin Gehäuse. Ein Möglichkeit wäre ggf. die Beschaltung des Optokopplers etwas zu ergänzen: Entweder ein zusätzlicher Widerstand (ca. 100-200 K) zwischen den Pins 4 und 6, zusammen mit mehr Strom für die LED - das reduziert die Empfindlichkeit und beschleunigt den Optokoppler etwas. Oder alternativ eventuell auch eine kleine Schottkydiode (z.B. BAS70, ggf. sogar BAT 17 ) zwischen den Pins 5 und 6 (Kathode an 5) um eine Sättigung zu verhindern.

wkrug
03.08.2014, 09:03
Wenn tatsächlich ein Problem mit dem Optokoppler ist, solltest Du das Teil einfach mal mit Kältespray einsprühen.
Wenns dann funktioniert ist die Sache relativ eindeutig.
Einen CNY 17 gegen einen PC900 zu tauschen ist auch nicht so einfach möglich, weil der PC ein anderes Pinout hat als der CNY.
Ausserdem hat der PC900 eine interne Elektronik und benötigt eine 5V Stromversorgung.
Um die Steilheit des CNY zu erhöhen, kann man den Kollektorwiderstand des Fototransistors kleiner machen.
Dann kommt der Transistor schneller aus der Sättigung, was die Flankensteilheit erhöht.
MiDi fähige Optokoppler sollen sein PC900, PC910, 6N137.
Guck mal hier (http://www.heise.de/altcms_bilder/122821/3_hires.gif) .

Aber bitte zuerst mal testen, ob's tatsächlich der Optokoppler ist.
Könnte ja auch der DSP sein, bei dem der RxD Pin nur bei Kälte funktioniert.

Wenn Du am Transistor auch was ändern willst, kannst Du es für V6 mal mit einem BS170 versuchen.
Das ist ein kleiner N-Kanal Fet, der Pinkompatibel zum BC547 ist ( Achtung beim BS170 gibt's verschiedene Pin belegungen ).
Allerdings kann hier die Gate Kapazität die Steilheit des Ausgangssignals beeinflussen.

Bumbum
03.08.2014, 10:00
Hallo,

der Optokoppler muss nicht unbedingt Pinkompatibel sein. Ich kann diesen auch auf meine Schaltung setzen und dann den Ausgangstransistor einfach parallel zum verbauten CNY schalten.

Aber was ihr schreibt habe ich mir auch schon vorgenommen: Erst mal den Optokoppler im DSP ausschließen. Die Lösung ist einfacher wie ihr plant: Ich schalte einfach V17 parallel zum Optokoppler im DSP. (oder doch V6? Muss mir das mit der zigfachen invertierung des Signales noch mal durch den Kopf gehen lassen).
Dadurch geht zwar die galvanische Trennung flöten, aber solange keine anderen Audio-Geräte angeschlossen sind sollte es für einen Test um den Optokoppler auszuschließen gut sein.

Ich werde wieder berichten, sobald dieser Test abgeschlossen ist.

Viele Grüße
Andreas

Peter(TOO)
03.08.2014, 17:17
Hallo Andreas,


Die Lösung ist einfacher wie ihr plant: Ich schalte einfach V17 parallel zum Optokoppler im DSP. (oder doch V6? Muss mir das mit der zigfachen invertierung des Signales noch mal durch den Kopf gehen lassen).
Dadurch geht zwar die galvanische Trennung flöten, aber solange keine anderen Audio-Geräte angeschlossen sind sollte es für einen Test um den Optokoppler auszuschließen gut sein.
Das funktioniert aber nicht, wenn der Leckstrom des Optokopplers zu gross ist und deshalb der Ausgang immer halb durchgeschaltet ist.

MfG Peter(TOO)

Bumbum
04.08.2014, 17:35
Hallo,

das Problem ist gelöst. Ich habe gestern den Versuch gewagt und V6 parallel zum Optokoppler-Transistor gelötet. Die Midi-Übertragung lief so einwandfrei. Ich habe das Ganze aber leider nicht so lassen können aufgrund der galvanischen Verbindung. Also habe ich die Schaltung erst mal wieder rückgerüstet, bis ich einen passenden Optokoppler bestellt habe. Seitdem funktioniert aber auch die Überrtagung über den Optokoppler. Das Ganze ist gestern stundenlang gelaufen. Und der DSP steht auf der Endstufe und wurde dabei gut durchgeheizt. Ich tippe auf eine kalte Lötstelle an einem der Pins des Optokopplers, die ich durch das anlöten von V6 wieder repariert habe.

Viele Dank an alle fürs mitdenken! Ohne euch wäre ich nie auf die Idee gekommen den Fehler im fertigen Gerät (DSP) zu suchen.

Viele Grüße
Andreas

Bumbum
10.08.2014, 09:00
Hallo,

ein kurzer Nachtrag von mir: Es war wohl doch keine kalte Lötstelle. Jetzt nach ein paar Tagen testen ist mir aufgefallen, dass die Midi-Signale doch nicht immer empfangen werden. Da dies auch nach einem Reset meiner Schaltung nicht läuft ist es also wieder der Fehler von Anfang an. Entweder driftet bei meiner Schaltung der Quarz und die Baudrate passt nicht mehr, oder der Fehler ist wie von euch vermutet im DSP.

Mir ist eingefallen, dass ich noch 6N137 Optokoppler habe und habe auch einen gefunden und diesen jetzt eingebaut. Zur Zeit funktioniert die Midi-Übertragung damit wieder, auch längere Zeit. Ich werde weiter beobachten.

Viele Grüße
Andreas

Klebwax
10.08.2014, 09:54
Ich würde nicht so sehr auf den Quarz schauen. Eine asynchrone serielle Leitung verträgt schon eine Abweichung der Frequenzen im Prozentbereich (wenn die Frequenzen nicht von vorneherein ziemlich falsch sind), die Stabilität eines Quarzes wird in PPM angegeben, ist also tausend bis zehntausend mal besser als nötig.

MfG Klebwax

BMS
10.08.2014, 09:56
Hallo,
hast du ein Oszilloskop da? Falls ja, kannst du dir die übertragenen MIDI-Pakete anschauen, einmal im normalen Betrieb und einmal im Fehlerfall.
Grüße, Bernhard

Bumbum
10.08.2014, 13:36
Hallo Bernhard,

ich habe zwar ein Oszi, aber mit diesem "Vorkiregsmodell" bekomme ich das Midi-Signal leider nicht dargestellt:

28872

Irgendwann packts mich mal und ich lege mir ein vernünftiges, modernes Speicheroszi zu. Aber im Moment bin ich da noch zu geizig.

Viele Grüße
Andreas

021aet04
10.08.2014, 20:16
Wenn Bedarf besteht hätte ich noch ein gebrauchtes (neuwertiges) Lecroy Waveace 212 Oszi (2 Kanal mit 100MHz). Bin auf ein Waveace 234 (4 Kanal mit 300MHz) umgestiegen.

Und du wirst den Fehler schon finden. Kannst du die Übertragung irgendwie mitloggen?

MfG Hannes

Klebwax
11.08.2014, 07:07
ich habe zwar ein Oszi, aber mit diesem "Vorkiregsmodell" bekomme ich das Midi-Signal leider nicht dargestellt:

Das geht schon. Dazu schreibt man eine Software, die ständig das gleiche, kurze Telegramm sendet. Damit bekommt man ein stehendes Bild und kann sich die Signale ansehen. Es gab schon ein Leben vor dem Speicherscope.

MfG Klebwax

wkrug
11.08.2014, 17:01
Wie schauen den die Flanken am Ausgang deies Optokopplers aus?
Das wär schon mal ein Indiz wo der Fehler zu suchen ist.
Gut dazu geeignet ist das hex Byte 0x55 bzw 0xAA, weil das viele 1/0 Wechsel hat.

Bumbum
11.08.2014, 17:39
Hallo,

das Vorkriegs-Oszi hat so seine Probleme mit dem Triggern von digitalen Signalen. Ich vermute da ist über die Jahre der eine oder andere Kondensator ausgetrocknet oder irgendein anderer defekt entstanden. Für analoge "Schätzungen reicht es noch, für digitale Messungen ist es allerdings ungeeignet.

Ich beobachte jetzt erst mal mit dem neuen Optokoppler, ob das Problem immer noch auftritt. Ich werde berichten.

Viele Grüße
Andreas