Пн мар 26, 2012 06:55:45
ADMUX = (1<<REFS0|1<<REFS1|0<<ADLAR);//настройка АЦП
while(1)
{
int n = 0;
int n1 = 0;
//вырезано все лишнее
ADMUX = (0<<MUX0|0<<MUX1|0<<MUX2|0<<MUX3);//выбор канала АЦП
ADCSRA = (1<<ADEN|1<<ADSC|1<<ADPS0|1<<ADPS1|1<<ADPS2);//Запуск АЦП, выбор скорости = 1\128 от скорости проца
_delay_ms(1000); /*задержка 1 секунда*/
n = ADCH;
n1 = ADCL;
//тут еще 10 строк кода, которые все это показывают на LCD дисплейчик
}
Пн мар 26, 2012 07:28:14
Пн мар 26, 2012 08:04:02
Пн мар 26, 2012 09:25:47
Ср мар 28, 2012 07:23:20
return ADC;
_delay_ms(1000);
while( ! (ADCSRA&(1<<ADIF)) ) asm("nop");
ADCSRA |= (1<<ADIF);
Ср мар 28, 2012 07:55:15
hybroid писал(а):
- Код:
return ADC;
И без всяких старших-младших. На сях же пишите Вот только если прерывания что-то ещё делают в АЦП - надо предвидеть. Да и в вашем случае тоже надо это предвидеть.
UPD:А вот это тот ещё костыль. Как бы лучше сделать вот так:
- Код:
_delay_ms(1000);
Последняя строка сбрасывает бит, не смотря на то, что он установлен в 1.
- Код:
while( ! (ADCSRA&(1<<ADIF)) ) asm("nop");
ADCSRA |= (1<<ADIF);
Ср мар 28, 2012 08:01:32
Когда младший не нужен, то считывают только старший, а не по половинкам.Qwq писал(а):1) мне младший байт вообще не нужен, потому по половинкам....
Впервые слышу такое про АВРкиQwq писал(а):проц слишком быстрый...
Ср мар 28, 2012 08:02:03
hybroid писал(а):Как бы лучше сделать вот так:Последняя строка сбрасывает бит, не смотря на то, что он установлен в 1.
- Код:
while( ! (ADCSRA&(1<<ADIF)) ) asm("nop");
ADCSRA |= (1<<ADIF);
while( ADCSRA & _BV(ADSC) );
Ср мар 28, 2012 08:06:21
Ср мар 28, 2012 08:07:51
int n = 0;
int n1 = 0;
.
.
.
n = ADCH;
n1 = ADCL;
Ср мар 28, 2012 08:09:32
До сих пор выясняемpyzhman писал(а):Нафига?
Ср мар 28, 2012 08:11:13
Ср мар 28, 2012 08:15:57
Ср мар 28, 2012 08:18:17
Вы ошибаетесь. Мастер Ломастер проверяет другой флаг. ADSC сбрасывается по окончании преобразования.hybroid писал(а): И вообще вы, уважаемый, забыли "!" поставить в условии while, от чего ваш "проще" превратился в полную фигню.
Ср мар 28, 2012 08:23:00
hybroid писал(а):_BV() привязывает жёстко к AVR-GCC, который не является единственным компилатором для АВР. Даже по числу вводимых символов с клавиатуры - один хрен И вообще вы, уважаемый, забыли "!" поставить в условии while, от чего ваш "проще" превратился в полную фигню.
Без nop'а соглашусь, проще, но кому-то нагляднее с ним. К тому же, результат будет один и тот же.
Ср мар 28, 2012 08:34:30
Ср мар 28, 2012 10:14:32
Заинтересовало. Попробовал несколько различных вариантов, без volatile. При оптимизации -Os ничего не выкинуло. Какие дополнительные условия необходимы для вашего результата?Мастер Ломастер писал(а):3. про nop - один и тот же результат У ВАС мог получаться только из-за того, что вы допустил ошибку. в вашем случае правильно нужно писать while(...) asm volatile ("nop"); без volatile оптимизатор все NOP-ы убирает, как ненужные, и тогда получается совершенно одинаковый ассемблерный код с while(...); если сделать ПРАВИЛЬНО - код получится РАЗНЫЙ.
Ср мар 28, 2012 10:18:21
Ср мар 28, 2012 10:36:25
Ср мар 28, 2012 11:18:47