Например TDA7294

Форум РадиоКот • Просмотр темы - Ацп atmega8
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 11:13:20

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Ацп atmega8
СообщениеДобавлено: Сб май 06, 2017 06:37:02 
Родился

Зарегистрирован: Чт янв 28, 2016 04:55:27
Сообщений: 5
Рейтинг сообщения: 0
Здравствуйте, подскажите, пожалуйста, как выводить данные из ADCH на wh0802? И нужно ли использовать таймер при работе ацп? Или можно задать непрерывное преобразование, и если непрерывное, то как считывать данные?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ацп atmega8
СообщениеДобавлено: Сб май 06, 2017 07:25:50 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 390
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7010
Откуда: Ижевск
Рейтинг сообщения: 0
Считать регистр ADCH и согласно протоколу общения с ЖКИ вывести оные.
Таймер не обязательно.
Можно. Там взводится флаг об окончании очередного преобразования.

_________________
Docendo discimus


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: Ацп atmega8
СообщениеДобавлено: Сб май 06, 2017 11:29:47 
Друг Кота
Аватар пользователя

Карма: 111
Рейтинг сообщений: 4059
Зарегистрирован: Пт мар 30, 2012 05:17:29
Сообщений: 13462
Откуда: Екатеринбург
Рейтинг сообщения: 0
Таки желательно таймер использовать, и по нему забирать данные из АЦП, причём довольно редко (или редко отправлять их в индикатор), иначе цифры мельтешить будут, слишком часто меняясь. Но это уже вопрос эргономики, а не устройства софта.

_________________
ВНИМАНИЕ! Я часто редактирую свои сообщения, поэтому перед ответом мне советую обновить страницу.
За перенос модераторами в МЯВУ тем с моими сообщениями я ответственности не несу.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Ацп atmega8
СообщениеДобавлено: Сб май 06, 2017 13:26:31 
Друг Кота

Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 6865
Откуда: .ru
Рейтинг сообщения: 0
anslepnev писал(а):
нужно ли использовать таймер при работе ацп?

Нет. Все используют флаг окончания преобразования АЦП:
while ((ADCSRA & 0x10)==0); //...1 .... ADIF - 1- флаг завершения преобразования (1-сброс при каждом Старте. 2-для прерывания очищается аппаратно)
anslepnev писал(а):
Или можно задать непрерывное преобразование

можно... регистр ADCSRA , где:
//1... .... ADEN - 1- вкл ADC.
//.1.. .... ADSC - 1- Старт ADC. При завершении преобразования сбрасывается аппаратно.
//..1. .... ADFR - 1- режим Непрерывного Преобразования.
//...1 .... ADIF - 1- флаг завершения преобразования
-сброс при каждом Старте.
-для прерывания очищается аппаратно
//.... 1... ADIE - 1- Разрешение прерывания
//.... .1.. ADPS2 - предделетель 0 -
//.... ..1. ADPS1 - предделетель 0 - =1/2 тактовой частоты.
//.... ...1 ADPS0 - предделетель 0 -

но зачем непрерывное преобразование?
anslepnev писал(а):
как считывать данные?

читаем ADCH после окончания преобразования (когда установится флаг окончания преобразования). //...1 .... ADIF - 1- флаг завершения преобразования


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Ацп atmega8
СообщениеДобавлено: Сб май 06, 2017 15:19:44 
Родился

Зарегистрирован: Чт янв 28, 2016 04:55:27
Сообщений: 5
Рейтинг сообщения: 0
спасибо за ответы. Насколько я понял из даташита, преобразованное значение хранится в ADCH:ADCL и битом ADLAR выставляем выравнивание, если мы берем, например, переменную v (напряжение) и записываем, что v=ADCH, предварительно выставив бит ADLAR, то ничего не работает...подскажите, пожалуйста, как правильно выводить (считывать) преобразованное значение?


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Ацп atmega8
СообщениеДобавлено: Сб май 06, 2017 17:26:23 
Друг Кота

Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 6865
Откуда: .ru
Рейтинг сообщения: 0
anslepnev писал(а):
подскажите, пожалуйста, как правильно выводить (считывать) преобразованное значение?

В АЦП mega8 два регистра настройки: ADMUX и ADCSRA.
Значение АЦП хранится в ADCH (00000011):ADCL(11111111) или ADCW(00000011 11111111).

Подробней:
----------
Регистр ADMUX (00000000), где:
//1... .... REFS1 - опорное напряжение
//.1.. .... REFS0 - опорное напряжение
//..1. .... ADLAR - Выравнивание результата
//...1 .... -
//.... 1... MUX3 - номер канала
//.... .1.. MUX2 - номер канала
//.... ..1. MUX1 - номер канала
//.... ...1 MUX0 - номер канала
---------- подробней:
//REFS1=0 REFS0=0 - ИОН=AREF
//REFS1=0 REFS0=1 - ИОН=AVCC
//REFS1=1 REFS0=0 - не используется (зарезервировано)
//REFS1=1 REFS0=1 - ИОН=2.56V (встроенный ИОН 2.56V)

//ADLAR=1
// Выравнивание результата в левую сторону < (8-бит):
// ADCH // 1111 1111 - читать первым ????????????????????????????????????????
// ADCL // 0000 0000 - читать первым ????????????????????????????????????? ... Надо уточнить по даташиту... не помню))
//ADLAR=0
// Выравнивание результата в правую сторону > (10-бит):
// ADCH // 0000 0011 - читать вторым
// ADCL // 1111 1111 - читать первым !!!
----------
// MUX3...MUX0 - номер канала:
// 0000 - ADC0
// 0001 - ADC1
// .................
// 0111 - ADC7
----------
Регистр ADCSRA (00000000), где:
//1... .... ADEN - 1- вкл ADC.
//.1.. .... ADSC - 1- Старт. При завершении преобразования сбрасывается аппаратно.
//..1. .... ADFR - 1- режим Непрерывного Преобразования.
//...1 .... ADIF - 1- флаг завершения преобразования
-сброс программно.
-для прерывания очищается аппаратно
//.... 1... ADIE - 1- Разрешение прерывания
//.... .1.. ADPS2 - предделетель 0 -
//.... ..1. ADPS1 - предделетель 0 - =1/2 тактовой частоты.
//.... ...1 ADPS0 - предделетель 0 -
---------- подробней:
предделитель ADC:
ADPS2 -ADPS1 -ADPS0
// 000: 1 МГц/2=500.000 Hz
// 001: 1 МГц/2=500.000 Hz
// 010: 1 МГц/4=200.000 Hz
// 011: 1 МГц/8=125.000 Hz
// 100: 1 МГц/16=62.500 Hz
// 101: 1 МГц/32=31.250 Hz
// 110: 1 МГц/64=15.625 Hz
// 111: 1 МГц/128=7.812,5 Hz
----------
Чтобы не забивать себе мозги с ADCH:ADCL, делаем по другому:

Берем, например, переменную v (Int (00000000 00000000)) (напряжение) и записываем v=ADCW; (00000011 11111111).
----------
Рабочий пример (вариант 1):

int v;
ADMUX=0b01000101; // канал 5
delay_us(10); // стабилизация входа...
ADCSRA|=0b01000000; // Старт преобразования.
while ((ADCSRA & 0x10)==0); // ждём ADIF - флаг завершении преобразования
ADCSRA|=0x10; // сброс ADIF - флаг завершении преобразования
v=ADCW; // (напряжение) (00000011 11111111).

----------
Рабочий пример (вариант 2):

int v;
ADMUX=0b01000101; // канал 5
delay_us(10); // стабилизация входа...
ADCSRA|=0b01000000; // Старт преобразования.
while (ADCSRA & 0b01000000); // ADSC - При завершении преобразования этот бит сбрасывается аппаратно.
v=ADCW; // (напряжение) (00000011 11111111).
----------

P.S. Даже если мне достаточно точности измерения АЦП 8-бит, я настраиваю АЦП в режим 10-бит (ADLAR=0, Выравнивание результата в правую сторону). Зачем? Чтобы убрать шум на входе АЦП и шум самого АЦП.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ацп atmega8
СообщениеДобавлено: Вс май 07, 2017 08:27:57 
Родился

Зарегистрирован: Чт янв 28, 2016 04:55:27
Сообщений: 5
Рейтинг сообщения: 0
float v;
InitLcd();
ADMUX=0b01000101; // канал 5
_delay_us(10); // стабилизация входа...
ADCSRA|=0b01000000; // Старт преобразования.
while ((ADCSRA & 0x10)==0); // ждём ADIF - флаг завершении преобразования
ADCSRA|=0x10; // сброс ADIF - флаг завершении преобразования
v=ADCW*0.00489; // (напряжение) (00000011 11111111).
char buffer [10];

//InitADC();
sprintf(buffer, "U=%.1f", v);
LcdWriteCom(0b00000001);
_delay_ms(10);
Send_Str(buffer,10); // Отправляем строку
_delay_ms(100); //Пауза
ADCSRA |=(1<<ADSC); //Запускаем следующее преобразование

while(1);
{
}


Подскажите, пожалуйста, где ошибка в программе, просто текст у меня выводится на wh0802, а вот с выводомданных из ацп проблемы..вместо данных мигающий курсор...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ацп atmega8
СообщениеДобавлено: Вс май 07, 2017 22:19:52 
Друг Кота

Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 6865
Откуда: .ru
Рейтинг сообщения: 0
А что если закинуть всё в протеус и глянуть что происходит... подродно.. пошагово)) Или спаять на макетке и всё внимательно посмотреть? ))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ацп atmega8
СообщениеДобавлено: Пн май 08, 2017 06:21:59 
Родился

Зарегистрирован: Чт янв 28, 2016 04:55:27
Сообщений: 5
Рейтинг сообщения: 0
roman.com писал(а):
А что если закинуть всё в протеус и глянуть что происходит... подродно.. пошагово)) Или спаять на макетке и всё внимательно посмотреть? ))


у меня на макетке собрано, на дисплее просто мигающий курсор, а не значения АЦП...


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: Ацп atmega8
СообщениеДобавлено: Пн май 08, 2017 12:44:41 
Друг Кота
Аватар пользователя

Карма: 111
Рейтинг сообщений: 4059
Зарегистрирован: Пт мар 30, 2012 05:17:29
Сообщений: 13462
Откуда: Екатеринбург
Рейтинг сообщения: 0
Выведите туда для начала любое число вместо отсчёта АЦП, хотя бы 123, и посмотрите, вывелось ли оно. Очень вероятно, что не работает вывод в 44780 и АЦП тут вовсе не при делах.

_________________
ВНИМАНИЕ! Я часто редактирую свои сообщения, поэтому перед ответом мне советую обновить страницу.
За перенос модераторами в МЯВУ тем с моими сообщениями я ответственности не несу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ацп atmega8
СообщениеДобавлено: Вт май 09, 2017 06:09:36 
Родился

Зарегистрирован: Чт янв 28, 2016 04:55:27
Сообщений: 5
Рейтинг сообщения: 0
Число выводится на дисплей, текст выводится, в общем статическая индикация работает, где то ошибка в программе, а вот где- никак не пойму


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: Ацп atmega8
СообщениеДобавлено: Вт май 09, 2017 16:16:05 
Друг Кота
Аватар пользователя

Карма: 111
Рейтинг сообщений: 4059
Зарегистрирован: Пт мар 30, 2012 05:17:29
Сообщений: 13462
Откуда: Екатеринбург
Рейтинг сообщения: 0
Наблюдаю взаимоисключающие параграфы.
С одной стороны:
на дисплее просто мигающий курсор, а не значения АЦП...
С другой стороны:
Число выводится на дисплей, текст выводится, в общем статическая индикация работает
Так есть индикация или нет её?

_________________
ВНИМАНИЕ! Я часто редактирую свои сообщения, поэтому перед ответом мне советую обновить страницу.
За перенос модераторами в МЯВУ тем с моими сообщениями я ответственности не несу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ацп atmega8
СообщениеДобавлено: Ср май 17, 2017 19:17:52 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
а почему преобразование написано до цикла, а не внутри? так оно всего 1 раз выполнится.
для поиска неисправности постепенно продвигайся от экрана к ацп (сначала в v какое нибудь число впиши, потом int переменную вместо ADCW подставь...)

Добавлено after 12 minutes 9 seconds:
я полагаю, это ардуино, а в ней функция sprintf не поддерживает формат чисел с плавающей запятой.

Добавлено after 6 minutes:
Самый простой способ преобразования float в текстовую строку – использование функции dtostrf.

char* dtostrf(double data, signed char width, unsigned char prec, char *string)

data – это конвертируемая переменная;
width – число значащих разрядов;
prec – число разрядов после запятой;
char* string – указатель на строку (имя массива).

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: mickbell и гости: 21


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y