реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> 74HC4094 в качестве расширителя порта, Кто-нибудь пробовал?
AVL
сообщение Jun 9 2007, 13:33
Сообщение #31


Местный
***

Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020



Цитата(alux @ Jun 9 2007, 17:16) *
Цитата из учебника по С: "Если глобальная переменная не проинициализирована явным образом, она инициализируется значением 0". Мне не трудно проинициализировать. Я только хочу разобраться.

Это не всегда правда. Если ОЗУ до выполнения Вашей программы не было инициализировано и конкретно используемый Вами C-компилятор не добавляет в машинный код код инициализации глобальных переменных, для которых не заданы в исходном тексте начальные значения, эти переменные будут содержать мусор. Вы можете провести эксперимент. Включите питание и с помощью средств отладки сразу после старта main() посмотрите содержимое памяти в области расположения глобальных переменных.

P.S. Например, C-компилятор, которым пользуюсь я, не инициализирует переменные, которые не проинициализированы явным образом. Отсюда вывод, чтобы там ни было написано в книге, лучше делать инициализацию, из соображений совместимости.

Сообщение отредактировал AVL - Jun 9 2007, 13:39
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 9 2007, 13:43
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(AVL @ Jun 9 2007, 19:33) *
P.S. Например, C-компилятор, которым пользуюсь я, не инициализирует переменные, которые не проинициализированы явным образом. Отсюда вывод, чтобы там ни было написано в книге, лучше делать инициализацию, из соображений совместимости.

Насчет инициализации глобальных alux прав. А ваш компилятор в таком случае (если вы именно про глобальные переменные пишете) не соответствует стандарту ASNI C (ISO/IEC 9899:1999), как вы вообще им пользуетесь-то? 07.gif
Цитата(AVL)
конкретно используемый Вами C-компилятор не добавляет в машинный код код инициализации глобальных переменных, для которых не заданы в исходном тексте начальные значения, эти переменные будут содержать мусор.

Вот этот блок инициализации, включаемый компилятором в старт-ап, и "чистит" глобальные переменные, если явно не заданы значения для их инициализации.
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 9 2007, 14:22
Сообщение #33


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(AVL @ Jun 9 2007, 16:12) *
Предделитель какого обработчика был No_prescaling?
И вопрос. Вы сделали, что я рекомендовал (см.ниже)?

Предделитель таймера. Значит так. Проблема действительно была связана с предделителем. В исходном коде, No_Prescaling:
display(hundred/ten/one);
digit(++znak);
было наложение разрядов. Решение проблемы:
1)Предделитель =1024,
2)либо Ваш вариант
display(15) /// не обязательно
digit(++znak);
display(hundred/ten/one);
Предложенный Вами вариант работает и с No_Prescaling.
Спасибо огромное. Вывод - ночью надо спать smile.gif


...еще бы получить ответ про опорное напряжение и необходимость выключения индикаторов в прерывании АЦП.
Go to the top of the page
 
+Quote Post
AVL
сообщение Jun 9 2007, 14:44
Сообщение #34


Местный
***

Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020



Цитата(rezident @ Jun 9 2007, 17:43) *
Насчет инициализации глобальных alux прав. А ваш компилятор в таком случае (если вы именно про глобальные переменные пишете) не соответствует стандарту ASNI C (ISO/IEC 9899:1999), как вы вообще им пользуетесь-то? 07.gif

Согласен, если компилятор отвечает требованиям стандарта ASNI C (ISO/IEC 9899:1999), то глобальные переменные будут проинициализированы. Но не все компиляторы полностью отвечают требованиям этого стандарта.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 9 2007, 15:11
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(alux)
2)опорное напряжение (+2.5В) на TL431 по качеству отличается от внутреннего, который в микроконтроллере, например в Меге8 ? Я использовал внешний, потому-что у Меги48 внутренний +1.1В.

На TL431A можно сделать опорное напряжение со точностью (начальный разброс 2,47В...2,52В) и стабильностью (не более 50ppm/C) не хуже 2%. Внутренняя опора ATMega8 имеет только разброс начального значения напряжения больше 5% (2,3В...2,7В), а временнАя температурная нестабильность вообще не указана. Выводы сделаете сами? wink.gif
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 9 2007, 15:58
Сообщение #36


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(rezident @ Jun 9 2007, 18:11) *
Выводы сделаете сами? wink.gif

Да, спасибо. А на счет необходимости выключения индикации в прерывании АЦП? Для более точного результата?
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 9 2007, 16:25
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(alux @ Jun 9 2007, 21:58) *
А на счет необходимости выключения индикации в прерывании АЦП? Для более точного результата?

Статическую индикацию выключать не требуется. А вот "ногодрыжечество" во время оцифровки крайне нежелательно. Т.е. во время работы АЦП нежелательно, чтобы изменялись состояния каких-либо пинов МК, т.к. импульсные токи, возникающие при этом, могут давать помехи и приводить к искажению результатов оцифровки. Следовательно динамическую индикацию нужно как-то синхронизировать с выборками АЦП.
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 9 2007, 18:26
Сообщение #38


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(rezident @ Jun 9 2007, 19:25) *
А вот "ногодрыжечество" во время оцифровки крайне нежелательно. Т.е. во время работы АЦП нежелательно, чтобы изменялись состояния каких-либо пинов МК, т.к. импульсные токи, возникающие при этом, могут давать помехи и приводить к искажению результатов оцифровки. Следовательно динамическую индикацию нужно как-то синхронизировать с выборками АЦП.

Во время преобразования АЦП никаких изменений состояний пина не предвидится. Просто в разные моменты времени будут зажжены разные сегменты, что приведет к разным просадкам напряжения питания с вытекающими из этого изменения опорного напряжения. Ворос в следующем: насколько это будет критично?
Go to the top of the page
 
+Quote Post
AVL
сообщение Jun 9 2007, 19:04
Сообщение #39


Местный
***

Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020



Цитата(alux @ Jun 9 2007, 17:02) *
И еще один момент. В программе используется прерывание АЦП. В нем я обычно гашу индикацию, чтобы не "плавал" источник питания, к которому привязано опорное напряжение. Хотя в качестве опорного используется TL431 и схема измерения ratiometric.
#pragma vector=ADC_vect
__interrupt void ADC_ISR(void)
{
digit(0); //выключить индикатор

accum = ADC;

digit(znak); //восстановить индикатор
} // End of ADC_ISR

Такое отключение (в обработчике __interrupt void ADC_ISR(void) ) Вам ничего не даст. Когда управление передается обработчику прерывания __interrupt void ADC_ISR(void), АЦП уже все посчитал. То есть из обработчика отключение индикации можно убрать.
Если требуется высокая точность измерения, то, конечно, динамическая индикация во время измерения будет давать помехи. Но не только индикация, переключение реле тоже. Если идти дальше, то помехи дают даже переключения внутри микроконтроллера. Для того, чтобы устранить главный источник помех (последствия управления пинами), на время работы АЦП не изменяйте состояния выходных пинов. Время преобразования АЦП составляет от 13 до 260 мкс (в зависимости от того, какой режим Вы выбрали).
А еще лучше, переходите в SLEEP режим до начала преобразования АЦП, а просыпайтесь по прерыванию от АЦП.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 9 2007, 19:10
Сообщение #40


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(alux @ Jun 10 2007, 00:26) *
Просто в разные моменты времени будут зажжены разные сегменты, что приведет к разным просадкам напряжения питания с вытекающими из этого изменения опорного напряжения.

Какие просадки напряжения? Где оно "просаживается"? Причем тут опора? "Нич-ч-чего не понимаю" (с) м/ф "Следствие ведут колобки" smile.gif
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 9 2007, 19:17
Сообщение #41


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(AVL @ Jun 9 2007, 22:04) *
Для того, чтобы устранить главный источник помех (последствия управления пинами), на время работы АЦП не изменяйте состояния выходных пинов. Время преобразования АЦП составляет от 13 до 260 мкс (в зависимости от того, какой режим Вы выбрали).
А еще лучше, переходите в SLEEP режим до начала преобразования АЦП, а просыпайтесь по прерыванию от АЦП.

Одно уточнение. Не щелкать выводами во время выборки входного сигнала или во время всего преобразования?
Go to the top of the page
 
+Quote Post
AVL
сообщение Jun 9 2007, 19:29
Сообщение #42


Местный
***

Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020



Цитата(alux @ Jun 9 2007, 23:17) *
Одно уточнение. Не щелкать выводами во время выборки входного сигнала или во время всего преобразования?

всего преобразования
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 9 2007, 19:48
Сообщение #43


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(rezident @ Jun 9 2007, 22:10) *
Какие просадки напряжения? Где оно "просаживается"? Причем тут опора? "Нич-ч-чего не понимаю" (с) м/ф "Следствие ведут колобки" smile.gif

Ну что здесь не понятного? Преобразования АЦП, на мой взгляд, лучше проводить в одинаковых условиях. Возьмем крайние случаи: одно преобразование произошло, когда все сегменты зажжены. Ток потребления составляет 120мА. Второе преобразование произошло , когда все сегменты потушены. Ток 30мА. Неужели напряжение питание в обеих случаях останется постоянным? Уверен, что нет. А раз нет, значит значения АЦП будут отличаться при одинаковом входном воздействии.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 9 2007, 21:18
Сообщение #44


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(alux @ Jun 10 2007, 01:48) *
Неужели напряжение питание в обеих случаях останется постоянным? Уверен, что нет.

А для чего тогда вы стабилизатор напряжения питания поставили? wink.gif При правильной трассировке печатной платы ток потребления светодиодного индикатора на результат работы АЦП сколь-либо существенно влиять не будет. Но можно конечно сделать и наоборот smile.gif
Результат работы АЦП в большей степени зависит от параметров опорного напряжения (ну и входных цепей - мультиплексора/буфера/усилителя - тоже).
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 9 2007, 22:02
Сообщение #45


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(rezident @ Jun 10 2007, 00:18) *
А для чего тогда вы стабилизатор напряжения питания поставили? wink.gif При правильной трассировке печатной платы ток потребления светодиодного индикатора на результат работы АЦП сколь-либо существенно влиять не будет. Но можно конечно сделать и наоборот smile.gif
Результат работы АЦП в большей степени зависит от параметров опорного напряжения (ну и входных цепей - мультиплексора/буфера/усилителя - тоже).

Все относительно. Параметры опорного напряжения в некоторой мере тоже зависят от напряжения питания. Вопрос только насколько? Согласен, что этим изменением можно в первом приближении пренепречь. К тому же схема опорного напряжения ratiometric, т.е. изменение напряжения питания приведет к пропорциональному изменению опорного напряжения. И это не скажется на результате измерения.
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th July 2025 - 23:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01504 секунд с 7
ELECTRONIX ©2004-2016