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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> АЦП Tiny13V на входе ноль, а результат преобразования не 0, Как такое может быть?
smk
сообщение Oct 24 2010, 13:14
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Схема влючения простая. Вход АЦП (PB4) зашунтирован на обший резистором 68 Ом и конденсатором 1000 мкф. Осциллограф и тестер утверждают, что там 0 В. Да и по уму ничему другому там взяться неоткуда. Плата мытая. Результатом преобразования имеем значение 15 или около того. Вход АЦП (PB3) зашунтирован на общий резистором 4,7 кОм. Картина примерно таже самая. Суть проблемы в целом такова, что на нижнем пределе нет устойчивой однозначности результата преобразования. Плавно изменяющееся напряжение, снятое с RC-цепочки (время изменения от 1,03 В до 0 В примерно 1,5 с) демонстрирует даже какое-то подмигивание перед выключением светодиода, но не всегда а только примерно в 20% случаев. Из 10 значащих бит АЦП использую только старшие 8. Монтаж СМД, перекосов общего провода вродебы нет. Контроллер управляет MOSFETами, а они светодиодами. Яркость светодиодов управляется аппаратным ШИМом от таймера. Ну вобщем суть вопроса в том, как избавиться от миганий светодиода при нижних значениях яркости, в т.ч. и при нулевой яркости? Спасибо.
Код
volatile unsigned int c1,c2,adc_data;
volatile unsigned char t1,t2,flag1,flag2;

unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | 0b01100000;
ADCSRA |= (1<<ADSC); //начать преобразование
while (!(ADCSRA & (1<<ADIF))) {asm("nop");}; //ждем появления флага завершения преобр.
ADCSRA |= (1<<ADIF);//сбросить флаг
//return ADCW;
return ADCH;
}

ISR(TIM0_OVF_vect)
{
if(flag1==1)
    {
    OCR0A=t1;
    flag1=0;
    }
if(flag2==1)
    {
    OCR0B=t2;
    flag2=0;
    }
}


int main(void)
{
PORTB = 0b00000000;
DDRB  = 0b00000111;
OCR0A = 0;
OCR0B = 0;
TCNT0 = 0x01; //set count
TCCR0A = 0b10100001;
TCCR0B = 0b00000100; //start timer
TIMSK0 = 0b00000010;
DIDR0=0b00011000;
ACSR  = 0x80;//компаратор выключить

ADCSRA = 0b10000110;

asm("sei");

while(1)
    {
    if(flag1==0)
        {
        adc_data=read_adc(2);    
        c1=0;
        for(unsigned char i=0; i<250; i++)
            {
            adc_data=read_adc(2);
            if(adc_data>c1) c1=adc_data;
            }
        t1=(unsigned char)c1;
        if(c1>=250) t1=255;
        if(c1<4) t1=0;
        flag1=1;
        }
    if(flag2==0)
        {
        adc_data=read_adc(3);    
        c2=0;
        for(unsigned char i=0; i<250; i++)
            {
            adc_data=read_adc(3);
            if(adc_data>c2) c2=adc_data;
            }
        t2=(unsigned char)c2;
        if(c2>=250) t2=255;
        if(c2<10) t2=0;
        flag2=1;
        }
//    OCR0A=pgm_read_byte(&brightness[t1]);
//    OCR0B=pgm_read_byte(&brightness[t2]);
    asm("nop");
    }
return 0;
}


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Oct 24 2010, 13:28
Сообщение #2


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



так вам от подмигивания избавиться или со странным поведением ацп разобраться?

А все остальные требования соблюдаются? Ну там филтрация опорного и AVCC....
Вообще странно как-то...


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
smk
сообщение Oct 24 2010, 13:35
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



и то и то. Я так понимаю они взаимосвязаны. Опора внутренняя. По питанию 100н и 1000мкф. Стабилизатор LM2940-5. У tiny13 нет AVCC.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
314
сообщение Oct 24 2010, 14:54
Сообщение #4


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

Группа: Участник
Сообщений: 139
Регистрация: 17-08-07
Пользователь №: 29 855



Скажите, а последовательно со светодиодами включили резисторы или индуктивность и какого номинала? В смысле интересует ток через светодиоды в импульсе.
Go to the top of the page
 
+Quote Post
smk
сообщение Oct 24 2010, 15:29
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



660 Ом (2х330) при питании в 9 В. Питание ровное. Все как положено. Весь предидущий опыт (а он есть) говорит о том, что все собрано правильно. Замеры тоже. Вообще больше всего удручает, что при замкнутом входе имеем ненулевые показания АЦП.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Oct 24 2010, 15:41
Сообщение #6


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(smk @ Oct 24 2010, 19:29) *
660 Ом (2х330) при питании в 9 В. Питание ровное. Все как положено. Весь предидущий опыт (а он есть) говорит о том, что все собрано правильно. Замеры тоже. Вообще больше всего удручает, что при замкнутом входе имеем ненулевые показания АЦП.

Сделайте другой макет, никаких внешних устройств, вход ADC на "землю", и смотрите, что намеряет ADC. Если больше 3-4 единиц - это что-то неправильное...
Go to the top of the page
 
+Quote Post
314
сообщение Oct 24 2010, 16:28
Сообщение #7


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

Группа: Участник
Сообщений: 139
Регистрация: 17-08-07
Пользователь №: 29 855



А в затворах МОСФЕТов какие резисторы? Выглядит так, как будто периодически АЦП говорит, что на его входе 0,5-0,6В, программа четко ловит эти моменты за счет отбора самых больших отсчетов... Или накладываются какие-то короткие всплески, или проблемы с кристаллом... А частота тактирования какая?
Go to the top of the page
 
+Quote Post
ARV
сообщение Oct 24 2010, 17:29
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



сколько встречал, в том числе и в даташитах, всюду конец преобразования определяют по "падению" бита ADSC, а не по установке ADIF. сам всегда так делал и никогда никаких подозрительных вариаций показаний АЦП не видел. может, собака тут порылась? объяснений такого подхода не встречал (но и не искал) - неужели причина лишь в том, что его сбрасывать надо перед очередным замером?!


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Oct 24 2010, 17:44
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(ARV @ Oct 24 2010, 21:29) *
сколько встречал, в том числе и в даташитах, всюду конец преобразования определяют по "падению" бита ADSC, а не по установке ADIF. сам всегда так делал и никогда никаких подозрительных вариаций показаний АЦП не видел. может, собака тут порылась? объяснений такого подхода не встречал (но и не искал) - неужели причина лишь в том, что его сбрасывать надо перед очередным замером?!

Исключено. А обработка по ADSC - это когда обработка по опросу, ADIF да, надо сбрасывать. Если же обработка по прерываниям - то само собой по ADIF. Но никак это все не может быть связано с таким сильным смещением показаний.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Oct 24 2010, 18:52
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата
на обший резистором 68 Ом и конденсатором 1000 мкф

Зашунтируйте это все перемычкой и посмотрите показания АЦП


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
domowoj
сообщение Oct 25 2010, 00:53
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Я не силен в СИ, но не вижу "засыпания" на время преобразования АЦП.
И еще.
Можно сделать несколько измерений и усреднить результат.
И зачем в п\п прерывания вот это
"ADCSRA |= (1<<ADSC); //начать преобразование
while (!(ADCSRA & (1<<ADIF))) {asm("nop");}; //ждем появления флага завершения преобр.
ADCSRA |= (1<<ADIF);//сбросить флаг "
преобразование у вас уже начато,
и флаг сбросится автоматически по выходе из прерывания,
почитайте хотя бы у Евстифеева про АЦП.

Сообщение отредактировал domowoj - Oct 25 2010, 01:32


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
=GM=
сообщение Oct 25 2010, 16:24
Сообщение #12


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(smk @ Oct 24 2010, 12:14) *
Суть проблемы в целом такова, что на нижнем пределе нет устойчивой однозначности результата преобразования

Возможно, дело в том, что вы меняете номер канала слишком быстро. Для смены канала по паспорту должен пройти по крайней мере один импульс клока АЦП (с.86 док. 2535), для вашей программы он составляет 64 такта. Попробуйте увеличить частоту клока АЦП, либо поставьте задержки в нужных местах.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
smk
сообщение Oct 26 2010, 06:03
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Резисторы в цепи затворов 68 Ом. MOSFET IRL520. Закоротка входа не дает ничего. На счет переключения каналов, ставил задержку 0,1 с, убирал переключение вообще - изменений небыло. Наверно действительно нужно собрать на другом контроллере с внешней опорой и отдельным питанием аналоговой части. Есть такое наблюдение - после прошивки иногда бывает все правильно, АЦП выдает ноль, но по прошествии времени опять не ноль причем в хаотическом порядке. Или после включения ноль, подать-снять входное напряжение, опять хаотические ненулевые показания.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
aesok
сообщение Oct 26 2010, 09:56
Сообщение #14


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



В первом посте Вы написали что у Вас еть осцилограф, что он показывает на шине +5В?

Анатолий.
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Oct 26 2010, 10:54
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Цитата
660 Ом (2х330) при питании в 9 В.

Подробнее, пли-из, как подключен светодиод!? Причем тут 9В?

ЗЫ. А вообще - нет ли у тебя на ногах МК напряжения более чем на 0,2В выше напряжения питания. Если есть - убери. А затем посмотри на результат...
Go to the top of the page
 
+Quote Post

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

 


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


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