S

PIC Timer прерывания

41 сообщение в этой теме

Ваши мнения ? как можно исправить. Можете подсказать куда  посмотреть , что можно изменить ?

UART с рейтом в 128000 работает 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Чтобы знать куда посмотреть, что изменить, да и вообще что делать, нужно знать цель. А её из Ваших уст не очень слышно.
Мы понимаем, что у Вас плохо с Русским, но всё-таки, попытайтесь внятно объяснить вопрос.
 

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я работаю с  Microphone Sensor (KY-038), и хотелось зарегистрировать голос. А для этого , мне нужно как минимум 8000 значение от ацп , чтобъ потом в Матлаб ево преображать для дольнешово дело.  И я так подумал , если нужно 8000 значения. Зная что Ф = 1/Т, то мне нужно получать  данные с периодом в 125 мкс и  передать  через UART.  Хочу сделать распознавание голоса с неуроновами сетями на недорогой микроконтроллер . 

Извините за мой русский. 

    //Baudrate 128.000
    //  U1BRG = (40.000.000 / (16 * BaudRate)) - 1
    //  U1BRG = (36850000 / (16 * 128.000)) - 1
    //  U1BRG = 19.53125
    

Изменено пользователем StasRadeon
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Чтобы передавать данные, которые преобразуются с определённой частотой, нужно выбирать скорость передачи равной или (лучше) выше, чем частота преобразования. Иначе данные просто будут не успевать передаваться.
Сделайте частоту UART, хотя бы, раза в 2 выше, тогда все данные буду передаваться вовремя и корректно.
Это с учётом того, что на каждое одно преобразование Вы будете передавать 1 символ. Сколько символов Вы будете передавать, во столько раз должна быть выше частота UART.

 

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это значит что если я отправлю 3 символа ( потому что работаю ацп на 10 битов и я отправляю [0-256 максимум ] аdc value  ( но не сложно и 1024 ) ) то будет нужно  в 3 раза быстрее, правильно понел ? То значит нужно будет UART -> 256.000 ? 

и значит что Freq , не должен быть 40 Мнz , а 80 Mhz 

Правильно ?

и видно что мне нужно использовать и Direct Memory Acces (DMA) 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Дело не в ДМА. ДМА лишь позволяет буферизовать поток данных, но если скорость выгрузки из буфера ДМА будет ниже, чем скорость поступления данных, то буфер ДМА неизбежно будет переполнен.

Нужно увеличивать скорость связи с компьютером.  Расчет делать лениво, но для 125 мкс периода получается поток 8кслов/с  то есть 16 кбайт/с.

Сиречь простой переброс в УАРТ с рейтом ВЫШЕ, чем 16000 даст искомое.

Но есть одно но. Передача данных на компьютер имеет ограничения по латентности. И это определяется операционной системой. Так интервал транзакций на компьютер может колебаться от 1 до 10 мс МИНИМУМ.

Но даже если гнать по HID USB мосту с кадрами по 64 байта, то легко можно получить 32кбайт/с, а при CDC USB еще больше.

 

 

2 часа назад, StasRadeon сказал:

Извините за мой русский. 

Вы из Румынии или из Молдавии?

:)

Изменено пользователем my504
1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, StasRadeon сказал:

Это значит что если я отправлю 3 символа ( потому что работаю ацп на 10 битов и я отправляю [0-256 максимум ] аdc value  ( но не сложно и 1024 ) ) то будет нужно  в 3 раза быстрее, правильно понел ? То значит нужно будет UART -> 256.000 ?

Поняли правильно. Только зачем 3 байта ? 1024 значений укладываются хорошо и в 2 байта.
Отсюда, как уже выше сказали, Вам нужен поток не менее 16 килобайт/сек. , а это 128 кбит/сек. Это минимум.
 

1 час назад, StasRadeon сказал:

и значит что Freq , не должен быть 40 Мнz , а 80 Mhz

Никак не связано. При тактировании периферии в 40 МГц, легко можно получить скорость в 128 килобод.
 

PS: А вообще, для голоса и 8 бит хватит за глаза. Да и частоту дискретизации смело можно понижать. На 8 КГц музыка нормально играет (без высоких), не говоря уж о голосе :)


 

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, my504 сказал:

Вы из Румынии или из Молдавии?

Moldova 

Хорошо, и как мне повысить на 16 килобайт/сек ? Проблема в УАРТ как видно. Дайте маленький пример,  пожалуйста 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

bits_per_character -> 8 data bits + 1 start bit + 1 stop bit
    
bytes x bits_per_character / bits_per_second

16000 x 10 / 128000 = 1.25 seconds.
16 x 1024 x 10 / 128000 = 1.28 seconds.

правильное мышление  ? 

 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Правильное.

Да, 128 кбит/сек не хватит. Нужна скорость побольше.
 

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

но когда я смотрел в Device Manager в ПК , порт больше чем 128.000 не принимает. 

А как сделать так что побоище. Допустить поставим 256000, -> 0.64 seconds; Тоже мало  

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Почему мало ? 256000 хватает.
10 бит * 2 байта * 8000 КГц = 160000 кбит/сек.
 

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

может имеет смысл сразу поднять скорость до 921 600 кбит/с (dspic33fj128mc802 по datasheet вроде поддерживает: Two UART modules (10 Mbps)), а потом посмотрите на сколько можно снизить скорость

многие переходники USB-COM поддерживают скорость до 921 600 кбит/с (но данные переходники можно использовать только для отладки, на длительное время нельзя - USB отваливается)
а если требования к надёжности выше, то можно это:
http://www.moxa.ru/shop/boards/pci_express/cp-102e/cp-102el/
http://www.moxa.ru/shop/com_v_ethernet/industrial/ia_5000a/nport_ia_5150a/
http://www.moxa.ru/shop/converters/fiber/icf-1150/icf-1150-m-sc/

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
void InitUART1() {
    
	U1MODEbits.UARTEN = 0;	
    U1STAbits.UTXEN = 0;
	U1MODEbits.ABAUD = 0;	
	U1MODEbits.BRGH = 0;	//High Speed mode
	U1MODEbits.PDSEL = 0;	// Fara paritate
	U1MODEbits.STSEL = 0;	// 1 bit de Stop/
	//  U1BRG = (Fcy / (16 * BaudRate)) - 1
	//  U1BRG = (36850000 / (16 * 256000)) - 1
	//  U1BRG = 10
	U1BRG = 10;//256.000//239;
	U1MODEbits.UARTEN = 1;	//Activam UART
	U1STAbits.UTXEN = 1; //Activam Transmisia
    _delay__us(30); // 1/256000
    //DELAY_105uS

это последние модификацие в коде, но тоже не очень быстро ;

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо огромное всем , отпишусь когда будет проект готовый. ^_^

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

  • Сообщения

    • Что все на коп пошли? ))  r3 поставил переменник тх регулирует от 8мА до 22 мА ...чуйка на монету 15 см хотя баланс сводил по разному (3ч просидел) сводил от 30мВ и више толку 0 ... Также  RX подключал по разному но всегда 8228Hz 0 mv хотя мд работает.... Также надеюсь ктонибуть ответит ..
    • Токовое зеркало меньше влияет на характеристики унч чем повторитель в кун, собирал 2 варианта и отслушивал разница не в пользу тз. Если ми говорим от чего больше профита.
    • А при чём здесь тема, которая где-то у вас? Здесь, на Паяльнике, эта тема о конкретном усилителе - о "торчибасе" - с 1-го поста надо было читать, а не с куска, выдернутого откуда-то из середины.  Вообще-то я не для того выкладывал эту схему(хотя это всего -лишь картинка из симулятора), чтобы кто-то её уродовал в силу своего недопонимания её нюансов. Если не понимаешь того, что даёт токовое зеркало, и нет под рукой "букваря", карандаша и клочка бумаги, чтобы посчитать - спроси  
    • кренки просадку под нагрузкой будут давать, и унч в голодании будет, кно нибуть видел чтоби в оконечник стаб ставили, всегда идет прямо с диодов вся мощ питания ни виходние транзюки или микри
    • Хотел бы получить квалифицированный совет по поводу процесса и результатов моих измерений формы цифрового сигнала. Имееются значительные базовые знания цифровой электроники но практически нулевой опыт. Есть некое цифровое(?) устройство, для которого мне хотелось бы задокументировать форму сигнала. Есть дешевый китайский тестер.
      Вначале все довольно ясно, 


      но когда начинаю менять масштаб оси времени, то выглядит так, как будто, во-первых, импульсы идут пачками

      , а потом, что эти "пачки" чередуются полярностью. 

      потом бОльшими пачками:



      И напоследок пачки как бы чередуются с одиночными сигналами не совсем прямоугольной формы (последние 4 фото имеют один и тот же масштаб времени)




      Да и начальные импульсы строго говоря не совсем прямоугольные - верхняя часть имеет спад -- вначале было подозрение что это просто проблема с осциллографом, но потом вспомнил, что у него есть калибровочный сигнал, который не имел такой проблемы. Так как я никогда не использовал осциллограф, то полагаю, что может, что не учитываю. По идее, этот прибор должен выдавать "модифицированный прямоугольный сигнал 100Гц и длительностью сигнала 2мсек". Но мне видятся некие несоответствия для разных масштабов времени:
      почему для <= 10мсек все сигналы двуполярные а дла 20мсек чередуются полярностью?
      почему для 20мсек пачки просто чередуются, а для 50мсек группируются в бОльшие пачки одной полярности?
      почему ширина пачек для 0.2сек и для 0.5сек практически одинаковая?
      похоже ли что для некоторых 0.5сек фото пачки действительно чередуются с одиночными импульсами более растянутыми? Фактически на основании того что я вижу это не совсем цифровой сигнал, кроме того, видны множественные огрехи на разных фото. Либо
      проблема с очень простым осциллографом, либо с процессом измерения, либо (ощущение, что) сам прибор очень простой и не обеспечивает 
      качественного сигнала. А может, дело просто в том, что сигналы, организованные в пачки разной полярности, нельзя увидеть при большем разрешении времени из-за синхронизации осциллографа, установленной по уровню, но этот уровень одной полярности, так что осциллограф просто "пропускает" отрицательные пачки?