RASTEME UDAC32 vs. Catalina OS
(more...)
Обсуждаем только железо. Не капсим, не флудим, не ругаемся и не спамим. Размещение ссылок на собственные материалы запрещено.
Итак, для начала немного матчасти
Получается, что если думать что мир идеален и писать программу для обрабтки нажатых клавиш, то реальность поворачивается к нам нелицеприятной стороной и на тесте в железе мы видим что вместо одной реакции по нажатию и отпусканию клавиши мы видим пачку повторных в количестве от 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);
}
Привет всем!я чайник в этих делах,помогите ребята.
Скоро вечер романса вокалисту понадобиться монитор,он будет на сцене,а до пульта 15 метров.от пульта на сцену идёт xlr магистраль..как подключить монитор коректно?Заранее спасибо..
Привет.
Исходные данные у меня такие. Я создаю аранжировки на компьютере исключительно силами софтовых приблуд. В компьютере стоит старомодная "Audiophile 192" от М-Аудио. Карта давно не поддерживается разработчиком, последние дрова на неё вышли, кажется под Win 7, и то силами умельцев, а разработчики остановились ещё на дровах для XP. Последнее время я стал замечать что при пользовании относительно свежими библиотеками (например этим пресловутым "Hollywood Action Trailer" для Nexus, или при толстеньких библиотеках для Контактика) у меня полностью вылетает аудиодрайвер (причём без какой-либо нагрузки на карту, вылететь может на моменте первой загрузки прессета). Cubase 9 выдаёт ошибку, после чего требуется перезагрузка компьютера, ибо дальнейшая возможность выбрать асио драйвер этой аудиофилки полностью пропадает.
Собственно грешу на аудиокарту, и подумываю о замене её на что-то современное. К сожалению я не являюсь железячником, и совершенно не разбирась в нынешнем "харде", и поэтому я здесь. Может быть кто-то посоветует, какую железку стоит прикупить взамен старушке. Параметры следующие:
- Бюджет до 30тыс. рублей.
- Win10
- Минимум аудиовходов. Вход с конденсорным питанием, возможно, пригодится в будущем.
- Выходы на мониторы и наушники (отдельная крутилка для громкости наушников приветствуется).
- Чтобы "кушала" современный VSTi софт с минимальной задержкой, ибо я частенько заморачиваюсь на широкие "в четыре руки ©" пианинные партии, и мне это критично.
- PCI или внешка - тоже не критично. Важна стабильная и быстрая работа.
- 192 - не требуется (не представляю себе, ГДЕ это нужно : ) максимум 48 - хватит, и то, потому что частенько этого просят на студиях артистов, с которыми я работаю) : )
Собственно, если кто-то что-то подскажет, в каком направлении копать, буду очень признателен.
Ребята всем привет! Завтра буду играть на радио с вертаков Pioneer CDJ-1000MK3. Я подготовил сет, в каком формате лучше записать mp3 или wav? Я свой сет выстроил таким образом, что за первым треком у меня идет второй, т.е как бы сводятся один за другим. И мне очень важно что бы теги были предельно понятными. Track 1 (76bpm) например. Один раз записал уже, но теги не воспроизводит. Обясните пожалуйста как правильно сделать.
У миди процессора появился экранчик ^^3
<<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 ^_^");
***
СХЕМА:
Ножки 15-16 на дисплее - подсветка (+5В/земля),
Переменный резистор 10к регулирует контраст
Итак, хорошие новости: удалось подключить миди-модуль к ПК через самодельный переходник и увидеть ПРАВИЛЬНЫЕ миди команды генерируемые устройством на миди выходе при нажатии отпускании клавиши ^^3
Осталось отладить баги, переполнение буфера при дребезге контактов, дописать код для полной матрицы кнопок, припаять к матрице кнопок и сделать гнезда миди через опторазвязку))
Музон на фоне мой ^_~
All broken keys are repaired with caprolactam. Now it is ready to DIY midi board conversion.
Все сломанные клавиши восстановлены капролактамом. Теперь можно делать MIDI клавиатуру))
Так выглядит форма для восстановления клавиш, которую я отпечатал из силикона и крахмала по целой клавише
Привет всем, решил присмотреться к новому PIONEER DDJ-200 даже не сколько из-за его дешевизны (хотя это тоже), сколько из-за компактности. До этого на контроллерах особо не играл - были или вертушки или сиди. Есть пара вопросов: если купить этот контролллер, нужно ли покупать еще и лицензию recordbox ? и еще, можно ли записываать миксы припомощи встроенной rec. функции - вдруг лицензия не позволит это делать?
Нам понадобятся:
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$
плата для припайки атмеги = 2$
блок питания на 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);
}
Проект симуляции в протеусе и результат работы отправки миди команд на терминале по нажатию-отжатию каждой клавиши
Следите за новостями))
Всем привет! У меня знакомый сейчас в Корее. Хочу заказать ему ноутбук для диджея. Особо сильно он ничего не "сводит", но часто приходится видеокуски в один фильм склеивать. Подскажите пожалуйста на какие характеристики обращать внимание?
PRO ЩИТ #18 - часть первая Обзор и распаковка DENON PRIME 4 от DJ TAGA Unboxing, Настройка, Mixer и оценка качества. Работа с REKORDBOX
Добрый день, подскажите, пожалуйста, установил программу recordbox, подключил контроллер, драва типо встают самостоятельно, дополнительно не надо ставить. Зарегистрировался, активировал ключ, все как надо, от имени админа все сделал. Включаю программу, цепляю контроллер, котроллер светится, но не работает, звука нет, компьютер видит контроллер, по совту все норм. Еще когда подключил отдельно мелкую колонку от материнской платы через USB и тюльпаны к контроллеру, взял 2 выхода, обматал проводкой и получил звук, следовательно со звуковой картой в контроллере все четко. Вопрос, не понимаю почему нет контакта контроллера с приложением (нажимаю плей, ничего не меняется, приходится мышкой на мониторе в самой программе все делать и нет звука) кто знает че не так я сделал?
Ребзо здорова,писал в тех.поддержку AKG в России,узнавал по поводу ремонта.Таких услуг они не оказывают.Где делают годный ремонт ушей? (more...)
Всем привет!
Вопрос не по проф-технике. Наверняка есть люди, которые в теме.
Хочу купить саундбар для телевизора, подключив через "HDMI-jack 3,5". Нормально ли будет если он будет работать, включенный постоянно в сеть? Дело в том, что у него есть гнездо, но не для адаптера, а для зарядки (микро-USB). К примеру, портативные колонки нежелательно, чтобы они работали при включенной зарядке. Могут накрыться (даже в инструкции написано). У меня уже накрывались. Т.е. либо стоит на зарядке либо работает, но отключенная от сети.
Не по теме просьба не писать и не предлагать домашние кинотеатры... Давно поставил бы и не парился...
Заранее спасибо.
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).
Привет всем, сразу говорю, что не шарю, но решил заняться, посмотрел много роликов, статей (и на 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) Что мне может еще понадобиться чтобы докупить?) Заранее спасибо
Столкнулась с проблемой? мой макбук про 13 2018 не видит мой контроллер пионеер 1000 , в частност проблема в том что я не могу вывсети звук на наушники и мониторы/ Пробовала установить дрова новые, сносила рекордбокс, пицот раз раз перезагружала, в настройках безопастности замочек разблокировала, да наушники работают и выключить и включить тоже пробавала. На винде все работает. Кто знает что делать и как в настройках мака сдлеать так что бы заработало как внешняя аудиокарта, пока он ее вообще не видит. Заранее спасибо!
всем привет, проблемма такая, сначала всё работало четко, сейчас подключаю загорается одна кнопка mic, пк полностью обнаруживает его, любой софт его находит но остальное не работает, тоесть не могу вообще ним пользоваться, помогите добрые люди!!!