реклама на сайте
подробности

 
 
> Чтение MIDI -Uart
dim3740
сообщение Jan 31 2015, 18:31
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 30-03-13
Пользователь №: 76 278



Настраиваю прием МИДИ сообщений через UART на примере команды 0xFE –это Active Sensing (System Real-Time Messages), генерируется вне зависимости от нажатия нот – что удобно. Идет только эта команда, что успешно проверяется утилитами МИДИ монитор, с отключенными фильтрами. Период команды примерно около 1 сек.
Для контроля кода приема применяю ЖКИ индикатор. Но на нем устойчиво отражается FC. Предполагаю: 1) ошибка в выводе на индикатор., битовый сдвиг и т.п. 2) ошибка в Коэф деления проца. 3) распиновка миди кабеля (инверсия и т.п.) 4) инверсия в оптроне/ток-уровень, но стандартная схема, а именно: при наличии тока в петле, оптрон открывается и формирует уровень «нуля» (0 вольт) = стартовому биту для UART на порту МК. Делал через буфер, с последующим "неторопливым" выводом его... та же проблема. Вообще, если FF -то FE, если FE - то FC, если FC - то выводится F8... типа сдвига 1 влево... Библа LCD распространенная в Инете...


#define F_CPU 8000000L
//#define USART1_F 31250
int main(void)
{
UCSR1A=0x00; //прием с прерыванием, передача. 8-N-1
UCSR1B=0x98;
UCSR1C=0x86;

UBRR1H=0x00;
UBRR1L=0x0F; // явное указания коэф. Деления, код 0х10 также не катит((
sei();
}

ISR(USART1_RXC_vect)
{

unsigned char lef = 0;
if (UCSR1A & (1<<7))
{ // разбираем по тетрадам, затем в ASCII и на индикатор

lef = (UDR1>>4) ;
if (lef <10)
{
lef=lef+0x30;
}
else
{
lef=lef+0x37;
}
lcd_dat(lef);

lef = UDR1 & 0x0F;
if (lef < 10)
{
lef=lef+0x30;
}
else
{
lef=lef+0x37;
}
lcd_dat(lef);
}
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
Огурцов
сообщение Jan 31 2015, 20:54
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



вариант: оптрон тормозит - открывается быстро, закрывается медленно, проще поменять, чем обойти, 6n137 для начала
Go to the top of the page
 
+Quote Post
dim3740
сообщение Jan 31 2015, 23:04
Сообщение #3





Группа: Новичок
Сообщений: 6
Регистрация: 30-03-13
Пользователь №: 76 278



Цитата(Огурцов @ Feb 1 2015, 00:54) *
вариант: оптрон тормозит - открывается быстро, закрывается медленно, проще поменять, чем обойти, 6n137 для начала

Спасибо за внимание! Башку уже сломал((( Стоит РС817, шунтированная диодом обратно.... Заменю... Кабели менял, и отправка по ним идет нормуль. В коде точно все верно? Я как бы без опыта .....

Не..код верный, ибо тупо вбил в буфер FF - он и вышел. Осцилл есть, но пакет не засекается.... анализатора нет. Может его как-то сэмитировать...
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Feb 1 2015, 06:18
Сообщение #4


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



при такой неисправности - запросто, pc817 меняйте, потом уже дальше думать
либо сделайте скорость не выше 9600, если софт на второй стороне позволяет


Сообщение отредактировал Огурцов - Feb 1 2015, 06:21
Go to the top of the page
 
+Quote Post
dim3740
сообщение Feb 1 2015, 09:58
Сообщение #5





Группа: Новичок
Сообщений: 6
Регистрация: 30-03-13
Пользователь №: 76 278



Цитата(Огурцов @ Feb 1 2015, 09:18) *
при такой неисправности - запросто, pc817 меняйте, потом уже дальше думать
либо сделайте скорость не выше 9600, если софт на второй стороне позволяет

Заменил развязку - ошибка ТА ЖЕ. Скорость МИДИ нельзя снизить. В чем я не уверен: последствия нового прерывания ДО момента вывода на дисплей - но делал и через буфер, т.е. разделял операции чтения и вывод. 2) сдвиг вправо 4 бит при unsigned не должен приводить к заполнению тетрад 1. Но в моем алгоритме вывода -это по барабану, да и вывод верен при явном указании байта. Значит, все связано с прерыванием. Имитировать UART программным методом - совсем не нужный уход от вопроса, делать UART без прерывания не представляю как.... И ИМХО ларчит должен иметь простой ключик. Гугля говорит, что проектов по ЧТЕНИЮ миди немного (чаще - ВЫВОД, и я его успешно сделал), в основном на Arduino, и там свои библы... 3) Не ясен/противоречив вопрос про "различия" МИДИ и UART в части старт-стопных бит.. М.б. на ВЫВОД это получается,а вот на ЧТЕНИЕ....(((((


И еще: не является ли МИДИ синхронным протоколом, что, ИМХО, логичнее (в 100 % пишут, что нет).... Еще: в сети бывают проекты 8-N-2 с МИДИ. Уф...)))

Сообщение отредактировал dim3740 - Feb 1 2015, 09:59
Go to the top of the page
 
+Quote Post
dim3740
сообщение Feb 1 2015, 11:24
Сообщение #6





Группа: Новичок
Сообщений: 6
Регистрация: 30-03-13
Пользователь №: 76 278



Спасибо! Не хватало тока оптрона на выходе. Уменьшил резистор. При UART видимо не нужно также и внутренней подтяжки RX/
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Feb 1 2015, 12:32
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(dim3740 @ Feb 1 2015, 10:58) *
Заменил развязку - ошибка ТА ЖЕ

в смысле ? опять на 817 ? тогда такой же результат понятен
как и увеличение выходного тока
лучше таки заменить, если это не одинокий экземпляр
Go to the top of the page
 
+Quote Post
halfdoom
сообщение Feb 1 2015, 12:47
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 003
Регистрация: 20-01-05
Пользователь №: 2 072



В дополнение, посмотрите на http://forums.obdev.at/viewtopic.php?f=8&t=6978, это преобразователь USB2MIDI на какой-то меге со схемой и исходниками. Год назад собирал для себя - работает без нареканий.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 09:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01404 секунд с 7
ELECTRONIX ©2004-2016