|
|
  |
Ацп в mege32, замер напруги с двух входов |
|
|
|
May 20 2007, 21:51
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(defunct @ May 20 2007, 19:15)  После переключения канала, необходимо сделать одно холостое измерение. Где это написано в даташите ? Цитата На время "холостого" измерения включайте АЦП с предделителем 0, чтобы измерение проходило максимально быстро. Следующее измерение делайте с нормальными настройками предделителя. И чем это поможет ? "Запоминающий" конденсатор перезарядится ? А если сигнал быстро меняющийся ? А если измерения происходят один раз в сек/мин/час я тоже должен для получения нужной точности делать холостое измерение ??? На самом деле меня этот вопрос очень интересует, но к сожалению я ни разу еще не видел в комплексе, схемы подключения + программы в которых происходит так называемое "перетекание" из канала в канал. Если у кого-то такое есть, приведите схему включения + прогу(все что касается данных с АЦП)
|
|
|
|
|
May 20 2007, 22:17
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(singlskv @ May 20 2007, 23:51)  Где это написано в даташите ? In Free Running mode, always select the channel before starting the first conversion. The channel selection may be changed one ADC clock cycle after writing one to ADSC. However, the simplest method is to wait for the first conversion to complete, and then change the channel selection. Since the next conversion has already started automatically, the next result will reflect the previous channel selection. Subsequent conversions will reflect the new channel selection. Сценарий программы где перетекание обязательно будет присутствовать (по схеме - будем считать что все рекомендациям ДШ учтены): void Timer_ISR(void) { // Выбор канала // Запуск АЦП в free running mode (SFIOR == 0) } void ADC_ISR(void) { // чтение АЦП // если не последний канал // то смена канала и запуск АЦП // обработка текущего рез-тата }
|
|
|
|
|
May 20 2007, 22:44
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(defunct @ May 21 2007, 02:17)  In Free Running mode, always select the channel before starting the first conversion. The channel selection may be changed one ADC clock cycle after writing one to ADSC. However, the simplest method is to wait for the first conversion to complete, and then change the channel selection. Since the next conversion has already started automatically, the next result will reflect the previous channel selection. Цитата(defunct @ May 21 2007, 02:17)  In Free Running mode, always select the channel before starting the first conversion. The channel selection may be changed one ADC clock cycle after writing one to ADSC. However, the simplest method is to wait for the first conversion to complete, and then change the channel selection. Since the next conversion has already started automatically, the next result will reflect the previous channel selection. Ну и где здесь написано что первое преобразование будет неверным ? ИМХО, здесь всего лишь написанно что если будет ошибка с моментом выбора следующего канала, то вероятно, будет "оцифрован" не тот канал...
|
|
|
|
|
May 20 2007, 22:56
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(singlskv @ May 21 2007, 00:44)  Ну и где здесь написано что первое преобразование будет неверным ? Since the next conversion has already started automatically, the next result will reflect the previous channel selection. Subsequent conversions will reflect the new channel selection. -- Т.к. следующее измерение уже было автоматически запущено - следующий результат будет отображать старый канал. Последующие преобразования будут относиться к новому каналу. Цитата ИМХО, здесь всего лишь написанно что если будет ошибка с моментом выбора следующего канала, то вероятно, будет "оцифрован" не тот канал... Нет, об ошибках там не сказано.. Там сказано, что если АЦП не выключать (ADEN = 0), то однозначно первый результат после переключения будет со старого канала, последующие - уже с нового канала. Это справедливо по крайней мере для m16/m32. Про ошибки Single conversion mode, в ДШ ничего не сказано, но они есть. Или отключать АЦП - менять канал - потом включать, или пропускать одно измерение, или .. обрабатывать со сдвигом..
|
|
|
|
|
May 20 2007, 23:15
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(defunct @ May 21 2007, 02:56)  Since the next conversion has already started automatically, the next result will reflect the previous channel selection. Subsequent conversions will reflect the new channel selection. -- Т.к. следующее измерение уже было автоматически запущено - следующий результат будет отображать старый канал. Последующие преобразования будут относиться к новому каналу. Нет, ни о каких ошибках там не сказано.. И там также не сказано "вероятно". Там сказано что однозначно первый результат после переключения будет со старого канала, следущий результат - уже с нового канала.
Или отключать АЦП - менять канал - потом включать, или пропускать одно измерение, или .. обрабатывать со сдвигом.. Вы просто не очень хорошо понимаете как происходит преобразование в АЦП и в АЦП AVR в часности, АЦП последовательных приблежений с точки зрения MCU это всего лишь таймер который запускает определенные действия в определенный моменты времени То что Вы указали в переводе из даташита, говорит лишь о том что время выбора нового канала было выбрано неправильно Попробуйте понять работу АЦП как некоторый таймер, со своим предделителем, и при этом нужно иметь в виду что этот таймер/делитель начинает работать в момент когда Вы сказали ADEN...
|
|
|
|
|
May 20 2007, 23:53
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(singlskv @ May 21 2007, 01:15)  Вы просто не очень хорошо понимаете как происходит преобразование в АЦП и в АЦП AVR в часности, Интересный вывод, может быть и так... В АВР логика АЦП постороена так: Компаратор на один из входов, которого заведен измеряемый сигнал, на второй - выход ЦАП. На ЦАП выдаются комбинации: 0b1000000000 0bx100000000 0bxx10000000 .. 0bxxxxxxxxx1 где x определяется логикой захвата с выхода компаратора < > после того как последний бит "проверен" - значение входа ЦАП переписывается в регистры ADCx. А в "физике" участвует еще входная цепь с RC.. Цитата АЦП последовательных приблежений с точки зрения MCU это всего лишь таймер который запускает определенные действия в определенный моменты времени То что Вы указали в переводе из даташита, говорит лишь о том что время выбора нового канала было выбрано неправильно Во Free running режиме АЦП работает постоянно. Считайте что любой момент времени "неправильный". Цитата Попробуйте понять работу АЦП как некоторый таймер, со своим предделителем, и при этом нужно иметь в виду что этот таймер/делитель начинает работать в момент когда Вы сказали ADEN... Нет, ADEN просто "подключает" питание к этому всему делу. Работать же это все начинает по "запуску" (либо ADSC, либо внешний сигнал запуска)
|
|
|
|
|
May 21 2007, 05:17
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425

|
Цитата(defunct @ May 21 2007, 03:53)  Автор про Free Runing mode ничего не говорил. Кто в данном случае мешает использовать Single Conversion mode по таймеру? Тогда никаких пустых циклов не нужно.
|
|
|
|
|
May 21 2007, 07:49
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(defunct @ May 21 2007, 03:53)  Нет, ADEN просто "подключает" питание к этому всему делу. Работать же это все начинает по "запуску" (либо ADSC, либо внешний сигнал запуска) datasheet: The channel selection may be changed one ADC clock cycle after writing one to ADSC.Еще раз, Побробуйте относится к работе ADC как к таймеру с предделителем в ранних AVR. ADC(таймер) запускает свой цикл не в момент когда Вы записали ADSC, а только когда в соответствии с выбранным преддителем начнется новый цикл ADC. Цитата А в "физике" участвует еще входная цепь с RC.. ИМХО, А вот это как раз и есть основная причина почему много кто жалуется на так называемое "перетекание" из канала в канал Цитата(Dopler @ May 21 2007, 09:17)  Автор про Free Runing mode ничего не говорил. Кто в данном случае мешает использовать Single Conversion mode по таймеру? Тогда никаких пустых циклов не нужно. Ну вот собственно так и делаю, никаких "перетеканий" не замечал.
|
|
|
|
|
May 21 2007, 10:28
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(singlskv @ May 21 2007, 09:49)  The channel selection may be changed one ADC clock cycle after writing one to ADSC. Как это связано с приведенной вами моей цитатой? Я не советовал менять канал после запуска АЦП... А говорил о разнице между ADEN и ADSC.. Цитата Цитата А в "физике" участвует еще входная цепь с RC.. ИМХО, А вот это как раз и есть основная причина почему много кто жалуется на так называемое "перетекание" из канала в канал Ok, если отбросить Free Running, тогда согласен, что это и есть причина "перетекания". В таком случае чтобы этого не было надо придерживаться рекомендаций даташита, относительно выходного сопротивления сигнала (не более 10k). Но не всегда это возможно, например при измерении напряжения сети 220В выходное сопротивление будет однозначно больше 10k.
|
|
|
|
|
May 21 2007, 13:27
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата Нет, ADEN просто "подключает" питание к этому всему делу. Работать же это все начинает по "запуску" (либо ADSC, либо внешний сигнал запуска) Цитата(defunct @ May 21 2007, 14:28)  Как это связано с приведенной вами моей цитатой? Я не советовал менять канал после запуска АЦП... А говорил о разнице между ADEN и ADSC.. Так вот, как раз "запуск" (либо ADSC, либо внешний сигнал запуска), это на самом деле не запуск преобразования, а всего лишь флаг который говорит процу что мы хотим запустить преобразование. Реальный цикл преобразования начнется в промежутке 0..(N-1)тактов от момента записи ADSC где N-значение предделителя. Цитата Ok, если отбросить Free Running, тогда согласен, что это и есть причина "перетекания". А зачем его отбрасывать ? Делаем так: - включаем ADEN - запускаем ADSC в режиме Singl Conversation на первом канале (это чтобы прошло первое "длинное" преобразование) - запускаем ADSC в режиме Free Running на первом канале и разрешаем прерывание ADC - ждем N тактов (N - предделитель) - меняем MUX на второй канал - в прерывании ADC читаем значение последнего канала и в MUX выставляем следующий Цитата В таком случае чтобы этого не было надо придерживаться рекомендаций даташита, относительно выходного сопротивления сигнала (не более 10k). Рекомендаций даташита нужно придерживаться всегда. Никто ведь, например, не ставит в серийные устройства AVR на частоте 30 МГц  А с АЦП рекомендации нарушают все кому не лень, после чего и появляются такие топики Цитата Но не всегда это возможно, например при измерении напряжения сети 220В выходное сопротивление будет однозначно больше 10k. Ну операционник то, ведь можно поставить ?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|