Перейти к содержанию

последовательный опрос двух каналов ацп в atmega 8


ummagumma

Рекомендуемые сообщения

Здравствуйте добрые люди! помогите исправить ошибку в С-кодировке. не работает опрос двух каналов внутреннего ацп в атмеге. на оба индикатора выводица только результат оцифровки одного канала mux5. вот сами функции

Спойлер

//--- Функция оцифровки напряжения внутреним ацп MUX5 ---
unsigned int ADCV_Conv(unsigned char ch_ADC) //(переменная "канал ацп")
{
    unsigned int adcv_value = 0; //сброс регистра хранения результата оцифровки напряжения
    unsigned char set_ADMUX = ADMUX; //переменная для выбора канала АЦП
    ADMUX |= ((0<<MUX3)|(1<<MUX2)|(0<<MUX1)|(1<<MUX0)); //выбор канала АЦП MUX5
    _delay_us(10); //пауза 10мкс
    for(unsigned char i=0;i<measure;i++) //цикл суммирования результатов оцифровки 64 замеров
    {
        ADCSRA |= (1<<ADSC); //запуск АЦП
        while((ADCSRA &(1<<ADSC))); //ожидание окончания преобразования
        adcv_value += ADCW; //adcv_value=adcv_value+ADCW прибавим к сумме значений предыдущих измерений значение очередного измерения
    }
    return(unsigned int)adcv_value >> 6; //выйдем из функции и вернём среднее значение (из регистров результата ADCL и ADCH АЦП)
}                                        //оцифровки 64 замеров в переменную типа (unsigned int)

//--- Функция оцифровки тока внутреним ацп MUX4 ---
unsigned int ADCI_Conv(unsigned char ch_ADC) //(переменная "канал ацп")
{
    unsigned int adcv_value = 0; //сброс регистра хранения результата оцифровки напряжения
    unsigned char set_ADMUX = ADMUX; //переменная для выбора канала АЦП
    ADMUX |= ((0<<MUX3)|(1<<MUX2)|(0<<MUX1)|(0<<MUX0)); //выбор канала АЦП MUX4
    _delay_us(10); //пауза 10мкс
    for(unsigned char i=0;i<measure;i++) //цикл суммирования результатов оцифровки 64 замеров
    {
        ADCSRA |= (1<<ADSC); //запуск АЦП
        while((ADCSRA &(1<<ADSC))); //ожидание окончания преобразования
        adcv_value += ADCW; //adcv_value=adcv_value+ADCW прибавим к сумме значений предыдущих измерений значение очередного измерения
    }
    return(unsigned int)adcv_value >> 7; //выйдем из функции и вернём 1/2 среднего значения (из регистров результата ADCL и ADCH АЦП)
}                                        //оцифровки 64 замеров в переменную типа (unsigned int)

а вот цикл

Спойлер

while(1)
    {
        Display1_ADC = ADCV_Conv(5); //считаем значение канала MUX5
        ledprint_1(Display1_ADC); //отправим считанное значение в функцию вывода на индикатор вольтметра
        _delay_ms(200); //пауза 0,2с
        //Display2_ADC = ADCI_Conv(Read_3201()); //считаем значение регистра SPDR
        Display2_ADC = ADCI_Conv(4); //считаем значение канала MUX4
        ledprint_2(Display2_ADC); //отправим считанное значение в функцию вывода на индикатор амперметра
        _delay_ms(200); //пауза 0,2с
    }

 

слабоумие и отвага

внимание! все трюки выполнены профессионалом! не пытайтесь повторить это дома!

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Зачем параметром передавать номер канала АЦП, если разные каналы считываются разными функциями? И результат суммирования делится по разному, в одной функции сдвиг на 6 бит, в другой на 7. Хотя количество измерений вроде одинаковое.

Вы так сами пишите или при помощи копипаста из чьей-то программы такой "шедевр" получается?

С уважением, Владимир

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

15 минут назад, ДядяВован сказал:

Зачем

слабоумие, сэр!

16 минут назад, ДядяВован сказал:

"шедевр"

отвага, сэр!

17 минут назад, ДядяВован сказал:

вроде одинаковое

64 в обоих случаях. просто верхний предел разный: полсотни и сотня.

20 минут назад, ДядяВован сказал:

разными функциями?

эх, знали бы вы дядя Вован, как тяжко тупым быть! Я даже не могу понять где там параметр(( измените кодировку так как вы считаете нужным. я вам буду безмерно благодарен!

слабоумие и отвага

внимание! все трюки выполнены профессионалом! не пытайтесь повторить это дома!

Ссылка на комментарий
Поделиться на другие сайты

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

@ummagumma Нало сначала очистить MUX биты, а потом уже устанавливать номер канала.
 

ADMUX &= 0xF0
ADMUX |= ((0<<MUX3)|(1<<MUX2)|(0<<MUX1)|(0<<MUX0)); //выбор канала АЦП MUX4

 

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

@Yurkin2015 Спасибо пойду студию включать пробывать

слабоумие и отвага

внимание! все трюки выполнены профессионалом! не пытайтесь повторить это дома!

Ссылка на комментарий
Поделиться на другие сайты

35 минут назад, ummagumma сказал:

Я даже не могу понять где там параметр(( измените кодировку

Если каждая функция читает свой канал АЦП, то не нужно передавать параметр ch_ADC. Либо читать оба канала одной функцией "unsigned int ADC_Conv(unsigned char ch_ADC)", тогда передавать номер канала при помощи ch_ADC, результат суммирования сдвигать на 6 бит внутри функции, а для тока делить на 2 уже полученный результат:
Display2_ADC = ADC_Conv(4) >> 1 ;

С уважением, Владимир

Ссылка на комментарий
Поделиться на другие сайты

6 часов назад, Yurkin2015 сказал:

сначала очистить MUX

Согласен, скорее всего в этом проблема.

Если в проекте используются только эти два канала АЦП, то для повышения производительности и экономии кода можно менять только бит MUX0. При старте программы один раз записать в MUX канал 4, а затем устанавливать в "1" MUX0 для 5го канала и сбрасывать в "0" для 4го.

С уважением, Владимир

Ссылка на комментарий
Поделиться на другие сайты

Спасибо всем добрым людям откликнувшимся! Я попробую все варианты исправления моей быдлокодировки)) как будет время. а пока вставлю вот такой кодинг

Спойлер

pic_7.thumb.png.7823f6f2ec58a487b9d994a50ebc4a04.png

его предложил месир Eleprekra с паралельного форума, за что ему большущее спасибо!

в Протеусе всё супергудд

слабоумие и отвага

внимание! все трюки выполнены профессионалом! не пытайтесь повторить это дома!

Ссылка на комментарий
Поделиться на другие сайты

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

Спойлер

326984155_IMG_20230625_2218121.thumb.jpg.665ebda02400138f1c0dde1a1d896d03.jpg1829211797_IMG_20230623_0812531.thumb.jpg.0546cab972b56c613d1ec20252610eab.jpg

 

слабоумие и отвага

внимание! все трюки выполнены профессионалом! не пытайтесь повторить это дома!

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Вопрос был другой Все выяснилось Давайте закроем эту дискуссию
    • Для проб и экспериментов можно использовать толстый гофрокартон и скотч. На небольшой громкости звучание практически как в деревянном ящике, но гораздо проще менять-подгонять размеры. Получить результат по оптимальным размерам ящика в первом приближении можно гораздо быстрее и дешевле. Где-то видел - делали такой тестовый ящик с изменяемым объёмом - один в другой плотно вставлен и можно раздвигать.
    • @777Alex777   Если Вымпел-57 включен в сеть без АКБ и на индикаторе показания тока 0.1-0.2А и это может "напрягать", то их можно убрать(обнулить) слегка крутнув влево RP3(см. стр.1). Но, с другой стороны, после сообщения об окончании заряда на идикаторе тогда показания тока по нулям, а фактически идет поддерживающий заряд примерно 100мА, так что вопрос о корректировке дело индивидуальное. Если есть необходимость показания тока по индикатору уже внутри диапазона рабочих токов немного подогнать под свой внешний амперметр, то можно покрутить RP4. С вольтажом намного лучше.    
    • Стремаюсь пока лампочку перемкнуть Потестирую минут 15, потрогаю на нагрев элементы
    • Странный вопрос. Зачем вообще применяют шаблоны?   Так и делают, кому это нужно.
    • Проблема не в цене. У меня наушники с микрофоном, мне не удобно пользоваться отдельным микрофоном хотелось бы оставить родной. Он шумит из-за того что компу приходиться очень сильно усиливать звук. Через усилитель в линейный вход, шумов почти не было только еле слышимые, но звук как из бочки. Возможно, вина тому мои эксперименты
    • Как понять, что плата зарядки Li-ion аккумуляторов не убила аккумуляторы? Прежде, чем спрашивать, нужно убедиться, что банки стопудово дохлые. Для этого зарядить их по одной, минуя плату BMS, и протестировать на нагрузке. Только после этого выводы делать.
×
×
  • Создать...