Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
02.08.2012, 01:59
|
|
Временная регистрация
Регистрация: 26.02.2005
Сообщений: 78
Сказал спасибо: 15
Сказали Спасибо 16 раз(а) в 16 сообщении(ях)
|
Re: Помогите разобраться с кодом на СИ для ATmega8
Сообщение от ut1wpr
|
фазе написания программ и при первичной отладке лучше всего оптимизацию отключать вообще
|
В том и дело, что при отладке в Proteus все нормально.
Сообщение от omercury
|
Оно точно работает хоть как-нибудь?
|
Это мне посоветовали на форуме, делать задержку по циклам программы..
Опрос DS18B20 происходит где-то через 3 мин., а аналоговых датчиков около 30 сек.
Сообщение от _Артём_
|
почему бы от какого-нибудь таймера не синхронизироваться?
|
Пробовал, но когда включаю прерывание по таймеру, результаты почему-то не выводятся?
Сообщение от _Артём_
|
delay_us(10) - зачем? Помогает лучшие результаты получить?
(ADC_VREF_TYPE & 0xff) - тоже странно - какой смысл на байт маску из всех единиц накладывать?
|
Такой код выдает CodeVision AVR, с ним и без результат одинаков. Убрать не проблема.
|
|
|
|
02.08.2012, 09:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Помогите разобраться с кодом на СИ для ATmega8
Сообщение от Dimitrij
|
Пробовал, но когда включаю прерывание по таймеру, результаты почему-то не выводятся?
|
В прерывании только инкремент счётчика системных часов. Максимум - ещё проверка задержек и установка флагов.
Видимо слетают тайминги вывода на LCD и опроса DS18.
Кстати - зачем определение адреса для единственного датчика на 1wire?
Хотя на фоне математики и sprintf это всё мелочи.
|
|
|
|
02.08.2012, 10:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,916
Сказал спасибо: 2,980
Сказали Спасибо 3,161 раз(а) в 2,146 сообщении(ях)
|
Re: Помогите разобраться с кодом на СИ для ATmega8
Сообщение от _Артём_
|
delay_us(10) - зачем? Помогает лучшие результаты получить?
|
Требуется время на стабилизацию опорного источника (если он включается вместе с АЦП, а не был выбран ранее для BOD или аналогового компаратора). Для mega8A - до 70 мкС.
|
|
|
|
02.08.2012, 18:47
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Помогите разобраться с кодом на СИ для ATmega8
Сообщение от ForcePoint
|
Требуется время на стабилизацию опорного источника (если он включается вместе с АЦП, а не был выбран ранее для BOD или аналогового компаратора). Для mega8A - до 70 мкС.
|
Не понял причём тут BOD?
Ну и источнику не надо постоянно стабилизироваться, а в функции delay_us(10) каждый раз.
|
|
|
|
02.08.2012, 22:17
|
|
Супер-модератор
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
|
Re: Помогите разобраться с кодом на СИ для ATmega8
Сообщение от _Артём_
|
Не понял причём тут BOD?
|
Да ни при чем, конечно... Просто ТС умыкнул из стандартного автогенератора кода КадАВРа коментарии, а там для этой задержки 10us прописано:
Цитата:
|
// Delay needed for the stabilization of the ADC input voltage
|
Сообщение от omercury
|
Кстати - зачем определение адреса для единственного датчика на 1wire?
|
Это то как раз действительно мелочь на фоне остального, да и единожды в начале запуска программы никогда не помешает, а вдруг мыши провод отгрызли...
Сообщение от Dimitrij
|
а аналоговых датчиков около 30 сек.
|
Ну, это ... как сказать. Цикл опроса, да, а в цикле Вы дрючите каналы АЦП по полной, причем не понятно зачем циклы for(i=0;i‹2;i++) для давления и температуры, если вы там ничего не усредняете. Напрашивается концовка некогда популярного политического анекдота: "а что, с одного раза его пристрелить нельзя было?"
To Dimitrij, Вы бы "причесали" слегка код и выложили бы файлом, ну хотя бы текстовым, а то портянку эту крутить в онлайн тоскливо, а еще лучше проектом того же Протеуса с КадАВРовским - ускорится процесс помощи.
Последний раз редактировалось Halex07; 02.08.2012 в 22:20.
|
|
|
|
03.08.2012, 01:21
|
|
Временная регистрация
Регистрация: 26.02.2005
Сообщений: 78
Сказал спасибо: 15
Сказали Спасибо 16 раз(а) в 16 сообщении(ях)
|
Re: Помогите разобраться с кодом на СИ для ATmega8
Сообщение от Halex07
|
не понятно зачем циклы for(i=0;i‹2;i++)
|
Мне посоветовали: для того, чтобы показания не так прыгали, пропустить первый замер и для расчетов использовать второй. Не уверен, правильно ли я сделал? Может хватит и одного замера?
Немного переписал программу, убрал подсчет циклов и задействовал таймер.
А как еще "причесать"?
Проект выкладываю.
Последний раз редактировалось Dimitrij; 03.08.2012 в 01:24.
|
|
|
|
03.08.2012, 01:51
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Помогите разобраться с кодом на СИ для ATmega8
Сообщение от Dimitrij
|
Мне посоветовали: для того, чтобы показания не так прыгали, пропустить первый замер и для расчетов использовать второй. Не уверен, правильно ли я сделал?
|
Вроде правильно.
Можно еще несколько раз мерять с накоплением результата в сумму. И с ней работать.
Сообщение от Dimitrij
|
А как еще "причесать"?
Проект выкладываю.
|
Код:
|
char counter = 0;
char count = 0; |
заменить на
Код:
|
volatile char counter = 0;
volatile char count = 0; |
P.S. За форматирование следить тщательнее.
|
|
|
|
03.08.2012, 08:49
|
|
Почётный гражданин KAZUS.RU
Регистрация: 11.01.2008
Адрес: Ковель UA
Сообщений: 1,063
Сказал спасибо: 154
Сказали Спасибо 540 раз(а) в 330 сообщении(ях)
|
Re: Помогите разобраться с кодом на СИ для ATmega8
Сообщение от Dimitrij
|
для того, чтобы показания не так прыгали
|
Где-то на просторах встретил , что в самом кристалле Меги8 есть внутренняя связь по питанию аналоговой и цыфровой части из-за чего наблюдается плавание измеряемых величин.Ага , нашел , цитата оттуда - http://easyelectronics.ru/podklyuche...ra-likbez.html
Warning!!!
В чипе Mega8 похоже есть ошибка на уровне топологии чипа — Vcc и AVcc связаны между собой внутри кристалла. Между ними сопротивление около (!!!) 5Ом Для сравнения, в ATmega16 и ATmega168 между Vcc и AVcc сопротивление в десятки МЕГА ом! В даташите на этот счет никаких указаний нет до сих пор, но в одном из топиков за 2004 год на AVRFreaks сказано, что люди бодались с цифровым шумом АЦП, потом написали в поддержку Atmel мол WTF??? А те, дескать, да в чипе есть бага и Vcc и AVcc соединены внутри кристалла. В свете этой инфы, думаю что ставить дроссель на AVcc для Mega8 практически бесполезно. Но AVcc запитывать надо в любом случае — кто знает насколько мощная эта внутренняя связь?
|
|
|
|
03.08.2012, 09:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Помогите разобраться с кодом на СИ для ATmega8
Сообщение от Dimitrij
|
Мне посоветовали: для того, чтобы показания не так прыгали, пропустить первый замер и для расчетов использовать второй. Не уверен, правильно ли я сделал? Может хватит и одного замера?
Немного переписал программу, убрал подсчет циклов и задействовал таймер.
А как еще "причесать"?
Проект выкладываю.
|
Подобное может иметь место только после переключения канала. В таком случае достаточно просто отработать преобразование не вычитывая результата. Если нужна высокая точность - работаем с любым из методов фильтрации. Естественно, теряя время на фильтрацию.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
03.08.2012, 09:19
|
|
Временная регистрация
Регистрация: 30.03.2007
Адрес: Челябинск
Сообщений: 62
Сказал спасибо: 11
Сказали Спасибо 11 раз(а) в 9 сообщении(ях)
|
Re: Помогите разобраться с кодом на СИ для ATmega8
for(i=0;i‹2;i++) для давления и температуры, если вы там ничего не усредняете. Напрашивается концовка некогда популярного политического анекдота: "а что, с одного раза его пристрелить нельзя было?"
To Dimitrij
А вот тут интересный момент в некоторых МК (AT32UC3Cxxxx) есть даже специальный битик. При его установке после переключения канала автоматически берётся только второе измерение. Утверждают как точнее получается.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:33.
|
|