roboforum.ru

Технический форум по робототехнике.

Проблема с АЦП

Re: Проблема с АЦП

uz6 » 30 ноя 2010, 08:00

В том и дело, что никакого конденсатора, подключенного к AREF на картинке нет. И вообще AREF там никуда не подключено, как и у меня.


Такой вариант может работать только при включении внутреннего ИОНа на 2.56 Вольт.
Ну и для повышения точности/стабильности кондер на AREF и на землю.

Re: Проблема с АЦП

Michael_K » 30 ноя 2010, 09:29

...чего вы путаете парня.
1. с ноги REF повесить кондер на землю. Никуда больше ее подключать не надо.
2. объявить переменные adc_complete и adc_data с модификатором volatile.
3. читать только старший байт (или, если нужно оба, то сначала младший, потом старший)
4. Даташит не врет.

Добавлено спустя 8 минут 3 секунды:
проверьте ADCSRA еще раз. я навскидку могу ошибаться, но кажется вы АЦП разрешили, но не запустили.

Re: Проблема с АЦП

boez » 30 ноя 2010, 13:11

Radist писал(а):И тем не менее, хоть вы и берете только 8 бит и выравниваете по старшему байту - читать надо оба байта результата. Младший можно прочитать и тут же забыть о нем, но процедура чтения из младшего байта ОБЯЗАТЕЛЬНА (хотя в даташите пишут что и не обязательно).

Ссылку на errata от Atmel можно? Контроллер-то не новый, неужели такую нестыковку в нем оставили? В даташите ясно написано - можно читать либо "младший,старший", либо только старший. В атмеге16 у меня чтение только старшего работало прекрасно.

HarryStar, ты мое предыдущее сообщение прочитал? У тебя
HarryStar писал(а):
Код: Выделить всёРазвернуть
ADMUX = 0b01000111
- почему не 0b01100111?

Re: Проблема с АЦП

Radist » 30 ноя 2010, 13:55

Снимаю свое замечание про обязательное чтение обоих байтов. Тут уж чего только не предложишь, чтоб заработало, ведь простой ацп :)

Re: Проблема с АЦП

HarryStar » 30 ноя 2010, 14:03

boez писал(а):HarryStar, ты мое предыдущее сообщение прочитал? У тебя
HarryStar писал(а):
Код: Выделить всёРазвернуть
ADMUX = 0b01000111
- почему не 0b01100111?

Предыдущее сообщение не понял :) А как оказалось зря.
Действительно проблема была в неправильной установке бита ADLAR регистра ADMUX.
Соотв. выравнивание было неправильным, результат ADCH был от 0 до 3, которые у меня по программе отсекались.

По поводу чтения младшего бита, действительно необязательно читать ADCL, снятие блока регистров происходит при чтении старшего, младший пофиг читали или нет.

Всем огромное спасибо за терпение моего тупизма! :)

Осталось изучить фьюзы (а то у меня 1Мгц внутр RC), I2C(мастер и раб для связи 2х контроллеров), подключение SD карты, COM-порт и начну проектировать своего роботика.


Rambler\'s Top100 Mail.ru counter