Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
25.07.2011, 21:42
|
|
Вид на жительство
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
|
Re: Hi-Tech Picc не хочет считать
К - корректировочная константа для АЦП, С1 - выход с АЦП, С - на индикацию.
Но почему же с типом unsigned long int всё работает, а с типом unsigned int - не хочет.
С1 изменяется от 0 до 1024, K от 0 до 255.
Формула: C = C1*(1024+K-127)/1024) или C = C1+С1*(K-127)/1024).
Последний раз редактировалось Slava-martyn; 25.07.2011 в 21:46.
|
|
|
|
25.07.2011, 22:33
|
|
Прописка
Регистрация: 11.10.2008
Сообщений: 132
Сказал спасибо: 8
Сказали Спасибо 35 раз(а) в 30 сообщении(ях)
|
Re: Hi-Tech Picc не хочет считать
При умножении двух чисел с разрядностью 10 бит, результат может занимать до 20 разрядов, это нужно учитывать. Потому с int (16бит) и ведет не корректно.
Да , и у вас на протяжении темы белиберда со скобками... C1*(1024+K-127)/1024) и (C1*(1024+K-127))››10 не есть одно и тоже. Первое даст в результате либо C1*0 , либо C1*1. Второе эквивалентно (C1*(1024+K-127))/1024 , скорей всего, вы 'это' задумывали.
|
|
|
|
25.07.2011, 23:00
|
|
Прописка
Регистрация: 11.10.2008
Сообщений: 132
Сказал спасибо: 8
Сказали Спасибо 35 раз(а) в 30 сообщении(ях)
|
Re: Hi-Tech Picc не хочет считать
Чтобы не раздувать переменные, можете вот в таком духе записать: ((unsigned long int)C1*(1024+K-127))››10
|
|
|
|
26.07.2011, 09:53
|
|
Гражданин KAZUS.RU
Регистрация: 16.06.2005
Сообщений: 943
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
|
Re: Hi-Tech Picc не хочет считать
Сообщение от Slava-martyn
|
Где нить описание есть какие типы когда применять, как с ними математические операции происходят?
|
Сообщение от Slava-martyn
|
Но почему же с типом unsigned long int всё работает, а с типом unsigned int - не хочет.
|
В голове есть. Сам подумай, если С1 может быть 1024, выражение в скобках тоже 1024, следовательно при умножении для хранения промежуточного результата потребуется 3 байта. Типов такой размерности в С нет, следовательно unsigned long int.
|
|
|
|
26.07.2011, 09:54
|
|
Гражданин KAZUS.RU
Регистрация: 16.06.2005
Сообщений: 943
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
|
Re: Hi-Tech Picc не хочет считать
ЗЫ: И вообще, не понятно, зачем для коррекции значения АЦП умножать и делить.
|
|
|
|
26.07.2011, 19:53
|
|
Вид на жительство
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
|
Re: Hi-Tech Picc не хочет считать
Сообщение от Someone
|
не понятно, зачем для коррекции значения АЦП умножать и делить
|
Перед АЦП стоит делитель напряжения, у резисторов разброс +-5%, для опорного напряжения +-1% - вот и придётся корректировать.
Комбинация
PHP код:
|
unsigned int C,C1,C2=0;
C=((unsigned long int)C1*(1024+K-127))››10;
|
позволила сохранить в целости ещё несколько процентов памяти (и программ и данных).
|
|
|
|
27.07.2011, 08:44
|
|
Гражданин KAZUS.RU
Регистрация: 16.06.2005
Сообщений: 943
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
|
Re: Hi-Tech Picc не хочет считать
Сообщение от Slava-martyn
|
вот и придётся корректировать.
|
Это понятно. Делить и умножать зачем? Почему бы просто не вычесть или прибавить корректирующую константу? Разве у тебя разброс будет достигать 50%? Судя по ранее звучавшему "считать нажатия кнопок" корректирующую константу ты всё равно не знаешь, и будешь определять по ходу, кнопками. Тогда тебе лонги не потребуются.
|
|
|
|
27.07.2011, 12:24
|
|
Вид на жительство
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
|
Re: Hi-Tech Picc не хочет считать
Потому что там стоит делитель напряжения (перед входом АЦП), а не прибавлятель (вычитатель).
Допустим С1 = 557, K=147, то по моей формуле С=567.
То есть С-С1=10.
Допустим С1 = 1000, K=147, то С=1019.
То есть С-С1=19.
Как ведите константа одна и та же, а результат разный (19-10=9 т.е. 0,3 V!!!) для меня это существенно.
|
|
|
|
27.07.2011, 12:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Hi-Tech Picc не хочет считать
Чо мудриш?
На опорное к АЦП привяжи REF198 к примеру,а делитель сделай из резистора и много оборотного подстроечника.
__________________
Глаза боятся,а руки делают.
|
|
|
|
27.07.2011, 12:28
|
|
Прописка
Регистрация: 11.10.2008
Сообщений: 132
Сказал спасибо: 8
Сказали Спасибо 35 раз(а) в 30 сообщении(ях)
|
Re: Hi-Tech Picc не хочет считать
Сообщение от Someone
|
Это понятно. Делить и умножать зачем? Почему бы просто не вычесть или прибавить корректирующую константу?
|
x = y +(-) k - это, применительно к АЦП, будет коррекцией смещения (или подстройкой нуля другими словами).
x = y * (/) k - это коррекция масштаба, абсолютной погрешности. Естественно, они не взаимозаменяемы. Каждая для своей погрешности.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:57.
|
|