Страница 19 из 36
Re: Ардуино - запись звука
Добавлено: Чт июн 16, 2022 20:14:01
Ivanoff-iv
[uquote="roman.com",url="/forum/viewtopic.php?p=4246454#p4246454"]берём переменную х и записываем в неё данные из пинов 0,1,2,3 потр С
if (PINC.0 == 1) {x |= 0b00000001;};
if (PINC.0 == 0) {x &= 0b11111110;};
if (PINC.1 == 1) {x |= 0b0000[/uquote]
а нельзя зацепив провода к подряд идущим пинам одного порта сделать:
х=PINC&0x0f;
или х=(PINC>>2)&0x0f; (если пины начинаются не з 0, а со 2го)
?
Re: Ардуино - запись звука
Добавлено: Чт июн 16, 2022 20:15:00
Martian
а что, разве нельзя x = PORTC & 0x0F; или x = PINC & 0x0F; ?
Добавлено after 32 seconds:
опять не успел

Re: Ардуино - запись звука
Добавлено: Чт июн 16, 2022 21:15:56
roman.com
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;};

Re: Ардуино - запись звука
Добавлено: Чт июн 16, 2022 21:19:37
Dimon456
roman.com писал(а):а такты процессора посчитал ?
сравнил с этим ?
PINC.0
Откуда ты это выдрал? ИЗ CVAVR? Эта фича только есть у него.

Re: Ардуино - запись звука
Добавлено: Чт июн 16, 2022 21:21:10
roman.com
ну да... у ардуины фич нет)) видимо поэтому они такие тормознутые))
Re: Ардуино - запись звука
Добавлено: Чт июн 16, 2022 21:36:00
olegue
Код: Выделить всё
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
Dimon456
roman.com писал(а):а такты процессора посчитал ?
сравнил с этим ?
На, застрелись
Спойлер


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

Re: Ардуино - запись звука
Добавлено: Чт июн 16, 2022 21:41:27
olegue
roman.com,
olegue писал(а):Добавлено after 5 minutes 29 seconds:
а , ну да, удобнее же взять пины одноо регистра
например PD0,pd1,pd2,pd3 и подать на них, а как из "взять"? Эти биты?
я потом прикинул , что так даже будет лучше, другие участники дисскусси это заметили и предложили свои решения исходя из изменившихся условий задачи.
Re: Ардуино - запись звука
Добавлено: Чт июн 16, 2022 21:44:32
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);
или пины местами
Код: Выделить всё
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
Martian
Dimon456 писал(а):На, застрелись
в его случае - захлебнись

Re: Ардуино - запись звука
Добавлено: Чт июн 16, 2022 22:32:01
olegue
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
roman.com
[uquote="olegue",url="/forum/viewtopic.php?p=4246551#p4246551"]
Код: Выделить всё
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;};
если это правильно? Ардуино ИДЕ пропускает[/uquote]
наверное для ардуины это и правильно)) мой компилятор такого не понимает ))
загрузи... проверь.
[uquote="olegue",url="/forum/viewtopic.php?p=4246551#p4246551"]Но короткие решения мне , конечно, больше нравиться.[/uquote]
ещё короче ?
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 писал(а):а такты процессора посчитал ?
сравнил с этим ?
На, застрелись
Спойлер


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

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
Up2805
Интересно, пошто вы так долго и у-порно спорите?

Ардуинщики решили написать собственный скетч и не получается?

Возьмите готовые на arduino.ru для АЦП и SD-флешки и не мучайтесь. Лучше бы конечно с внешнего аудио-ацп оцифровывать.
А для простого диктофона есть прикольные МЭМС-микрофоны с цифровым выходом.
Re: Ардуино - запись звука
Добавлено: Пт июн 17, 2022 07:12:06
Dimon456
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;};
Мне вот интересно, ты когда пишешь проверяешь что пишешь или как?
warning: bitwise comparison always evaluates to false [-Wtautological-compare]
roman.com, попробуй для начало вот так
Спойлер
Код: Выделить всё
x = 0;
PORTD = 0b10000100;
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;};
что на выходе будет? olegue, не ведись.
Re: Ардуино - запись звука
Добавлено: Пт июн 17, 2022 07:29:49
Ivanoff-iv
спойлер не для roman.comСпойлер
условие вида
((x&(1<<n))==1)
будет работать только при n==0
надо писать:
((x&(1<<n))==(1<<n))
или
((x&(1<<n))!=0)
или
(x&(1<<n)) хотя, roman.com, должен и сам догадаться, ошибка детская...
Re: Ардуино - запись звука
Добавлено: Пт июн 17, 2022 08:02:09
Dimon456
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 тактов процессора
На, держи
Спойлер

volatile uint8_t as;
Re: Ардуино - запись звука
Добавлено: Пт июн 17, 2022 09:04:51
Ivanoff-iv
Занятное занятие.... сначала взять ардуину, а затем такты считать....
Re: Ардуино - запись звука
Добавлено: Пт июн 17, 2022 09:13:29
Dimon456
Ivanoff-iv, ардуина - это avr-gcc с плюсами. В чем проблема?
Странно что вы эту проблему не озвучивание при win-avr , студияavr и прочее что используют компилятор avr-gcc.
Re: Ардуино - запись звука
Добавлено: Пт июн 17, 2022 09:20:02
Ivanoff-iv
В наборе библиотек... которые высокосовместимы и достаточно универсальны, цена же этому - снижение быстродействия и, часто, просто нерациональное использование возможностей контроллера
Т.е. с одной стороны экономим такты в одном месте и бездумно их транжирим в другом...
Re: Ардуино - запись звука
Добавлено: Пт июн 17, 2022 10:17:17
Viktorkin
на digitalwrite() в ардуине никто тактов не считает

а тут прям