реклама на сайте
подробности

 
 
> Странное поведение ATtiny26
SAVC
сообщение Sep 15 2018, 13:46
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 185
Регистрация: 28-01-07
Из: Уфа
Пользователь №: 24 829



Пытаюсь сделать управляемый источник питания, источник тока с регулировкой на МК AVR ATtiny26(L)
В целях ознакомления с периферией, сделал такой вот проект:
CODE
.include "avr000/tn26def.inc"

.cseg
.org 0

start:
ldi r16,RAMEND
out sp,r16
ldi r16,0b00001111
out ddrb,r16
ldi r16,2
out pllcsr,r16
start_01:
in r16,pllcsr
andi r16,1
breq start_01
ldi r16,6
out pllcsr,r16
ldi r16,0
out ocr1a,r16
out ocr1b,r16
ldi r16,255
out ocr1c,r16
ldi r16,0b01010011
out tccr1a,r16
ldi r16,0b10000011
out tccr1b,r16

;CK/8
ldi r16,0b00000010
out tccr0,r16
ldi r16,128
out tcnt0,r16

rcall pause

forever:

;Ждём ADIF=1
;ADLAR = 1 сдвигать результат влево, 8 бит в регистре ADCH
ldi r16,0b00100000
out admux,r16

;ADEN = 1
;ADSC = 1
;ADPS = 001; division by 2
ldi r16,0b11000001
out adcsr,r16

start_02:
in r16,adcsr
andi r16,16
breq start_02

;Сбросим ADIF
ldi r16,0b10010001
out adcsr,r16

in r16,adch

out ocr1a,r16

rcall pause

;ADLAR = 1 сдвигать результат влево, 8 бит в регистре ADCH
ldi r16,0b00100001
out admux,r16

;ADEN = 1
;ADSC = 1
;ADPS = 001; division by 2
ldi r16,0b11000001
out adcsr,r16

;Ждём ADIF=1
start_03:
in r16,adcsr
andi r16,16
breq start_03

;Сбросим ADIF
ldi r16,0b10010001
out adcsr,r16

in r16,adch

mov r17,r16
andi r17,128
out porta,r17

out ocr1b,r16

rcall pause

rjmp forever

pause:

;Ждём TOV0
pause_01:
in r16,tifr
andi r16,2
breq pause_01

;Clear TOV0
ldi r16,2
out tifr,r16

ldi r16,128
out tcnt0,r16

ret

Запускается периферия, затем в цикле измеряется напряжение с нулевого входа АЦП, выводится в первый канал PWM,
после этого измеряется напряжение на первом входе АЦП, выводится во второй канал PWM.
Светодиод на PA7 отображает состояние старшего бита данных с АЦП для второго канала.
Имеем странный результат: вращая ручку переменного резистора, подключенного делителем к первому входу АЦП
длительность импульса выходного сигнала сначала плавно увеличивается, потом доходит до максимума и затем резко обрывается, падая в ноль.
Это происходит где-то после 75% шкалы.
Светодиод при этом светится, то есть это не АЦП.
Далее, проверяем PWM.
С этой целью запускаем след. код на микроконтроллере:
CODE
.include "avr000/tn26def.inc"

.cseg
.org 0

start:
ldi r16,RAMEND
out sp,r16
ldi r16,0b00001111
out ddrb,r16
ldi r16,2
out pllcsr,r16
start_01:
in r16,pllcsr
andi r16,1
breq start_01
ldi r16,6
out pllcsr,r16
ldi r16,254
out ocr1a,r16
out ocr1b,r16
ldi r16,255
out ocr1c,r16
ldi r16,0b01010011
out tccr1a,r16
ldi r16,0b10000011
out tccr1b,r16

forever:
rjmp forever

Код инициализирует периферию и запускает таймер-счётчик с коэффициентом 254 на обоих каналах PWM
Код работает.
Не могу понят, что происходит в системе, если у кого-нибудь есть опыт или идеи, прошу поделиться.

Сообщение отредактировал IgorKossak - Sep 15 2018, 16:22
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
controller_m30
сообщение Sep 15 2018, 15:30
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 24-02-09
Пользователь №: 45 309



Два предложения.
1. Проверьте питание на ноге AVCC - равно ли питанию VCC контроллера? Попробуйте добавить конденсатор на эту ногу 0.1uF, и индуктивность 10uH (как в даташите на стр.106).

2. Если предыдущее не поможет. И если нет возможности быстро подключить дисплей, чтобы посмотреть регистры ADC и PWM.
Добавьте на выход PWM схемку как на картинке (я пользуюсь номиналами из нижней схемы, но и номиналы верхней схемы тоже рабочие).
Это для того, чтобы значения PWM смотреть в виде напряжения мультиметром напрямую. При VCC=5 вольт, и PWM=255 - на выходе цепочки будет 5 вольт. При PWM=128 - на выходе будет 2.5 вольт (пол питания), а при PWM=0 - на выходе 0 вольт. Т.е. получится такой себе DAC.
Дальше попробуем измерить значение внутреннего источника 1.18v, и вывести на выход PWM - посмотрим сколько покажет.
Потом тоже самое, но с опорным напряжением ADC=2.56v. Сколько покажет?

Сообщение отредактировал controller_m30 - Sep 15 2018, 15:32
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
SAVC
сообщение Sep 16 2018, 03:01
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 185
Регистрация: 28-01-07
Из: Уфа
Пользователь №: 24 829



Цитата(controller_m30 @ Sep 15 2018, 20:30) *
Два предложения.
1. Проверьте питание на ноге AVCC - равно ли питанию VCC контроллера?

Ну вот оно!
Я забыл подключить AVCC!
Эпитеты о тупизне автора...
Благодарю, всё заработало.

Цитата(aiwa @ Sep 15 2018, 20:34) *
Чтение измерений АЦП в коде вообще отсутствуют, ибо осуществляются они исключительно командой "in r16,adcl".
Ее надо поставить перед "in r16,adch".

Я использую режим сдвигания результата преобразования в старший регистр. Бит 5 в регистре ADMUX, ADLAR.

Цитата(domowoj @ Sep 16 2018, 06:00) *
SAVC
-зачем вы залезли своей программой на адреса векторов прерываний

А у меня прерывания отключены, могу залезать, куда душе угодно.

Цитата
-какая необходимость использовать PLL

Режим работы нравится.

Цитата
-грамотней было бы использовать в АЦП внутренний ИОН, подключенный на выход МК, и к нему же подключить ваши переменные резисторы

Спорный вопрос. У меня изменение сигнала в схеме от 0 до 5В.

Цитата
-при работе с АЦП удобней использовать прерывания с настройкой режима сна,
запускаете АЦП и засыпаете и по окончании преобразования процессор просыпается по прерыванию и ADIF не надо сбрасывать. Программа становится короче.

Не удобней. И вообще, о вкусах не спорят.
Мелкие придирки. По существу ничего не сказано.

Остался только вопрос, почему горел светодиод, указывающий старший бит АЦП. Ведь, если АЦП выдавало ноль, светодиод должен был гаснуть...

Сообщение отредактировал SAVC - Sep 16 2018, 03:56


--------------------
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- SAVC   Странное поведение ATtiny26   Sep 15 2018, 13:46
- - controller_m30   Уточните, какие напряжения: 1. Питания контроллера...   Sep 15 2018, 14:22
|- - SAVC   Цитата(controller_m30 @ Sep 15 2018, 19:2...   Sep 15 2018, 14:24
- - controller_m30   Попробуйте значения, считанные из АЦП, сначала под...   Sep 15 2018, 14:41
|- - SAVC   Цитата(controller_m30 @ Sep 15 2018, 19:4...   Sep 15 2018, 14:46
|- - aiwa   Цитата(SAVC @ Sep 16 2018, 06:01) Я испол...   Sep 16 2018, 07:54
||- - SAVC   Цитата(aiwa @ Sep 16 2018, 12:54) В даташ...   Sep 16 2018, 07:57
|- - controller_m30   Цитата(SAVC @ Sep 16 2018, 06:01) Остался...   Sep 16 2018, 16:20
|- - SAVC   Цитата(controller_m30 @ Sep 16 2018, 21:2...   Sep 17 2018, 15:16
- - aiwa   Чтение измерений АЦП в коде вообще отсутствуют, иб...   Sep 15 2018, 15:34
- - domowoj   SAVC -зачем вы залезли своей программой на адреса ...   Sep 16 2018, 01:00
- - controller_m30   Ещё вариант такой. По тексту программы, на светоди...   Sep 17 2018, 15:55
- - SAVC   Цитата(controller_m30 @ Sep 17 2018, 20:5...   Sep 18 2018, 09:27


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th August 2025 - 03:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01409 секунд с 7
ELECTRONIX ©2004-2016