Показано с 1 по 9 из 9

Тема: Программа для MEGA16 на С - нужен совет.

  1. #1
    Старый знакомый
    Автор темы
    Аватар для kastor666
    Регистрация
    08.03.2008
    Адрес
    Тарасовка
    Сообщений
    980

    Внимание! Программа для MEGA16 на С - нужен совет.

    Прошу совет - где и что посмотреть по данному вопросу - опрос 6 кнопок с помощью АЦП.(по тексту пока одна)

    Делаю так(побитная запись для моего же понимания ) -

    //....Инициализация АЦП
    //

    ADCSRA.0=1; // ADPS0=1
    ADCSRA.1=1; // ADPS0=1
    ADCSRA.2=0; // ADPS0=0 коеффициент делителя частоты = 8

    ADCSRA.5=1; //ADATE=1, непрерывное преобразование
    ADCSRA.6=1; //ADSC=1, запуск цикла преобразования
    ADCSRA.7=1; //ADEN=1, запуск АЦП

    ADMUX.0=0; // выбор входа АЦП ADC0 (PA0)
    ADMUX.1=0;
    ADMUX.2=0;
    ADMUX.3=0;
    ADMUX.4=0; //

    ADMUX.5=1; // выравнивание результата по левому краю
    ADMUX.6=0; // REFS0=0
    ADMUX.7=0; // REFS1=0 Опорное напряжение = AVcc

    SFIOR=0; // режим непрерывного преобразования

    ////////////////////////////


    if (ADCSRA.4==1) // проверка флага конца преобразования
    ee_input1=ADCL; // блокировка доступа к регистрам данных(вроде надо)
    ee_input=ADCH; // чтение регистра результата.


    delay_ms(200);

    if (ee_input<0b01100100) // сравнение (ee_input<100)
    {
    if (!state)
    {
    state=1;
    startup();


    } else
    {
    state=0;
    shutdown();
    }


    } else

    Главный вопрос - почему результат преобразования не соответствует посчитанному по ADC=1024*Vin/Vref?

    для значений Vin
    0,01

    0,46

    0,84

    1,16

    1,44

    1,67, при любом Vin значение ee_input меньше 100 (b 1100100), положительный результат при проверке ee_input<0b01100100. Почему так выходит, что делаю не так?

    Изложение путаное, может, но надеюсь на понимание

  2. #2
    Завсегдатай Аватар для aal
    Регистрация
    04.11.2004
    Адрес
    пос. Краснообск, Новосибирская область
    Возраст
    51
    Сообщений
    2,860

    По умолчанию Re: Программа для MEGA16 на С - нужен совет.

    вы проверяете старший байт, а не младший. В старшем байте только 2 младших бита могут быть отличными от 0... Т.к. АЦП 10 битное, то чтобы прочитать его без искажений, надо при чтении младших битов сохранить верхние во временном регистре... Т.е. :

    ee_input1=ADCL; читаете младший байт
    ee_input=ADCH; читаете старшие 2 бита.
    Пароли - штука неустойчивая. Взламываются терморектальным криптоанализатором.

  3. #3
    Частый гость Аватар для Flid
    Регистрация
    02.01.2008
    Адрес
    Красноярск
    Возраст
    34
    Сообщений
    146

    По умолчанию Re: Программа для MEGA16 на С - нужен совет.

    Компилятор позволяет не заморачиваться с побайтным считыванием, а использовать переменную ADCW.
    Последний раз редактировалось Flid; 12.06.2010 в 12:17. Причина: Исправился :)

  4. #4
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    35,982

    По умолчанию Re: Программа для MEGA16 на С - нужен совет.

    Цитата Сообщение от aal Посмотреть сообщение
    Т.к. АЦП 10 битное, то чтобы прочитать его без искажений, надо при чтении младших битов сохранить верхние во временном регистре... Т.е. :

    ee_input1=ADCL; читаете младший байт
    ee_input=ADCH; читаете старшие 2 бита.
    Он же так и делает.


    Цитата Сообщение от aal Посмотреть сообщение
    вы проверяете старший байт, а не младший. В старшем байте только 2 младших бита могут быть отличными от 0...
    При левом выравнивании?????
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  5. #5
    Старый знакомый Аватар для Quasar
    Регистрация
    16.03.2005
    Адрес
    Russia, Moscow.
    Сообщений
    620
    Спонсор данного сообщения - Газпром.

  6. #6
    Завсегдатай Аватар для aal
    Регистрация
    04.11.2004
    Адрес
    пос. Краснообск, Новосибирская область
    Возраст
    51
    Сообщений
    2,860

    По умолчанию Re: Программа для MEGA16 на С - нужен совет.

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

  7. #7
    Старый знакомый
    Автор темы
    Аватар для kastor666
    Регистрация
    08.03.2008
    Адрес
    Тарасовка
    Сообщений
    980

    По умолчанию Re: Программа для MEGA16 на С - нужен совет.

    Товарищ Pyku_He_oTTyda привел очень внятно все объясняющую ссылочку. http://chipenable.ru/index.php/progr...avr-easy-start

    С первых строк ясно, почему результаты преобразования не совпадают с расчетными и меньше 100 - формула ADC=1024*Vin/Vref является частным случаем для 10битного преобразования. Я же использую только 8 бит!

    Вот оно в чем дело -ADC = ((2^n-1) · Uin )/ Uref

    где n – разрядность АЦП, Uin – входное напряжение, Uref – напряжение опорного источника!

  8. #8
    Старый знакомый
    Автор темы
    Аватар для kastor666
    Регистрация
    08.03.2008
    Адрес
    Тарасовка
    Сообщений
    980

    По умолчанию Re: Программа для MEGA16 на С - нужен совет.

    C подключением кнопок посредством АЦП полный порядОК!

    Обнаружилась неожиданная проблемма, крайне странная

    На PORTC.2, PORTC.3 и PORTC.5 всегда присутствует 4,85 В, не зависимо от того 0 или 1 записываю или даже на стертом кристалле.

    пример конфигурирования портов :


    void main(void)
    {

    PORTA=0x00;
    DDRA=0x00;

    DDRB=0x00;


    PORTC=0x00;
    DDRC=0xFF;


    PORTD=0x00;
    DDRD=0x00;

    while (1)
    {
    PORTC=0;

    }
    }

    Проверил два корпуса, результат аналогичен.

    ---------- Добавлено в 22:55 ---------- Предыдущее сообщение в 21:28 ----------

    Нашел проблему - JTAGEN, который включен по умолчанию на PORTC.2-5. Отключил и все дела

    Сам с собой разговариваю, однако

    Может полезно кому будет

    Но курить мануалы и пользоваться поиском - никто не отменял, как и всегда
    Последний раз редактировалось kastor666; 24.06.2010 в 00:16.

  9. #9
    Завсегдатай Аватар для Grigori G.
    Регистрация
    13.05.2006
    Адрес
    Estonia
    Возраст
    45
    Сообщений
    1,561

    По умолчанию Re: Программа для MEGA16 на С - нужен совет.

    Цитата Сообщение от kastor666 Посмотреть сообщение
    Нашел проблему - JTAGEN, который включен по умолчанию. Отключил и все дела
    Я раз тоже на эту граблю наступил, никак экран на С порту не запускался. Долго не понимал, почему в симуляторе все крутится, а на макете никак... Потом доперло.
    нет ничего более вечного, чем то, что замотано синей изолентой...

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •