Перейти к содержанию

Денис_85

Members
  • Постов

    9
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Денис_85

  1. Помоги с ноля скетч полноценный написать.
    Данный путь мне кажется очень перспективным

    Нашел инфу про dual moco, что то началось получаться перешивается arduino mega и uno
    Смысл прошивки сигнал midi через разъем usb напрямую без доп по и переходников передается на пк и звуковой модуль
    Работает эта беда только как я понял с библиотекой midi.h
    Можно как то сделать 2 а массива. Один с обычными контактными кнопками(уже реализовано и работает в скече ниже) , другой массив с оптопрерывателями
    И на несколько каналов все это поделить.
    Левая правая клавиатура на отдельных каналах
    скетч ниже в нем есть много лишнего но это на данном этапе не критично
    #include <Keypad.h>
    #include <EEPROM.h>
    #include <MIDI.h>

    MIDI_CREATE_DEFAULT_INSTANCE();
    #define C2 0x18
    #define Db2 0x19
    #define D2 0x1A
    #define Eb2 0x1B
    #define E2 0x1C
    #define F2 0x1D
    #define Fd2 0x1E
    #define G2 0x1F
    #define Ab2 0x20
    #define A2 0x21
    #define Bb2 0x22
    #define B2 0x23
    #define C3 0x24
    #define Db3 0x25
    #define D3 0x26
    #define Eb3 0x27
    #define E3 0x28
    #define F3 0x29
    #define Fd3 0x2A
    #define G3 0x2B
    #define Ab3 0x2C
    #define A3 0x2D
    #define Bb3 0x2E
    #define B3 0x2F
    #define C4 0x30
    #define Db4 0x31
    #define D4 0x32
    #define Eb4 0x33
    #define E4 0x34
    #define F4 0x35
    #define Fd4 0x36
    #define G4 0x37
    #define Ab4 0x38
    #define A4 0x39
    #define Bb4 0x3A
    #define B4 0x3B
    #define C5 0x3C
    #define Db5 0x3D
    #define D5 0x3E
    #define Eb5 0x3F
    #define E5 0x40
    #define F5 0x41
    #define Fd5 0x42
    #define G5 0x43
    #define Ab5 0x44
    #define A5 0x45
    #define Bb5 0x46
    #define B5 0x47
    #define C6 0x48
    #define Db6 0x49
    #define D6 0x4A
    #define Eb6 0x4B
    #define E6 0x4C
    #define F6 0x4D
    #define Fd6 0x4E
    #define G6 0x4F
    #define Ab6 0x50
    #define A6 0x51
    #define Bb6 0x52
    #define B6 0x53

    #define C7 0x54
    #define Db7 0x55
    #define D7 0x56
    #define Eb7 0x57
    #define E7 0x58
    #define F7 0x59
    #define Fd7 0x5A
    #define G7 0x5B
    #define Ab7 0x5C
    #define A7 0x5D
    #define Bb7 0x5E
    #define B7 0x5F

    #define C8 0x60
    #define Db8 0x61
    #define D8 0x62
    #define Eb8 0x63
    #define E8 0x64
    #define F8 0x65
    #define Fd8 0x66
    #define G8 0x67
    #define Ab8 0x68
    #define A8 0x69
    #define Bb8 0x6A
    #define B8 0x6B

    #define C9 0x6C
    #define Db9 0x6D
    #define D9 0x6E
    #define Eb9 0x6F
    #define E9 0x70
    #define F9 0x71
    #define Fd9 0x72
    #define G9 0x73
    #define Ab9 0x74
    #define A9 0x75
    #define Bb9 0x76
    #define B9 0x77

    #define NNN 0xFF // Отсутствие ноты
    //Матричная клавиатураconst byte ROWS = 8; //Количество столбцов матричной клавиатуры
    const byte COLS = 8; //Количество строк матричной клавиатуры
    byte rowPins[ROWS] = {2, 3, 4, 5, 6, 7, 8, 9}; //Пины столбцов
    byte colPins[COLS] = {A0, A1, 10, 11}; //Пины строк

    byte buttonState[COLS][ROWS] = { //Массив состояния кнопок
    {1, 1, 1, 1},
    {1, 1, 1, 1},
    {1, 1, 1, 1},
    {1, 1, 1, 1},
    {1, 1, 1, 1},
    {1, 1, 1, 1},
    {1, 1, 1, 1},
    {1, 1, 1, 1},
    };

    byte kpdNote[COLS][ROWS] = { //Массив нот
    {C2, Ab2, E3, C4},
    {Db2, A2, F3, Db4},
    {D2, Bb2, Fd3, D4},
    {Eb2, B2, G3, Eb4},
    {E2, C3, Ab3, E4},
    {F2, Db3, A3, F4},
    {Fd2, D3, Bb3, Fd4},
    {G2, Eb3, B3, G4}
    };

    //
    //byte tmppin = 0;

    byte val = 0;
    byte dval = 0;

    byte PrVal[8] = {0, 0, 0, 0, 0, 0, 0, 0};

    long currenttime=0;
    boolean b;
    byte eval;
    long ltime = 0;


    void setup()
    {
    MIDI.begin(1); //Инициализация MIDI интерфейса
    attachInterrupt(1, enc, FALLING ); // Аппаратное прерывание. По спадающему фронту на пине 2 запускаем enc

    pinMode(3, INPUT);//Вывод B энкодера
    pinMode(4, INPUT);//Неисп.

    pinMode(19, OUTPUT);//Пины A4 A5. Подключены в выводам A и B мультиплексора
    pinMode(18, OUTPUT);//
    pinMode(13, OUTPUT);//--Гасим встроенный светодиод--
    digitalWrite(13, LOW);//
    for(byte i = 0; i < COLS; i++){ //--Конфигурируем строки мтрчн клвтр как выходы--
    pinMode(colPins, OUTPUT); //--и подаём на них лог. 1digitalWrite(colPins, HIGH); //}
    for(byte i = 0; i < ROWS; i++){ //--Конфигурируем столбцы мтрчн клвтр как входыpinMode(rowPins, INPUT); //--и включаем встроенные в мк подтягивающие резисторы--
    digitalWrite(rowPins, HIGH); //}
    }


    void loop()
    {

    for(byte chn = 0; chn < 4; chn++) //-Цикл чтения значений потенциометров{
    set_mp_chn(chn); //--Задаём параметры мультиплексораval=analogRead(0) / 8; //--Считываем значение с канала Xif (abs(val-PrVal[chn]) > 5) //--Если текущее значение отл. от прошлого{ //--больше чем на 5, то посылаем новое значение--
    MIDI.sendControlChange(chn,val,1);
    PrVal[chn]=val;
    }
    val=analogRead(1) / 8; //--Считываем значение с канала Y аналогично X----
    if (abs(val-PrVal[chn+4]) > 5)
    {
    MIDI.sendControlChange(chn+4,val,1);
    PrVal[chn+4]=val;
    }
    } //
    for(byte i = 0; i < COLS; i++) //-Цикл чтения матричной клавиатуры{
    digitalWrite(colPins, LOW); //--На считываем столбец выставляем 0---
    for(byte j = 0; j < ROWS; j++) //--Построчно считываем каждый столбец--
    { //--И при нажатой кнопке передаём ноту--
    dval=digitalRead(rowPins[j]);
    if ( dval == LOW && buttonState[j] == HIGH ) MIDI.sendNoteOn(kpdNote[j],127,1);
    if ( dval == HIGH && buttonState[j] == LOW ) MIDI.sendNoteOff(kpdNote[j],127,1);
    buttonState[j] = dval;
    }
    digitalWrite(colPins, HIGH);
    } //
    }


    void set_mp_chn(byte chn1) // Управление мультиплексором
    {
    switch (chn1)
    {
    case 0: digitalWrite(18, LOW); digitalWrite(19, LOW); break;
    case 1: digitalWrite(18, LOW); digitalWrite(19, HIGH); break;
    case 2: digitalWrite(18, HIGH); digitalWrite(19, LOW); break;
    case 3: digitalWrite(18, HIGH); digitalWrite(19, HIGH); break;
    }
    }

    void enc() // Обработка энкодера
    {
    currenttime=millis();
    if (abs(ltime-currenttime)>50) // антидребезг
    {
    b=digitalRead(4);
    if (b == HIGH && eval<=122) eval=eval+5;
    else if (b == LOW && eval>=5) eval=eval-5;
    MIDI.sendControlChange(9,eval,1);
    ltime = millis();
    }

    }

  2. Вторая нога как я понял тоже получает питание а не выдает значит обе ноги висят на одной дорожке и питание получают от  REG1117. Получается по дата шиту должно быть 5 конденсаторов у max3232ese, а в этой схеме 4 поправьте если я не прав?

  3. Добрый день вот схема.Я использовал как указано в схеме для связи

    RS-232 max3232ese.и вместо С25,С31,С32,С33 на 1uH Я распаял 1uF там ошибка Полная схема в файле sloa167.pdf в начале темы.Попытался проверить работу RS-232 физически не распаивая микро контролер msp430f2370.Всю остальную обвязку оставил.Замкнул 11 и 12 ножки max3232ese 15 нога на массу 16 на trf7960a на вторую ногу VIN тишина Есть еще файл этой схемы в sprint layout 6.0

     

    777.jpg

×
×
  • Создать...