Quantcast
Channel: Hart gelötet!
Viewing all articles
Browse latest Browse all 108

MIDI Shield für den Arduino

$
0
0
Nach dem LCD Shield folgt nun ein MIDI Shield, um das Programmieren und Testen für das Step Sequencer Projekt zu vereinfachen.

Die Anforderungen:
- MIDI In
- MIDI Out
- Programmierschalter (trennt MIDI vom seriellen Port)
- LED zur Anzeige der Funktion
- zwischen Arduino Uno (oder Mega) und LCD Shield platzierbar

Das MIDI In Signal wird galvanisch per Optokoppler vom Controller getrennt. Der Schmitt Trigger im Ausgangspfad dient der Stabilisierung des Ausgangssignals. Die LED habe ich eingebaut, da die LED am Arduinoboard, die an Pin 13 angeschaltet ist, durch die Shields überdeckt wird und nur schwer eingesehen werden kann.
 
Hier der Schaltplan und das Platinen Layout, entworfen mit Eagle von CadSoft:





 Die Bauteile:



R1, R2, R3, R4Widerstand 220 Ω
R5Widerstand 1,6 kΩ
R6Widerstand 10 kΩ
C1Keramikkondensator 100 nF
D1Diode 1N4148
LD1LED L-934LID, low current, 2 mA, rot
IC174HCT14N hex inverting Schmitt trigger
OK16N138 Optokoppler
S12-poliger Umschalter
X1, X2MAB5SH Diodenbuchse, 5-polig, halbrund
sonstiges:2x 6-polige Stecker-/Buchsenleiste (Arduino Stackable Header)
2x 8-polige Stecker-/Buchsenleiste (Arduino Stackable Header)
Platine

Die Platine:

Die Ätzmaske der Platine habe ich wieder im Tonertransferverfahren aufgebracht. Diesmal jedoch nicht mit einem Bügeleisen, sondern mit einem Laminator. Ich habe mir einen PAVO HD-220-PRO zugelegt, der für diese Anwendung mit 160 °C ausreichend heiß wird und nicht umgebaut werden muss.


Das Ätzen erfolgte wieder im selbstgebauten Ätzgerät:


... und führte zu einem brauchbaren Ergebnis:


Es folgte das Bohren und anschließend das Bestücken.


Hier im Verbund mit dem LCD Shield


Der Code für den ersten Funktionstest liefert eine aufsteigende Tonfolge an einem MIDI fähigen Gerät (bei mir Roland Juno GI):


/*
  miditest by chris 130415

*/

// include libraries:
#include <LiquidCrystal.h>
#include <Encoder.h>

// initialize libraries:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Encoder myEnc(9, 10);

// initialize button pins:
int buttonPin[] = {8, A5, A4, A3, A2, A1, A0};
int led = 13;

// initialize values:
int val[] = {1,1,1,1,1,1,1};
int banz = 7;
int resetButton = 0;
char blockChar = 255;
const int numRows = 2;
const int numCols = 16;


void setup() {
  for( int i=0; i<banz; i++) {
    pinMode( buttonPin[i], INPUT );
    digitalWrite( buttonPin[i], HIGH);
  }
  lcd.begin(numCols, numRows);
  Serial.begin(31250);
  pinMode(led, OUTPUT);    
  lcd.clear();
  lcd.home();
  lcd.print("MIDI Note:    ");
}

void loop() {
  for (int note = 0x1E; note < 0x5A; note ++) {
    noteOn(0x90, note, 0x45);
    lcd.setCursor(0, 1);
    lcd.print("                ");
    lcd.setCursor(0, 1);
    lcd.print(note);
    digitalWrite(led, HIGH);  
    delay(250);
    noteOn(0x90, note, 0x00);  
    digitalWrite(led, LOW);   
    delay(250);
  }
}

void noteOn(int cmd, int pitch, int velocity) {
  Serial.write(cmd);
  Serial.write(pitch);
  Serial.write(velocity);
}


Viewing all articles
Browse latest Browse all 108