реклама на сайте
подробности

 
 
> [Новичок] АЦП на tiny45
Urvin
сообщение Sep 23 2009, 15:25
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 23-09-09
Из: Москва
Пользователь №: 52 540



Начал ковыряться с 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 - Sep 23 2009, 15:25
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 14)
Artem_Petrik
сообщение Sep 23 2009, 15:29
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006



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

P.S. Хм, посмотрел datasheet, ADC0 этож reset. У Вас высоковольтный программатор что-ли?
Go to the top of the page
 
+Quote Post
Urvin
сообщение Sep 23 2009, 15:44
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 23-09-09
Из: Москва
Пользователь №: 52 540



Программатор STK200/300 на LPT. Программирует норм)
А вот занять все ножки надо кровь из носа

Про pullup: если все ножки кроме PB1 и PB2 у меня на вход, стоят кнопки + резистор, на PB5 висит ADC0, будет такое похоже на правду?
Код
DDRB  = 0b00000110;
PORTB = 0;
Go to the top of the page
 
+Quote Post
Artem_Petrik
сообщение Sep 23 2009, 15:54
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006



Цитата(Urvin @ Sep 23 2009, 18:44) *
Программатор STK200/300 на LPT. Программирует норм)
А вот занять все ножки надо кровь из носа

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

Цитата(Urvin @ Sep 23 2009, 18:44) *
Про pullup: если все ножки кроме PB1 и PB2 у меня на вход, стоят кнопки + резистор, на PB5 висит ADC0, будет такое похоже на правду?
Код
DDRB  = 0b00000110;
PORTB = 0;

вполне.
Go to the top of the page
 
+Quote Post
Urvin
сообщение Sep 23 2009, 16:00
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 23-09-09
Из: Москва
Пользователь №: 52 540



Шью в PonyProg, но RSTDISBL она даже не предлагает включить
Go to the top of the page
 
+Quote Post
Artem_Petrik
сообщение Sep 23 2009, 16:09
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006



Цитата(Urvin @ Sep 23 2009, 19:00) *
Шью в PonyProg, но RSTDISBL она даже не предлагает включить

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

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

Если шить Avreal-ом вроде включить rstdisbl можно, но потом перепрошить так просто не получится.
Go to the top of the page
 
+Quote Post
Urvin
сообщение Sep 23 2009, 17:32
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 23-09-09
Из: Москва
Пользователь №: 52 540



мда.. попал я)
Go to the top of the page
 
+Quote Post
GDI
сообщение Sep 24 2009, 09:44
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



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


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Urvin
сообщение Sep 24 2009, 12:11
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 23-09-09
Из: Москва
Пользователь №: 52 540



Уже занялся темой.
Я имел в виду, что обожаю попадать во всякие трудности)
Go to the top of the page
 
+Quote Post
domowoj
сообщение Sep 24 2009, 14:36
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



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


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
Urvin
сообщение Sep 24 2009, 17:14
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 23-09-09
Из: Москва
Пользователь №: 52 540



domowoj, Боюсь, в моем случае будет несколько некорректно использовать резистивные кнопки. Хотя с таким приемом я знаком.
Надеюсь завтра выкроить время, победить лень и собрать высоковольтный программатор)
Go to the top of the page
 
+Quote Post
RA3WUM
сообщение Sep 25 2009, 10:41
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 22-02-07
Пользователь №: 25 578



Цитата(Urvin @ Sep 23 2009, 19:44) *
А вот занять все ножки надо кровь из носа
Про pullup: если все ножки кроме PB1 и PB2 у меня на вход, стоят кнопки + резистор, на PB5 висит ADC0, будет такое похоже на правду?

Что мешает организовать кнопочную решётку?
Про один вход АЦП + набор резисторов тоже неплохой вариант, тем более всё равно он используется в программе.
Ну будет 2 измерения вместо одного через определённое время smile.gif


--------------------
Мужество есть лишь у тех, кто ощутил сердцем страх!
В. Кипелов, Беги за солнцем.
Go to the top of the page
 
+Quote Post
Urvin
сообщение Oct 11 2009, 08:09
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 23-09-09
Из: Москва
Пользователь №: 52 540



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

Схема включения кнопок такая:
Go to the top of the page
 
+Quote Post
smac
сообщение Oct 11 2009, 12:27
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 2-06-08
Из: Москва
Пользователь №: 38 003



Цитата(Urvin @ Oct 11 2009, 12:09) *
...столкнулся с такой проблемой, что АЦП прекрасно реагирует на мои пальцы - измеряет наводку величиной ок 0,3 В при прикосновении к плате...


Дык когда все клавиши отпущены у вас вход АЦП практически в воздухе висит (100 К на землю это наверное многовато). Я бы уменьшил R7 килоом до 50. На всякий случай поставил бы резистор последовательно с пином ADC0 ом так 100, и от AC0 конденсатор 10 nF на землю. Опять же, на разводку смотреть надо.
Go to the top of the page
 
+Quote Post
Александр Куличо...
сообщение Oct 11 2009, 21:19
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 6-03-06
Из: Украина, г. Винница
Пользователь №: 15 017



С учетом пожеланий smac и своих расчетов предлагаю сделать следующую схему:
Ее преимущество в том,что при считывании 8-битного кода с АЦП старшие 3 бита уже дают номер нажатой кнопки.
Да и значение pull-down резистора уменьшено до 27к, что повысит помехоустойчивость. Конденсатор можно 10...47 нФ.
"Запас" по коду каждой кнопке при номиналах, указанных на схеме, составляет не менее 12 единиц МЗР АЦП (в режиме 8 бит). И при погрешностях резисторов 0% smile.gif
Но учтите, что для считывания кода кнопки нужно получить хотя-бы 2 одинаковых результата преобразования с интервалом 10...50 мс.
В приложенном zip-архиве xls-файл с расчетом данной схемы.

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

Прикрепленные файлы
Прикрепленный файл  Klawa_DAC.xls.zip ( 3.63 килобайт ) Кол-во скачиваний: 39
 
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01464 секунд с 7
ELECTRONIX ©2004-2016