roboforum.ru

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

 

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

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

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

Сообщение uz6 » 30 ноя 2010, 08:00

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


Такой вариант может работать только при включении внутреннего ИОНа на 2.56 Вольт.
Ну и для повышения точности/стабильности кондер на AREF и на землю.
Аватара пользователя
uz6
 
Сообщения: 110
Зарегистрирован: 12 фев 2008, 15:00
Откуда: Шахты
прог. языки: Delphi, Python, ну и асм немного

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

Сообщение Michael_K » 30 ноя 2010, 09:29

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

Добавлено спустя 8 минут 3 секунды:
проверьте ADCSRA еще раз. я навскидку могу ошибаться, но кажется вы АЦП разрешили, но не запустили.
Аватара пользователя
Michael_K
 
Сообщения: 6034
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение boez » 30 ноя 2010, 13:11

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

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

HarryStar, ты мое предыдущее сообщение прочитал? У тебя
HarryStar писал(а):
Код: Выделить всёРазвернуть
ADMUX = 0b01000111
- почему не 0b01100111?
boez
 
Сообщения: 1974
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

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

Сообщение Radist » 30 ноя 2010, 13:55

Снимаю свое замечание про обязательное чтение обоих байтов. Тут уж чего только не предложишь, чтоб заработало, ведь простой ацп :)
Аватара пользователя
Radist
 
Сообщения: 2233
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

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

Сообщение HarryStar » 30 ноя 2010, 14:03

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

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

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

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

Осталось изучить фьюзы (а то у меня 1Мгц внутр RC), I2C(мастер и раб для связи 2х контроллеров), подключение SD карты, COM-порт и начну проектировать своего роботика.
Аватара пользователя
HarryStar
 
Сообщения: 973
Зарегистрирован: 15 ноя 2010, 13:56
Откуда: Нижний Новгород
прог. языки: С, С++, РНР

Пред.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Mail.ru counter