"TnT" CORE32 Midi IN Message

! Das sind die richitgen Bilder !

R0 und R1 scheinen wieder nicht richtig zu funktionieren.

Für alle Tasten, pro Matrix kommt wieder nur eine Note an.

Bei dem letzten AINX4 Board gibt es auch probleme. Die Auflösung ist anders als bei den ersten drei.

Die meisten Potis des DINX4_4 Board an J16 geben mir nur den teilweg bereich wieder.

Alle anderen Potis, Kanal 1 -12, zeigen mir von Links bis Mitte (00 - 3F) und (3F - 7F) von der Mitte nach Rechts, an.

Bei DINX4_4, Kanal 13 bis 16, zeigen sie mir nur (L-Mitte-R) 2A - 7F - XX an

NUR beim 4. Modul an J16.

Habe schon das Modul gewechselt, um zu sehen, ob es am Modul lieg.

Ist aber auch nicht der Fall.

Nur nochmal als Bestaetigung - welche Events werden gesendet, wenn Du mit Deinen letzten Hardware-Fixes folgende Konfiguration verwendest:

#define DIN_16x16_L0 12
#define DIN_16x16_R0 11

// DINs of second 16x16 matrix (counted from 1)
#define DIN_16x16_L1 14
#define DIN_16x16_R1 13

// DOUTs of both matrices
#define DOUT_16x16_L 1
#define DOUT_16x16_R 2
// (not swapped!)
[/code]









Dass immer noch die gleichen Events fuer die gleiche Spalte gesendet werden, verstehe ich nicht



In meinem urspruenglichen "Quick&Dirty" Code war ja ein Fehler drin (pin\_sr wurde nicht zur Note addiert), den hast Du selbst gefunden, danach funktionierte es angeblich... und nun nicht mehr? Ich habe den Fehler mittlerweile auch in meiner Vorlage korrigiert:



[http://svnmios.midibox.org/filedetails.php?repname=svn.mios32&path=%2Ftrunk%2Fapps%2Fquickies%2Fcsc%2Fapp.c](http://svnmios.midibox.org/filedetails.php?repname=svn.mios32&path=%2Ftrunk%2Fapps%2Fquickies%2Fcsc%2Fapp.c)







Ob der Code fehlerfrei ist, kann ich natuerlich nicht sagen - habe die Hardware ja nicht vor mir liegen und kann es nicht selbst ausprobieren.







Aber vielleicht hast Du auch mit Deinen eigenen Aenderungen einen Fehler eingebaut, der zu diesem Effekt fuehrt?



Am besten setzt Du nochmal komplett auf meine Vorlage auf...







Falls das nicht weiterhelfen: MIOS\_MIDI\_SendDebugMessage is your friend! -\> [http://svnmios.midibox.org/filedetails.php?repname=svn.mios32&path=%2Ftrunk%2Fapps%2Ftutorials%2F003\_debug\_messages%2FREADME.txt](http://svnmios.midibox.org/filedetails.php?repname=svn.mios32&path=%2Ftrunk%2Fapps%2Ftutorials%2F003_debug_messages%2FREADME.txt)







AIN an J16: die 4 Pull-Ups (R30a/b/c/d) duerfen nicht verloetet (bzw. in den Sockel gesteckt) werden.







Gruss, Thorsten.

Okay.

Das werde ich versuchen.

Werde dein Programm im Originalzustand lassen.

Habe “+sr_pin” nur mal aus reinem Interesse ohne Ahnung hinzugefügt.

Das mit MOD und ROW ist mir ohne Ahnung, viel zu kompliziert.

Das einzige was ich an dieser Programmiersprache beherrsche, ist höchstens die logic.

Zusammenhänge zwischen Befehlen, ohne Routine, in einem fremden Programm, sind schwer nachzuvollziehen.

Nach dem keine einzelne Note angezeigt wurde, habe ich einfach mal (ohne Ahnung) einige möglichkeiten ausprobiert.

" Es kann ja nicht sehr viel kaputt gehen… "

Beim dazufügen von " + sr_pin " habe ich ein “besseres” ergebnis, erhalten.

Ich weiss erlich gesagt gar nicht, ob es hinzugefügt werden kann !

Ich zweifel lieber an meinen Kenntnissen als an deinen.

Nun gut.

Habe mal alles nach plan angeschlossen und geschaut was passiert.

AINX4 : R30 wurde entfernt und der Jumper J24 auf 3.3V gestöpselt. <– Funktioniert alles perferkt!! :thumbsup:

MATRIX : Gleiches Problem. Die -R- Hälfte gibt keine Werte wieder.

und die Bilder noch!

Möchte keinen Bilderhost aus dem Server machen, habe diese nur nochmal zur vollständigen Einsicht geladen.

Debug Message gibt nur die Initialisierung wieder, wenn ich MIOS Studio mit angeschlossenem Core32 starte.

Kein tastendruck oder Poti-bewegung wird angezeigt.

Aber Virtual-Midi-Keyboard zeigt das debug tool bei klicken einer Pianotaste an.

Original text aus dem Tutorial wurde ins Programm eingefügt, ohne es diesen zu verändern.


// send received MIDI package to MIOS Terminal

MIOS32_MIDI_SendDebugMessage(“Port:%02X Type:%X Evnt0:%02X Evnt1:%02X Evnt2:%02X\n”,

port,

midi_package.type,

midi_package.evnt0, midi_package.evnt1, midi_package.evnt2);


Danke und schönen Gruß

Debug-Meldungen vereinfachen das Debuggen von Routinen, man baut sie nachtraeglich an den interessanten Stellen ein, und zwar idealerweise so, dass man sie jederzeit auch wieder ausschalten kann, ohne sie komplett zu entfernen (bspw. via #if statements)

Die Kunst ist, Stellen zu finden, die nicht zu oft angesprungen werden (ansonsten wird man unnoetigen Meldungen zugemuellt), die einem jedoch trotzdem erlauben, das Fehlverhalten der Routine zu verstehen.

Deshalb kann ich Dir auch nur einen Anfang geben, den Rest musst Du interaktiv “erforschen”, ansonsten wird dieser Thread noch wochenlang weiterlaufen…

Sag mal… wie alt bist Du eigentlich, und hattest Du schonmal Informatikunterricht?

(Ich frage das nicht, um Dich blosszustellen, sondern um Dir gezieltere Antworten geben zu koennen)

Habe nun folgende Meldung in app.c eingebaut:

// a useful debug message to print out temporary variables
// disable it by changing "#if 1" by "#if 0"
#if 1
MIOS32_MIDI_SendDebugMessage("Mod:%d Row:%d sr_pin: %d value:%d\n",
mod, row, sr_pin, value);
#endif
[/code]









Ausserdem habe ich mir die Funktion nochmal genau angeschaut, und dabei wohl den Fehler gefunden: die "changed" Variable war nur 8 bit (u8), Du benoetigst jedoch 16 bit (u16)







Uebernimm bitte die komplette TASK\_MATRIX\_Scan() Funktion.







Und schau' Dir die Meldungen im MIOS Terminal an - Du wirst ueberrascht sein, wie verstaendlich der Algorithmus auf einmal wird ;)







Gruss, Thorsten.

Überraschung?!

“Ja haben wir denn schon weihnachten?!”

Bezüglich Informatikunterricht muss ich dich enttäuschen.

Kenne die Computer seid über 15 Jahre,vom Schneider PC, bis Amiga 500, C64, 386er und und und, aber die Programmierung habe ich nie angefangen.

Mal hier, mal dort, etwas aufgeschnappt und verstehen können.

Da immer wieder “neue” Sprachen kamen, hab ich kein großes Interesse daran gehabt.

C Programmtechnisch absoluter anfänger.

Mittlerweile kenne ich aber “%d” Ganzzahlwertausgabe, Endlosschleife…

aber nicht das genaue Verhalten bei größeren Programmen.

Mit der Zeit, wird das aber schon.

Übung macht den Meister, heisst es so schön.

Habe hier am Anfang zum Teil nur “Bahnhof” verstanden.

Die Struktur der Programm, ist eigentlich ganz simple.

Werde dann mal sehen, was MIOS ausspuckt und nochmal Bescheid geben.

Danke und schönen Gruß

Debug ist auch erledigt.

Alle Tasten werden über Debug ausgespuckt. :thumbsup:

Matrix / Mod: 0,1 Row: 0-15 sr_pin: 0-15 Value: 0,1

Vor lauter Bäumen, übersah ich anscheinend den Wald!!! :rofl:

:fear: Geist und Seele bewahrten Ruhe und bewiesen Kraft.

Nach fast 4 Zigaretten, 1 Bier, viel :clover: und vor allem die Schnauze voll, machte ich mal aus reiner neugier,

aus

// each channel has 16 buttons

u8 note = mod*16 + 0x3c + sr_pin; // 0x3c is C-3

// each channel has 16 buttons

u8 note = mod + 0x3c + sr_pin; // 0x3c is C-3

UND es funktioniert, perfekt.

mod(0) + 0x3C + sr_pin (0-15) = 0x3C - 0x4b

mod(1) + 0x3C + sr_pin (0-15) = 0x4C - 0x5b

Was die 16 bei Mod*16 begrenzte oder machte, bleibt für mich ein rätsel.

Nach dem dritten Edit dieses Posts,

danke an T.K. und den anderen.

und schönen Gruß