Перейти к содержанию
    

[Новичок] АЦП на tiny45

Начал ковыряться с 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В и АЦП с радостью его измеряет…

Попутно периодически случаются перезагрузки микроконтроллера.

 

Где косяк, как его можно исправить?

Изменено пользователем Urvin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похоже на этой ноге включен внутренний pullup резистор. Надо его отключить ( в соответствующий PORTx.y записать 0).

 

P.S. Хм, посмотрел datasheet, ADC0 этож reset. У Вас высоковольтный программатор что-ли?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Программатор STK200/300 на LPT. Программирует норм)

А вот занять все ножки надо кровь из носа

 

Про pullup: если все ножки кроме PB1 и PB2 у меня на вход, стоят кнопки + резистор, на PB5 висит ADC0, будет такое похоже на правду?

DDRB  = 0b00000110;
PORTB = 0;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Программатор STK200/300 на LPT. Программирует норм)

А вот занять все ножки надо кровь из носа

Ух ты, я был уверен, что отключив reset, потеряю возможность программировать. А какой прогой шьете?

 

Про pullup: если все ножки кроме PB1 и PB2 у меня на вход, стоят кнопки + резистор, на PB5 висит ADC0, будет такое похоже на правду?

DDRB  = 0b00000110;
PORTB = 0;

вполне.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Шью в PonyProg, но RSTDISBL она даже не предлагает включить

Дык, нога reset у Вас остается reset-ом. Так что АЦП будет показывать чертий-шо.

 

Пересмотрел datasheet - все правильно, если ресет отключить, то перепрограммировать можно только в HV режиме, когда на ногу reset 12 вольт подается. Но это уже конечно не при помощи STK200/300. А то я уже испугался  :biggrin: .

 

Если шить Avreal-ом вроде включить rstdisbl можно, но потом перепрошить так просто не получится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну почему попал? Ищите схему AVRDUDE там есть режим высоковольтного программирования или купите соответствующий программатор, STK-500, например.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уже занялся темой.

Я имел в виду, что обожаю попадать во всякие трудности)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно кнопки повесить на одну ногу МК - на вход АЦП, замыканием кнопок изменяя входное напр.

Тогда одна нога освобождается, и будет Вам щястье.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

domowoj, Боюсь, в моем случае будет несколько некорректно использовать резистивные кнопки. Хотя с таким приемом я знаком.

Надеюсь завтра выкроить время, победить лень и собрать высоковольтный программатор)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот занять все ножки надо кровь из носа

Про pullup: если все ножки кроме PB1 и PB2 у меня на вход, стоят кнопки + резистор, на PB5 висит ADC0, будет такое похоже на правду?

Что мешает организовать кнопочную решётку?

Про один вход АЦП + набор резисторов тоже неплохой вариант, тем более всё равно он используется в программе.

Ну будет 2 измерения вместо одного через определённое время :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сегодня окончательно-таки выставил RSTDISBL и столкнулся с такой проблемой, что АЦП прекрасно реагирует на мои пальцы - измеряет наводку величиной ок 0,3 В при прикосновении к плате. Мне это категорически не нравится и мне даже кажется, что пики себя так не вели.

С чем это может быть связано? Можт я еще чего-то не знаю? =)

 

Схема включения кнопок такая:

Untitled-1.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...столкнулся с такой проблемой, что АЦП прекрасно реагирует на мои пальцы - измеряет наводку величиной ок 0,3 В при прикосновении к плате...

 

Дык когда все клавиши отпущены у вас вход АЦП практически в воздухе висит (100 К на землю это наверное многовато). Я бы уменьшил R7 килоом до 50. На всякий случай поставил бы резистор последовательно с пином ADC0 ом так 100, и от AC0 конденсатор 10 nF на землю. Опять же, на разводку смотреть надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С учетом пожеланий smac и своих расчетов предлагаю сделать следующую схему:

Ее преимущество в том,что при считывании 8-битного кода с АЦП старшие 3 бита уже дают номер нажатой кнопки.

Да и значение pull-down резистора уменьшено до 27к, что повысит помехоустойчивость. Конденсатор можно 10...47 нФ.

"Запас" по коду каждой кнопке при номиналах, указанных на схеме, составляет не менее 12 единиц МЗР АЦП (в режиме 8 бит). И при погрешностях резисторов 0% :)

Но учтите, что для считывания кода кнопки нужно получить хотя-бы 2 одинаковых результата преобразования с интервалом 10...50 мс.

В приложенном zip-архиве xls-файл с расчетом данной схемы.

 

P.S. Сам схему не делал и не проверял. Если схема чем-то плоха, пусть профессионалы покритикуют.

post-15017-1255295172_thumb.png

Klawa_DAC.xls.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...