atmega8 гонит ADC или я косячу?

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: atmega8 гонит ADC или я косячу?

Сообщение hybroid »

Да вот у меня получился бесполезный nop, например :)) Только я не понял, почему компилятор должен выкинуть написанные тобой nop'ы (значит нужные) без volatile? Не выкидывает ведь.
Qwq
Встал на лапы
Сообщения: 87
Зарегистрирован: Пт ноя 02, 2007 18:18:26
Контактная информация:

Re: atmega8 гонит ADC или я косячу?

Сообщение Qwq »

hybroid писал(а):

Код: Выделить всё

int n = 0;
int n1 = 0;
   n = ADCH;
        n1 = ADCL;

Нафига?
[/quote]
это отладочный костыль - не мог понять по чему не работает и думал что может я не тот байт читаю или еще чего...
У меня вообще код ужасный - не программист я...
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: atmega8 гонит ADC или я косячу?

Сообщение Мастер Ломастер »

hybroid писал(а):Да вот у меня получился бесполезный nop, например :)) Только я не понял, почему компилятор должен выкинуть написанные тобой nop'ы (значит нужные) без volatile? Не выкидывает ведь.
а почему компилятор может выкинуть переменные, которые в прерывании обрабатываются, если они не volatile? их ведь программист написал, значит нужные? ;) да потому, что компилятор имеет полное право исключать при оптимизации коды, НЕ ИЗМЕНЯЮЩИЕ СОСТОЯНИЕ "ВИРТУАЛЬНОЙ" ИСПОЛНЯЮЩЕЙ МАШИНЫ сиречь ПРОГРАММЫ. если нет обращений к переменной - она лишняя. если NOP не длает ничего, что меняет содержимое других переменных и т.п. - он лишний. вот и может удалить. МОЖЕТ - не факт, что удалит, но МОЖЕТ. и надеяться на его доброту - это опасно. скольконовичков попали на пустых циклах, из которых они надеялись получить программные задержки? вот и объяснение.
битва с дураками проиграна, победители торжествуют. слава победителям!
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: atmega8 гонит ADC или я косячу?

Сообщение Мастер Ломастер »

Qwq писал(а):У меня вообще код ужасный - не программист я...

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

Код: Выделить всё

int adc_result;
adc_result = ADC;
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: atmega8 гонит ADC или я косячу?

Сообщение hybroid »

Не нужны ему последние два бита. Ему нужно ADLAR в 1 и вот это:

Код: Выделить всё

uint8_t adc; // unsigned char, если не нравится это
adc = ADCH;
Qwq
Встал на лапы
Сообщения: 87
Зарегистрирован: Пт ноя 02, 2007 18:18:26
Контактная информация:

Re: atmega8 гонит ADC или я косячу?

Сообщение Qwq »

так уже все 100 лет работает... собственно с тех пор как pyzhman подсказал про то что оба байта читать надо... я уже почти все дописал, мелочевка осталась...
Аватара пользователя
Furcat
Опытный кот
Сообщения: 833
Зарегистрирован: Ср май 02, 2007 14:36:29
Откуда: Плюк

Re: atmega8 гонит ADC или я косячу?

Сообщение Furcat »

Аналогично " Result is not written to the ADC register because it has been locked""" :(
ADCSRA = ADCSRA | _BV(ADSC);
while((ADCSRA & _BV(ADIF)) == 0)
values[current] = ADC;
Ответить

Вернуться в «AVR»