AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
02.09.2012, 21:32
|
|
Частый гость
Регистрация: 02.09.2012
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Помогите с АЦП на меге16
Думаю (ловить блох) , просто заглядывая в регистры данных АЦП когда мне нужно в программе и вызывать подпрограмму специальную))))) Или так нельзя?
|
|
|
|
02.09.2012, 21:43
|
|
Супер-модератор
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
|
Re: Помогите с АЦП на меге16
О, только сейчас увидел добавленный код. А Вас не смущает вот это:
Это как в бородатом анекдоте про слона вставившего хобот в ж..у - вечный кайф.
|
|
|
|
02.09.2012, 21:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
|
Re: Помогите с АЦП на меге16
Объясните смысл проверки
in temp, ADCSRA
cpi temp, 0b11110110
brne loop1
Биты ADSC и ADIF по окончанию преобразования будут разными для одиночного преобразования, что у Вас и происходит? ADSC сбросится, ADIF установится. Где выход из цикла?
Может имеет смысл проверять один только бит ADIF?
Последний раз редактировалось alvadep; 02.09.2012 в 22:10.
|
|
|
|
02.09.2012, 22:09
|
|
Частый гость
Регистрация: 02.09.2012
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Помогите с АЦП на меге16
О, только сейчас увидел добавленный код. А Вас не смущает вот это:
Код:
loop2:
jmp loop2
Это как в бородатом анекдоте про слона вставившего хобот в ж..у - вечный кайф.
Смысл такой, включаем преобразование и идем на замыкающийся цикл (loop2) и смотрим в регистры данных АЦП меня напряжения на его входе.
|
|
|
|
02.09.2012, 22:11
|
|
Частый гость
Регистрация: 02.09.2012
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Помогите с АЦП на меге16
Объясните смысл проверки
in temp, ADCSRA
cpi temp, 0b11110110
brne loop1
Биты ADSC и ADIF по окончанию преобразования будут разными для одиночного преобразования.
ADSC сбросится, ADIF установится. Где выход из цикла?
Бит ADIF устонавливаеться бит ADSC остаеться, не знаю как но программа выходит из этого цикла после завершения приобразования!!!!!!!!!!
Поменял
in temp, ADCSRA
cpi temp, 0b11110110
brne loop1
на 0b10110110
Эфект тот же
Последний раз редактировалось Znamen; 02.09.2012 в 22:15.
|
|
|
|
02.09.2012, 22:19
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
|
Re: Помогите с АЦП на меге16
Сообщение от Znamen
|
Бит ADIF устонавливаеться бит ADSC остаеться, не знаю как но программа выходит из этого цикла после завершения приобразования!!!!!!!!!!
|
Цитата:
|
после преобразования бит ADSC сбрасываеться в ноль
|
Вы чего-то не договариваете. Так ADSC сбрасывается или остается?
|
|
|
|
02.09.2012, 22:33
|
|
Частый гость
Регистрация: 02.09.2012
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Помогите с АЦП на меге16
Вобщем бит ADSC сбрасываеться если включить преобразования и включить после него бесконечный цикл (хотя вроде как включен режим постоянного преобразования) т.е. он после сброса как я понимаю должен опять установиться в 1.(протеус же показывает бит ADSC постоянно 0) если после включения преобразования подождать окончания вот так:
loop1:
in temp, ADCSRA
cpi temp, 0b10110110
brne loop1
или вот так:
loop1:
in temp, ADCSRA
cpi temp, 0b11110110
brne loop1
и перейти опять на включения:
ldi temp,0b11100110
out ADCSRA,temp
то так работает и протеус показывает бит ADSC постоянно в 1
|
|
|
|
02.09.2012, 22:57
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
|
Re: Помогите с АЦП на меге16
У меня непрерывное преобразование работает если разрешено прерывание, т.е. сбрасывается ADIF аппаратно или без прерывания, но тогда надо постоянно передергивать флаг ADIF. В противном случае выполняется одно преобразование, причем без сохранения результата в регистр ADC.
Кстати, бит ADSC установлен только первое преобразование, потом он в нуле.
P.S. Можно делать проверку одного бита, а не всего регистра.
Код:
|
loop1:
in temp, ADCSRA
sbrs temp, ADIF
jmp loop1 |
Только temp должен быть в РОН (16 - 31).
Последний раз редактировалось alvadep; 02.09.2012 в 23:25.
|
|
|
|
02.09.2012, 23:52
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Помогите с АЦП на меге16
Блох отловил?
флаг должен быть сброшен...
PHP код:
|
clr temp out SFIOR,temp ;ldi temp,0b11000000 ldi temp,(1‹‹REFS1)|(1‹‹REFS0)|(0‹‹ADLAR) out ADMUX,temp ;ldi temp,0b11100110 ldi temp,(1‹‹ADEN)|(1‹‹ADSC)|(1‹‹ADATE)|(1‹‹ADPS2)|(1‹‹ADPS1)|(0‹‹ADPS0) ;f/64 out ADCSRA,temp loop: sbis ADCSRA,ADIF rjmp loop sbi ADCSRA,ADIF
main:
rjmp loop
|
Сообщение от alvadep
|
Только temp должен быть в РОН (16 - 31).
|
А нафига он здесь?
Последний раз редактировалось omercury; 02.09.2012 в 23:55.
|
|
|
|
03.09.2012, 00:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
|
Re: Помогите с АЦП на меге16
Сообщение от omercury
|
А нафига он здесь?
|
Согласен. Просто по аналогии с вариантом ТС.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:57.
|
|