Midi Interface MCV876/Semtex Update

3

3456778674

Guest
Nachdem es bislang eher verstreut durch andere Threads [1][2] ging, hier jetzt ein eigener Diskussionsstrang.
Dieser Thread hier wird mehr Tagebuch und Diskussion, die Resultate werde ich ins Wiki einstellen.

Worum geht es überhaupt?
Das Midi-Interface MCV876 (was auch im Semtex-XL sitzt) von Marc Bareille hat im Original einen PIC-Controller. Dessen Programm arbeitet bei einigen Anwendern nicht so, wie sie es gerne hätten. Daher habe ich dafür einen Alternativ-Controller programmiert. Dieser Controller ist mittels eines Adaptersockels (den man mit mittleren Löt-Skills selber löten kann) Steck-Kompatibel zu dem PIC-Controller, der da bislang drin steckt.


Die Anleitung findet sich hier:
https://www.sequencer.de/synth/index.php ... ler_Update
Die wird noch ein paar Tage wachsen - bis alles nötige drin steht.



Die Controller-Software steht soweit. Die Software ist unter der GPL veröffentlicht.
Die Software ist komplett in C geschrieben und mit dem - kostenlos verfügbaren - AVR-Studio 4 übersetzt. Es gibt einen Bootlader für den Controller (ebenfalls C und unter GPL), mit dem es möglich ist, Software-Updates über Midi auf den Controller aufzuspielen.

Der Konverter, der aus dem ".hex" File, den das Studio macht, ein Sys-Ex File erstellt, das mit einem passenden Programm (z.b, Midi-OX) auf den Controller spielt, ist ebenfalls frei verfügbar. Lohn des ganzen: Man kann mit kostenloser Tool-Chain das Programm modifizieren und ohne weitere Hardware auf den Controller bringen. Der muss nur einmal mit dem Bootlader programmiert sein.

Wenn jemand gebrannte Controller, idealerweise mit den Sockeln, bauen und verkaufen möchten, darf er das gerne machen.
 
Super! Vielen Dank! Ich bin sehr gespannt, wie es sich (bei/für mich) macht.

Beim Einstellen eines Midikanals 15 und 4 facher Polyphonie, könnte man doch die Midikanäle mit modulo-16 (4Bit) wrappen, so dass 15,16, 1, 2 als Kanäle gelten, ist das einfach machbar und überhaupt sinnvoll?

Hab den Editor nicht präsent, aber könnte man (irgendwie) auch noch einen anderen Teiler für die Midiclock einstellen?

Hab es noch nie probiert, aber ist Gate 6 für Start high und Stop low, oder gibt es jeweils einen Puls aus?

Sehe ich es richtig, dass der Wunsch nach weiteren Funktionen der Verwendung des Original-Editors entgegensteht, da man diese dann nicht mit dem Editor einstellen könnte?
Oder ist alternativ nicht sogar denkbar - mit entsprechender Anleitung - alles über ein extern angeschlossenes Keyboard zu steuern, und dafür den Editor und ein paar Funktionen fallen zu lassen?
Klar, kann ich selber programmieren, aber wenn ich der alleinige Interessent wäre, bleib ich lieber "bei euch".

PS: meine Anmerkung im alten Thread bezog sich nicht auf ein Geschäft meinerseits mit "Sockel bauen und verkaufen", sondern auf Arbeitsteilung hier im Forum: ich bau 2 3 Sockel, jemand anderes (als Du) kümmert sich um das Besorgen des richtigen ATmega 88, schickt ihn zu Dir zum flashen, dann zu mir und bekommt im Gegenzug einen fertigen Sockel.
 
Wow, 100 Bitcoins an dich ;-)
Dürfte auch für Selbstbauten interessant werden. Vielen Dank dafür.
 
Midikanal wrappen hatte ich auch überlegt, aber das wären doch echt zwei, drei Zeilen zusätzlicher Code. So ist das so schön simpel. Ein simples &=0xf tut es da nicht und für mehr war ich zu geizig...
(Also eigentlich gar kein Problem, wenn man es haben will. Ich hatte mich nur gefragt wozu... )

Die Midi-Clock kann man frei einstellen, 16tel als Default erschienen mir nur am sinnigsten.
Midi-Start/Stop ist ein An/Aus Signal, wenn dann wäre wohl eher ein Start -Impuls sinnig (und nix bei Stop, das macht man per Hand)?
Und die Clock liegt auf 6, Start(Stop) auf 5

Ich hatte die bisherige Funktionalität (inklusive Editor) alleine schon deshalb als Vorgabe genommen, um ein überschaubares Projekt zu haben.
Das auf einen neuen Editor und neue Funktionalität umzustricken ist auch später noch möglich.

Was wirklich fest bleibt, ist der Bootlader, da ich den Reset-Pin für die LED brauche, kann man den Controller hinterher nur noch per Midi oder per HV-Programmierung (=Programiersockel, nicht im System) ändern. Und per Midi kann der Bootlader nicht geändert werden (einfach, damit man sich den Chip nicht wegschiessen kann (das Fachwort heißt "bricken", denglisch für "ein Gerät in einen Ziegelstein verwandeln" )). Das Betriebsprogramm kann man allerdings problemlos ziemlich umstricken.

@ opt.X: Das *deine* Sockel kein Geschäft werden sollen, hatte ich schon so verstanden, dein Angebot finde ich total klasse, und ich fände es prima, wenn ich dir ein paar gebrannte Controller schicken kann und du diese (-1) dann an die Riege der "Beta-Tester" weiter reichst. (Sprich 2..3 Leute, die das nicht nur "haben wollen", sondern auch bereit sind, das auszuprobieren, ggfls. Fehler zu beschreiben, und auch ein neues Sys-Ex einspielen wollen und können, und sehen ob es damit ok ist. )

@Tulle: "neu bauen" sähe für mich etwas anders aus, insbesondere andere Wandler (nicht so teuer, dafür 2 Kanäle pro Chip und 12bit). Das dauert aber noch ein paar Tage, ich würde das hier gerne erst auf einen soliden Stand bringen.
 
So.. wer schon mal gucken will: https://www.sequencer.de/synth/index.php ... ource_Code
Das Wiki läst mich keine Zip oder Hex-Files hochladen, sollte das tatsächlich jemand Brennen wollen, dann muss er selber compilieren oder mich per PM fragen. Sinnvoller ist das allerdings in ein paar Tagen (vermutlich nach dem Wochenende), wenn ich die Funktionen alle noch mal durchgetestet habe...
 
Übrigens mal eine kleine Betrachtung zu C-Compiler und Codeeffizienz:
Code:
switch(cmd)
{
	case (PITCH):		        	// PITCH BEND command
		if (midi.msgByteCnt)   	 	// second data byte (MSB) 
		{ 						
			setPb(midi.byte1,byte,midi.channel);
			midi.msgByteCnt = 0;	 // clear byte count
		}
		else
		{
			midi.byte1 = byte; 		// store first byte for later 
			midi.msgByteCnt = 1;  	// set counter to get next byte
			return;
		}
		break;
	case (CC):	             		// Continuous Controller Message 
		if (midi.msgByteCnt)
		{
			midi.msgByteCnt = 0;
			setCC(midi.byte1, byte,midi.channel); // set CC value 
		}
		else
		{
		  midi.byte1 = byte;
		  midi.msgByteCnt = 1;
		  return; 
		}
		break;
	default:
		break;
}
return;

Der else Teil in den "aktiven" Kommandos ist zwei mal das gleiche, im default Teil kommt der allerdings nicht vor (und in echt gibt es noch ein paar mehr gleiche und ein paar andere Fälle).
Da kann man sich jetzt den Kopf zerbrechen, wie man das rauszieht - oder es lassen: der Compiler erzeugt den Code nämlich tatsächlich nur einmal. (Wobei er sich noch nicht mal von den unterschiedlichen, funktional aber gleichwertigen returns beeidrucken lässt. )
In Assembler muss man solche Optimierungen natürlich immer selber machen (sprich: selber Spaghetticode schreiben) - was der Zuverlässigkeit nicht gerade förderlich ist.
 
:achso: gerade noch einen blöden Bug ("Entwurfsfehler"=tat so wie es soll, das war aber nicht so wirklich sinnig) im Bootlader gefunden.
Ansonsten werde ich mal Abschied vom Debugger nehmen und den Reset-Pin auf die LED umprogrammieren.

Wie ist das, reicht der "Anleitungsteil" ( https://www.sequencer.de/synth/index.php ... e#Hardware) für den Sockel, oder soll ich das noch mal etwas liebevoller Schritt für Schritt bebildern?
Ich baue nachher noch einen zweiten - den dann ohne Debug-Pins und mit der LED am finalen Anschluss.
(Und wenn das nicht gleich klappt, dann habe ich "einmal HV-Verdrahtung auf dem Dragon frickeln" gewonnen.... )
 
Sind da manche Pins zweifach verbunden?
Platine Pin 2 ist mit Atmel Pin 2 vebunden (Direktverbindung) und dann noch mit Platine Pin 18 und Atmel Pin 17 (die letzten beiden Direktverbindungen sind ja gekappt)?
Platine Pin 20 (+5V) ist mit den Atmel Pins 7, 20 (Direktverbindung) und 21 verbunden?
Falls ja finde ich es verständlich. Der Sockel scheint etwas tricky zu sein, aber ich denke ich würde es für mich selber hin bekommen.

Was heißt das Sternchen bei Atmel Pin 1 (P7*) und Platine Pin 7 (A1*)?

Gibt's die Stecksockel auch noch woanders? (Reichelt, Mouser) Im Reichelt-Katalog habe ich nur den Steckadapter AR 28 gefunden, der aber 15,24 mm breit ist. Bei Mouser habe ich bei einer Online-Suche gar keinen Stecksockel/adapter finden können.

Der Conrad bei uns ist leider nach draußen in die Pampa gezogen. Ohne Auto nicht erreichbar. :sad:
 
Zwei Fehler habe ich gerade (...ganz ehrlich ... bevor ich deine Frage gelesen habe... ) gefunden - Pin 2 muss ein rotes X kriegen, der ist nicht durch-verbunden!
Eine Masseverbindung fehlte (A8-A22, wobei A8-P8 durchverbunden die Masse von der Platine holt. )

P20 an A7, A20, A21 ist richtig. Das ist +5V, die kriegt der Atmel 3 mal. Die habe ich mit einem Stück blanken Draht gelötet.

P(latine)1, P17 und P19 sind nicht verbunden.

Ich habe eben meinen 2. Adapter gelötet und ein paar Bilder gemacht, mal sehen, was man darauf erkennen kann. Hat gut eine Stunde gedauert - und ist schon etwas tricky.

Diese Fischer-Adapter sind einfach das, was am besten zu löten geht, im Prinzip gehen auch ähnliche, wie die von dir genannten ( http://www.reichelt.de/IC-Sockel/AW-122 ... ROVID=2402 ) aber das ist beim Löten nicht so schön. (Vermutlich wären auch da zwei 14polige besser - es gibt aber nur die 16, wenn man die kürzt, fehlen einem wieder die Stege, die es stabil mache ...)
Wenn du eh den geflashten Atmel von mir haben willst, kann ich dir allerdings auch gleich 2 von den Sockeln mit in den Umschlag tun, der Conrad hier ist in Rad-Entfernung. (... isch 'abe kein Auto...)
Ach: zum Bauen ist ein 2.ter 28 poliger Sockel nötig, in den man die beiden Adapter steckt. Sonst wird das nie gerade und man kann es auch besser halten/einspannen.

Das Sternchen hat letztlich keine Bedeutung, die Leitung muss man nur anders legen, wenn man den Debug-Adapter verwenden will. (Ggfls. nachfragen, wenn das einer wirklich macht... )

==> eben ins Wiki eine korrigierte Version geladen.
 
So... foddos... fertig.
Die Steckteile passen leider nicht nebeneinander....



was man mit Dremel oder Feile kurz mal kürzen muss...



Stecksockel in dem extra-Sockel, der als Montagehalter dient. (Unterteil)



Jetzt wird es spannend:
Der "richtige" Sockel (Oberteil) von unten, schon mit den raus-ge-X-ten Pins, und der +5v Verbindung.
 

Anhänge

  • build1.jpg
    build1.jpg
    28,7 KB · Aufrufe: 230
  • build2.jpg
    build2.jpg
    33,1 KB · Aufrufe: 230
  • build3.jpg
    build3.jpg
    45,6 KB · Aufrufe: 230
  • build5.jpg
    build5.jpg
    38,2 KB · Aufrufe: 230
Foddos Teil II

Verbindungsdrähte anlöten:

(der aufmerksame Betrachter wird den 100nF SMD-Kondensator bemerken, den ich heimlich an die Versorgung gefingert habe. Wenn man da einen bedrahteten nimmt *und* dessen eines Beinchen gleich für die +5V hernimmt, dann lötet sich das vermutlich auch gar nicht so schlimm. )



... und es wird noch spannender, zusammenfügen von Ober- und Unterteil.
Die Pins von den Sockelbeinchen passen genau in die Gabeln von dem Stecksockel.
Und die Drähte habe ich auch schon mal (etwa) dahin gelegt, wo sie hin sollen.


Sockel-Pins in den Gabeln festlöten und dann
kürzen, abisolieren und verlöten der einzelnen Drähte, hier ist gerade der Violette an der Reihe:


Fertig!
 

Anhänge

  • build6.jpg
    build6.jpg
    41,9 KB · Aufrufe: 228
  • build7.jpg
    build7.jpg
    44,1 KB · Aufrufe: 228
  • build8.jpg
    build8.jpg
    48,8 KB · Aufrufe: 228
  • build9.jpg
    build9.jpg
    54,2 KB · Aufrufe: 228
Test ... und es fluppt.

Nachher werde ich dann noch mal die Anleitung "abarbeiten" und gucken ob wirklich *alles* so tut, wie dort beschrieben.
 
Danke für die ganze Energie die Du da rein steckst. :adore:

Macht es dann eigentlich Sinn die Fischer-Sockel noch an den Montagehalter-Sockel zu kleben?
 
Mit Montage-(Hilfs-) Sockel meinte ich den unteren, der kommt aber wieder ab. (Das sollte ich im "Fertig"-Bild auch richtig zeigen. )

Ansonsten ist die Konstruktion ziemlich stabil, da muss man nichts verkleben.
 

Anhänge

  • build10.jpg
    build10.jpg
    26,9 KB · Aufrufe: 211
Achso, deswegen „Montage“, also nur Hilfsmittel bei der Montage. Habe ich miss verstanden, wie peinlich. :oops:
 
Nüscht peinlich - wenn du es missverstanden hast, dann war es nicht so eindeutig dargestellt, wie ich das gerne hätte.
 
So... ein habbich noch ...

So sieht es dann eingebaut aus:


... und einen Bug habe ich auch schon gefunden... der Pitch-Bender-Offset war falsch.
Wobei ich mir da sowieso nicht sicher bin, ob der "bipolare" Pitch-Bender-Anteil so richtig ist. Die DACs können nur positive Spannungen, daher hat man dann manchmal keine Bender-Wirkung nach links.
Weniger als Null geht nicht, und ein Level, von dem was abgezogen werden kann, muss irgendwo her kommen. Vielleicht sollte ich da eine Automatik einbauen: wenn ein DAC *nur* den Pitchbender ausgibt, dann wird da ein Offset draufaddiert, wenn der Pitchbender zusätzlich auf einem Ausgang ist, dann bleibt er bipolar. Ist, glaube ich, ganz sinnig...
 

Anhänge

  • build11.jpg
    build11.jpg
    56,1 KB · Aufrufe: 207
Pitch-Bender habe ich wie überlegt gemacht, das funktioniert so relativ unauffällig.
Wenn der Pitch-Bender tatsächlich auf Pitch liegt, wird er etwas runterskaliert. Damit ist das wenigstens so halbwegs brauchbar.

Ein paar weitere Bugs habe ich auch noch gefunden - so dieses typisch peinliche Zeugs, was im Code eher harmlos falsch ist, beim Anwender aber stets die Frage aufwirft, ob das Ding überhaupt mal jemand ausprobiert hat.

Den Clock-Teil habe ich noch etwas aufgeräumt. Der Clock-Ausgang wird übrigens synchron zum Midi Song-Position-Pointer gehalten. Damit ist die Lage zu den Takten immer gleich. Insbesondere kann man den Clockausgang damit auch nutzen, um einen Sequenzer anzusteuern, der dann auch bei 1/16tel Ansteuerung nicht irgendwo weiter schaltet, sondern immer schön auf den richtigen 16teln.
Außerdem habe ich den Clockausgang jetzt so gemacht, dass er die halbe Clockzeit an ist - damit kann man ihn direkt als gesyncten Rechteck LFO nehmen.
 
So... die ge-gatede CV habe ich jetzt auf den "Trig" Schalter im CC-Modus gelegt.

Ansonsten alles ins Wiki eingepflegt (Hardware, Software [1][2] [3] ) , Texte noch mal etwas aufgeräumt, ich denke das hat jetzt einen Zustand, dass man loslegen kann.
 
... heute 3 Sätze Adaptersockel gekommen, hab dann in einigen Tagen (Wochen ;-) je nach Zeit) hoffentlich 2 (rohe oder fertige), möglichst im Tausch mit geflashtem ATMega, abzugeben.

Ach und: Danke nordcore für die tolle Doku und die Bilder!
 
PM mal deine Adresse, dann schicke ich dir drei gebrannte Atmels.
 
ähhh... ich hätte gern ein pcb und bin grad am zeichnen... (wer auch eins will kann dann eins haben, aber das wird dauern fräse kommt erst...)

ich check diese grafik nicht ganz:
Adapter.gif



Wie ist das gemeint?
Ich nehm an P steht für pic und A für atmel...
Nur warum stehn dann Pic und Atmel links und rechts jeweils auf beiden seiten? :?

Achja die Platine soll einen sockel bekommen auf der andern Seite Stifte, das ganze um eine halbe sockelbreite versetzt.
 
Computerliebe schrieb:
Achja die Platine soll einen sockel bekommen auf der andern Seite Stifte, das ganze um eine halbe sockelbreite versetzt.

Jupp, deswegen verstehst du das auch nicht ;-)
Bei dem Bild ist der Atmel innen und die Platine außen. Das ist so natürlich schematisch - mechanisch wäre das unmöglich, solange Atmel die Chips nicht endlich in 150mil schmalen Gehäusen liefert :motz: .
(Ausdrucken und an den Linien wo die = und x drauf sind nach unten falzen, dann kommt es hin... )

Und Vorsicht - im Semtex kommt auf der Pin1 Seite relativ bald der ggfls. hoch bauende Quarz. Mit dem möchtest du nicht kollidieren.

Netzliste:
(Netzname: angeschlossen Pins wobei A=Atmel und P=Platine )
LED: A1, P7
RX: A2, P18
WR2: A3, P3
WR3: A4, P4
WR4: A5, P5
Button: A6, P6
+5V: A7, P20, A20, A21
GND: A8, A22, P8
Osc1: A9, P9
Osc2: A10, P10
Gate1: A11, P11
Gate2: A12, P12
Gate3: A13, P13
Gate4: A14, P14
Gate5: A15, P15
Gate6: A16, P16
WR1: A17, P2
D0: A18, P21
D1: A19, P22
D2: A23, P23
D3:A24,P24
D4:A25,P25
D5:A26,P26
D6:A27,P27
D7:A28,P28

Netze mit nur einem Pin: (sprich: Platinen-Pins, die offen bleiben. )
P1, P17, P19
 
Ah super danke...

Da kommt mirs grad... wenn schon platine warum nicht gleich einen SMD amega?

Weil sonst würden wohl die Lötaugen von den Stiften sich mit dem mittelteil des sockels spreizen.. oder kein ic.sockel sondern leistensockel.
SMD wäre sicher die eleganteste Lösung und am verbleibenden Platz geht sich dann sicher Stifte für ISP aus ;-)

Ich glaub ich mach das gleich so und benutz inwischen die herkömmliche variante, so einen extra atmel kann man ja immer brauchen.

Der hier: ?

http://de.mouser.com/ProductDetail/Atme ... XYhTYj0%3d
 
Den SMD-Atmel, der zwischen die Sockelbeinchen passt (QFN, MLF), kann man im DIY aber nicht mehr löten. (Der muss in den Reflow-Ofen)
Der TQFP ist zu breit. (Tiny 88 aus deinem Link ist was anderes als Mega88, das Gehäuse ist aber der gleiche Riesentrümmer... )
 
Ich hatte da auch schon drüber nachgedacht. Ist machbar, aber nur, wenn man es machen lässt. Dafür müsste die Nachfrage allerdings größer sein... (bislang haben wir noch keine einzige "ich will auch, kann aber nicht löten" Anfrage. Dass das kein Massenmarkt ist, war mir ja schon klar, aber *so* wenig überrascht mich dann doch noch... )
 
Naja wo die Software vorhanden ist ist sicher auch ein Weg dorthin :mrgreen:

Aber zu der Prinzipiellen Machbarkeit: Auch mit DIL -> DIL geht das ja nur wenn sich irgendwie durchgangslöcher im profiformat zu hause realisieren lassen, mit dem Aufwand kann man ja dann gleich bga nehmen daher...
Ein schnelles Googlen ergibt das hier: http://www.colinmackenzie.net/electroni ... uit-boards

Mit Vakuum tisch geht das also...

Klar der Aufwand lohnt sich nicht, höchstens wenn alles schon vorhanden wäre (Hab mir eine Mini CNC fräse gekauft daher der gedanke mit den PCBs ;-) )
 


Zurück
Oben