Hallo ihr lieben..
Vllt kennen einige von euch den Stepsequencer FLstudio
(http://www.image-line.com/documents/flstudio.html). Ich habe dort
bereits einige Projekte gestartet, jedoch merkt jeder der sich damit
beschäftigt das man die vielzahl der Effekte (besonders beim live
mischen) nicht (in entsprechender Zeit) automatisieren kann . Daher
wollte ich mir einen Midi-Controller bauen.
Ich habe mir einen Midi2Usb adapter gekauft, welcher von FLstudio auch
erkannt wird. Ausserdem habe ich dieses Projekt nachgebaut:
http://www.wiesolator.de/index.php?area=Musik&topic=MIDI-Einstieg&stopic=MIDI%20und%20AVR
.
Ich habe das ganze jedoch um ein LCD(4x20) erweitert um Sichtbar zu
machen ob der Atmega alles richtig macht. mein Quelltext sieht so aus:
Portd.2 = 1 ' internen Pull-Up aktivieren für Taster
32
' Portc.5 = 1
33
' Portc.4 = 1
34
Portb.2 = 0
35
Portb.1 = 0
36
Goto Start_routine
37
38
Start_routine: 'Welcome-screen
39
Cls
40
I = 0
41
42
Locate 1 , 1
43
Lcd "Welcome :)"
44
Do
45
Locate 2 , 1
46
Lcd Chr(0)
47
Waitms 25
48
Locate 2 , 1
49
Lcd Chr(1)
50
Waitms 25
51
Locate 2 , 1
52
Lcd Chr(2)
53
Waitms 25
54
Locate 2 , 1
55
Lcd Chr(3)
56
Waitms 25
57
Locate 2 , 1
58
Lcd Chr(4)
59
Waitms 25
60
Locate 2 , 1
61
Lcd Chr(5)
62
Waitms 25
63
Incr I
64
Loop Until I = 7
65
66
67
68
69
70
'Do
71
' Debounce Pinc.5 , 1 , On_taster1 , Sub
72
' Debounce Pinc.4 , 1 , Start_routine , Sub
73
'Loop
74
75
Main:
76
Do
77
If Taster = 0 Then
78
If Keydown = 1 Then
79
Gosub Sendmidinoteon
80
Keydown = 0
81
End If
82
Else
83
If Keydown = 0 Then
84
Gosub Sendmidinoteoff
85
Keydown = 1
86
End If
87
End If
88
Waitms 20
89
Loop
90
End
91
92
Sendmidinoteon:
93
Print Chr(&B01000000); ' NOTE-ON-Command
94
Print Chr(69); ' Tasten-Nummer 69 (A4)
95
Print Chr(100); ' Key-Down-Velocity 100
96
Lcd "note an"
97
Waitms 50
98
Cls
99
Return
100
101
Sendmidinoteoff:
102
Print Chr(&B10000000); ' NOTE-OFF-Command
103
Print Chr(69); ' Tasten-Nummer 69 (A4)
104
Print Chr(0); ' Release-Velocity 0 (Default)
105
Lcd "note aus"
106
Waitms 50
107
Cls
108
Return
109
110
111
112
113
On_taster1:
114
115
116
Return
An dem Midi2Usb adapter sind Led's welche anzeigen ob Daten empfangen
wurden,
Welche auch leuchten wenn ich den switch betätige. FLstudio jedoch
erkennt Keinen Tastendruck.
Treiber für den Adapter hat Windows 7 automatisch installiert und
Flstudio erkennt den Adapter auch als Midi-device..
Und jetzt meine Frage : Muss ich jetzt Software(FL)- oder
Hardwaretechnisch etwas verändern und was ? :)
lG
Tim T.
Karl schrieb:> Stimmen die 1 MHz in $crystal?
Ja steht zumindestens so in dem "Tutorial" :)
ausserdem hat diese "traffic-led" mit 4mhz nicht geleuchtet, mit dem
1Mhz jedoch schon...
Karl schrieb:> Funktioniert es ohne das LCD? (Befehle auskommentieren)
irgendwelche Daten werden ja ausgegeben, wahrscheinlich auch Midi daten,
da ja diese Empfangs LED am adapter leuchtet wenn ich den Note_on bzw
Note_off Befehl sende...
Weiss denn jemand wie das in FLStudio verdrahtet ist welche
Inpu-Midi-Befehle man auf die Controls verlinken kann ?
korregiert mich ruhig wenn ich falsch liege :D
Tim T.
@Tim
Wenn der Adapter ein ganz normaler MIDI Adapter ist (also als MIDI-Gerät
erkannt wird) dann kannst du ja mit einem ganz einfachen MIDI-Monitor
gucken obs richtig ankommt. Dann müsstest du nur noch im FLstudio wegen
dem Routing suchen. Da dürfte es ja Freeware-MIDI-Monitore geben die
auch unter Win 7 laufen.
Sind denn die Fuses richtig gesetzt ? Dann müsste $crytsal nur auf den
verbauten Quarz richtig eingestellt werden. Der Rest ist dann Bascom.
Tim T. schrieb:> Ja steht zumindestens so in dem "Tutorial" :)
Kontrolle ist besser. Einfach die Fuses überprüfen und ggf. richtig
setzen. Der Tip von Rene mit dem Monitor ist gut.
Normalerweise verwendet man für eine verlässliche serielle Kommunikation
eine externe Taktquelle (externer Quarz z.B.). Frage mich, warum das bei
MIDI nicht so sein soll????
Also MIDI ohne Quarz wird nix. Gilt für alle Übertragungen per UART mit
definierter Baudrate. Bei MIDI reicht ein "gerader" Quarz, da 31250
recht leicht daraus gebildet werden kann. Daher würd ich einfach mal die
Fuses checken. Mit dem Monitor ist immer ne gute Quelle da auch u.u.
Fehler angezeigt werden, vorausgesetzt das Monitor-Programm findet das
Interface bzw der Treiber des Interfaces ist wirklich als normales MIDI
Gerät im Gerätemanager (unter XP) aufzufinden. Wenn dann nix hilft
sollte man den Fehler spätestens mit einem Scope finden können. MIDI-Out
ist recht unspektakulär und einfach.
Hm Okei danke für die Info's...
Hab noch nie was mit externem Quarz gemacht vllt könnte mal jmd ein
Bildchen für mich zeichen oder so ? :D
Aber generrell wieso benötigt man ein externes wieso tuts das interne
nicht ? ISt das zu ungenau?
Ich werde das morgen mal mit dem Monitor testen... ist es denn wichtig
wielang die kabel sind ? habe nämlich ca 20cm unabgeschirmte litze da
... vielleicht gibts da einfach zu viele störsignale.
Karl schrieb:> Einfach die Fuses überprüfen und ggf. richtig> setzen.
Wie mache ich das und wie soll ich die setzen ? habe bisher nur mit
Standard-konfiguration gearbeitet :)
Danke auf jedenfall schonmal für die Tips :)
Tim T.
Das höchste Bit im Midi-Status-Byte muss immer high(1) sein, von daher
kann
Print Chr(&B01000000); '
NOTE-ON-Command
nicht stimmen. Im Midi-Protokoll wäre das irgendein Datenbyte, was zu
einer vorherigen Nachricht gehört. Wird wohl von allen Empfängern
ignoriert, weil Midi-Nachrichten definierte Längen haben oder von
Start-Stop Statusbytes umgeben sind (SysEx).
In Fruity musst du in den Midi-Settings dein Midi-Input wählen und
"enable" markieren, in der Liste der Inputs wird es dann als "active"
dargestellt. Wenn du dann etwas spielen willst, musst du vorher ein
Instrument öffnen, oder dessen "Channel" markiert haben oder dessen
Pianoroll im Vordergrund haben.
Du kannst fast jeden Knopf, Button, Regler usw. den du in Fruity siehst
per Midi-Steuern. Allerdings geht das nicht per Default, außer du baust
einen bereits existierenden Midi-Controller nach (für den es schon ein
Setup gibt). Ansonsten Rechtsklick auf den Knopf "Link to Controller..."
dann einen Knopf an deinem Controller bewegen. FL-Studio erkennt den in
der Regel sofort.
Tim T. schrieb:> Wie mache ich das und wie soll ich die setzen ? habe bisher nur mit> Standard-konfiguration gearbeitet :)
In BASCOM hier (Lock and Fuse Bits):
http://avrhelp.mcselec.com/index.html?program_send_to_chip.htm
Hier kannst Du die Fuse Bits lesen und schreiben. In Deinem Fall wären
wichtig das Fusebit C und Fusebit KLA987.
Die in der Hilfe gezeigte Konfiguration würde 8 MHz ergeben.
Wenn Du einen externen Quarz benutzt, musst Du ggf. das Fusebit C und in
jedem Fall das Fusebit KLA987 ändern.
Nachfolgend ein kleiner Einführungskurs bezgl. Fusebits (leider nicht
direkt auf BASCOM bezogen, aber die Optionen sind die gleichen).
http://halvar.at/elektronik/kleiner_bascom_avr_kurs/fuse_lock_bits_1/
Und immer überlegt handeln! Man kann durch falsch gesetzte Fusebits
einen AVR "töten". Vielleicht etwas drastisch formuliert, aber man kann
nur mit viel Aufwand so einen "verfusten" Mikrocontroller wieder neu
programmieren.
Hallo :)
Also ich hab grade mal mit dem Monitor MIDIOX geguckt ob da was
ankommt..
Der adapter wird als "USB Midi Interface" erkannt, liefert jedoch keine
Daten.
Wie gesagt ich habe noch nie ein externes quarz verbaut, daher könnte
ich da ein wenig hilfe brauchen (welche pins und Konfiguration in den
Fuses)...
Maik M. schrieb:> Das höchste Bit im Midi-Status-Byte muss immer high(1) sein, von daher> kann> Print Chr(&B01000000); '> NOTE-ON-Command>> nicht stimmen
Wie muss das denn aussehen ? Ich versteh das irgendwie nicht. Hab mir
eine Tabelle mit Midi Commands rausgesucht, weiss aber nichtmal welchen
ich nehmen muss (Controlchange oder Note_on ?!) da ich nicht weiß welche
FLstudio routen kann...
@Tim
Ohne externen Quarz wird das definitiv nix !!
Es kann sein das du sporadisch was empfängst aber wenns wärmer oder
kälter wird kann das ganze aussetzen. Der interne Oszillator ist ein
RC-Glied dessen Frequenz von der Temperatur abhängig ist. Ein Quarz hat
eine definierte Frequenz die weitgehend temperaturstabil ist und nur um
wenige ppm abweicht. Egal ob du per RS232, MIDI oder sonst was über den
UART was rausschickst : Der Takt muß (!!) mit einem Quarz oder externem
Taktgenerator erzeugt werden.
Ein Quarz am AVR ist total simpel. Einfach den Quarz mit seinen beiden
beinchen an XTAL 1 und XTAL 2 anschließen, und beide Beinchen noch über
jeweils einen 15-33pF Keramikkondensator gegen Masse schalten (und das
ganze 3-er-Gespann möglichst nah am AVR), die Fuses umstellen : läuft.
Die MIDI Befehle Note On/Off Program Change, Modulation (bzw Controller
Change) haben immer das höchste Bit gesetzt. Also alle Bytes von 00-7f
sind Nutzdaten. Alle Bytes von 80-FF sind Befehle.
Schick einfach mal 91 40 30 (Hexadezimal) raus und es müsste was
ankommen.
91 ist in dem Falle der Befehl Note On für Kanal 2 (!). 40 ist die Taste
und 30 die Velocity.
@ Rene B.
danke für den tipp und die erklärung :) was für ein quarz muss das sein
1mhz oder ? :D sry bin da echt noch ein ziemlicher n00b :(
Und was GENAU muss ich an den Fuses umstellen ? wie gesagt hab in meinem
Leben noch kein Fusebit umgestellt :D
und die 91 40 30 muss ich für Bacom noch in Binär umwandeln oder kann
bascom direkt hexa ?
lg
Tim T.
@Tim
Der Quarz für MIDI kann ein 1/2/4/8/16/10/20 MHz Quarz sein.
Die 31250 lassen sich am besten durch einen "geraden" Quarz (also
"ganze" Megahertz) bilden. Den Prescaler bzw die Baudrate musst du
ausrechnen und schauen wie du Bascom das beigebracht bekommst (kenne
Bascom nicht, mach das alles in C).
Bei den Fuses weiß ich ja nicht mit welchem Tool du das machst. Keine
Ahnung ob Bascom da was zur Verfügung stellt oder nicht. Das müsstest du
dir durchlesen.
Bei den 91 40 30 von Hex in Binär umwandeln weiß ich nicht ob Bascom das
kann (denke aber schon). Notalls versuche es mit 145 64 48 (dezimal).
Also alles in allem würd ich sagen : Les dir nochmal was zu Bascom
durch.
Ich denke da dürfte einige deiner Fragen beantworten. Zumal denke ich in
Bascom schon einige was mit MIDI gemacht haben.