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
  Problem mit SD Card Library BennIY 4 190 06.10.2016 18:38
Letzter Beitrag: Bitklopfer
  Problem mit SD.remove Eichner 6 211 22.08.2016 19:42
Letzter Beitrag: Eichner
  4x16 Tastermatrix Problem Michel 16 845 14.07.2016 10:02
Letzter Beitrag: StephanBuerger
  Problem mit Delay und Millis funnyzocker 1 458 26.06.2016 09:54
Letzter Beitrag: hotsystems
  Problem mit ESP8266 und EMail senden torsten_156 1 597 13.06.2016 21:14
Letzter Beitrag: torsten_156
  ESP8266_01 flashen - Problem torsten_156 12 1.048 30.05.2016 20:12
Letzter Beitrag: torsten_156
  Hardwareserial/Softserial: Problem mit Superklasse tuxedo0801 10 478 19.05.2016 12:25
Letzter Beitrag: amithlon
  ESP8266 HTML Problem arduino_weatherstation 1 494 25.04.2016 21:52
Letzter Beitrag: rkuehle
  Problem mit OLED 0.96" Display torsten_156 3 540 03.04.2016 15:10
Letzter Beitrag: hotsystems
  Problem: SDFat - Das Ende einer Datei finden und Schleife beenden MartinK 4 488 01.04.2016 05:49
Letzter Beitrag: MartinK

Gehe zu:


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