2005 11 04
_______________________________________
Цитата
Насчет опорного напряжения: наверное, оно действительно
равно нулю, потому что я никаких ИОНов не подключал.
___________________________
А можно просто померить тестером между выводом AREF (выв 32 для корпуса DIP-40) и общим GND(выв 31). При прошивке в ADMUX 0xC7 действительно должен подключиться внутренний и на этом выводе будет 2,5В. Если нет, то имеет смысл померять не закорочен ли он (при выключеном питании, тестером).
Также надо мерять напряжение на выводе АЦП (например вывод 33 для АЦП7).
_______________________________________
_______________________________________
Цитата
ldi r16, 7 ;ADC7 - вход АЦП.
out ADMUX, r16
___________________________
Если так то надо соеденить выводы AREF & AVCC. (30 и 32 для корпуса ДИП-40).
Для подключения внутреннего r16, 0xC7(2.56V) or r16,0x47(Vcc).
_______________________________________
_______________________________________
Цитата
;запуск преобразования в цикл. режиме, разрешение прерывания.
ldi r16, (1 << ADEN)|(1 << ADIE)|(1 << ADSC)|(1 << ADFR);|(1 << ADPS0)|(1 << ADPS2)
out ADCSRA, r16
___________________________
Закомментированы ;|(1 << ADPS0)|(1 << ADPS2) поэтому предделитель равен 2.
То есть если у кварца частота 4 МГц, то частота АЦП 2 МГц. А Атмель обещает работу АЦП только до 1 МГц, а лучше 50...200кГц.
Надо убрать точку с запятой.
_______________________________________
_______________________________________
Цитата
andi r21, 0x03
___________________________
По моему лишняя. Хотя вреда нет.
______________________________________
______________________________________
Цитата
как подключить внешний ИОН (и где его брать ) или можно обойтись внутр. ИОНом?
___________________________
Если не требуется очень высокой точности, то проще всего взять напряжение питания в качестве внешнего.
______________________________________
______________________________________
И еще.
Рекомендую
http://electronix.ru/redirect.php?http://[banned]/mkkurs05.htm, там вообще то на Си, но сайт
http://electronix.ru/redirect.php?http://[banned] (2005 11 04) очень хорош для знакомства с микроконтроллерами, если адрес сайта меняется искать по "snGJTDSAIR3245".
И наконец.
______________
1 - Схемы STK500 не имею, поэтому куда идет седьмая кнопка незнаю.
Про кнопку я вообще что-то не понял. Или же результат при ее нажатии должен запоминаться (как в токоизмерительных клещах). Или же надо мерить напряжение снятое с кнопки, или еще что.
Если запоминаться, то прерыванию от АЦП результат надо читать, но не выводить, а затем по прерыванию от кнопки выводить.
Но, по моему, наглядней непрерывное отображение.
______________
2 - Как сделать пример использования АЦП в АТмега8535.
______________
2.0 - Берем даташит на мега8535 (например на www.atmel.com ищем по 8535(броузер должен быть с поддержкой джавы)) , находим
http://www.atmel.com/dyn/resources/prod_do...nts/doc2502.pdf (2.5МБ, естественно на английском).
______________
2.1 - Берем переменный резистор 1...1000кОм. Цепляем один край на питание Vcc (вывод 10 для мега8535 в ДИП корпусе , например +5В), второй край на общий GND (11), средний вывод (ползунок) цепляем (через резистор 100...500кОм, чтобы не спалить чип) на один из входов АЦП, между входом АЦП и аналоговой землей GND (выв31) желательно включить конденсатор 0.1мкФ.
Вывод АЦП выбирается так:
ldi r16, 0 ;ADC0 - вход АЦП.
out ADMUX, r16 ; будет выбран нулевой вход АЦП
....
ldi r16, 7 ;ADC7 - вход АЦП.
out ADMUX, r16 ; будет выбран седьмой вход АЦП
______________
2.2 - Что будет опорным напряжением зависит от того, что прошито в 2 старших бита ADMUX (REF1 (бит7) и REF0(бит6)):
00xx xxxx - Внешнее, если не нужно высокой точности можно взять +5В с питания, то есть соеденить перемычкой выводы AREF (32) и AVCC(30).
01xx xxxx - Напряжение питания AVCC, но подключается само внутри, перемычки паять не надо. На вывод AREF желательно поставить конденсатор 0.1мкФ.
10xx xxxx - не используется
11xx xxxx - Внутренний источник опорного напряжения 2.56В. Опять же желателен конденсатор.
Кстати, а у Вас действительно АТмега8535. Не 90S8535, у той не было внутреннего ИОН.
В регистре AREF есть еще бит ADLAR.
Если он равен 0, то результат выравнивается по правому краю, то есть все биты кроме двух старших в регистре ADCL.
А если он =1, то все биты, кроме двух младших в регистре ADCH, при этом если нам достаточно точности 8 бит, то регистр ADCL можем просто отбросить.
______________
Итак например примем вход5, опорное напряжение возмем с источника питания внутренним подключением, результат выровняем влево (andi r21, 0x03 при этом, выравнивании влево, надо убрать).
ldi r16, (1<<REFS0)|(1<<ADLAR)|(1<<MUX2)|(1<<MUX0)
out ADMUX, r16
______________
2.3 - так как в коде указано
.org ADCCaddr
rjmp interrupt
то результаты измерения будут выводится непрерывно, без кнопочек, по мере вращения переменного резистора.
З.Ы. Рекомендую для наглядности измерения сделать разные паузы для вывода старших и младших разрядов. Наример старший 1 сек,
а младший 0.25сек.
З.З.Ы. Конкретно эти строчки
ldi r16, (1<<REFS0)|(1<<ADLAR)|(1<<MUX2)|(1<<MUX0)
out ADMUX, r16
не проверял, могут быть опечатки. Кроме того я сам довольно слаб в микроконтроллерах, могу и ошибаться.
Александр 2005 11 04