graffiti
13.12.2007, 01:30
wer kann mir helfen
ich möchte mit Midi-Kanal 7 (binär 151), Velcity 100
und bei den Noten 80 bis 88, Kanäle vom Tiny2313 schalten,
aber irgendwie wird der Midi-Kanal beim empfangen des Protokolls
verschluckt bzw. überschrieben von Velocity
Im unteren Code sollte eigentlich
Protokoll(1) 151 (Note-on Ch. 7)
Protokoll(2) 80 ....88
Protokoll(3) 100 sein
tatsächlich ist aber Protokoll(1) 100 Velocity, mit Drumcomputer getestet, ändert man Velo geht nichts mehr
Protokoll(2) sind die Noten wie es sich gehört
Protokoll(3) is nichts da
was kann die Ursache sein, das der Note-On Befehl nicht im Protokoll steht
und Velo auf Protokoll(1) geschrieben wird und nicht auf Protokoll(3)
gruß und schonmal Danke Gerhard
das Programm unten funktioniert, aber ohne den Note-on Befehl
$regfile = "attiny2313.dat"
$crystal = 8000000
$baud = 31250
Open "COMD.2:31250,8,n,1" For Input As #1
Dim Zeiger As Byte At &HA0
Zeiger = 1
Dim Flag As Byte At &HA1
Dim Adresse As Eram Byte
Dim Adresse_temp As Byte At &HA3
Dim Tempword As Word At &HA5
Adresse_temp = Adresse
Dim Tempbyte As Byte At &HA7
Dim Protokoll(3) As Byte At &HA8
Ddrd = &B11100010
Ddrb = &B11111111
Config Timer0 = Timer , Prescale = 1024
On Timer0 Timer_irq
Stop Timer0
Config Timer1 = Timer , Prescale = 64
On Timer1 Timer_irq2
Disable Timer1
Stop Timer1
Timer1 = 0
Enable Timer0
Enable Interrupts
Do
Tempbyte = Waitkey(#1)
Gosub Zeichenempfang
If Flag = 1 Then
Gosub Protokoll
Flag = 0
Zeiger = 1
End If
Loop
Zeichenempfang:
Protokoll(zeiger) = Tempbyte
If Tempbyte = 0 Then
Zeiger = 1
End If
If Protokoll(1) = 100 Then 'sollte eigentlich 151 sein
If Tempbyte = 0 Then
Flag = 1
End If
Incr Zeiger
Else
Zeiger = 1
Timer0 = 0
Start Timer0
Enable Timer0
End If
Return
End
Timer_irq:
Stop Timer0
Disable Timer0
Zeiger = 1
Return
End
Timer_irq2:
Portb = 0
Portd.6 = 0
Timer1 = 0
Disable Timer1
Stop Timer1
Protokoll(1) = 0
Protokoll(2) = 0
Protokoll(3) = 0
Return
End
Protokoll:
If Protokoll(1) = 100 Then ' sollte eigentlich Protokoll(3) sein
Flag = Protokoll(2)
If Flag = 80 Then
Portd.6 = 1
Elseif Flag = 81 Then
Portb.0 = 1
Elseif Flag = 82 Then
Portb.1 = 1
Elseif Flag = 83 Then
Portb.2 = 1
Elseif Flag = 84 Then
Portb.3 = 1
Elseif Flag = 85 Then
Portb.4 = 1
Elseif Flag = 86 Then
Portb.5 = 1
Elseif Flag = 87 Then
Portb.6 = 1
Elseif Flag = 88 Then
Portb.7 = 1
Elseif Flag = 0 Then
Portb = 0
End If
End If
Protokoll(1) = 0
Protokoll(2) = 0
Protokoll(3) = 0
Timer1 = 53036
Enable Timer1
Start Timer1
Return
End
ich möchte mit Midi-Kanal 7 (binär 151), Velcity 100
und bei den Noten 80 bis 88, Kanäle vom Tiny2313 schalten,
aber irgendwie wird der Midi-Kanal beim empfangen des Protokolls
verschluckt bzw. überschrieben von Velocity
Im unteren Code sollte eigentlich
Protokoll(1) 151 (Note-on Ch. 7)
Protokoll(2) 80 ....88
Protokoll(3) 100 sein
tatsächlich ist aber Protokoll(1) 100 Velocity, mit Drumcomputer getestet, ändert man Velo geht nichts mehr
Protokoll(2) sind die Noten wie es sich gehört
Protokoll(3) is nichts da
was kann die Ursache sein, das der Note-On Befehl nicht im Protokoll steht
und Velo auf Protokoll(1) geschrieben wird und nicht auf Protokoll(3)
gruß und schonmal Danke Gerhard
das Programm unten funktioniert, aber ohne den Note-on Befehl
$regfile = "attiny2313.dat"
$crystal = 8000000
$baud = 31250
Open "COMD.2:31250,8,n,1" For Input As #1
Dim Zeiger As Byte At &HA0
Zeiger = 1
Dim Flag As Byte At &HA1
Dim Adresse As Eram Byte
Dim Adresse_temp As Byte At &HA3
Dim Tempword As Word At &HA5
Adresse_temp = Adresse
Dim Tempbyte As Byte At &HA7
Dim Protokoll(3) As Byte At &HA8
Ddrd = &B11100010
Ddrb = &B11111111
Config Timer0 = Timer , Prescale = 1024
On Timer0 Timer_irq
Stop Timer0
Config Timer1 = Timer , Prescale = 64
On Timer1 Timer_irq2
Disable Timer1
Stop Timer1
Timer1 = 0
Enable Timer0
Enable Interrupts
Do
Tempbyte = Waitkey(#1)
Gosub Zeichenempfang
If Flag = 1 Then
Gosub Protokoll
Flag = 0
Zeiger = 1
End If
Loop
Zeichenempfang:
Protokoll(zeiger) = Tempbyte
If Tempbyte = 0 Then
Zeiger = 1
End If
If Protokoll(1) = 100 Then 'sollte eigentlich 151 sein
If Tempbyte = 0 Then
Flag = 1
End If
Incr Zeiger
Else
Zeiger = 1
Timer0 = 0
Start Timer0
Enable Timer0
End If
Return
End
Timer_irq:
Stop Timer0
Disable Timer0
Zeiger = 1
Return
End
Timer_irq2:
Portb = 0
Portd.6 = 0
Timer1 = 0
Disable Timer1
Stop Timer1
Protokoll(1) = 0
Protokoll(2) = 0
Protokoll(3) = 0
Return
End
Protokoll:
If Protokoll(1) = 100 Then ' sollte eigentlich Protokoll(3) sein
Flag = Protokoll(2)
If Flag = 80 Then
Portd.6 = 1
Elseif Flag = 81 Then
Portb.0 = 1
Elseif Flag = 82 Then
Portb.1 = 1
Elseif Flag = 83 Then
Portb.2 = 1
Elseif Flag = 84 Then
Portb.3 = 1
Elseif Flag = 85 Then
Portb.4 = 1
Elseif Flag = 86 Then
Portb.5 = 1
Elseif Flag = 87 Then
Portb.6 = 1
Elseif Flag = 88 Then
Portb.7 = 1
Elseif Flag = 0 Then
Portb = 0
End If
End If
Protokoll(1) = 0
Protokoll(2) = 0
Protokoll(3) = 0
Timer1 = 53036
Enable Timer1
Start Timer1
Return
End