АDC ATMega8

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
Bigcrash
Открыл глаза
Сообщения: 61
Зарегистрирован: Вс фев 12, 2012 09:32:37

АDC ATMega8

Сообщение Bigcrash »

Нид хелп, вроде все написал, все понял, все перепроверил.... нихатит.
Invalid opcode 0xFFFF at PC=0x01E2

Хотел в принципе простую весчь. Чтобы результат хотя бы первых 8 старших битов преобразования выставлялся на порт и зажигались диоды.

вот программа, проект прилагаю

Код: Выделить всё

.include "m8def.inc"
.cseg
.org 0
	
;===== Инициализация стека======
    ldi R16,high(RamEnd) 
    out SPH,R16           
    ldi R16,low(RamEnd) 
    out SPL,R16 
    
;===== Настройка АЦП =====
	out DDRC, R17 
	out PORTC, R17
	ldi R17, 0b00100000 //AREF=5V, ADC0
	out ADMUX, R17
	ldi R17, 0
	ldi R17, 0b10100111	//АЦП вкл, непрерывное, прерывание нет, CK/128
	out ADCSRA, R17
	
;===== ОМГ Delay =====
Delay:    
    ldi R20,0
    ldi R21,0
    ldi R22,10

Loop:     
	dec R20
    brne Loop

    dec R21
    brne Loop

    dec R22
    brne Loop

    ret	

;===== Настройка портов =====\
	ldi	R17,255		// настраиваю порт В на выход
	out	DDRB,R17
	ldi R17,0
	out PORTB,R17

;===== ADC_convert ========
main:
	rcall delay

	in R19, ADCL
	in R19, ADCH		// читаю результат преобразования
	out PORTB, R19		// выставляю результат на порт В
		
	rjmp main
Вложения
ADC.rar
(20.18 КБ) 149 скачиваний
Реклама
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: АDC ATMega8

Сообщение Engineer_Keen »

У вас капитальные проблемы со структурой программы. Подставьте себя на место контроллера:
инициализируем стек - ок
конфигурим портС-ок
конфигурим АЦП-ок
delay? ладно задержка-ок
после задержки ret... WTF? куда ret? Или откуда? Мы же ничего еще в стек не пихали и никакого rcall не делали... Ну ret так ret забираем из стека неизвестный адрес и идем ХЗ куда :facepalm:
Короче delay в конец переставить надо...
На будущее, ну есть же возможность "прошагать" каждую строчку в той-же студии, этот вопрос сразу бы отпал.
Реклама
Аватара пользователя
Bigcrash
Открыл глаза
Сообщения: 61
Зарегистрирован: Вс фев 12, 2012 09:32:37

Re: АDC ATMega8

Сообщение Bigcrash »

Господа, а насколько точный внутренний ИОН для АЦП? или лучше какой нибудь прецизионный ИОН
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: АDC ATMega8

Сообщение Леонид Иванович »

Ровно настолько, насколько об этом пишут в datasheet. Если требуется малое начальное отклонение (т.е. цифровая калибровка прибора не предусмотрена), то можно подцепить ту же TL431.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Bigcrash
Открыл глаза
Сообщения: 61
Зарегистрирован: Вс фев 12, 2012 09:32:37

Re: АDC ATMega8

Сообщение Bigcrash »

Подскажите плз, почему этот кусок не работает. Просто последовательное вкл. светодиодов. Опорное 5В, входное до 5В.

Код: Выделить всё

;===== Последовательное включение ======
svd1:
	ldi R20,0b00000001
	out PORTB,R20	
	rjmp func
svd2:
	ldi R20,0b00000011
	out PORTB,R20
	rjmp func
svd3:
	ldi R20,0b00000111
	out PORTB,R20
	rjmp func
func:					//опороне 5В, входное до 5В	(5В=1111 1111)
	rcall delay
	in R19, ADCH
	cpi R19, 0b00111111	// 1,25В
	brlo svd1
	cpi R19, 0b01111111	// 2,5В
	brlo svd2
	cpi R19, 0b10111110	//3,75В
	brlo svd3
	ldi R19,0b00001111
	out PORTB,R19
	
	rjmp func
Реклама
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: АDC ATMega8

Сообщение Engineer_Keen »

Лучше выкладывайте код целиком, вдруг косяк вовсе не в этом куске, а в каком-нибудь delay...
(можно архивом, чтоб страницу не растягивать)
Реклама
Аватара пользователя
Bigcrash
Открыл глаза
Сообщения: 61
Зарегистрирован: Вс фев 12, 2012 09:32:37

Re: АDC ATMega8

Сообщение Bigcrash »

.asm в ахриве
Вложения
ADC.rar
(18.89 КБ) 148 скачиваний
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: АDC ATMega8

Сообщение Engineer_Keen »

Во-первых:

Код: Выделить всё

	ldi	R17,0		// настраиваю порт В на выход
	out	DDRB,R17
Это опечатка или как?
Аватара пользователя
Bigcrash
Открыл глаза
Сообщения: 61
Зарегистрирован: Вс фев 12, 2012 09:32:37

Re: АDC ATMega8

Сообщение Bigcrash »

Моя невнимательность. Поправил, но все равно горит только 1 диод, и не важно, что на входе.
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: АDC ATMega8

Сообщение Леонид Иванович »

Старт АЦП (бит ADSC) нужно делать хотя бы раз даже в free-running mode.
Что у Вас на AREF, АЦП ведь настроен на работу с внешним опорным.
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: АDC ATMega8

Сообщение Engineer_Keen »

Леонид Иванович писал(а): Старт АЦП (бит ADSC) нужно делать хотя бы раз даже в free-running mode.
Я проверял

Код: Выделить всё

	SBI	ADCSRA,ADSC ;поставить после out ADCSRA, R17 или воткнуть бит прямо в R17 на предыдущей строке
не влияет, первый результат измерения верный, а потом ничего не меняется, видимо очередной косяк протеуса :dont_know:
Леонид Иванович писал(а): Что у Вас на AREF, АЦП ведь настроен на работу с внешним опорным.
У него соединено с VCC.

Если нужно гарантированно просимулировать в протеусе то можно воткнуть вот эти строки:

Код: Выделить всё

func:					
	rcall delay

	SBI	ADCSRA,ADSC ;запуск преобразования
ADC_WAIT:
	SBIS	ADCSRA,ADIF ;ожидание готовности результата
	RJMP	ADC_WAIT

	in R19,ADCH
	cpi R19,0b00111111
А из инициализации АЦП выкинуть бит ADFR.
Последний раз редактировалось Engineer_Keen Чт фев 16, 2012 10:56:32, всего редактировалось 1 раз.
Аватара пользователя
Bigcrash
Открыл глаза
Сообщения: 61
Зарегистрирован: Вс фев 12, 2012 09:32:37

Re: АDC ATMega8

Сообщение Bigcrash »

Как ни странно но именно ADSC оказывается виновато. Действительно, внес в него 1 и все заработало, даже в протеусе ^_^. Спасибо
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: АDC ATMega8

Сообщение Engineer_Keen »

Странно, у меня не помогает, видимо версия старая :(
Аватара пользователя
Bigcrash
Открыл глаза
Сообщения: 61
Зарегистрирован: Вс фев 12, 2012 09:32:37

Re: АDC ATMega8

Сообщение Bigcrash »

Engineer_Keen писал(а): Если нужно гарантированно просимулировать в протеусе то можно воткнуть вот эти строки:

Код: Выделить всё

func:					
	rcall delay

	SBI	ADCSRA,ADSC ;запуск преобразования
ADC_WAIT:
	SBIS	ADCSRA,ADIF ;ожидание готовности результата
	RJMP	ADC_WAIT

	in R19,ADCH
	cpi R19,0b00111111
А флаг ADIF самостоятельно скидывается при запуске следующего преобразования или нужно ручками?
Engineer_Keen писал(а): А из инициализации АЦП выкинуть бит ADFR.
МММ. Чем плохо непрерывное преобразование?

До кучи... почему в AVR Studio 4 не работает
.macro outi
ldi R16,@0
out @1,R16
.endm
жалуется на @1 ставлю @0 все комплируется, но не делает то шо должен
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: АDC ATMega8

Сообщение Леонид Иванович »

Bigcrash писал(а):До кучи... почему в AVR Studio 4 не работает
Не знаю, всё работает. Хотя логичнее было бы написать

Код: Выделить всё

	.macro outi
	ldi R16,@1
	out	@0,R16
	.endm
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: АDC ATMega8

Сообщение Engineer_Keen »

Или уж сразу так:

Код: Выделить всё

.macro   OUTI
   LDI   R16,@1
   .if   @0>63
   STS   @0,R16   
   .else
   OUT   @0,R16
   .endif
   .endm
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»