Уважаемые посетители! Форум CQHAM.RU существует исключительно за счет показа рекламы. Мы будем благодарны, если Вы не будете блокировать рекламу на нашем Форуме. Просим внести cqham.ru в список исключений для Вашего блокировщика рекламы.
Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 32

Тема: ADC Mega8

  1. #21
    Цитата Сообщение от R0AEK Посмотреть сообщение
    Ваш вариант конфигурации - опорное напряжение подаётся на вход AREF извне.....
    Почему? У меня же REFS1-REFS0 01. На вход AREF биты должны 00. Или я не прав?
    Никогда такого не было и вот опять...


  2. #22
    Аватар для RA4HJW
    Регистрация
    20.02.2006
    Адрес
    г. Самара
    Сообщений
    615
    Записей в дневнике
    31
    Позывной
    RA4HJW
    Цитата Сообщение от sharp Посмотреть сообщение
    eсли фоторезисторы затемнены их сопротивление большое и когда переключаете входы АЦП нужно делать небольшую паузу перед запуском преобразования, иначе...
    я вообще не понимаю смысл в фоторезисторе, тем более с намёками в коде на фотометрию.
    есть копеечные готовые модули
    цумбайшпиль https://aliexpress.ru/item/1005001572932920.html
    куча плюсов
    + 16 разрядов разрешение, 120 мс измерение, калиброванная шкала.
    + функция режекции светового шума 50 гц
    и т.д. и т.п.
    https://cxem.net/izmer/files/izmer154_bh1750fvi-e.pdf

  3. #23
    Аватар для vadim_d
    Регистрация
    29.10.2006
    Адрес
    Санкт-Петербург
    Сообщений
    14,886
    Цитата Сообщение от Ромм Посмотреть сообщение
    Без результата...
    А обработчик прерывания остался прежний? Попробуйте великий инженерный подход "разделяй и властвуй" . Запретите прерывания, весь функционал из него перенесите в общий цикл, вставьте явную проверку готовности результата после запуска АЦП, добейтесь устойчивой работы. А потом подумайте о коммуникации между основным циклом и обработчиком, может явные флажки завести на каждый случай или еще чего захочется. После этого разделяйте функционал на обработчик и цикл, проверяя, что все срослось. Оно может дольше, но "широко шагаешь - штаны порвешь"
    Вадим

  4. Спасибо от Ромм

  5. #24
    Цитата Сообщение от vadim_d Посмотреть сообщение
    А обработчик прерывания остался прежний? Попробуйте великий инженерный подход "разделяй и властвуй" . Запретите прерывания, весь функционал из него перенесите в общий цикл, вставьте явную проверку готовности результата после запуска АЦП, добейтесь устойчивой работы. А потом подумайте о коммуникации между основным циклом и обработчиком, может явные флажки завести на каждый случай или еще чего захочется. После этого разделяйте функционал на обработчик и цикл, проверяя, что все срослось. Оно может дольше, но "широко шагаешь - штаны порвешь"
    Да, обработчик не менял...
    Согласен с Вами, здравый подход для достижения результата, но хочется понять почему в таком виде то не работает.
    Вроде бы все по даташиту:
    - старт преобразования;
    - прерывание по окончании преобразования и присвоение результата переменной;
    - вывод на дисплей.
    Казалось бы, чего проще? А не работает, зараза!
    Никогда такого не было и вот опять...

  6. #25
    Кстати - комментарии к программе наводят на мысль, что речь идет о самодельном фотоэкспонометре ? Я бы для такой задачи вместо фоторезистора взял специализированный сенсор с цифровым выходом, можно ожидать лучшей стабильности и воспроизводимости результатов. BH1750, TSL2561 (доступны на ali за копейки, в виде модулей в том числе). Что, впрочем, не мешает разобраться с ADC микроконтроллера, потому что рано или поздно все равно пригодится.

    upd - а, меня уже опередили !
    Последний раз редактировалось rx3apf; 13.03.2021 в 10:22.

  7. Спасибо от Ромм

  8. #26
    Цитата Сообщение от rx3apf Посмотреть сообщение
    Кстати - комментарии к программе наводят на мысль, что речь идет о самодельном фотоэкспонометре ? Я бы для такой задачи вместо фоторезистора взял специализированный сенсор с цифровым выходом, можно ожидать лучшей стабильности и воспроизводимости результатов. BH1750, TSL2561 (доступны на ali за копейки, в виде модулей в том числе). Что, впрочем, не мешает разобраться с ADC микроконтроллера, потому что рано или поздно все равно пригодится.
    Вы правы.
    Сенсоры все таки второстепенно.
    Вот что-то заработало НО:
    кнопки сидят на ADC4, резистор на ADC5. А показывает наоборот! Т.е. замеры резистора меняются и выводятся float, а кнопки в десятичном виде.
    почему-то
    Никогда такого не было и вот опять...

  9. #27

    Регистрация
    12.09.2006
    Адрес
    Болгария, Силистра, KN34PC
    Сообщений
    1,463
    Позывной
    LZ2WSG
    Отложите выполнение дальше, пока не будет завершено измерение АЦП. В Вашем коде не контролируете то, что произошло.
    Код:
    while(ADCSRA & (1<<ADSC));
    или по крайней мере добавьте
    Код:
    _delay_us(10);

  10. Спасибо от Ромм

  11. #28
    Огромное Вам спасибо!!! Работает.
    Но как же быть с тем, что прерывание должно наступать ПО ОКОНЧАНИИ преоБразования?

    while (1)
    {
    lcd_clear();
    //lcd_puts("Privet!");
    //delay_ms(1000);
    //lcd_clear();
    //delay_ms(1000);
    //lcd_clear();
    ADMUX=0b01000101; // выбор ADC5 фоторезистор
    ADCSRA=0b11001111; // старт преобразования
    delay_ms(10);
    //A=adc_data*0.048; // вычисление значения измеренного напряжения
    B=adc_data;

    //lcd_gotoxy(1,1);
    sprintf(temp,"%u", B);
    lcd_puts(temp);
    //A=0;
    //B=0;
    //adc_data=0;
    //delay_ms(1000);
    ADMUX=0b01000100; // ADC4 клавиатура
    ADCSRA=0b11001111; // старт преобразования
    delay_ms(10);
    // A=adc_data*0.0048; // клавиатура
    B=adc_data;
    // B=floor(A);
    lcd_gotoxy(1,1);
    // sprintf(temp,"%5f", A);
    sprintf(temp,"%u", B);
    //delay_ms(5000);
    //lcd_clear();
    //sprintf(temp,"%05f", B);
    lcd_puts(temp);
    // A=0;
    //adc_data=0;
    delay_ms(100);
    }
    Никогда такого не было и вот опять...

  12. #29
    Цитата Сообщение от Ромм Посмотреть сообщение
    unsigned int adc_data;
    Эта переменая меняется из ISR и читается в main(). Следует добавить квалифайер volatile, иначе компилятор (особенно со включенной оптимизацией) может вычитывать один раз и на этом всё.
    К слову, если у вас таки не получится победить - у меня был на другом компе мелкий проект под атмега8 с ацп, делал аналайзер на ад9851 и логдекторе из FM IF. Могу завтра порыться, правда он под gcc.


  13. #30
    Цитата Сообщение от Thomas Посмотреть сообщение
    К слову, если у вас таки не получится победить - у меня был на другом компе мелкий проект под атмега8 с ацп, делал аналайзер на ад9851 и логдекторе из FM IF. Могу завтра порыться, правда он под gcc.
    Спасибо большое!! Пока не нужно, вроде работает, буду дальше двигаться.
    Никогда такого не было и вот опять...

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Частотомер на mega8
    от Ромм в разделе Конструкции на микроконтроллерах для радиолюбителей
    Ответов: 55
    Последнее сообщение: 14.10.2018, 19:31

Ваши права

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