Urvin 0 23 сентября, 2009 Опубликовано 23 сентября, 2009 (изменено) · Жалоба Начал ковыряться с AVRками (есть некий опыт на PIC), пытаюсь использовать модуль АЦП. Хочу узнать цифровое значение напряжения на ножке ADC0 относительно земли, опорное напряжение - напряжение питания. Выравнивание налево, чтобы получить 256 градаций. Изначально между ножкой и землей стоит резистор 100К. Пишу на WinAVR С. Соотетственно, задаем в настройках: ADMUX = 0b00100000; // 00xxxxxx - VCC used as Voltage Reference, disconnected from PB0 (AREF). // xx1xxxxx - Выравнивание налево // xxx0xxxx - REFS2=0, используем внешнее напряжение // xxxx0000 - MUX: Single Ended Input: ADC0 (PB5) ADCSRA = 0b11000011; // 1xxxxxxx - ADEN=1, включить ацп // x1xxxxxx - ADSC=1, включаем преобразование // xx0xxxxx - ADATE=0 // xxx0xxxx - ADIF=0 // xxxx0xxx - ADIE=0, прерывания не требуются // xxxxx011 - ADPS, делитель на 8 После инициализации запускается первое преобразование, его и последующие отлавливаю в главном цикле while (1) { wdt_reset(); adcPoll(); } Сама функция обработки такая: static void adcPoll(void) { // Если преобразование АЦП окончено if (!(ADCSRA & (1 << ADSC))) { uchar result = ADCH; // … некие преобразования … // Последующий запуск АЦП, ножки не меняю ADCSRA |= (1 << ADSC); } } Меня… эээ…. смущает то, что на ножке ADC0 при подачи питания (только при наличествующем МК) возникает напряжение порядка 1,7В и АЦП с радостью его измеряет… Попутно периодически случаются перезагрузки микроконтроллера. Где косяк, как его можно исправить? Изменено 23 сентября, 2009 пользователем Urvin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Artem_Petrik 0 23 сентября, 2009 Опубликовано 23 сентября, 2009 · Жалоба Похоже на этой ноге включен внутренний pullup резистор. Надо его отключить ( в соответствующий PORTx.y записать 0). P.S. Хм, посмотрел datasheet, ADC0 этож reset. У Вас высоковольтный программатор что-ли? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Urvin 0 23 сентября, 2009 Опубликовано 23 сентября, 2009 · Жалоба Программатор STK200/300 на LPT. Программирует норм) А вот занять все ножки надо кровь из носа Про pullup: если все ножки кроме PB1 и PB2 у меня на вход, стоят кнопки + резистор, на PB5 висит ADC0, будет такое похоже на правду? DDRB = 0b00000110; PORTB = 0; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Artem_Petrik 0 23 сентября, 2009 Опубликовано 23 сентября, 2009 · Жалоба Программатор STK200/300 на LPT. Программирует норм) А вот занять все ножки надо кровь из носа Ух ты, я был уверен, что отключив reset, потеряю возможность программировать. А какой прогой шьете? Про pullup: если все ножки кроме PB1 и PB2 у меня на вход, стоят кнопки + резистор, на PB5 висит ADC0, будет такое похоже на правду? DDRB = 0b00000110; PORTB = 0; вполне. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Urvin 0 23 сентября, 2009 Опубликовано 23 сентября, 2009 · Жалоба Шью в PonyProg, но RSTDISBL она даже не предлагает включить Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Artem_Petrik 0 23 сентября, 2009 Опубликовано 23 сентября, 2009 · Жалоба Шью в PonyProg, но RSTDISBL она даже не предлагает включить Дык, нога reset у Вас остается reset-ом. Так что АЦП будет показывать чертий-шо. Пересмотрел datasheet - все правильно, если ресет отключить, то перепрограммировать можно только в HV режиме, когда на ногу reset 12 вольт подается. Но это уже конечно не при помощи STK200/300. А то я уже испугался . Если шить Avreal-ом вроде включить rstdisbl можно, но потом перепрошить так просто не получится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Urvin 0 23 сентября, 2009 Опубликовано 23 сентября, 2009 · Жалоба мда.. попал я) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GDI 0 24 сентября, 2009 Опубликовано 24 сентября, 2009 · Жалоба Ну почему попал? Ищите схему AVRDUDE там есть режим высоковольтного программирования или купите соответствующий программатор, STK-500, например. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Urvin 0 24 сентября, 2009 Опубликовано 24 сентября, 2009 · Жалоба Уже занялся темой. Я имел в виду, что обожаю попадать во всякие трудности) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
domowoj 0 24 сентября, 2009 Опубликовано 24 сентября, 2009 · Жалоба Можно кнопки повесить на одну ногу МК - на вход АЦП, замыканием кнопок изменяя входное напр. Тогда одна нога освобождается, и будет Вам щястье. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Urvin 0 24 сентября, 2009 Опубликовано 24 сентября, 2009 · Жалоба domowoj, Боюсь, в моем случае будет несколько некорректно использовать резистивные кнопки. Хотя с таким приемом я знаком. Надеюсь завтра выкроить время, победить лень и собрать высоковольтный программатор) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ra3wum 0 25 сентября, 2009 Опубликовано 25 сентября, 2009 · Жалоба А вот занять все ножки надо кровь из носа Про pullup: если все ножки кроме PB1 и PB2 у меня на вход, стоят кнопки + резистор, на PB5 висит ADC0, будет такое похоже на правду? Что мешает организовать кнопочную решётку? Про один вход АЦП + набор резисторов тоже неплохой вариант, тем более всё равно он используется в программе. Ну будет 2 измерения вместо одного через определённое время :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Urvin 0 11 октября, 2009 Опубликовано 11 октября, 2009 · Жалоба Сегодня окончательно-таки выставил RSTDISBL и столкнулся с такой проблемой, что АЦП прекрасно реагирует на мои пальцы - измеряет наводку величиной ок 0,3 В при прикосновении к плате. Мне это категорически не нравится и мне даже кажется, что пики себя так не вели. С чем это может быть связано? Можт я еще чего-то не знаю? =) Схема включения кнопок такая: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smac 0 11 октября, 2009 Опубликовано 11 октября, 2009 · Жалоба ...столкнулся с такой проблемой, что АЦП прекрасно реагирует на мои пальцы - измеряет наводку величиной ок 0,3 В при прикосновении к плате... Дык когда все клавиши отпущены у вас вход АЦП практически в воздухе висит (100 К на землю это наверное многовато). Я бы уменьшил R7 килоом до 50. На всякий случай поставил бы резистор последовательно с пином ADC0 ом так 100, и от AC0 конденсатор 10 nF на землю. Опять же, на разводку смотреть надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kool 0 11 октября, 2009 Опубликовано 11 октября, 2009 · Жалоба С учетом пожеланий smac и своих расчетов предлагаю сделать следующую схему: Ее преимущество в том,что при считывании 8-битного кода с АЦП старшие 3 бита уже дают номер нажатой кнопки. Да и значение pull-down резистора уменьшено до 27к, что повысит помехоустойчивость. Конденсатор можно 10...47 нФ. "Запас" по коду каждой кнопке при номиналах, указанных на схеме, составляет не менее 12 единиц МЗР АЦП (в режиме 8 бит). И при погрешностях резисторов 0% :) Но учтите, что для считывания кода кнопки нужно получить хотя-бы 2 одинаковых результата преобразования с интервалом 10...50 мс. В приложенном zip-архиве xls-файл с расчетом данной схемы. P.S. Сам схему не делал и не проверял. Если схема чем-то плоха, пусть профессионалы покритикуют. Klawa_DAC.xls.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться