Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Компаратор в AT89C4051
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
Stepan576
Здравствуйте дорогие форумчане! Помогите новичку разобраться как работать с компаратором в этом славном устройстве! Как я понял из datasheet разряд p1.1 это инверсный вход компаратора, а на p1.0 прямой, так?
Меня интересует с программной точки зрения как считывать результат сравнения двух сигналов?? Какой бит в каком регистре?

Кажется нашел...P3.6 - есть результат савнения)) Может кто нибудь работал с ним раньше?? Подскажите результат получается непрерывным? Ну то есть не надо программно ничего делать? Что происходит когда сигналы одинаковы?
Палыч
Цитата(Stepan576 @ May 31 2011, 09:10) *
P3.6 - есть результат савнения. Подскажите результат получается непрерывным? Ну то есть не надо программно ничего делать?
Да

Цитата(Stepan576 @ May 31 2011, 09:10) *
Что происходит когда сигналы одинаковы?
Два абсолютно одинаковых сигнала не может быть. Компаратор сигналы сравнит и выдаст результат. Естественно, что сравнение производится с некой погрешностью...
Stepan576
Под "одинаковыми" сигналами я имел ввиду точку пересечения на графике скажем между опорным напряжением и нарастающим сигналом..Никакого дребезга или тому подобного наблюдаться не будет?
Палыч
Мне точность была не нужна, поэтому поведение компаратора при очень близких значениях сигналов не было мной исследовано... Имхо, компаратор выдаст верный результат при разности напряжений более 20 мВ.
тау
Цитата(Stepan576 @ May 31 2011, 09:10) *
Кажется нашел...P3.6 - есть результат савнения)) Может кто нибудь работал с ним раньше?? Подскажите результат получается непрерывным? Ну то есть не надо программно ничего делать? Что происходит когда сигналы одинаковы?

давным давно было дело , AOUT определен как P3.6

Код
#include <AT892051.H>                        

uchar Measur(void) // ADC; возвращает проценты от Vcc
     // выполняется от 0.5 до 1.1 mS
{register unsigned char R,Rm,Rp;
uchar code Tabl[47] = {0,2,4,6,8,11,13,15,17,20,22,25,27,30,33,36,39,42,45,48,
            51,54,58,62,65,69,73,78,82,87,92,97,102,108,114,120,127,135, 143,151,
            161,171,183,197,212,230,253}; // массив счетчика циклов, индекс=2%напруги
                    // индекс от 0 до 46 , всего 47 штук, от 0 до 92%
AIN0=0;  //разрядим конденсатор

for(R=16;R>0;R--) A=A*B;  // подождем разряда 100 мкс
  // к  AIN1 подключим вход измеряемого внешнего напряжения
for(R=255,AIN0=1;R>0;--R)    // AIN0 это P1.0  пуск заряда и + вход компаратора
    {if (AOUT) goto m1;   /* P3_6 Hardwired as AOUT */        //_nop_();_nop_();
    }        //4 мкс на тело цикла /JB AOUT,m1 ; DJNZ   R7,?C0021
m1:
    R=255-R;  // пройдено циклов
if (R>=Tabl[sizeof(Tabl)-1]) Rp=(sizeof(Tabl)-1)*2;  //92% если >=
    else for(Rm=sizeof(Tabl)-1; Rm>0; --Rm) // с последнего индекса
            {Rp=Tabl[Rm-1];
             if (R<Rp) continue;  //иначе от Rm до Rm+1 наприм 230,253
                 Rp=(Rm-1)*2+( (R-Rp)*2/(Tabl[Rm]-Rp) );  //0 или 1 добав для интерполяции
                break;
            }
return Rp;
}
Stepan576
Спасибо вам добрые люди) Буду разбираться..
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.