Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 26.06.2009, 15:42  
Archer07
Прописка
 
Регистрация: 25.03.2009
Сообщений: 137
Сказал спасибо: 22
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
Archer07 на пути к лучшему
По умолчанию Помогите разобраться с АЦП (встроенный atmega169)

Вот ниже код программы,ошибка возникает при обращении к ADMUX:

out ADMUX,r16

и точно такая же здесь:
out ADCSRA,r16

в файле m169def.inc,написано,что эти регистры расширенные порты ввода-вывода и не могут использоваться с IN/OUT инструкциями.

; Definitions marked "MEMORY MAPPED"are extended I/O ports
; and cannot be used with IN/OUT instructions

Как мне записать константу в порт ADCSRA,чтобы запустить АЦП?


.include "m169def.inc"
;Кварц 32kHz
;ATMEGA169
jmp RESET ; Reset Handler
reti ; IRQ0 Handler
reti ; PCINT0 Handler
reti ; PCINT0 Handler
reti ; Timer2 Compare Handler
reti ; Timer2 Overflow Handler
reti ; Timer1 Capture Handler
reti ; Timer1 CompareA Handler
reti ; Timer1 CompareB Handler
reti ; Timer1 Overflow Handler
reti ; Timer0 Compare Handler
reti ; Timer0 Overflow Handler
reti ; SPI Transfer Complete Handler
reti ; USART RX Complete Handler
reti ; USART,UDR Empty Handler
reti ; USART TX Complete Handler
reti ; USI Start Condition Handler
reti ; USI Overflow Handler
reti ; Analog Comparator Handler
jmp ADC_COMP; ADC Conversion Complete Handler
reti ; EEPROM Ready Handler
reti ; SPM Ready Handler
reti ; LCD Start of Frame Handler
;
RESET:
ldi r16, high(RAMEND); Main program start
out SPH,r16
ldi r16, low(RAMEND)
out SPL,r16

ldi r16,0b01100001 ;канал PF0
out ADMUX,r16
ldi r16,(1‹‹ADEN)|(1‹‹ADSC)|(1‹‹ADPS0)
out ADCSRA,r16 ;Запускаю единичное преобразование
sei

loop:jmp loop ;жду прерывания от АЦП

ADC_COMP:
in r17,ADCH ;Считываю результат в переменную,
ldi r16,(1‹‹ADEN)|(1‹‹ADSC)|(1‹‹ADPS0)
out ADCSRA,r16 ;запускаем очередное преобразование
reti
Реклама:
Archer07 вне форума  
Непрочитано 27.06.2009, 13:43  
ra9mig
Прописка
 
Регистрация: 24.09.2008
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
ra9mig на пути к лучшему
По умолчанию

1. Для обращения к "расширенной области I/O" нужно пользовать инструкции lds/sts(или ld/ldd/st/std через индексные регистры X, Y, Z) вместо in/out, т.к. это адресное поле SRAM.
2. Повнимательнее посмотрите на флаги, у Вас не установлен флаг разрешения прерывания ADCSRA.ADIE, и прерывание ADC "игнорируется".
3. Чтение результата измерение у Вас осуществляется из "старшего" байта - это не верно! Нужно читать младший, а затем старший.

P.S. Ознакомтесь подробние с описанием обращения к регистрам.
__________________
Если мы вам не подходим, вы нам вовсе не нужны!
Услышал и забыл, увидел и запомнил, сделал и понял!
Нейрон - штука тонкая!
Чудес на свете не бывает!
ra9mig вне форума  
Непрочитано 27.06.2009, 16:35  
Archer07
Прописка
 
Регистрация: 25.03.2009
Сообщений: 137
Сказал спасибо: 22
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
Archer07 на пути к лучшему
По умолчанию

да,спасибо,точно,команды заменил,обращение стало происходить...
Но АЦП все равно ничего не преобразует или преобразует,но я не могу понять как...
Флаг от компаратора установил(ADIE)
решил поместить в обработчик прерывания от АЦП
такие инструкции чтобы увидеть результат преобразования
Обработчик прерыв. от АЦП:
ADC_COMP:
lds r17,ADCH;ADLAR установлен,можно читать ADCH
out PortB,r17 ;Что я не правильно сделал,почему PORTB пуст?
ldi r16,0b01100001
sts ADMUX,r16
ldi r16,0b11001001
sts ADCSRA,r16
reti

Подскажите пожалуйста,как добиться того,чтобы результат преобразования после каждого преобразования оставался в r17?Может использовать
сохранение результата в стэк внутри обработчика?

ADC_COMP:
...
push r17
..
reti

где то в главной части программы:
pop r17?

.include "m169def.inc"

;Кварц 32kHz
;ATMEGA169
таблица векторов
;
RESET:
ldi r16, high(RAMEND); Main program start
out SPH,r16
ldi r16, low(RAMEND)
out SPL,r16

ldi r16,$ff
out DDRB,r16
ldi r16,$ff
out PortB,r16

ldi r16,0b01100001;ADLAR установлен,можно читать ADCH
sts ADMUX,r16
ldi r16,0b11001001
sts ADCSRA,r16
sei


loop:jmp loop

ADC_COMP:
lds r17,ADCH
out PortB,r17 ;в PortB ничего нет
ldi r16,0b01100001
sts ADMUX,r16

ldi r16,0b11001001
sts ADCSRA,r16

reti
Archer07 вне форума  
Непрочитано 27.06.2009, 20:27  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Советую писать на Си - это гораздо продуктивней.

Вот про АЦП в AVR задача-упражнение с краткой теорией
http://avr123.nm.ru/z11.htm
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 28.06.2009, 12:55  
ra9mig
Прописка
 
Регистрация: 24.09.2008
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
ra9mig на пути к лучшему
По умолчанию

У Вас есть "противоречия" в коде!
На мой взгляд, для примера, можно использовать след. код:
Код:
.include	"m169def.inc"
;-----------
.cseg
.org 0
		rjmp	_RESET
.org ADCCaddr
		rjmp	_ADC_COMPL
;-----------
.org INT_VECTORS_SIZE
_RESET:
		ldi	r16,	High(RAMEND)
		out	SPH,	r16 
		ldi	r16,	Low(RAMEND) 
		out	SPL,	r16

		; Vref=VCC, Left, ADC0
 		ldi	r16,	(0‹‹REFS1)|(1‹‹REFS0)|(1‹‹ADLAR)|(0‹‹MUX4)|(0‹‹MUX3)|(0‹‹MUX2)|(0‹‹MUX1)|(0‹‹MUX0)
		sts	ADMUX,	r16
		; Enab ADC, Manual, Int Enab, F/2
		ldi	r16,	(1‹‹ADEN)|(0‹‹ADATE)|(1‹‹ADIE)|(0‹‹ADPS2)|(0‹‹ADPS1)|(1‹‹ADPS0)
		sts	ADCSRA,	r16

		ser	r16
		out	DDRB,	r16

		lds	r16,	ADCSRA
		sbr	r16,	(1‹‹ADSC)
		sts	ADCSRA,	r16

		sei
;-----------
_MAIN:
		rjmp	_MAIN
;-----------
_ADC_COMPL:
		lds	r17,	ADCL
		lds	r17,	ADCH
		out	PORTB,	r17

		lds	r16,	ADCSRA
		sbr	r16,	(1‹‹ADSC)
		sts	ADCSRA,	r16
		reti
P.S.
Цитата:
Советую писать на Си - это гораздо продуктивней
Весьма спорный вопрос!!! Сравните размер конечного HEX-са это примера и такого-же написаного на Си!!!
__________________
Если мы вам не подходим, вы нам вовсе не нужны!
Услышал и забыл, увидел и запомнил, сделал и понял!
Нейрон - штука тонкая!
Чудес на свете не бывает!
ra9mig вне форума  
Непрочитано 01.07.2009, 10:54  
salenz
Частый гость
 
Регистрация: 15.01.2008
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
salenz на пути к лучшему
По умолчанию

Берите AlgorithmBuilder и пишите на нем! Гораздо продуктивнее ассемблера и даже Си, т.к. все метки переходов видны как на ладони. Пробовал все - AlgorithmBuilder заметно удобнее.
salenz вне форума  
Непрочитано 01.07.2009, 11:00  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Только не Algorithm Builder.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 01.07.2009, 19:28  
Archer07
Прописка
 
Регистрация: 25.03.2009
Сообщений: 137
Сказал спасибо: 22
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
Archer07 на пути к лучшему
По умолчанию

Спасибо,большое за советы...Но мне больше нравится asm,я считаю что главное преимущество асма - то что ты РЕАЛЬНО понимаешь что происходит с железкой...
Archer07 вне форума  
Непрочитано 02.07.2009, 09:05  
salenz
Частый гость
 
Регистрация: 15.01.2008
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
salenz на пути к лучшему
По умолчанию

Сообщение от Archer07
Спасибо,большое за советы...Но мне больше нравится asm,я считаю что главное преимущество асма - то что ты РЕАЛЬНО понимаешь что происходит с железкой...
Придерживаюсь того же мнения. Причем в Билдере ничто не мешает продолжать писать на уровне ассемблера. Главное что все метки переходов видны сразу же и не паришься при отладке. А вообще каждый пишет на чем хочет, главное чтобы результат бесглючный был...
salenz вне форума  
Непрочитано 02.07.2009, 09:18  
salenz
Частый гость
 
Регистрация: 15.01.2008
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
salenz на пути к лучшему
По умолчанию

Сообщение от Archer07
да,спасибо,точно,команды заменил,обращение стало происходить...
Но АЦП все равно ничего не преобразует или преобразует,но я не могу понять как...
Флаг от компаратора установил(ADIE)
решил поместить в обработчик прерывания от АЦП
такие инструкции чтобы увидеть результат преобразования
Обработчик прерыв. от АЦП:
ADC_COMP:
lds r17,ADCH;ADLAR установлен,можно читать ADCH
out PortB,r17 ;Что я не правильно сделал,почему PORTB пуст?
ldi r16,0b01100001
sts ADMUX,r16
ldi r16,0b11001001
sts ADCSRA,r16
reti

Подскажите пожалуйста,как добиться того,чтобы результат преобразования после каждого преобразования оставался в r17?Может использовать
сохранение результата в стэк внутри обработчика?

ADC_COMP:
...
push r17
..
reti

где то в главной части программы:
pop r17?

.include "m169def.inc"

;Кварц 32kHz
;ATMEGA169
таблица векторов
;
RESET:
ldi r16, high(RAMEND); Main program start
out SPH,r16
ldi r16, low(RAMEND)
out SPL,r16

ldi r16,$ff
out DDRB,r16
ldi r16,$ff
out PortB,r16

ldi r16,0b01100001;ADLAR установлен,можно читать ADCH
sts ADMUX,r16
ldi r16,0b11001001
sts ADCSRA,r16
sei


loop:jmp loop

ADC_COMP:
lds r17,ADCH
out PortB,r17 ;в PortB ничего нет
ldi r16,0b01100001
sts ADMUX,r16

ldi r16,0b11001001
sts ADCSRA,r16

reti
А линия порта, по которой идет преобразование установлена в 0 (cbi PORTA.0)? Т.е. снять подтяжку порта, иначе будете считывать макс. значение АЦП. И вообще 32кГц маловато, могут идти мелкие ошибки АЦП:
By default, the successive approximation circuitry requires an input clock frequency
between 50 kHz and 200 kHz to get maximum resolution. If a lower resolution than
10 bits is needed, the input clock frequency to the ADC can be higher than 200 kHz to
get a higher sample rate.
The ADC module contains a prescaler, which generates an acceptable ADC clock frequency
from any CPU frequency above 100 kHz. The prescaling is set by the ADPS bits
in ADCSRA. The prescaler starts counting from the moment the ADC is switched on by
setting the ADEN bit in ADCSRA. The prescaler keeps running for as long as the ADEN
bit is set, and is continuously reset when ADEN is low.
salenz вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Калибровка внутреннего генератора(atmega169) Archer07 Микроконтроллеры, АЦП, память и т.д 14 30.07.2009 07:33
Встроенный проводной интернет. С чего начать? EugVor Микроконтроллеры, АЦП, память и т.д 22 18.11.2008 13:35
ATmega48 не могу разобраться с АЦП jtlex2007 Микроконтроллеры, АЦП, память и т.д 3 09.09.2008 15:04
АЦП - для чайника (помогите разобраться)! Apach111 Электроника - это просто 2 30.05.2008 10:10
PIC 16F877 - встроенный генератор aks_ Микроконтроллеры, АЦП, память и т.д 1 18.02.2007 18:19


Часовой пояс GMT +4, время: 12:24.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot