INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Problem Schieberegister, Midi Controller
29.09.2015, 07:04
Beitrag #17
RE: Problem Schieberegister, Midi Controller
Ich hänge jetzt seit gestern an einem ganz merkwürdigem Problem..
Hatte das erste Shiftregister am laufen, habe dann das 2te dazu gepackt und jetzt bekomme ich nur vom ersten Register den 1sten Taster und das zweite Register komplett ausgelesen.

Habe die schaltung mehrmals neu aufgebaut und bin mir sicher das es an der programmierung liegt...

Code:
#include <SPI.h>
#include <MIDI.h>
#include <midi_Defs.h>
#include <midi_Message.h>
#include <midi_Namespace.h>
#include <midi_Settings.h>

byte switchBank1;   // Register 1
byte switchBank2;   // Register 2

byte oldswitchBank1; // previous state
byte oldswitchBank2;

const byte LATCH = 6;
MIDI_CREATE_DEFAULT_INSTANCE();

void setup ()
{ MIDI.begin();
  SPI.begin ();
  Serial.begin (9600);
  
  pinMode (LATCH, OUTPUT);
  digitalWrite (LATCH, HIGH);
}  // end of setup



void loop ()
{
  digitalWrite (LATCH, LOW);    // pulse the parallel load latch
  digitalWrite (LATCH, HIGH);
  switchBank1 = SPI.transfer (0);   // Shiftregister 1
  switchBank2 = SPI.transfer (0);   // Shiftregister 2
  byte mask1 = 1;
  
  for (int i = 1; i <= 8; i++)      // Shiftregister 1
    {
    if ((switchBank1 & mask1) && !(oldswitchBank1 & mask1))
      {
      if (i == 1){MIDI.sendControlChange(1, 127, 1);}
      if (i == 2){MIDI.sendControlChange(2, 127, 1);}
      if (i == 3){MIDI.sendControlChange(3, 127, 1);}
      if (i == 4){MIDI.sendControlChange(4, 127, 1);}
      if (i == 5){MIDI.sendControlChange(5, 127, 1);}
      if (i == 6){MIDI.sendControlChange(6, 127, 1);}
      if (i == 7){MIDI.sendControlChange(7, 127, 1);}
      if (i == 8){MIDI.sendControlChange(8, 127, 1);}
      }
      
  mask1 <<= 1;  
  oldswitchBank1 = switchBank1;
  
  byte mask2 = 1;

   for ( i = 9; i <= 16; i++)        // Shiftregister 2
    {
    if ((switchBank2 & mask2) && !(oldswitchBank2 & mask2))
      {
      if (i == 9) {MIDI.sendControlChange(9, 127, 1);}
      if (i == 10){MIDI.sendControlChange(10, 127, 1);}
      if (i == 11){MIDI.sendControlChange(11, 127, 1);}
      if (i == 12){MIDI.sendControlChange(12, 127, 1);}
      if (i == 13){MIDI.sendControlChange(13, 127, 1);}
      if (i == 14){MIDI.sendControlChange(14, 127, 1);}
      if (i == 15){MIDI.sendControlChange(15, 127, 1);}
      if (i == 16){MIDI.sendControlChange(16, 127, 1);}
      
      }  // end of bit has changed
    mask2 <<= 1;  
    }  
  
   oldswitchBank2 = switchBank2;
    }  
}  // end of loop
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.09.2015, 10:20
Beitrag #18
RE: Problem Schieberegister, Midi Controller
Ich würde es mit einer 16 ner Schleife einlesen,
ist aber nicht zwingend.

Stromlaufplan hilft und :sleepy:schadet nichts!

Nicht jeder Neuling in einem Forum hat keine Ahnung über die Materie!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.09.2015, 10:33 (Dieser Beitrag wurde zuletzt bearbeitet: 29.09.2015 10:59 von Vittelboy.)
Beitrag #19
RE: Problem Schieberegister, Midi Controller
das ist auch eine möglichkeit aber da es am ende 11 Schieberegister werden sollen.
muss der code erweiterbar sein.
ich probier das aber gleich mal aus

hab gerade ein bisschen rumprobiert und fest gestellt das eine geschweifte klammer falsch war und ich ein 2tes i brauchte jetzt funktioniert es Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.09.2015, 11:47
Beitrag #20
RE: Problem Schieberegister, Midi Controller
Hi,
ich weiss nicht genau, was das SPI.transfer genau macht. Vielleicht kommen die Schieberegister nicht so ganz nach oder irgendwelche Kabel in Deiner Schaltung sind zu lang, oder oder...
Ich wuerde folgendes probieren: Schmeiss den SPI-Kram raus und mach das ganze selbst. Dann kannst Du jeweils ein paar Mikrosekunden Wartezeit enfuegen. Spaeter kann man das ggf. wieder rausnehmen.
Ausserdem:
Code:
{
       if (i == 1){MIDI.sendControlChange(1, 127, 1);}
       if (i == 2){MIDI.sendControlChange(2, 127, 1);}
       if (i == 3){MIDI.sendControlChange(3, 127, 1);}
       if (i == 4){MIDI.sendControlChange(4, 127, 1);}
       if (i == 5){MIDI.sendControlChange(5, 127, 1);}
       if (i == 6){MIDI.sendControlChange(6, 127, 1);}
       if (i == 7){MIDI.sendControlChange(7, 127, 1);}
       if (i == 8){MIDI.sendControlChange(8, 127, 1);}
       }
...geht kuerzer auch so:
Code:
{
       MIDI.sendControlChange(i, 127, 1);
}
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.09.2015, 13:01
Beitrag #21
RE: Problem Schieberegister, Midi Controller
ich hatte einen klammer fahler mehr war es letztendlich nicht hab es jetzt auch mit 3 Registern und 24 Tastern getestet und es funktioniert einwandfrei Big Grin

Code:
#include <SPI.h>
#include <MIDI.h>
#include <midi_Defs.h>
#include <midi_Message.h>
#include <midi_Namespace.h>
#include <midi_Settings.h>

byte switchBank1;   // Register 1
byte switchBank2;   // Register 2
byte switchBank3;   // Register 3

byte oldswitchBank1; // previous state
byte oldswitchBank2;
byte oldswitchBank3;


const byte LATCH = 6;
MIDI_CREATE_DEFAULT_INSTANCE();

void setup ()
{ MIDI.begin();
  SPI.begin ();
  Serial.begin (9600);
  
  pinMode (LATCH, OUTPUT);
  digitalWrite (LATCH, HIGH);
}  // end of setup



void loop ()
{
  digitalWrite (LATCH, LOW);    // pulse the parallel load latch
  digitalWrite (LATCH, HIGH);
  switchBank1 = SPI.transfer (0);   // Shiftregister 1
  switchBank2 = SPI.transfer (0);   // Shiftregister 2
  switchBank3 = SPI.transfer (0);   // Shiftregister 3
  byte mask1 = 1;
  
  for (int i = 1; i <= 8; i++)      // Shiftregister 1
    {
    if ((switchBank1 & mask1) && !(oldswitchBank1 & mask1))
      {
      if (i == 1){MIDI.sendControlChange(1, 127, 1);}
      if (i == 2){MIDI.sendControlChange(2, 127, 1);}
      if (i == 3){MIDI.sendControlChange(3, 127, 1);}
      if (i == 4){MIDI.sendControlChange(4, 127, 1);}
      if (i == 5){MIDI.sendControlChange(5, 127, 1);}
      if (i == 6){MIDI.sendControlChange(6, 127, 1);}
      if (i == 7){MIDI.sendControlChange(7, 127, 1);}
      if (i == 8){MIDI.sendControlChange(8, 127, 1);}
      }
      
  mask1 <<= 1;  
    }
  oldswitchBank1 = switchBank1;
  
  byte mask2 = 1;

   for (int i2 = 9; i2<= 16; i2++)        // Shiftregister 2
    {
    if ((switchBank2 & mask2) && !(oldswitchBank2 & mask2))
      {
      if (i2 == 9) {MIDI.sendControlChange(9, 127, 1);}
      if (i2 == 10){MIDI.sendControlChange(10, 127, 1);}
      if (i2 == 11){MIDI.sendControlChange(11, 127, 1);}
      if (i2 == 12){MIDI.sendControlChange(12, 127, 1);}
      if (i2 == 13){MIDI.sendControlChange(13, 127, 1);}
      if (i2 == 14){MIDI.sendControlChange(14, 127, 1);}
      if (i2 == 15){MIDI.sendControlChange(15, 127, 1);}
      if (i2 == 16){MIDI.sendControlChange(16, 127, 1);}
      
      }  // end of bit has changed
    mask2 <<= 1;  
    }  
  
   oldswitchBank2 = switchBank2;

     byte mask3 = 1;

   for (int i3 = 17; i3<= 24; i3++)        // Shiftregister 3
    {
    if ((switchBank3 & mask3) && !(oldswitchBank3 & mask3))
      {
      if (i3 == 17) {MIDI.sendControlChange(17, 127, 1);}
      if (i3 == 18){MIDI.sendControlChange(18, 127, 1);}
      if (i3 == 19){MIDI.sendControlChange(19, 127, 1);}
      if (i3 == 20){MIDI.sendControlChange(20, 127, 1);}
      if (i3 == 21){MIDI.sendControlChange(21, 127, 1);}
      if (i3 == 22){MIDI.sendControlChange(22, 127, 1);}
      if (i3 == 23){MIDI.sendControlChange(23, 127, 1);}
      if (i3 == 24){MIDI.sendControlChange(24, 127, 1);}
      
      }  // end of bit has changed
    mask3 <<= 1;  
    }  
  
   oldswitchBank3 = switchBank3;
      
}  // end of loop
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Schieberegister LED Steuerung zeitlich anpassen Noformat 18 275 Gestern 16:45
Letzter Beitrag: Noformat
  SerialComInstruments 4 Problem Darstellung Nextero 35 464 15.12.2017 18:51
Letzter Beitrag: ElEspanol
  Problem mit Nema17 und A4988 Philthy 6 188 08.12.2017 12:35
Letzter Beitrag: Tommy56
  Arduino -> Controllino [Problem gelöst] Cyrilsneer 17 780 27.11.2017 18:49
Letzter Beitrag: Franz54
Question Problem beim seriellen Einlesen von RFID-Reader Bezel 5 322 05.11.2017 22:37
Letzter Beitrag: Tommy56
  PS3 Controller LED coctoroge 6 372 23.10.2017 20:45
Letzter Beitrag: Tommy56
  NeoPixels: Sketch will nicht - Problem mit delay? Zabsi 5 523 22.08.2017 15:17
Letzter Beitrag: Tommy56
  Problem mit LSM 303 Snörb 1 339 22.08.2017 14:16
Letzter Beitrag: Snörb
  Problem mit externem Interrupt manfred474 13 1.197 13.08.2017 08:54
Letzter Beitrag: MicroBahner
  Problem mit Klassen GuaAck 4 520 09.08.2017 09:28
Letzter Beitrag: MicroBahner

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste