BASCOM AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

Сообщение Секретный кот »

Тихан писал(а):Если число двойчное(а оно поидеи такое) то 1023 не как не подходит.

Да ну? Так же, как и 255? :)))

pavel123 писал(а):Ну ладно, поймали, каюсь - соврал. :))

На самом деле я вовсе не ставил себе цели вас "ловить"! :shock: Меня правда занимает этот вопрос: при 10 разрядах АЦП цена его деления должна бы получиться Uref/1023, однако почему-то всегда упоминается деление на 1024. Аналогично с 8 разрядами, под которые даже подогнан внутренний источник 2,56 (а не 2,55) В.
Может, я всё-таки чего-то не понимаю?
Аватара пользователя
pavel123
Грызет канифоль
Сообщения: 268
Зарегистрирован: Чт май 17, 2007 09:44:13
Откуда: Украина, г. Кривой Рог

Сообщение pavel123 »

Ради торжества истины можно найти любые обьяснения. :)) Но я их не знаю.
Как по мне - шо 1023, шо 255, погрешность не велика.
И отлавливать эти дробные части, конечно можно, если это комуто нужно :)) :)) :))
Спросили про АЦП, вспомнил, что видел статейку, вот предложил для обсуждения. :)))
pomidor
Открыл глаза
Сообщения: 70
Зарегистрирован: Сб дек 27, 2008 15:40:06

Сообщение pomidor »

от 0 до 255 будет 256 значений (от 0 до 1023 будет 1024 или от 0 до 9 будет 10 значений)
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Сообщение Igor_67 »

Уважаемые кошаки, очень нужен пример программы для термостата DS1621 + МК (любой AVR) на BASCOMе. Или подскажите, где взять библиотеку для DS1621. Была мысля конвертировать в CodeVisionAVR, хидер для DS1621 в .lib :))) Эта либа потом сработает в BASCOMe? :? И где вообще брать новые библиотеки для васика?
pomidor
Открыл глаза
Сообщения: 70
Зарегистрирован: Сб дек 27, 2008 15:40:06

Сообщение pomidor »

у меня первая ссылка гугля на 'DS1621 bascom' ..
http://avr.15.forumer.com/a/tempurature ... st492.html
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

Сообщение Секретный кот »

pomidor писал(а):от 0 до 255 будет 256 значений

Совершенно верно, вот только получается, что 0 соответствует нулю, а 255 тогда должно соответствовать максимуму. «Делений» между этими 256 значениями опять же получается 255. Итого цена такого деления д.б. = Uref/255.

Нет, а всё-таки? Неужели никто точно не знает этот момент? Погрешность может конечно и небольшая, но всё равно лучше бы от неё избавиться.
Аватара пользователя
Shuriks
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт дек 30, 2008 20:51:09
Откуда: Россия, г. Брянск
Контактная информация:

Сообщение Shuriks »

Особых проблем с пересчетом действительных значений АЦП нету , все дело в правильном расчете делителя. Смотрим архив : там пример делителя в диапазоне 0-99 В , при снятии с АЦП так и получаем - от 0.01 до 9.99 В = 001 ... 999 , выше 10 В = 100 ... 999 (да именно так , но уже с подключенным дополнительным делителем см. полевой транзистор в схеме) . Остается только правильно контролировать десятичную точку , но все в наших руках (лапах) :) так как делитель мы сами и подключали - установкой единицы на соответствующей ножке .. Смотрим программу вольтметра в этом же архиве (под этот делитель).
P.S. Схема делителя взята из журнала "Радио 6'2008" - статья "Вольтметр для лабораторных источников питания" . Там и описание коэффициентов делителя.
P.S.S. to Деня . Спасибо за исходник. Которым ты в принципе подтвердил, как и свои , так и мои предположения. И еще .. По вопросам RS-485 обращатся можно ? :oops:
Вложения
Volt.rar
Вольтметр с "правильным" делителем
(39.58 КБ) 692 скачивания
Аватара пользователя
Shuriks
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт дек 30, 2008 20:51:09
Откуда: Россия, г. Брянск
Контактная информация:

Сообщение Shuriks »

Еще решил дописать размышления по поводу ошибок преобразования АЦП и разного рода "ошибок деления" и т.д. и т.п. Я тоже поначалу думал о "неизбежных" ошибках преобразования, точности АЦП и прочих "математических" нюансах, пока не перечитав кучу инфы в интернете и в бумажных (!) книгах не пришел к выводу : ошибки преобразования и все что с ними связано должны Вас волновать , если Вы "затачиваете" МК именно под работу АЦП , а то есть применяете :

1. Раздельное питание аналоговой и цифровой части
2. Прецезионный источник опорного напряжения (например MAX873)
3. Специальные режимы МК , специально созданные для измерений с помощью АЦП (например ADC Noise)
4. Рекомендации Atmel по проектирования и изготовлению печатных плат.

Если в Вашем проекте этого не присутствует , то мысли вокруг ошибок "цифровой" части МК Вас волновать не должны , т.к. ошибки "аналоговой" части уже заведомо будут больше. Все просто .. :) На "бытовом" уровне, все решается настройкой делителя по эталонному вольтметру ...
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Секретный кот писал(а):Совершенно верно, вот только получается, что 0 соответствует нулю, а 255 тогда должно соответствовать максимуму. «Делений» между этими 256 значениями опять же получается 255. Итого цена такого деления д.б. = Uref/255.

Вы ошибаетесь, цена деления в данном случае Uref/256.
Пример с линейкой - на сантиметровом отрезке 10 делений цена деления соответственно 1 мм.
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

Сообщение Секретный кот »

smac писал(а):Пример с линейкой - на сантиметровом отрезке 10 делений цена деления соответственно 1 мм.

Посмотрите на линейку внимательнее :))
На сантиметровом отрезке 10 делений и соответственно 11 возможных отсчётов (рисок), от 0 до 10. То есть длину в 1 см мы получаем, когда достигаем 11-й (а не 10-й) риски.
Продолжая эту аналогию, у АЦП 255 (1023) «делений» и 256 (1024) возможных значений. Число делений всегда на единицу меньше числа дискретных отсчётов, это же основы метрологии. Так что не убедили.
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Секретный кот писал(а):
smac писал(а):Пример с линейкой - на сантиметровом отрезке 10 делений цена деления соответственно 1 мм.

Посмотрите на линейку внимательнее :))
На сантиметровом отрезке 10 делений и соответственно 11 возможных отсчётов (рисок), от 0 до 10. То есть длину в 1 см мы получаем, когда достигаем 11-й (а не 10-й) риски.
Продолжая эту аналогию, у АЦП 255 (1023) «делений» и 256 (1024) возможных значений. Число делений всегда на единицу меньше числа дискретных отсчётов, это же основы метрологии. Так что не убедили.

Что вы мне голову морочите? Какова по Вашему цена деления обсуждаемой нами линейки?
Я справедливо полагаю, что деление - это расстояние между рисками а не сама риска, соответсвенно цена деления 1 мм. У восьмибитного АЦП 256 делений, соответственно цена деления Vref/256. Чтобы найти напряжение на входе мы берем полученное значение (кол-во делений) и умножаем на цену, в результате получаем:
Vin=ADC*(Vref/256), где ADC - значение считанное с преобразователя.
Аватара пользователя
Shuriks
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт дек 30, 2008 20:51:09
Откуда: Россия, г. Брянск
Контактная информация:

Сообщение Shuriks »

Vin=ADC*(Vref/256), где ADC - значение считанное с преобразователя.

Так и есть . Следовательно Smac прав. Берется не максимальное число возможное в данной "разрядности" , а количество шагов . Смотрим в даташите для 10 битного ацп (например: ATtiny26) :

ADC = Vin*1024 / Vref

Как видите в расчетах участвует количество (!) шагов. Читаем даташиты , и таких вопросов не возникает :)
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Shuriks писал(а):Читаем даташиты , и таких вопросов не возникает :)

+1000, собственно в даташитах даже все формулы приведены и разжевано подробно. Причем если весь даташит читать лень, то хотя бы раздел про АЦП прочитать можно.
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

Сообщение Секретный кот »

smac писал(а):Что вы мне голову морочите? Какова по Вашему цена деления обсуждаемой нами линейки?

Только давайте полегче плиз, ок? Хамство это не лучший аргумент.

На промежутке от 0 до 1 см на линейке 11 рисок и 10 делений, соответственно цена одного деления 1 см/10 делений = 1 мм.

smac писал(а):Я справедливо полагаю, что деление - это расстояние между рисками а не сама риска, соответсвенно цена деления 1 мм. У восьмибитного АЦП 256 делений, соответственно цена деления Vref/256.

У восьмибитного АЦП 256 именно рисок (0 - это не деление!), а делений (по вашему собственному определению!) получается 255. Так как максимальное значение, считываемое из АЦП, не может быть равно 256.

smac писал(а):Причем если весь даташит читать лень, то хотя бы раздел про АЦП прочитать можно.

Shuriks писал(а):Смотрим в даташите для 10 битного ацп (например: ATtiny26) :
ADC = Vin*1024 / Vref
Как видите в расчетах участвует количество (!) шагов. Читаем даташиты , и таких вопросов не возникает :)

На самом деле грустно, что у вас таких вопросов не возникает. Просто подставьте в эту формулу Vin = Vref. Какое значение мы при этом считаем с АЦП? :))
Даташиты мне читать отнюдь не лень, и эта примитивная формула у меня тоже не вызывала вопросов, пока я не утрудился над ней хоть чуть-чуть задуматься. Если максимальное значение, считываемое с АЦП, равно 255 (1023), то значит в формуле из даташита заведомо заложена погрешность. Так как согласно этой формуле максимальное значение равно 256 (1024), чего мы никогда не получим при 8 (10) битах.
Можно допустить и второй вариант, при котором просто измеряемое АЦП напряжение никогда не достигнет Vref. Тогда цена деления может быть любой: и 1/256, и 1/1024, и хоть 1/2789 :)) . Хотя внятного указания на этот момент я в даташите тоже не нашёл, везде упоминается измерение в полном диапазоне 0-Vref.
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Секретный кот писал(а):Только давайте полегче плиз, ок? Хамство это не лучший аргумент.

Ок, принимается, был несдержан, извиняюсь.

Секретный кот писал(а):У восьмибитного АЦП 256 именно рисок (0 - это не деление!), а делений (по вашему собственному определению!) получается 255. Так как максимальное значение, считываемое из АЦП, не может быть равно 256.

Правда Ваша, по поводу максимального значения. Наверное мой пример с рисками был не очень удачен, во всяком случае я считаю, что на отрезке от 0 до 1 см, не обязательно может быть 11 рисок, их может быть и 10 и 9 (если вся линейка - это отрезок 1 см), но спорить по этому поводу я дальше не хочу, поэтому счтитайте что здесь Вы выиграли.

Секретный кот писал(а):Можно допустить и второй вариант, при котором просто измеряемое АЦП напряжение никогда не достигнет Vref. Тогда цена деления может быть любой: и 1/256, и 1/1024, и хоть 1/2789 :)) . Хотя внятного указания на этот момент я в даташите тоже не нашёл, везде упоминается измерение в полном диапазоне 0-Vref.

А вот тут неправда Ваша, лучше все-таки читать не только заголовки у разделов. Вот оригинальный текст из ДШ на мегу8.
The minimum value represents GND and the maximum value represents the voltage onthe AREF pin minus 1 LSB.
(2486T–AVR–05/08 стр. 197)
Что приблизительно переводится как "Минимальная отбражаемая величина - земля (или 0 В), а максимальная - напряжение на пине AREF минус 1 младший разряд", т.е при подаче напряжения на входной пин больше чем 1023*Vref/1024, считываться из АЦП все равно будет значение 1023.
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

Сообщение Секретный кот »

smac писал(а):Ок, принимается, был несдержан, извиняюсь.

Я тоже прошу прощения, если что.

smac писал(а):я считаю, что на отрезке от 0 до 1 см, не обязательно может быть 11 рисок, их может быть и 10 и 9 (если вся линейка - это отрезок 1 см)

В теории на этом отрезке может быть и 2, и 3, и 5 рисок. Но достаточно взглянуть на фотографию любой линейки, чтобы понять, что с ценой деления в 1 мм их ровно 11. Метрология всё-таки упрямая штука, хотя ок, эту тему мы закрываем :))

smac писал(а):счтитайте что здесь Вы выиграли.

Ещё раз повторюсь, что не ставил себе такой цели, а только хотел уяснить истину.

smac писал(а):the maximum value represents the voltage onthe AREF pin minus 1 LSB. (2486T–AVR–05/08 стр. 197)

Вот! Собственно то, что я и хотел услышать. То есть максимально возможное показание АЦП = (1023/1024)*Vref. Действительно, сей стэйтмент присутствует в даташите (несмотря на заявленное там же парой абзацев выше
• 0 - VCC ADC Input Voltage Range
:)) ), следовательно проглядел, был неправ. Спасибо.
Аватара пользователя
Тихан
Потрогал лапой паяльник
Сообщения: 346
Зарегистрирован: Пн апр 14, 2008 19:57:20
Контактная информация:

Сообщение Тихан »

Крыша едет...:)Совсем вы меня щапутали!Ктонить может дать нормальную формулу(с мнимальными погрешностями) и объяснить всякую ерунду вроде Vref, aref, vin.
Хараша спорить!А то у меня совсем крыша поедет... :(
Съел сам, помоги соседу. Соседу мясо вредно:)
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Тихан писал(а):Крыша едет...:)Совсем вы меня щапутали!Ктонить может дать нормальную формулу(с мнимальными погрешностями) и объяснить всякую ерунду вроде Vref, aref, vin.
Хараша спорить!А то у меня совсем крыша поедет... :(

Еще раз. Vin=ADC*Vref/(2^n), где Vin - измеряемое напряжение, ADC - значение считанное из АЦП (пара регистров ADCH:ADCL, выравнивание результата по правому краю т. е. бит ADLAR = 0), Vref - опорное напряжение (зависит от настроек АЦП, может быть как внутренним так и внешним), n-разрядность АЦП - в вашем случае n=10. (2^n - читать как 2 в степени n).
Аватара пользователя
max50
Мучитель микросхем
Сообщения: 497
Зарегистрирован: Ср дек 10, 2008 21:24:28
Откуда: Алтайский край, Барнаул

Сообщение max50 »

Здравствуйте форумчане!
Нужно собрать некий таймер.
При подаче питания он начинает считать секунды, как только пропало питание,
время сохранилось в eeprom. После подачи питания заново секунды считаются
и на индикаторе отображается значение из eeprm. Итак по гругу.
Очень нужно! Помогите кто чем сможет!
Заранее спасибо!
Аватара пользователя
Тихан
Потрогал лапой паяльник
Сообщения: 346
Зарегистрирован: Пн апр 14, 2008 19:57:20
Контактная информация:

Сообщение Тихан »

Мне понятно как считать, мне не понятно как переводить получившиеся числа в секунды и милисекунды...
Съел сам, помоги соседу. Соседу мясо вредно:)
Ответить

Вернуться в «AVR»