Обсуждаем контроллеры компании Atmel.
Ответить

Re: Ардуино - запись звука

Чт июн 16, 2022 20:14:01

берём переменную х и записываем в неё данные из пинов 0,1,2,3 потр С

if (PINC.0 == 1) {x |= 0b00000001;};
if (PINC.0 == 0) {x &= 0b11111110;};
if (PINC.1 == 1) {x |= 0b0000

а нельзя зацепив провода к подряд идущим пинам одного порта сделать:
х=PINC&0x0f;
или х=(PINC>>2)&0x0f; (если пины начинаются не з 0, а со 2го)
?
Последний раз редактировалось Ivanoff-iv Чт июн 16, 2022 20:16:06, всего редактировалось 1 раз.

Re: Ардуино - запись звука

Чт июн 16, 2022 20:15:00

а что, разве нельзя x = PORTC & 0x0F; или x = PINC & 0x0F; ?

Добавлено after 32 seconds:
опять не успел :)

Re: Ардуино - запись звука

Чт июн 16, 2022 21:15:56

Ivanoff-iv писал(а): нельзя зацепив провода к подряд идущим пинам одного порта сделать:

низя.
всё идёт в разнобой... как попало))

valA= DigitalRead(6);
valB=DigitalRead(7);
valC=DigitalRead(8);
valD=DigitalRead(9);

мы не ищем лёгких путей))


x = ((PINC&(1<<0))?(1<<0):0) \
| ((PINC&(1<<1))?(1<<1):0) \
| ((PINC&(1<<2))?(1<<2):0) \
| ((PINC&(1<<3))?(1<<3):0);

я смотрю ты просто помешался на сдвигах)) будь осторожней)) а то так ведь и самому сдвинуться можно)) :))

а такты процессора посчитал ?
сравнил с этим ?
if (PINC.0 == 1) {x |= 0b00000001;};
if (PINC.0 == 0) {x &= 0b11111110;};
if (PINC.1 == 1) {x |= 0b00000010;};
if (PINC.1 == 0) {x &= 0b11111101;};
if (PINC.2 == 1) {x |= 0b00000100;};
if (PINC.2 == 0) {x &= 0b11111011;};
if (PINC.3 == 1) {x |= 0b00001000;};
if (PINC.3 == 0) {x &= 0b11110111;};

а с этим ?
x = 0;
if (PINC.0 == 1) {x |= 0b00000001;};
if (PINC.1 == 1) {x |= 0b00000010;};
if (PINC.2 == 1) {x |= 0b00000100;};
if (PINC.3 == 1) {x |= 0b00001000;};
:)
Последний раз редактировалось roman.com Чт июн 16, 2022 21:20:03, всего редактировалось 1 раз.

Re: Ардуино - запись звука

Чт июн 16, 2022 21:19:37

roman.com писал(а):а такты процессора посчитал ?
сравнил с этим ?
PINC.0
Откуда ты это выдрал? ИЗ CVAVR? Эта фича только есть у него. :kill:

Re: Ардуино - запись звука

Чт июн 16, 2022 21:21:10

ну да... у ардуины фич нет)) видимо поэтому они такие тормознутые))

Re: Ардуино - запись звука

Чт июн 16, 2022 21:36:00

Код:
if (PINC.0 == 1) {x |= 0b00000001;};
if (PINC.0 == 0) {x &= 0b11111110;};
if (PINC.1 == 1) {x |= 0b00000010;};
if (PINC.1 == 0) {x &= 0b11111101;};
if (PINC.2 == 1) {x |= 0b00000100;};
if (PINC.2 == 0) {x &= 0b11111011;};
if (PINC.3 == 1) {x |= 0b00001000;};
if (PINC.3 == 0) {x &= 0b11110111;};


у ардуины такого нету, тока если так, допустим:

Код:
if ((PIND &(1<<PD0))==1) {x |= 0b00000001;};
if ((PIND &(1<<PD0))==0) {x &= 0b11111110;};
if ((PIND &(1<<PD1))==1) {x |= 0b00000010;};
if ((PIND &(1<<PD1))==0) {x &= 0b11111101;};
if ((PIND &(1<<PD2))==1) {x |= 0b00000100;};
if ((PIND &(1<<PD2))==0) {x &= 0b11111011;};
if ((PIND &(1<<PD3))==1) {x |= 0b00001000;};
if ((PIND &(1<<PD3))==0) {x &= 0b11110111;};


если это правильно? Ардуино ИДЕ пропускает
Но короткие решения мне , конечно, больше нравиться.

Re: Ардуино - запись звука

Чт июн 16, 2022 21:37:28

roman.com писал(а):а такты процессора посчитал ?
сравнил с этим ?
На, застрелись

Выкинь этот компилятор
Последний раз редактировалось Dimon456 Чт июн 16, 2022 21:42:08, всего редактировалось 1 раз.

Re: Ардуино - запись звука

Чт июн 16, 2022 21:41:27

roman.com,
olegue писал(а):Добавлено after 5 minutes 29 seconds:
а , ну да, удобнее же взять пины одноо регистра

например PD0,pd1,pd2,pd3 и подать на них, а как из "взять"? Эти биты?


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

Re: Ардуино - запись звука

Чт июн 16, 2022 21:44:32

Вам надо поменять биты местами
Код:
   x = ((PINC&(1<<0))?(1<<3):0)       \
         | ((PINC&(1<<1))?(1<<1):0)    \
         | ((PINC&(1<<2))?(1<<2):0)    \
         | ((PINC&(1<<3))?(1<<0):0);
или пины местами
Код:
   x = ((PINC&(1<<2))?(1<<0):0)       \
         | ((PINC&(1<<1))?(1<<1):0)    \
         | ((PINC&(1<<3))?(1<<2):0)    \
         | ((PINC&(1<<7))?(1<<3):0);

Re: Ардуино - запись звука

Чт июн 16, 2022 21:44:47

Dimon456 писал(а):На, застрелись
в его случае - захлебнись :tea:

Re: Ардуино - запись звука

Чт июн 16, 2022 22:32:01

Dimon456 писал(а):Вам надо поменять биты местами
Код:
x = ((PINC&(1<<0))?(1<<3):0) \
| ((PINC&(1<<1))?(1<<1):0) \
| ((PINC&(1<<2))?(1<<2):0) \
| ((PINC&(1<<3))?(1<<0):0);
или пины местами
Dimon456,

это мне было обращено, если честно, я не совсем понял

к этому коду была реплика?
Код:
if ((PIND &(1<<PD0))==1) {x |= 0b00000001;};
if ((PIND &(1<<PD0))==0) {x &= 0b11111110;};
if ((PIND &(1<<PD1))==1) {x |= 0b00000010;};
if ((PIND &(1<<PD1))==0) {x &= 0b11111101;};
if ((PIND &(1<<PD2))==1) {x |= 0b00000100;};
if ((PIND &(1<<PD2))==0) {x &= 0b11111011;};
if ((PIND &(1<<PD3))==1) {x |= 0b00001000;};
if ((PIND &(1<<PD3))==0) {x &= 0b11110111;};

Re: Ардуино - запись звука

Пт июн 17, 2022 00:37:28

Код:
if (PINC.0 == 1) {x |= 0b00000001;};
if (PINC.0 == 0) {x &= 0b11111110;};
if (PINC.1 == 1) {x |= 0b00000010;};
if (PINC.1 == 0) {x &= 0b11111101;};
if (PINC.2 == 1) {x |= 0b00000100;};
if (PINC.2 == 0) {x &= 0b11111011;};
if (PINC.3 == 1) {x |= 0b00001000;};
if (PINC.3 == 0) {x &= 0b11110111;};


у ардуины такого нету, тока если так, допустим:

Код:
if ((PIND &(1<<PD0))==1) {x |= 0b00000001;};
if ((PIND &(1<<PD0))==0) {x &= 0b11111110;};
if ((PIND &(1<<PD1))==1) {x |= 0b00000010;};
if ((PIND &(1<<PD1))==0) {x &= 0b11111101;};
if ((PIND &(1<<PD2))==1) {x |= 0b00000100;};
if ((PIND &(1<<PD2))==0) {x &= 0b11111011;};
if ((PIND &(1<<PD3))==1) {x |= 0b00001000;};
if ((PIND &(1<<PD3))==0) {x &= 0b11110111;};


если это правильно? Ардуино ИДЕ пропускает

:dont_know:
наверное для ардуины это и правильно)) мой компилятор такого не понимает ))
загрузи... проверь.
Но короткие решения мне , конечно, больше нравиться.

:))
ещё короче ?

x = 0;
if ((PIND &(1<<PD0))==1) {x |= 0b00000001;};
if ((PIND &(1<<PD1))==1) {x |= 0b00000010;};
if ((PIND &(1<<PD2))==1) {x |= 0b00000100;};
if ((PIND &(1<<PD3))==1) {x |= 0b00001000;};

или ещё короче ? ))
:))
Dimon456 писал(а):
roman.com писал(а):а такты процессора посчитал ?
сравнил с этим ?
На, застрелись

Выкинь этот компилятор

такты.jpg
(35.18 KiB) Скачиваний: 39

:)))


IN R22, PINC // -1 такт
LDI R21, 0b00000000 // -1 такт
SBRC R22, 0 // -1 такт
ORI R21, 0b00000001 // -1 такт
SBRC R22, 1 // -1 такт
ORI R21, 0b00000010 // -1 такт
SBRC R22, 2 // -1 такт
ORI R21, 0b00000100 // -1 такт
SBRC R22, 3 // -1 такт
ORI R21, 0b00001000 // -1 такт
OUT PORTD, R21 // -1 такт

итого: 11 тактов процессора


Dimon456 мы знаем что ты можешь лучше ! )) не сдавайся ! )) мы в тебя верим ! ))
:))) :)))

Re: Ардуино - запись звука

Пт июн 17, 2022 05:38:00

Интересно, пошто вы так долго и у-порно спорите? :))) Ардуинщики решили написать собственный скетч и не получается? :) Возьмите готовые на arduino.ru для АЦП и SD-флешки и не мучайтесь. Лучше бы конечно с внешнего аудио-ацп оцифровывать.
А для простого диктофона есть прикольные МЭМС-микрофоны с цифровым выходом.

Re: Ардуино - запись звука

Пт июн 17, 2022 07:12:06

roman.com писал(а):ещё короче ?

x = 0;
if ((PIND &(1<<PD0))==1) {x |= 0b00000001;};
if ((PIND &(1<<PD1))==1) {x |= 0b00000010;};
if ((PIND &(1<<PD2))==1) {x |= 0b00000100;};
if ((PIND &(1<<PD3))==1) {x |= 0b00001000;};
:facepalm:
Мне вот интересно, ты когда пишешь проверяешь что пишешь или как?
warning: bitwise comparison always evaluates to false [-Wtautological-compare]
roman.com, попробуй для начало вот так
olegue, не ведись.

Re: Ардуино - запись звука

Пт июн 17, 2022 07:29:49

спойлер не для roman.com
хотя, roman.com, должен и сам догадаться, ошибка детская...

Re: Ардуино - запись звука

Пт июн 17, 2022 08:02:09

roman.com писал(а):IN R22, PINC // -1 такт
LDI R21, 0b00000000 // -1 такт
SBRC R22, 0 // -1 такт
ORI R21, 0b00000001 // -1 такт
SBRC R22, 1 // -1 такт
ORI R21, 0b00000010 // -1 такт
SBRC R22, 2 // -1 такт
ORI R21, 0b00000100 // -1 такт
SBRC R22, 3 // -1 такт
ORI R21, 0b00001000 // -1 такт
OUT PORTD, R21 // -1 такт

итого: 11 тактов процессора
На, держи

Re: Ардуино - запись звука

Пт июн 17, 2022 09:04:51

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

Re: Ардуино - запись звука

Пт июн 17, 2022 09:13:29

Ivanoff-iv, ардуина - это avr-gcc с плюсами. В чем проблема?
Странно что вы эту проблему не озвучивание при win-avr , студияavr и прочее что используют компилятор avr-gcc.

Re: Ардуино - запись звука

Пт июн 17, 2022 09:20:02

В наборе библиотек... которые высокосовместимы и достаточно универсальны, цена же этому - снижение быстродействия и, часто, просто нерациональное использование возможностей контроллера
Т.е. с одной стороны экономим такты в одном месте и бездумно их транжирим в другом...

Re: Ардуино - запись звука

Пт июн 17, 2022 10:17:17

на digitalwrite() в ардуине никто тактов не считает :))) а тут прям
Ответить