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

Вопросы от начинающих по МК


Рекомендуемые сообщения

А я вот всё понимаю, тут просто надо было сказать что значение в массиве ПРОСТО ХРАНИТСЯ, это не порт, даже если записано "PB1" это просто число. В памяти, в регистрах где угодно но не в порту ввода-вывода. Чтобы изменить состояние ножки контроллера есть ТОЛЬКО ОДИН ПУТЬ ЭТО СДЕЛАТЬ - обратится к порту ввода-вывода с символическим именем PORTB или PORTD в зависимости от того какой порт-ножка нам нужны. И ещё один ньюанс - произвольно дергать ножками порта мы не можем(за редким исключением, но это уже забота компилятора), мы можем только установить все 8 ножек сразу. Если мы указываем только одну ножку то она и установится а остальные сбросятся, что в целом не есть хорошо - другие ножки в вашей программе могут нести другую функцию. Поэтому чтобы установить ножку нам надо сначала прочитать текущее состояние порта, потом сделать с этим значением логическое ИЛИ с маской нужного бита(вот именно ОНА ХРАНИТСЯ У НАС В МАССИВЕ!) и результат записать обратно, как именно это записывается в коде - надеюсь подскажут.

Учение - изучение правил. Опыт - изучение исключений.

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

  • Ответов 8,9т
  • Создана
  • Последний ответ

Топ авторов темы

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

тут просто надо было сказать что значение в массиве ПРОСТО ХРАНИТСЯ

Да ну! Если вы перечитаете две темы, то я несколько раз сказал что это не порт и порт нужно тоже занести в массив отдельный, или через структуру или класс в тот же :)

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

Поэтому чтобы установить ножку нам надо сначала прочитать текущее состояние порта, потом сделать с этим значением логическое ИЛИ с маской нужного бита

Тоже три раза.

Даже с кодом написал об этом.

В 25.12.2018 в 22:17, DrobyshevAlex сказал:

если нужно сохранить старшие 4 бита то как то так


if (PORTD & 0b00001000) {
	PORTD = (PORTD & 0xF0) | ((PORTD & 0x0f) >> 3);
} else {
	PORTD = (PORTD & 0xF0) | ((PORTD << 1) & 0x0F);
}
2 часа назад, Alexeyslav сказал:

И ещё один ньюанс - произвольно дергать ножками порта мы не можем(за редким исключением, но это уже забота компилятора)

Что это вообще значит?) Почему не можем? Я могу :D

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

Чтобы изменить состояние ножки контроллера есть ТОЛЬКО ОДИН ПУТЬ ЭТО СДЕЛАТЬ - обратится к порту ввода-вывода с символическим именем PORTB или PORTD

что мешает записать по адресу как я показал выше? адрес хранить в массиве точно так и писать в регистр нужные ножки

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

Очень многое значит. Человек не понимает основ, он ожидает что обращение к PB1 например, изменяет состояние ножки. Поэтому для него занести в массив и потом обратится к нему - это изменение состояния ножки. А что написано же... и порт в имени указан и пин.... но почему оно? А потмоу что кто-то в далёком эээ году сделал язык С стандартом толком не доработав его, и теперь досихпор за ним тянется шлейф из костылей. Почему, вот почему тогда паскаль не победил?

56 минут назад, DrobyshevAlex сказал:

Почему не можем? Я могу

Не сомневаюсь, но в архитектуре многих контроллеров есть ограничения на побитовый доступ к портам, например на AVR для побитового доступа доступны не все порты, особенно на мясистых контроллерах-многоножках. И есть ещё правда пару фишек которые не имеют уже смысла для С++ и работают только на уровне ассемблера - например запись в порт PINB(хотя он по логике предназначен для чтения) инвертирует состояние пина в который запишешь "1" т.е. сделает операцию XOR. В С++ конечно тоже можно записать в этот порт, но ни наглядности ни скорости всеравно не получишь наоборот только запутаешь тех кто потом будет читать код.

Учение - изучение правил. Опыт - изучение исключений.

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

А потмоу что кто-то в далёком эээ году сделал язык С стандартом толком не доработав его, и теперь досихпор за ним тянется шлейф из костылей.

О чем Вы? Какие костыли?) если человек только учится и не понимает чего то то он и в asm этого не поймет)) вообще не вижу костыля в решени данной проблемы

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

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

Не буду спорить ибо я не в курсе, в данном случае речь шла о atmega8 где я не вижу проблемы изменить 1 бит контроллера.

Или же я не понял о чем Вы вообще...

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

15 минут назад, DrobyshevAlex сказал:

Или же я не понял о чем Вы вообще...

конечно не поняли, речь о одновременном изменении нескольких бит порта без изменения состояния соседних бит.

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Костыли - да там везде костыли, все эти макросы... удобная штука иногда, но её используют как костыли и выстроили уже такую систему костылей что исправлять всё поздно, привыкли и не считают костылями но оно всё ими является.

17 минут назад, DrobyshevAlex сказал:

речь шла о atmega8 где я не вижу проблемы изменить 1 бит контроллера.

В общем случае это делается через процедуру чтение-модификация-запись, и она несколько уязвима к временным задержкам. прочитали, допустим и тут возникло какое-то прерывание, прерывание закончилось и только потом мы записали в регистр результат а он уже устарел на миллисекунды и не актуален. Побитовый же доступ через команду SBI/CBI лишён этого недостатка но доступен для портов находящихся в младшем адресном пространстве - туда попадают не все внешние порты.

24 минуты назад, DrobyshevAlex сказал:

если человек только учится и не понимает чего то то он и в asm этого не поймет

Поэтому, начинать надо с ассемблера, с прямой работы с периферией.

Учение - изучение правил. Опыт - изучение исключений.

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

42 минуты назад, IMXO сказал:

речь о одновременном изменении нескольких бит порта без изменения состояния соседних бит

то есть or или xor это не то и есть мк где можно изменить биты как то иначе?

я даже не представляю что вы имеете ввиду можно пример?

То есть речь идет о том, что нужен массив при обращении к которому мы сразу получим значение состояния PIN ибо автору нужно именно это, то есть asixX[x] - должно вернуть значение состояния пина на каком то порте на каком то пине. Что есть такого у других мк или асм для этого мк что позволит это сделать?

34 минуты назад, Alexeyslav сказал:

все эти макросы

имхо макросы это вообще можно отнести к компилятору или ide что угодно может выполнить подстановку в код вместо макросов кода :)

34 минуты назад, Alexeyslav сказал:

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

то есть это беда именно с++? в си или асм не будет такого? :)

что же касается данного мк, это выполняется в прерывании, то есть во время одного прерывания может стартануть другое?

34 минуты назад, Alexeyslav сказал:

Побитовый же доступ через команду SBI/CBI лишён этого недостатка

как все это относится к тому что запись типа

struct {
	port;
	pin;
} myPin;
...
myPin[4] pins;
...
*pins[0].port & (1 << pins[i].pin)

Вы вы называете костылем с++ :) как я понял говорите что это беда с++ с массивом в данном случае. То есть юзая асм вам не нужно знать адрес в каком читать состояние пинов? я конечно на асм мало писал) но не думаю что в асм можно создать массив в котором будет хранится только в 8 битах информация о номере пина без адреса порта и можно будет понять к какому порту она относится)

разве sbi позволит записать одновременно несколько бит порта да еще и не зная регистра?

34 минуты назад, Alexeyslav сказал:

Поэтому, начинать надо с ассемблера, с прямой работы с периферией.

дак я это ему и советовал парой страниц назад) или в соседней теме не помню уже

 

 

Мне кажется мы немного о разном говорим. Вы пытаетесь доказать в целом что с++ плох?)

Я же отталкиваюсь отданного проблемного места где человек не может понять что он в массиве хранит только бит который он хочет проверить.

Говорить же в целом о том что какой то язык плох... ну блин я сайты пишу на питоне руби или пхп но не на ассемблере или с++.

а приложение под андроди на яве а под иос на объектив си.

Есть вопрос, я обсуждаю как его решить а не то что на с++ не стоит писать художественную литературу :)

емнип можно легко вставлять ассемблеровский код в си и с++ если очень нужно)

Изменено пользователем DrobyshevAlex
Ссылка на комментарий
Поделиться на другие сайты

30 минут назад, DrobyshevAlex сказал:

я даже не представляю что вы имеете ввиду можно пример?

конечно можно , собственно на примере вашего кода с некоторыми допущениями

PORTD = (PORTD & 0xF0) | ((PORTD & 0x0f) >> 3);

в зависимости от платформы и компилятора с некоторыми вариациями разворачивается в

1. temp1=PORTD & 0xF0;

2. temp2=PORTD & 0x0f;

3. temp2>>=3;

4.  temp1 |= temp2;

5. PORTD = temp1;

по сути если этот код в майне и на 2..4 итерации прелетит прерывание с изменением битов <7:4> порт получит совершенно иное значение чем ожидалось , об этом вам собственно и грят

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

В общем случае это делается через процедуру чтение-модификация-запись, и она несколько уязвима к временным задержкам. прочитали, допустим и тут возникло какое-то прерывание, прерывание закончилось и только потом мы записали в регистр результат а он уже устарел на миллисекунды и не актуален. Побитовый же доступ через команду SBI/CBI лишён этого недостатка но доступен для портов находящихся в младшем адресном пространстве - туда попадают не все внешние порты.

 

30 минут назад, DrobyshevAlex сказал:

как все это относится к тому что запись типа

именно так и относится , ваш код может изменять биты только последовательно , но ни как не одновременно.

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

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

речь о одновременном изменении нескольких бит порта без изменения состояния соседних бит.

да, глянул скомпилированный код в с++ PORTD |= 1 он действительно сделал с чтением, я думал компилятор умнее, ибо еще лет 10 назад слышал что компилятор выражения типа a *= 2 компилирую как просто сдвиг.

Но тут конечно компилятор компилятору рознь) может кто то и компилирует))

Тут опять же спорить не буду особо)) Ибо я не в курсе включает ли стандарт си или с++ инструкции как компилятор должен обработать код. Есть 100500 вариантов натсроек оптимизации компилятора, и я тестировал без оптимизации, так что может с другими натсройками он и по другому скомпилирует код.

Так что могу лишь сказать, что есть стандарт и css и IE упорно десятилетия делает не так как другие, и под IE нужно писать костыли. Так это беда стандарта? Или все таки разработчики такие у IE?) Так и тут, спорно утверждать что это беда именно с++ или си) Есть куча компиляторов и оптимизаций)

 

 

Только что, IMXO сказал:

конечно можно

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

7 часов назад, Alexeyslav сказал:

А я вот всё понимаю, тут просто надо было сказать что значение в массиве ПРОСТО ХРАНИТСЯ, это не порт, даже если записано "PB1" это просто число. В памяти, в регистрах где угодно но не в порту ввода-вывода. Чтобы изменить состояние ножки контроллера есть ТОЛЬКО ОДИН ПУТЬ ЭТО СДЕЛАТЬ - обратится к порту ввода-вывода с символическим именем PORTB или PORTD

и все мои рассуждения были о том что я не считаю костылем конкретно макросы или структуры)

 

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

 

3 часа назад, DrobyshevAlex сказал:

говорите что это беда с++ с массивом в данном случае.

беды-то как раз в этом нет никакой, массив непричем и наверно единственный способ красиво решить задачу на любом языке. Но конкретно сам язык С слишком сильно и глубоко завяз в костылях, которые не позволяют ему развиваться. И один из этих костылей - макросы. Особенно в части ЯВУ - им уже не место. Они слишком непрозрачны и всепроникающи как метастазы.

Учение - изучение правил. Опыт - изучение исключений.

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

int axisX[4]={1,2,4,8};
while (1)
		{
			if (PIND&(1<<dirX))//проверяем состояние кнопки
			{
				PORTB=axisX[4-i];
			}
			else
			{				
			   PORTB=axisX[i];			   				
			}		
			if ((i>3))
			{
				i=0;
			}
			
		}

я не знаю в чем проблема была объяснить орфографию.  

4-i заменить на 3-i

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

6 часов назад, Дмитрий Мамедиев сказал:

я не знаю в чем проблема была объяснить орфографию.  

6 часов назад, Дмитрий Мамедиев сказал:

4-i заменить на 3-i

Серьезно? Орфографию? Для начала это не орфография даже)

Ну и если вы не читаете что Вам пишут то о чем речь

Вот ваш код

В 02.01.2019 в 11:01, Дмитрий Мамедиев сказал:

axisX[stepX];

в каком месте тут нужно 4-i заменить на 3-i??? Где тут вообще i? 

а вот Вам ответ был

В 02.01.2019 в 11:46, DrobyshevAlex сказал:

Зачем вы пишите константу если я в примере не просто так писал define?)

В 02.01.2019 в 11:01, Дмитрий Мамедиев сказал:

axisX[stepX];

Тут мало того что ничего не делается, так вы еще и пишете stepX вместо как я думаю вы хотели написать туда i что бы обойти все элементы массива, а так вы каждый проход цикла пытаетесь обратится к axisX[4] которой даже не существует. У вас всего 4 элемента массива, где первый имеет индекс 0. То есть 0, 1, 2, 3 - это существующие элементы массива, а вы пишите axisX[4] у Вас даже компилятор должен ругаться и не скомпилировать прошивку.

 

Что у Вас там вообще нет i.

Дальше Вы пишите сейчас PORTB=axisX[4-i]

А что было? axisX[stepX]

То есть Вы даже PORTB не писали. О чем я раза три минимум Вам написал. А теперь Вы пишите про какую то орфографию, что этим даже назвать нельзя, то ошибка логики.

Если вы пишите в ста темах, не нежно потом путаться.

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

Ах да совсем забыл, хотя смысла писать нет так как Вы не читаете видимо.

Но я Вам уже говорил об этом, у Вас чередуются PORTB и PORTD в одном массиве

В 02.01.2019 в 11:01, Дмитрий Мамедиев сказал:

int axisY[stepY]={(1<<PD5),(1<<PD6),(1<<PD7),(1<<PB0)};

И если не использовать указатели на порты, то придется лепить костыль чтобы указать в какой порт писать

+ Вы переписываете ВЕСЬ порт, а это значит будь там ножка на вход с подтяжкой Вы ее отключите. Будь там что то еще Вы это перезапишете. Но Вам либо все равно, либо вы не читаете либо не понимаете...

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

Вы писали что axis[stepx] ничего не даст. Ну привели бы пример что нужно ссылаться на порт PORTB=axis[...]. А то что в массиве разные порты, ну можно и одинаковые написать если от этого проще будет. В моем коде все равно косяк есть, в протеусе уже увидел.

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

1 час назад, Дмитрий Мамедиев сказал:

Ну привели бы пример что нужно ссылаться на порт PORTB=axis[...]

Вы писали в несколких темах, если Вы все перечитаете что я писал, то думаю найдете как минимум это

В 01.01.2019 в 18:24, DrobyshevAlex сказал:

*(pins[pos].port) |= 1 << pins[pos].pin; // установить 1 на ноге

Я несколько раз просил описать просто словами что Вы хотите? Вы писали что хотите вызвать состояние порта,  моем понимании это вообще не запись а чтение состояние ноги. Из за этого несколько раз я просил описать что вам нужно.

Код в цитате это код с учетом исправления этого

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

И если не использовать указатели на порты, то придется лепить костыль чтобы указать в какой порт писать

Вы бы строили вопрос луче а не кидали код, который как я Вам и написал полностью не вер, а судя потому что вы кинули в предыдущем посте так и вышло, было бы все гораздо проще.

Где то я прочел такую фразу "Правильно сформулированный вопрос содержит 80% ответа".

1 час назад, Дмитрий Мамедиев сказал:

А то что в массиве разные порты, ну можно и одинаковые написать если от этого проще будет.

Вам религия не позволяет использовать структуры, классы или два массива?

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

   *(pins[pos].port) |= 1 

для меня это пока слишком сложно. Согласен видимо я неправильно поставил вопрос. Надо было это показать.009cb2d3fe96bac9804866d2d826db32.jpg

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

9 часов назад, Дмитрий Мамедиев сказал:

Надо было это показать.

с этого надо было начинать....  решается это как-то так:

Скрытый текст

#define dirX_CLK PIND0
#define dirX_reverse PIND1
#define dirY_CLK PIND2
#define dirY_reverse PIND3

struct button_type {
  unsigned CLK: 1;
  unsigned old_CLK: 1;
  unsigned reverse: 1;
  unsigned just_CLK: 1;
  unsigned : 1;
  unsigned : 1;
  unsigned : 1;
  unsigned : 1;
}buttonX,buttonY;

unsigned char axisX[4]={(1<<PB1),(1<<PB2),(1<<PB3),(1<<PB4)};
unsigned char axisY[4]={(1<<PB0),(1<<PB5),(1<<PB6),(1<<PB7)};
unsigned char stepX=0,stepX=0;
unsigned char tempPORTB;

while (1)
{
  // Cостояние кнопок 
        if ( PIND&(1<<dirX_CLK) ){buttonX.CLK = 1;}
         else{ buttonX.CLK = 0;}
              
        if ( PIND&(1<<dirX_reverse) ){buttonX.reverse = 1;}
         else{ buttonX.reverse = 0;}

        if ( PIND&(1<<dirY_CLK) ){buttonY.CLK = 1;}
         else{ buttonY.CLK = 0;}
              
        if ( PIND&(1<<dirY_reverse) ){buttonY.reverse = 1;}
         else{ buttonY.reverse = 0;}
         
  // События: Тактовые кнопки только что нажаты
        if ( buttonX.CLK && !buttonX.old_CLK )
           { buttonX.old_CLK  = buttonX.CLK;
             buttonX.just_CLK = 1;
           }

        if ( buttonY.CLK && !buttonY.old_CLK )
           { buttonY.old_CLK  = buttonY.CLK;
             buttonY.just_CLK = 1;
           }
  // Обрабатываем события
     if( buttonX.just_CLK) 
       { 
        if ( buttonX.reverse )//проверяем состояние кнопки
         {
	  stepX--;
          stepX &=0x03;  
	 }
	else
	 {
	  stepX++;
          stepX &=0x03;  
	 }
        buttonX.just_CLK=0; 
       }
  

     if( buttonY.just_CLK) 
       { 
        if ( buttonY.reverse )//проверяем состояние кнопки
         {
	  stepY--;
          stepY &=0x03;  
	 }
	else
	 {
	  stepY++;
          stepY &=0x03;  
	 }
        buttonX.just_CLK=0; 
       }
        
         tempPORTB =axisX[stepX];
         tempPORTB |=axisY[stepY];
         PORTB =tempPORTB;
}

 

 

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

Народ, день добрый, кто в теме, подскажите. 
у какого осцилла меньше погрешность , понятно что оба не айс, просто нужен ответ у ардуиновского (отсюда) или  DSO150 (вот такой)

好奇心不是缺点,而是一个知识的来源。

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

Оба их нельзя использовать для измерений, показометры. В лучшем случае у этих приборов погрешность в районе 1% и не из-за того что не хватает разрешающей способности. У них другая беда - неравномерность шкалы. Откалибруете по верхней границе, а он у вас в середине врать будет на 5%, подадите чистый синус на вход а он вам скажет что у вас там гармоники 5%... и приехали, да. Забавно будет если у синуса будет противоположное искажение, и он скажет что сигнал идеален а на деле ужас-ужас.

Эти игрушки поиграться и выбросить, максимум посмотреть форму сигнала.

И кстати, знаете ещё один прикол с АЦП в микроконтроллерах? А прикол в том что разрядность указана для скорости измерения менее 1Кс/с для больших скоростей выборок эффективная разрядность падает вплоть до 6 бит + шум... и делай что хочешь. Это вообще ниочемные варианты, дешманский дедовский осцилоскоп типа H313 и то будет лучше(у него полоса до 100кГц).

6 часов назад, IMXO сказал:

ответ очевиден или нет?

Нифига не очевиден. В этих АЦП эффективная разрядность зависит от частоты выборок, и не факт что 12-битный продержится дольше чем 10-битный. На низкой скорости конечно будет преимущество, но сомневаюсь что оно сохранится уже после 1Кс/с.

Учение - изучение правил. Опыт - изучение исключений.

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

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

А прикол в том что разрядность указана для скорости измерения менее 1Кс/с для больших скоростей выборок эффективная разрядность падает вплоть до 6 бит + шум... и делай что хочешь.

где это написано? 

 

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

В даташите на микроконтроллер. STM-ки не смотрел, но видел на форумах плевались, а вот для ATMEGA это точно. Да и не думаю что в STM будет что-то кардинально лучше, назначение и конструкция у них принципиально одинаковая а значит и проблемы одни и те же.

Даже немного ошибся - в главных характеристиках АЦП для 328-й меги написано:  Up to 15 kSPS at Maximum Resolution. Дальше идёт деградация эффективной разрешающей способности, при 76kSPS это вроде 8 бит. И стоит заметить что здесь не учтён шум.

Учение - изучение правил. Опыт - изучение исключений.

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

8 часов назад, Alexeyslav сказал:

В даташите на микроконтроллер. STM-ки не смотрел, но видел на форумах плевались

У Вас какая то каша в представлениях об эффективной разрядности.

На самом деле шум определяется условиями измерений в самом контроллере (способом формирования опоры и условиями работы цифровой части) и схемотехникой сигнала на входе АЦП. Можно плеваться до потери пульса, но винить нужно только себя.

Полоса пропускания УВХ (именно она определит падение уровня сигнала в массиве АЦП при повышении частоты СИГНАЛА, а не выборок). Можно вообще иметь частоту семплирования 10 МГц, а при этом сигнал может быть 50 МГц. Стробоскопическое преобразование (даунсемплинг) возможен лишь тогда, когда это позволяет полоса УВХ, то есть время захвата сигнала.

 

戦う前に相手のベルトの色に注目

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

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

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