PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit MIDI und debounce/interrupts/fallunterscheidung



C2H6O
01.10.2009, 19:50
Moin
Ich spiel grad ein bisschen mit MIDI rum, klappt theoretisch auch, aber halt nur theoretisch.
Folgendes Problem:
Das funktioniert einwandfrei:


$regfile = "M16def.dat"
$crystal = 16000000
Baud = 31250

Config Pind.5 = Output
Config Pind.6 = Output

Do
Print Chr(&Hb1) ; Chr(&H3) ; Chr(&H7f);
toggle portd.5
wait 1
Print Chr(&H91) ; Chr(&H60) ; Chr(&H7f);
toggle portd.6
wait1

Loop
End
Alles wird wünderschön empfangen und die LED schaltet um.

Aber wenn ich die Codes nach einem Tastendruck senden will, geht gar nichts mehr.


$regfile = "M16def.dat"
$crystal = 16000000
Baud = 31250

Config Pind.2 = Input 'taste1
Config Pind.3 = Input 'taste2
Config Pind.4 = Input 'taste3

Config Pind.5 = Output 'led
Config Pind.6 = Output 'led2

Do
Debounce Pind.2 , 1 , Taster1 'taster entprellen
Debounce Pind.3 , 1 , Taster2
Debounce Pind.4 , 1 , Taster3
Loop
End

Taster1:
Print Chr(&Hb1) ; Chr(&H3) ; Chr(&H7f);
Toggle Portd.5
Return

Taster2:
Print Chr(&Hb1) ; Chr(&H12) ; Chr(&H0);
Toggle Portd.6
Return

Taster3:
Print Chr(&H91) ; Chr(&H60) ; Chr(&H7f);
Return

Am Interface blinkt zwar die MIDI-In Lampe, aber am PC kommen keine gültigen Midi-Daten an.
Auch funktioniert das umschalten der LED nur sporadisch.
Wenn ich Interrupts benutze geht es auch nicht.
Wenn ich eine If-Abfrage benutze, kommt zwar manchmal was an, aber oft nicht das richtige, oder es wird zuviel oder zu wenig gesendet.

Mfg und schon mal danke für die Hilfe

for_ro
01.10.2009, 21:23
Schreibe mal hinter den Debounce Befehl noch , Sub also
Debounce Pind.2 , 1 , Taster1, Sub

Du willst mit Return zurückkehren, aber da das Sub fehlt, hat sich Bascom keine Rücksprungadresse gemerkt.

C2H6O
05.10.2009, 20:07
Moin
Danke, funktioniert.
Das erklärt zwar immer noch nicht warum das mit If-Abfragen nicht ging, aber egal, werd ich noch rausfinden.
mfg

for_ro
05.10.2009, 20:14
Moin
Das erklärt zwar immer noch nicht warum das mit If-Abfragen nicht ging, aber egal, werd ich noch rausfinden.

Das wird dir auch keiner erklären können, weil du keinen Code dazu gezeigt hast. Für den Interrupt Versuch auch nicht.
Häufig liegt es an so Kleinigkeiten wie dem vergessenen Sub, dass eine an sich richtige Vorgehensweise nicht funzt.