Hardware Profile Feed

Обсуждаем только железо. Не капсим, не флудим, не ругаемся и не спамим. Размещение ссылок на собственные материалы запрещено.

RASTEME UDAC32 vs. Catalina OS

(more...)

0 ▲
19 November 2019 20:29
Fuck. Die. Retry.
no comments

Дребезг контактов побежден!

Итак, для начала немного матчасти

Получается, что если думать что мир идеален и писать программу для обрабтки нажатых клавиш, то реальность поворачивается к нам нелицеприятной стороной и на тесте в железе мы видим что вместо одной реакции по нажатию и отпусканию клавиши мы видим пачку повторных в количестве от 2-х до 10 - тестировалась старая кнопка спаянная с китайского телевизора.

Так что же делать? 

Написать алгоритм, который будет отсеивать лишние импульсы!

Логика в трех словах примерно такая.

При первом входящем импульсе - замыкание клавиши программа переходит в режим фиксации, включает таймер и отсчитывает время и пока оно не достигнет нужного вменяемого интервала, все импульсы-РАЗМЫКАНИЯ клавиши игнорируются. Если подобрать интервал близкий к скоростной игре на пианино одним пальцем - 1/32 120bpm будет достаточно, то практически всегда левые импульсы и искры при замыкании клавиши будут  фильтроваться.

И наоборот. 

Первое входящее разрешенное размыкание тоже фиксируется, отсчитывается таймером и пока время не достигнет нужного вменяемого интервала и все импульсы-ЗАМЫКАНИЯ клавиши игнорируются. 

Итог. Рабочий 100% код, который протестирован на железе. Это просто потрясающе и гениально. Работает как часы. Идею продумывал сам.

Поскольку клавиш не одна, а 64, то пришлось эмулировать на базе одного железного таймера 64 пары независимых программных таймера, чтобы клавиши работали неазвисимо.

Задаем ваши ответы))

// _ASSERT_ENABLE_ is used for enabling assert, typical for debug purposes

#define _ASSERT_ENABLE_

#include <string.h>

#include "compiler.h"

#include "main.h"

/**

 * \def BUFFER_SIZE

 * \brief The size of the UART buffer

 */

#define BUFFER_SIZE 240

// set the correct BAUD and F_CPU defines before including setbaud.h

#include "conf_clock.h"

#include "conf_uart.h"

/**

 * \name avr_libc_inc avr libc include files

 * @{

 */

#include <util/setbaud.h>

#include <avr/interrupt.h>

//! @}

#include "ring_buffer.h"

#include "lcd.h"

// buffers for use with the ring buffer (belong to the UART)

uint8_t out_buffer[BUFFER_SIZE];

uint8_t in_buffer[BUFFER_SIZE];

uint8_t chan=0;

uint8_t onchan=0x90;

uint8_t offchan=0x80;

uint16_t timer[64];

uint8_t timer1[64];

uint8_t timer2[64];

uint16_t tmd=15625;

uint8_t timerof[64];

uint8_t maxt=7;

uint8_t ecount=1;

char timestr[] = "";

// the string we send and receive on UART

const char test_string[] = " Kingdom MIDI Board^^!";

//! ring buffer to use for the UART transmission

struct ring_buffer ring_buffer_out;

//! ring buffer to use for the UART reception

struct ring_buffer ring_buffer_in;

/**

 * \brief UART data register empty interrupt handler

 *

 * This handler is called each time the UART data register is available for

 * sending data.

 */

ISR(UART0_DATA_EMPTY_IRQ)

{

// if there is data in the ring buffer, fetch it and send it

if (!ring_buffer_is_empty(&ring_buffer_out)) {

UDR0 = ring_buffer_get(&ring_buffer_out);

}

else {

// no more data to send, turn off data ready interrupt

UCSR0B &= ~(1 << UDRIE0);

}

}

/**

 * \brief Data RX interrupt handler

 *

 * This is the handler for UART receive data

 */

ISR(UART0_RX_IRQ)

{

ring_buffer_put(&ring_buffer_in, UDR0);

}

/**

 * \brief Initialize the UART with correct baud rate settings

 *

 * This function will initialize the UART baud rate registers with the correct

 * values using the AVR libc setbaud utility. In addition set the UART to

 * 8-bit, 1 stop and no parity.

 */

ISR(TIMER1_OVF_vect)

{

if (ecount) {

for (int i = 0; i < 64; i++){

if (timer) {

if (timer1<maxt){ 

timer1++;

setpos(14,0);

sprintf(timestr, "%d", timer1);

str_lcd(timestr);

setpos(14,1);

sprintf(timestr, "%d", timer2);

str_lcd(timestr);

}

}

else

{

if ((timer2<maxt)){

timer2++;

setpos(14,0);

sprintf(timestr, "%d", timer1);

str_lcd(timestr);

setpos(14,1);

sprintf(timestr, "%d", timer2);

str_lcd(timestr);

}

}

}

}

}

/*ISR(TIMER1_OVF_vect)

{

for (int i = 0; i < 64; i++){

timerof = 1;

}

}

*/

static void timer_ini(void)

{

//TCCR1B |= (1<<WGM12); // устанавливаем режим СТС (сброс по совпадению)

//TIMSK |= (1<<OCIE1A); //устанавливаем бит разрешения прерывания 1ого счетчика по совпадению с OCR1A(H и L)

//OCR1AH = 0b01111010; //записываем в регистр число для сравнения

//OCR1AL = 0b00010010;

//TCCR1B |= (1<<CS02)|(1<<CS00);//установим делитель.

//TIMSK0|=(1<<TOIE0);

TCCR1B |= /*(1<<CS11)|*/(1<<CS10);//установим делитель.

TIMSK1|=(1<<TOIE1);

//TCCR1B |= (1<<CS11);//установим делитель.

}

static void timer_stop(void)

{

TCCR1B = 0;//установим делитель.

}

static void timer_play(void)

{

TCCR1B |= /*(1<<CS11)|*/(1<<CS10);//установим делитель.

}

static void uart_init(void)

{

#if defined UBRR0H

// get the values from the setbaud tool

UBRR0H = UBRRH_VALUE;

UBRR0L = UBRRL_VALUE;

#else

#error "Device is not supported by the driver"

#endif

#if USE_2X

UCSR0A |= (1 << U2X0);

#endif

// enable RX and TX and set interrupts on rx complete

UCSR0B = (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0);

// 8-bit, 1 stop bit, no parity, asynchronous UART

UCSR0C = (1 << UCSZ01) | (1 << UCSZ00) | (0 << USBS0) |

(0 << UPM01) | (0 << UPM00) | (0 << UMSEL01) |

(0 << UMSEL00);

// initialize the in and out buffer for the UART

ring_buffer_out = ring_buffer_init(out_buffer, BUFFER_SIZE);

ring_buffer_in = ring_buffer_init(in_buffer, BUFFER_SIZE);

}

/**

 * \brief Function for putting a char in the UART buffer

 *

 * \param data the data to add to the UART buffer and send

 *

 */

static inline void uart_putchar(uint8_t data)

{

// Disable interrupts to get exclusive access to ring_buffer_out.

cli();

if (ring_buffer_is_empty(&ring_buffer_out)) {

// First data in buffer, enable data ready interrupt

UCSR0B |=  (1 << UDRIE0);

}

// Put data in buffer

ring_buffer_put(&ring_buffer_out, data);

// Re-enable interrupts

sei();

}

static inline void noteon(uint8_t data)

{

uart_putchar(onchan);

uart_putchar(data);

uart_putchar(0x7F);

}

static inline void noteoff(uint8_t data)

{

uart_putchar(offchan);

uart_putchar(data);

uart_putchar(0x7F);

}

/**

 * \brief Function for getting a char from the UART receive buffer

 *

 * \retval Next data byte in recieve buffer

 */

static inline uint8_t uart_getchar(void)

{

return ring_buffer_get(&ring_buffer_in);

}

/**

 * \brief Function to check if we have a char waiting in the UART receive buffer

 *

 * \retval true if data is waiting

 * \retval false if no data is waiting

 */

static inline bool uart_char_waiting(void)

{

return !ring_buffer_is_empty(&ring_buffer_in);

}

/**

 * \brief The main application

 *

 * This application will initialize the UART, send a character and then receive

 * it and check if it is the same character as was sent.

 *

 * \note The RX and TX pins should be externally connected in order to pass the

 * test.

 */

int main(void)

{

uint8_t data;

uint8_t cnt;

uint8_t i;

uint8_t note;

uint8_t sta[8];

uint8_t pra[8];

uint8_t rta[8];

uint8_t rnz[8];

uint8_t /*sta=0xFF, */stb=0xFF, stc=0xFF, std=0xFF, ste=0x00, stf=0xFF, stg=0xFF, sth=0xFF, stj=0xFF, stk=0xFF, stl=0x00; 

uint8_t /*pra=0xFF, */prb=0xFF, prc=0xFF, prd=0xFF, pre=0x00, prf=0xFF, prg=0xFF, prh=0xFF, prj=0xFF, prk=0xFF, prl=0x00;

uint8_t /*rta=0xFF, */rtb=0xFF, rtc=0xFF, rtd=0xFF, rte=0x00, rtf=0xFF, rtg=0xFF, rth=0xFF, rtj=0xFF, rtk=0xFF, rtl=0x00;

uint16_t timert=0, timerd=0;

char test_string1[] = "Hi1^^!";

char test_string2[] = "Hi2^^!";

char notestr[] = "";

PORTA=0xFF;

DDRA=0x00;//0

PORTB=0x00;

DDRB=0xFF;//1 out scan

PORTC=0xFF;

DDRC=0x00;//2

PORTD=0xFF;

DDRD=0x00;//3

PORTE=0x00;

DDRE=0xFF;//out USART and MIDI CHANNEL LED 

PORTF=0xFF;

DDRF=0x00;//4

PORTG=0xFF;

DDRG=0x00;//in control

PORTH=0xFF;

DDRH=0x00;//5

PORTJ=0xFF;

DDRJ=0x00;//6

PORTK=0xFF;

DDRK=0xFF;//7 out scan

PORTL=0x00;

DDRL=0xFF;//out LEDS

cli();

for (int i = 0; i < 64; i++){

timer1 = maxt;

timer2 = maxt;

timer = 0;

}

timer_ini();

for (int j = 0; j < 8; j++){

pra[j]=0xFF;

sta[j]=0xFF;

}

rnz[0]=0b11111110;

rnz[1]=0b11111101;

rnz[2]=0b11111011;

rnz[3]=0b11110111;

rnz[4]=0b11101111;

rnz[5]=0b11011111;

rnz[6]=0b10111111;

rnz[7]=0b01111111;

uart_init();

sei();

LCD_ini();  //Инициализируем дисплей

setpos(4,0);

str_lcd("Kingdom>");

setpos(0,1);

str_lcd("MIDI Board ^_^");

// Send the test string

for (cnt = 0; cnt < strlen(test_string); cnt++) {

uart_putchar(test_string[cnt]);

}

// Check if we have received the string we sent

cnt = 0;

do

{

for (uint8_t j = 0; j < 8; j++)

{

prk=rnz[j];

PORTK = prk;

PORTK = prk;

asm("nop");

asm("nop");

pra[j]=PINA;

rta[j]=pra[j]^sta[j];

for (int i = 0; i < 8; i++)

{

note = (j<<3)+i;

if (rta[j]&(1<<i))

{

if (sta[j]&(1<<i))

{

if (timer2[note]==maxt)

{

timer_stop();

noteon(note);

sta[j]=pra[j];

timer1[note] = 0;

timer[note] = 1;

clearlcd();

setpos(0,0);

str_lcd("Note ON");

setpos(0,1);

sprintf(notestr, "%d", note);

str_lcd(notestr);

timer_play();

}

}

else

{

if (timer1[note]==maxt)

{

timer_stop();

noteoff(note);

sta[j]=pra[j];

timer2[note] = 0;

timer[note] = 0;

clearlcd();

setpos(0,0);

str_lcd("Note OFF");

setpos(0,1);

sprintf(notestr, "%d", note);

str_lcd(notestr);

timer_play();

}

}

}

}

}

} while (1);

}


PgIj2N W3TE @ Kingdom

TRANSIENT PROGRAM FOR DRUMS AND MACHINERY
3 ▲
2 November 2019 17:12
Kingdom
62 comments

Как подключить мониторы к пульту yamaha mg 166cx

Привет всем!я чайник в этих делах,помогите ребята.

Скоро вечер романса вокалисту понадобиться монитор,он будет на сцене,а до пульта 15 метров.от пульта на сцену идёт xlr магистраль..как подключить монитор коректно?Заранее спасибо..

0 ▲
1 November 2019 20:55
Женя
1 comment

Дайте совет по аудиокарте.

Привет.

Исходные данные у меня такие. Я создаю аранжировки на компьютере исключительно силами софтовых приблуд. В компьютере стоит старомодная "Audiophile 192" от М-Аудио. Карта давно не поддерживается разработчиком, последние дрова на неё вышли, кажется под Win 7, и то силами умельцев, а разработчики остановились ещё на дровах для XP. Последнее время я стал замечать что при пользовании относительно свежими библиотеками (например этим пресловутым "Hollywood Action Trailer" для Nexus, или при толстеньких библиотеках для Контактика) у меня полностью вылетает аудиодрайвер (причём без какой-либо нагрузки на карту, вылететь может на моменте первой загрузки прессета). Cubase 9 выдаёт ошибку, после чего требуется перезагрузка компьютера, ибо дальнейшая возможность выбрать асио драйвер этой аудиофилки полностью пропадает.

Собственно грешу на аудиокарту, и подумываю о замене её на что-то современное. К сожалению я не являюсь железячником, и совершенно не разбирась в нынешнем "харде", и поэтому я здесь. Может быть кто-то посоветует, какую железку стоит прикупить взамен старушке. Параметры следующие:

- Бюджет до 30тыс. рублей.

- Win10

- Минимум аудиовходов. Вход с конденсорным питанием, возможно, пригодится в будущем.

- Выходы на мониторы и наушники (отдельная крутилка для громкости наушников приветствуется).

- Чтобы "кушала" современный VSTi софт с минимальной задержкой, ибо я частенько заморачиваюсь на широкие "в четыре руки ©" пианинные партии, и мне это критично.

- PCI или внешка - тоже не критично. Важна стабильная и быстрая работа.

- 192 - не требуется (не представляю себе, ГДЕ это нужно : ) максимум 48 - хватит, и то, потому что частенько этого просят на студиях артистов, с которыми я работаю) : )

Собственно, если кто-то что-то подскажет, в каком направлении копать, буду очень признателен.

1 ▲
26 October 2019 12:04
George Catcher
15 comments

Pioneer CDJ-1000MK3 - Помогите записать диск для игры

Ребята всем привет! Завтра буду играть на радио с вертаков Pioneer CDJ-1000MK3. Я подготовил сет, в каком формате лучше записать mp3 или wav? Я свой сет выстроил таким образом, что за первым треком у меня идет второй, т.е как бы сводятся один за другим. И мне очень важно что бы теги были предельно понятными. Track 1 (76bpm) например. Один раз записал уже, но теги не воспроизводит. Обясните пожалуйста как правильно сделать.

0 ▲
16 October 2019 16:03
Владимир Грин
7 comments

KINGDOM MIDI BOARD - DISPLAY TEST

У миди процессора появился экранчик ^^3


sAMEO4RVTnQ[1] @ Kingdom

Фрагменты кода

<<man.h>>

#ifndef MAIN_H_

#define MAIN_H_

#define F_CPU 8000000UL

#include <avr/io.h>

#include <avr/interrupt.h>

#include <util/delay.h>

#include <stdio.h>

#include <stdlib.h>

#include "lcd.h"

#endif /* MAIN_H_ */

**************

<<lcd.h>>

#ifndef LCD_H_

#define LCD_H_

#include "main.h"

//----------------------------------------

void LCD_ini(void);

void setpos(unsigned char x, unsigned y);

void str_lcd (char str1[]);

void clearlcd(void);

//----------------------------------------

#define e1    PORTL|=0b00001000 // установка линии E в 1

#define e0    PORTL&=0b11110111 // установка линии E в 0

#define rs1    PORTL|=0b00000100 // установка линии RS в 1 (данные)

#define rs0    PORTL&=0b11111011 // установка линии RS в 0 (команда)

//----------------------------------------

#endif /* LCD_H_ */

***

<<lcd.c>>

#include "lcd.h"

//----------------------------------------

void sendhalfbyte(unsigned char c)

{

c<<=4;

e1; //включаем линию Е

_delay_us(500);

PORTL&=0b00001111; //стираем информацию на входах DB4-DB7, остальное не трогаем

PORTL|=c;

e0; //выключаем линию Е

_delay_us(500);

}

//----------------------------------------

void sendbyte(unsigned char c, unsigned char mode)

{

if (mode==0) rs0;

else         rs1;

unsigned char hc=0;

hc=c>>4;

sendhalfbyte(hc); 

sendhalfbyte(c);

}

//----------------------------------------

void sendchar(unsigned char c)

{

sendbyte(c,1);

}

//----------------------------------------

void setpos(unsigned char x, unsigned y)

{

char adress;

adress=(0x40*y+x)|0b10000000;

sendbyte(adress, 0);

}

//----------------------------------------

void LCD_ini(void)

{

_delay_ms(150); //Ждем 15 мс (стр 45)

sendhalfbyte(0b00000011);

_delay_ms(40);

sendhalfbyte(0b00000011);

_delay_us(1000);

sendhalfbyte(0b00000011);

_delay_ms(10);

sendhalfbyte(0b00000010);

_delay_ms(10);

sendbyte(0b00101000, 0); //4бит-режим (DL=0) и 2 линии (N=1)

_delay_ms(10);

sendbyte(0b00001100, 0); //включаем изображение на дисплее (D=1), курсоры никакие не включаем (C=0, B=0)

_delay_ms(10);

sendbyte(0b00000110, 0); //курсор (хоть он у нас и невидимый) будет двигаться влево

_delay_ms(10);

}

//----------------------------------------

void clearlcd(void)

{

sendbyte(0b00000001, 0);

_delay_us(15000);

}

//----------------------------------------

void str_lcd (char str1[])

{  

wchar_t n;

for(n=0;str1[n]!='\0';n++)

sendchar(str1[n]);

}

//-----------------------------------

****

<<main.c>>

#include "lcd.h"

***

LCD_ini();  //Инициализируем дисплей

setpos(4,0);

str_lcd("Kingdom>");

setpos(0,1);

str_lcd("MIDI Board ^_^");

***

СХЕМА:


2019-10-13 175229 @ Kingdom

Ножки 15-16 на дисплее - подсветка (+5В/земля),

Переменный резистор 10к регулирует контраст

1 ▲
13 October 2019 17:39
Kingdom
2 comments

MIDI CORE TEST

Итак, хорошие новости: удалось подключить миди-модуль к ПК через самодельный переходник и увидеть ПРАВИЛЬНЫЕ миди команды генерируемые устройством на миди выходе при нажатии отпускании клавиши ^^3

  • 80 nn 7F - Note Off (выключение ноты), velocity 127
  • 90 nn 7F - Note On (включение ноты), velocity 127


Осталось отладить баги, переполнение буфера при дребезге контактов, дописать код для полной матрицы кнопок, припаять к матрице кнопок и сделать гнезда миди через опторазвязку))

Музон на фоне мой ^_~

3 ▲
30 September 2019 12:16
Kingdom
24 comments

Лечим зубы клавиатуры

All broken keys are repaired with caprolactam. Now it is ready to DIY midi board conversion. 

Все сломанные клавиши восстановлены капролактамом. Теперь можно делать MIDI клавиатуру))


Так выглядит форма для восстановления клавиш, которую я отпечатал из силикона и крахмала по целой клавише


aZukGeesAEs @ Kingdom

0 ▲
4 September 2019 18:28
Kingdom
149 comments

PIONEER DDJ-200 вопрос по лицензии

Привет всем, решил присмотреться к новому PIONEER DDJ-200 даже не сколько из-за его дешевизны (хотя это тоже), сколько из-за компактности. До этого на контроллерах особо не играл - были или вертушки или сиди. Есть пара вопросов: если купить этот контролллер, нужно ли покупать еще и лицензию recordbox ? и еще, можно ли записываать миксы припомощи встроенной rec. функции - вдруг лицензия не позволит это делать?

0 ▲
30 August 2019 12:54
Алексей Раздобреев
1 comment

Проект неимоверно дешевой миди клавиатуры на 61 клавишу

Нам понадобятся:

ATMEGA2560 = 6$ Aliexpress

https://ru.aliexpress.com/item/1978273967.html?spm=a2g0s.8937518.0.0.33202e0eEBEFAQ

Детский синтезатор с 61 кнопками = 15$

https://ru.aliexpress.com/item/32904347680.html?spm=a2g0s.8937518.0.0.33202e0eEBEFAQ

программатор для ATMEGA = 2$

https://ru.aliexpress.com/item/32703554356.html?spm=a2g0o.productlist.0.0.4d821633lJONVY&algo_pvid=78f972c7-a478-4bff-880e-0dafe55be55f&algo_expid=78f972c7-a478-4bff-880e-0dafe55be55f-1&btsid=f7acb0bf-5f3e-479d-b9b0-c546ecf82120&ws_ab_test=searchweb0_0,searchweb201602_1,searchweb201603_53

плата для припайки атмеги = 2$

https://ru.aliexpress.com/item/32657825043.html?spm=a2g0o.productlist.0.0.33055196kx9Kui&algo_pvid=94cebf30-7305-400f-84fb-44c4f2182d68&algo_expid=94cebf30-7305-400f-84fb-44c4f2182d68-2&btsid=79c40c43-a1fd-48dd-b8df-b661cec90e44&ws_ab_test=searchweb0_0,searchweb201602_1,searchweb201603_53

блок питания на 5В = 4$

мелочевка на пару баксов

провода

паяльник

AVRSTUDIO

PROTEUS

Шарить в программировании))

Фрагмент кода на 8 клавиш

#define _ASSERT_ENABLE_

#include <string.h>

#include "compiler.h"

/**

 * \def BUFFER_SIZE

 * \brief The size of the UART buffer

 */

#define BUFFER_SIZE 20

// set the correct BAUD and F_CPU defines before including setbaud.h

#include "conf_clock.h"

#include "conf_uart.h"

/**

 * \name avr_libc_inc avr libc include files

 * @{

 */

#include <util/setbaud.h>

#include <avr/interrupt.h>

//! @}

#include "ring_buffer.h"

// buffers for use with the ring buffer (belong to the UART)

uint8_t out_buffer[BUFFER_SIZE];

uint8_t in_buffer[BUFFER_SIZE];

uint8_t chan=0;

uint8_t onchan=0x90;

uint8_t offchan=0x80;

// the string we send and receive on UART

const char test_string[] = "Kingdom MIDI Board^^!";

//! ring buffer to use for the UART transmission

struct ring_buffer ring_buffer_out;

//! ring buffer to use for the UART reception

struct ring_buffer ring_buffer_in;

/**

 * \brief UART data register empty interrupt handler

 *

 * This handler is called each time the UART data register is available for

 * sending data.

 */

ISR(UART0_DATA_EMPTY_IRQ)

{

// if there is data in the ring buffer, fetch it and send it

if (!ring_buffer_is_empty(&ring_buffer_out)) {

UDR0 = ring_buffer_get(&ring_buffer_out);

}

else {

// no more data to send, turn off data ready interrupt

UCSR0B &= ~(1 << UDRIE0);

}

}

/**

 * \brief Data RX interrupt handler

 *

 * This is the handler for UART receive data

 */

ISR(UART0_RX_IRQ)

{

ring_buffer_put(&ring_buffer_in, UDR0);

}

/**

 * \brief Initialize the UART with correct baud rate settings

 *

 * This function will initialize the UART baud rate registers with the correct

 * values using the AVR libc setbaud utility. In addition set the UART to

 * 8-bit, 1 stop and no parity.

 */

static void uart_init(void)

{

#if defined UBRR0H

// get the values from the setbaud tool

UBRR0H = UBRRH_VALUE;

UBRR0L = UBRRL_VALUE;

#else

#error "Device is not supported by the driver"

#endif

#if USE_2X

UCSR0A |= (1 << U2X0);

#endif

// enable RX and TX and set interrupts on rx complete

UCSR0B = (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0);

// 8-bit, 1 stop bit, no parity, asynchronous UART

UCSR0C = (1 << UCSZ01) | (1 << UCSZ00) | (0 << USBS0) |

(0 << UPM01) | (0 << UPM00) | (0 << UMSEL01) |

(0 << UMSEL00);

// initialize the in and out buffer for the UART

ring_buffer_out = ring_buffer_init(out_buffer, BUFFER_SIZE);

ring_buffer_in = ring_buffer_init(in_buffer, BUFFER_SIZE);

}

/**

 * \brief Function for putting a char in the UART buffer

 *

 * \param data the data to add to the UART buffer and send

 *

 */

static inline void uart_putchar(uint8_t data)

{

// Disable interrupts to get exclusive access to ring_buffer_out.

cli();

if (ring_buffer_is_empty(&ring_buffer_out)) {

// First data in buffer, enable data ready interrupt

UCSR0B |=  (1 << UDRIE0);

}

// Put data in buffer

ring_buffer_put(&ring_buffer_out, data);

// Re-enable interrupts

sei();

}

static inline void noteon(uint8_t data)

{

// Disable interrupts to get exclusive access to ring_buffer_out.

cli();

if (ring_buffer_is_empty(&ring_buffer_out)) {

// First data in buffer, enable data ready interrupt

UCSR0B |=  (1 << UDRIE0);

}

// Put data in buffer

ring_buffer_put(&ring_buffer_out, onchan);

ring_buffer_put(&ring_buffer_out, data);

ring_buffer_put(&ring_buffer_out, 0x7F);

// Re-enable interrupts

sei();

}

static inline void noteoff(uint8_t data)

{

// Disable interrupts to get exclusive access to ring_buffer_out.

cli();

if (ring_buffer_is_empty(&ring_buffer_out)) {

// First data in buffer, enable data ready interrupt

UCSR0B |=  (1 << UDRIE0);

}

// Put data in buffer

ring_buffer_put(&ring_buffer_out, offchan);

ring_buffer_put(&ring_buffer_out, data);

ring_buffer_put(&ring_buffer_out, 0x7F);

// Re-enable interrupts

sei();

}

/**

 * \brief Function for getting a char from the UART receive buffer

 *

 * \retval Next data byte in recieve buffer

 */

static inline uint8_t uart_getchar(void)

{

return ring_buffer_get(&ring_buffer_in);

}

/**

 * \brief Function to check if we have a char waiting in the UART receive buffer

 *

 * \retval true if data is waiting

 * \retval false if no data is waiting

 */

static inline bool uart_char_waiting(void)

{

return !ring_buffer_is_empty(&ring_buffer_in);

}

/**

 * \brief The main application

 *

 * This application will initialize the UART, send a character and then receive

 * it and check if it is the same character as was sent.

 *

 * \note The RX and TX pins should be externally connected in order to pass the

 * test.

 */

int main(void)

{

uint8_t data;

uint8_t cnt;

uint8_t i;

uint8_t sta=0xFF, stb=0xFF, stc=0xFF, std=0xFF, ste=0x00, stf=0xFF, stg=0xFF, sth=0xFF, stj=0xFF, stk=0xFF, stl=0x00; 

uint8_t pra=0xFF, prb=0xFF, prc=0xFF, prd=0xFF, pre=0x00, prf=0xFF, prg=0xFF, prh=0xFF, prj=0xFF, prk=0xFF, prl=0x00;

uint8_t rta=0xFF, rtb=0xFF, rtc=0xFF, rtd=0xFF, rte=0x00, rtf=0xFF, rtg=0xFF, rth=0xFF, rtj=0xFF, rtk=0xFF, rtl=0x00;

char test_string1[] = "Hi1^^!";

char test_string2[] = "Hi2^^!";

PORTA=0xFF;

DDRA=0x00;//0

PORTB=0xFF;

DDRB=0x00;//1

PORTC=0xFF;

DDRC=0x00;//2

PORTD=0xFF;

DDRD=0x00;//3

PORTE=0x00;

DDRE=0xFF;//out USART and MIDI CHANNEL LED 

PORTF=0xFF;

DDRF=0x00;//4

PORTG=0xFF;

DDRG=0x00;//in control

PORTH=0xFF;

DDRH=0x00;//5

PORTJ=0xFF;

DDRJ=0x00;//6

PORTK=0xFF;

DDRK=0x00;//7

PORTL=0x00;

DDRL=0xFF;//out LEDS

cli();

uart_init();

sei();

// Send the test string

for (cnt = 0; cnt < strlen(test_string); cnt++) {

uart_putchar(test_string[cnt]);

}

// Check if we have received the string we sent

cnt = 0;

do

{

pra=PINA;

rta=pra^sta;

for (int i = 0; i < 8; i++)

if (rta&(1<<i))

{

if (sta&(1<<i))

{

noteon(0+i);

}

else

{

noteoff(0+i);

}

sta=pra;

}

//handlerTXUSART();

} while (1);

}

Проект симуляции в протеусе и результат работы отправки миди команд на терминале по нажатию-отжатию каждой клавиши


2019-07-20 101236 @ Kingdom

Следите за новостями))

5 ▲
24 August 2019 15:33
Kingdom
33 comments

Характеристики ноутбука для диджея

Всем привет! У меня знакомый сейчас в Корее. Хочу заказать ему ноутбук для диджея. Особо сильно он ничего не "сводит", но часто приходится видеокуски в один фильм склеивать. Подскажите пожалуйста на какие характеристики обращать внимание?

0 ▲
20 August 2019 21:24
Сергей
6 comments

Обзор и распаковка DENON PRIME 4 DJ I Unboxing, Настройка Mixer Работа с REKORDBOX

PRO ЩИТ #18 - часть первая Обзор и распаковка DENON PRIME 4 от DJ TAGA Unboxing, Настройка, Mixer и оценка качества. Работа с REKORDBOX



Полная версия видео находится по ссылке: ОБЗОР DENON PRIME 4
www.youtube.com/watch?v=8Tm9vt…

В этом выпуске мы представляем вам первый, русскоязычный обзор уникального контроллера DENON DJ PRIME 4, который наконец то приехал в Россию, спустя полгода после мировой премьеры. Мы детально изучили PRIME 4, протестировав его на стабильность работы, отсутствия или наличия багов и совместно с лабораторией Metronom Lab вынесли вердикт в отношении этой долгожданной новинки.
Вы можете посмотреть стрим, на котором мы впервые на нем сыграли:
www.youtube.com/watch?v=RhHZV... , 
а так же DJ VIDEO MIX, в котором мы тестировали стабильность не прерывной игры с USB на 3-х-4-х каналах:
www.youtube.com/watch?v=VPpM2...

Мы отсняли очень много материалов по этому уникальному инструменту креативного диджеинга, который в полном объеме не смог уместиться в одну серию. И по этому после просмотра этого выпуска, обязательно посмотрите вторую часть обзора. Этот выпуск был снят совместными усилиями нашего канала, первой профессиональной онлайн DJ школы PRO STEREO prostereo.online , Denon DJ School Russia и лабораторией по обучению в написании музыки METRONOM LAB metronomlab.com Выражаем благодарность компании PRO AUDIO.RU за предоставленный экземпляр DENON DJ PRIME 4 и сотрудничество.

классическая
1 ▲
2 August 2019 20:57
DJ TAGA
1 comment

SX+ Akai LPD8

Знатоки подскажите как вывести на канал ddj sx звук с Akai lpd8

0 ▲
31 July 2019 8:35
Daniloff1983
no comments

DDJ-400 Контроллер

Добрый день, подскажите, пожалуйста, установил программу recordbox, подключил контроллер, драва типо встают самостоятельно, дополнительно не надо ставить. Зарегистрировался, активировал ключ, все как надо, от имени админа все сделал. Включаю программу, цепляю контроллер, котроллер светится, но не работает, звука нет, компьютер видит контроллер, по совту все норм. Еще когда подключил отдельно мелкую колонку от материнской платы через USB и тюльпаны к контроллеру, взял 2 выхода, обматал проводкой и получил звук, следовательно со звуковой картой в контроллере все четко. Вопрос, не понимаю почему нет контакта контроллера с приложением (нажимаю плей, ничего не меняется, приходится мышкой на мониторе в самой программе все делать и нет звука) кто знает че не так я сделал?

0 ▲
22 July 2019 22:45
Ikon
7 comments

Ремонт AKG K 271 MK II (Москва) где есть ремонт?

Ребзо здорова,писал в тех.поддержку AKG в России,узнавал по поводу ремонта.Таких услуг они не оказывают.Где делают годный ремонт ушей?  (more...)

0 ▲
15 July 2019 17:01
Lgoг
2 comments

Саундбары

Всем привет!

Вопрос не по проф-технике. Наверняка есть люди, которые в теме. 

Хочу купить саундбар для телевизора, подключив через "HDMI-jack 3,5". Нормально ли будет если он будет работать, включенный постоянно в сеть? Дело в том, что у него есть гнездо, но не для адаптера, а для зарядки (микро-USB). К примеру, портативные колонки нежелательно, чтобы они работали при включенной зарядке. Могут накрыться (даже в инструкции написано). У меня уже накрывались. Т.е. либо стоит на зарядке либо работает, но отключенная от сети. 

Не по теме просьба не писать и не предлагать домашние кинотеатры... Давно поставил бы и не парился...

Заранее спасибо.

Позитивчик (не шансон и не попса)
0 ▲
15 July 2019 12:23
Cotlean (Котлин)
14 comments

Getting Started - Choosing Music / First Attempts!!

I've read the guides and watched YouTube videos. I have a DDJ setup, Rekordbox, etc. But all the music I listen to is Spotify and Soundcloud. So I'm trying to drop $50-100 into a set of songs from Beatport to try to start really learning the hands on mechanics of beatmatching.

This is where I'm struggling. There are a lot of songs I know really well. So my basic question is--

Do you recommend buying a selection of songs that I know well, have listened to a lot so I have a good idea how they flow and where the transitions, etc are, and then starting off with that? I understand the technical aspects of beatmatching, harmonics, etc. What I'm struggling with is how to actually start DOING it rather than watching YouTube videos. How do I pick my first set of songs?

If it helps, I made a few playlists of songs I know well that I think would go together well in a set.

I realize this is kind of an open ended question. I'm just sort of stuck at the stage where I need to figure out what songs to spend money on to actually get started, put them in my library, etc.https://xvideos.onl/ https://xnxx.onl/ https://ixxx.onl/

My thought is that I should stick to a couple genres that I like listening to the most (so I'm having fun doing it) and that I know really well (so I already know the song inside and out before I start playing with mixing using it).

0 ▲
4 July 2019 11:36
komickins
no comments

Dj контроллер DDJ-SX3 или TRAKTOR S4 MK3? TRAKTOR или SERATO?

Привет всем, сразу говорю, что не шарю, но решил заняться, посмотрел много роликов, статей (и на promodj.com тоже), обзоров, хочу здесь получить ответы от тех кому есть с чем сравнить, кто пользовался, ну и в общем советы начинающему от бывалых). Хотел себе взять dj-контроллер, для начала дома поиграться, но сразу чтобы немного наперёд, бюджет 50-80 тысяч. Вот несколько вопросов: 

1) Сначала нужно выбрать софт как я понял, я себе установил TRAKTOR и SERATO DJ, еще не смотрел, второй без контроллера не работает получается. Хотел услышать мнение пользователей, как оно в работе, плюсы минусы, какое-нибудь вкратце сравнение между ними. Читал, что трактор очень сложен, но больше эффектов всяких, серато прост, не знаю), а есть же ещё рекордбокс....

2) Железо - по цене, видео, рейтингам всяким выпадает мне PIONEER DDJ-SX2 или DDJ-SX3, ну и Native Instruments TRAKTOR KONTROL S4 MK3. Может кто посоветует другое. Опять же , мнение кто пользовался. Правильно ли я понимаю, S4 MK3 не будет работать или будет работать некорректно в SERATO и PIONEER с TRAKTOR Pro, по функциональности вообще не понимаю, но статья на английском djtechzone.com/pioneer-ddj-sx3… в ней видно, что много общего и на равных они идут, но в пионере покруче performance section ,по качеству материала вроде, по входам и выходам и в целом он и выиграл, но меньше по размеру трактор и в 2 раза легче.

3) Что мне может еще понадобиться чтобы докупить?) Заранее спасибо

0 ▲
19 June 2019 14:33
Dis Tout
10 comments

MacBook Pro не видит контроллер Pioneer Ddj-1000

Столкнулась с проблемой? мой макбук про 13 2018 не видит мой контроллер пионеер 1000 , в частност проблема в том что я не могу вывсети звук на наушники и мониторы/ Пробовала установить дрова новые, сносила рекордбокс, пицот раз раз перезагружала, в настройках безопастности замочек разблокировала, да наушники работают и выключить и включить тоже пробавала. На винде все работает. Кто знает что делать и как в настройках мака сдлеать так что бы заработало как внешняя аудиокарта, пока он ее вообще не видит. Заранее спасибо!

Mark Lawer - Bad Boys Cry
0 ▲
6 June 2019 21:27
Aleksandrina
2 comments

проблемма с Hercules dj 4 set

всем привет, проблемма такая, сначала всё работало четко, сейчас подключаю загорается одна кнопка mic, пк полностью обнаруживает его, любой софт его находит но остальное не работает, тоесть не могу вообще ним пользоваться, помогите добрые люди!!!

0 ▲
26 May 2019 6:45
S.O.
1 comment