Ардуино - запись звука
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: Ардуино - запись звука
[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го)
?
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го)
?
Последний раз редактировалось Ivanoff-iv Чт июн 16, 2022 20:16:06, всего редактировалось 1 раз.
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- Реклама
Re: Ардуино - запись звука
а что, разве нельзя x = PORTC & 0x0F; или x = PINC & 0x0F; ?
Добавлено after 32 seconds:
опять не успел
Добавлено after 32 seconds:
опять не успел
Re: Ардуино - запись звука
низя.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: Ардуино - запись звука
Откуда ты это выдрал? ИЗ CVAVR? Эта фича только есть у него.roman.com писал(а):а такты процессора посчитал ?
сравнил с этим ?
PINC.0
Re: Ардуино - запись звука
ну да... у ардуины фич нет)) видимо поэтому они такие тормознутые))
- Реклама
Re: Ардуино - запись звука
Код: Выделить всё
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: Ардуино - запись звука
На, застрелисьroman.com писал(а):а такты процессора посчитал ?
сравнил с этим ?
Спойлер


Спойлер

Последний раз редактировалось Dimon456 Чт июн 16, 2022 21:42:08, всего редактировалось 1 раз.
Re: Ардуино - запись звука
roman.com,
я потом прикинул , что так даже будет лучше, другие участники дисскусси это заметили и предложили свои решения исходя из изменившихся условий задачи.olegue писал(а):Добавлено after 5 minutes 29 seconds:
а , ну да, удобнее же взять пины одноо регистра
например PD0,pd1,pd2,pd3 и подать на них, а как из "взять"? Эти биты?
Re: Ардуино - запись звука
Вам надо поменять биты местамиили пины местами
Код: Выделить всё
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: Ардуино - запись звука
в его случае - захлебнисьDimon456 писал(а):На, застрелись
Re: Ардуино - запись звука
Dimon456,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);
или пины местами
это мне было обращено, если честно, я не совсем понял
к этому коду была реплика?
Код: Выделить всё
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: Ардуино - запись звука
[uquote="olegue",url="/forum/viewtopic.php?p=4246551#p4246551"]
у ардуины такого нету, тока если так, допустим:
если это правильно? Ардуино ИДЕ пропускает[/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;};
или ещё короче ? ))

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 мы знаем что ты можешь лучше ! )) не сдавайся ! )) мы в тебя верим ! ))

Код: Выделить всё
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="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: Ардуино - запись звука
Интересно, пошто вы так долго и у-порно спорите?
Ардуинщики решили написать собственный скетч и не получается?
Возьмите готовые на arduino.ru для АЦП и SD-флешки и не мучайтесь. Лучше бы конечно с внешнего аудио-ацп оцифровывать.
А для простого диктофона есть прикольные МЭМС-микрофоны с цифровым выходом.
А для простого диктофона есть прикольные МЭМС-микрофоны с цифровым выходом.
Re: Ардуино - запись звука
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;};
Мне вот интересно, ты когда пишешь проверяешь что пишешь или как?
roman.com, попробуй для начало вот такwarning: bitwise comparison always evaluates to false [-Wtautological-compare]
Спойлер
Код: Выделить всё
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;};- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: Ардуино - запись звука
спойлер не для roman.com
((x&(1<<n))==1)
будет работать только при n==0
надо писать:
((x&(1<<n))==(1<<n))
или
((x&(1<<n))!=0)
или
(x&(1<<n)) хотя, roman.com, должен и сам догадаться, ошибка детская...
Спойлер
условие вида((x&(1<<n))==1)
будет работать только при n==0
надо писать:
((x&(1<<n))==(1<<n))
или
((x&(1<<n))!=0)
или
(x&(1<<n))
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Re: Ардуино - запись звука
На, держи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;
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: Ардуино - запись звука
Занятное занятие.... сначала взять ардуину, а затем такты считать....
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Re: Ардуино - запись звука
Ivanoff-iv, ардуина - это avr-gcc с плюсами. В чем проблема?
Странно что вы эту проблему не озвучивание при win-avr , студияavr и прочее что используют компилятор avr-gcc.
Странно что вы эту проблему не озвучивание при win-avr , студияavr и прочее что используют компилятор avr-gcc.
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: Ардуино - запись звука
В наборе библиотек... которые высокосовместимы и достаточно универсальны, цена же этому - снижение быстродействия и, часто, просто нерациональное использование возможностей контроллера
Т.е. с одной стороны экономим такты в одном месте и бездумно их транжирим в другом...
Т.е. с одной стороны экономим такты в одном месте и бездумно их транжирим в другом...
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Re: Ардуино - запись звука
на digitalwrite() в ардуине никто тактов не считает
а тут прям


