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
  NeoPixels: Sketch will nicht - Problem mit delay? Zabsi 5 327 22.08.2017 15:17
Letzter Beitrag: Tommy56
  Problem mit LSM 303 Snörb 1 240 22.08.2017 14:16
Letzter Beitrag: Snörb
  Problem mit externem Interrupt manfred474 13 940 13.08.2017 08:54
Letzter Beitrag: MicroBahner
  Problem mit Klassen GuaAck 4 365 09.08.2017 09:28
Letzter Beitrag: MicroBahner
  LEDs ansteuern ohne Delay mir MIDI abfrage OnkelPelle 11 872 20.07.2017 22:35
Letzter Beitrag: hotsystems
Question Problem mit TFT Sam217 8 687 20.07.2017 21:51
Letzter Beitrag: hotsystems
  Problem FastLED fliege_m 3 454 16.07.2017 16:56
Letzter Beitrag: Tommy56
Question Problem beim Hochladen auf AtTiny45. Hilfe -.- Jonas Lindenblatt 17 1.327 16.04.2017 12:58
Letzter Beitrag: Jonas Lindenblatt
  Smart Home Webserver Basic Authentication Problem Osotastic 21 1.255 20.02.2017 18:00
Letzter Beitrag: Tommy56
  Problem mit Sketch senden an Uno feuerwehr 5 973 31.01.2017 20:41
Letzter Beitrag: Tommy56

Gehe zu:


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