Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Atxmega калибровка АЦП
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Navovvol
как откалибровать АЦП ? всё ли я так делаю ?
что загрузить в регистры Z ? все пишут о каких то сигнатурах, но где и как их найти никто не знает.
Код
outi NVM_CMD,0x02
LPM
mov   r16, r0
STS ADCA_CAL,R16
bob1
Попробуйте так.
Код
    ldi r16,PROD_SIGNATURES_START + ADCACAL0_offset
   call SP_ReadCalibrationByte
  sts ADCA.CALL,r16
   ldi r16,PROD_SIGNATURES_START + ADCACAL1_offset
   call SP_ReadCalibrationByte
   sts ADCA.CALH,r16


SP_ReadCalibrationByte:
      ldi    r20, NVM_CMD_READ_CALIB_ROW_gc    ; Prepare NVM command in R20.
      mov    ZL, r16                              ; Load byte index into low byte of Z.
      clr    ZH                                ; Clear high byte of Z.
      sts    NVM_CMD, r20                         ; Load prepared command into NVM Command register.
      lpm   r16, Z                            ; Preform a LPM to read out byte to R16
      ldi    r20, NVM_CMD_NO_OPERATION_gc         ; Clear NVM Command register
      sts    NVM_CMD, r20
      ret
Navovvol
Цитата(bob1 @ Dec 24 2011, 11:58) *
Попробуйте так.

Спасибо. Разобрался. Некоторые вещи пришлось подогнать, теперь вот так:
Код
   ldi r16,PROD_SIGNATURES_START + NVM_PROD_SIGNATURES_ADCACAL0_offset
   call SP_ReadCalibrationByte
   sts ADCA_CAL,r16
   ldi r16,PROD_SIGNATURES_START + NVM_PROD_SIGNATURES_ADCACAL1_offset
   call SP_ReadCalibrationByte
   sts ADCA_CAL+1,r16


SP_ReadCalibrationByte:
      ldi    r20, NVM_CMD_READ_CALIB_ROW_gc   ; Prepare NVM command in R20.
      mov    ZL, r16                             ; Load byte index into low byte of Z.
      clr    ZH                               ; Clear high byte of Z.
      sts    NVM_CMD, r20                        ; Load prepared command into NVM Command register.
      lpm   r16, Z                           ; Preform a LPM to read out byte to R16
      ldi    r20, NVM_CMD_NO_OPERATION_gc        ; Clear NVM Command register
      sts    NVM_CMD, r20
ret

в регистр калибровки ADCA записывает значение 0х00FF.
Navovvol
что с калибровкой, что без нее, никакой разницы нет. ерунда какая- то... зря только время потратил. Так и не понятно, как эта калибровка работает. Кто нить заметил зависимость регистра результата АЦП от значения в регистре калибровки ?
_Артём_
Цитата(Navovvol @ Dec 25 2011, 11:28) *
что с калибровкой, что без нее, никакой разницы нет. ерунда какая- то... зря только время потратил. Так и не понятно, как эта калибровка работает. Кто нить заметил зависимость регистра результата АЦП от значения в регистре калибровки ?


А что не так с АЦП?
Шумит?
Результат невменяемый?
Какая ревизия xmeg-и?
Navovvol
Цитата(_Артём_ @ Dec 25 2011, 18:05) *
А что не так с АЦП?
Шумит?
Результат невменяемый?
Какая ревизия xmeg-и?

ревизия H
просто от этого калибровочного значения ни тепло ни холодно, точнее АЦП не стал. подаю на вход четкий ноль - АЦП показывает от -1 до 1 (т.е. от 0xFF до 0x01) (знаковый, ИОН внутр 1В) и никакой разницы, что с калибровочным значение, что без него.
_Артём_
Цитата(Navovvol @ Dec 26 2011, 07:23) *
ревизия H
просто от этого калибровочного значения ни тепло ни холодно, точнее АЦП не стал. подаю на вход четкий ноль - АЦП показывает от -1 до 1 (т.е. от 0xFF до 0x01) (знаковый, ИОН внутр 1В) и никакой разницы, что с калибровочным значение, что без него.


Мой пример:
CODE
ADC_CalibrationValues_Load(&ADCA);
ADC_CalibrationValues_Load(&ADCB);
ADC_ConvMode_and_Resolution_Config(&ADCA, ADC_ConvMode_Unsigned, ADC_RESOLUTION_12BIT_gc);
ADC_ConvMode_and_Resolution_Config(&ADCB, ADC_ConvMode_Unsigned, ADC_RESOLUTION_12BIT_gc);
ADC_Prescaler_Config(&ADCA, ADC_PRESCALER_DIV128_gc);
ADC_Prescaler_Config(&ADCB, ADC_PRESCALER_DIV128_gc);
ADC_Reference_Config(&ADCA, ADC_REFSEL_VCC_gc);
ADC_Reference_Config(&ADCB, ADC_REFSEL_VCC_gc);

ADC_Enable(&ADCA);
ADC_Enable(&ADCB);
ADC_Wait_32MHz(&ADCA);
ADC_Wait_32MHz(&ADCB);

ADC_Ch_InputMode_and_Gain_Config(&ADCA.CH0, ADC_CH_INPUTMODE_SINGLEENDED_gc, ADC_CH_GAIN_1X_gc);
ADC_Ch_InputMode_and_Gain_Config(&ADCA.CH1, ADC_CH_INPUTMODE_SINGLEENDED_gc, ADC_CH_GAIN_1X_gc);
ADC_Ch_InputMode_and_Gain_Config(&ADCA.CH2, ADC_CH_INPUTMODE_SINGLEENDED_gc, ADC_CH_GAIN_1X_gc);
ADC_Ch_InputMode_and_Gain_Config(&ADCA.CH3, ADC_CH_INPUTMODE_SINGLEENDED_gc, ADC_CH_GAIN_1X_gc);
// adcB
ADC_Ch_InputMode_and_Gain_Config(&ADCB.CH0, ADC_CH_INPUTMODE_SINGLEENDED_gc, ADC_CH_GAIN_1X_gc);
ADC_Ch_InputMode_and_Gain_Config(&ADCB.CH1, ADC_CH_INPUTMODE_SINGLEENDED_gc, ADC_CH_GAIN_1X_gc);
ADC_Ch_InputMode_and_Gain_Config(&ADCB.CH2, ADC_CH_INPUTMODE_SINGLEENDED_gc, ADC_CH_GAIN_1X_gc);
ADC_Ch_InputMode_and_Gain_Config(&ADCB.CH3, ADC_CH_INPUTMODE_SINGLEENDED_gc, ADC_CH_GAIN_1X_gc);

/// пауза
unsigned short adc_result;
unsigned short adc[4];
for (i=0; i<4; i++) {
adc[i]=adc_ch_ptr->RES;
}


Плохо если Atmel в ревизии H АЦП ещё не доделал...
А какая xmeg-а, A/D/B?
Navovvol
Цитата(_Артём_ @ Dec 26 2011, 16:03) *
Плохо если Atmel в ревизии H АЦП ещё не доделал...
А какая xmeg-а, A/D/B?

Atxmega128 A1, Olimex ' овская плата AVR-HX128A1
Kovrov
Цитата(Navovvol @ Dec 26 2011, 09:23) *
ревизия H
просто от этого калибровочного значения ни тепло ни холодно, точнее АЦП не стал. подаю на вход четкий ноль - АЦП показывает от -1 до 1 (т.е. от 0xFF до 0x01) (знаковый, ИОН внутр 1В) и никакой разницы, что с калибровочным значение, что без него.


внешний опорник не пробывали?
yvk
Удалось победить хмеговский ацп при следующих условиях:
-все неиспользованные входа ацп подключены на землю
-опора внешняя, 2,5В ( внутреннюю 1В не использовать)
-дифференциальный знаковый режим
-смещение нуля измеряется на заземленном входе
Иначе результат измерений напоминал генератор случайных чисел.
Navovvol
Цитата(Kovrov @ Dec 28 2011, 11:00) *
внешний опорник не пробывали?

нет, а что это что-то меняет ?
Kovrov
Цитата(yvk @ Dec 28 2011, 14:43) *
Удалось победить хмеговский ацп при следующих условиях:
-все неиспользованные входа ацп подключены на землю


а не проще порт на вывод и в нуль установить?

Цитата(Navovvol @ Dec 28 2011, 14:51) *
нет, а что это что-то меняет ?


очень многое - поищите - на форуме я приводил досконально работу внутреннего иона (правда на меге и очень давно ;-)
я тогда сам натыкался: дрейфует и шумит он не по детски.

Цитата(yvk @ Dec 28 2011, 14:43) *
Удалось победить хмеговский ацп при следующих условиях:

ну и как после всего этого?
полные 12 бит удалось получить без джиттера?
какие доп условия? время конверсии итд?
Просто все никак не решаюсь ацп на хмеге протестить - все пугают- пугают :-)
yvk
Цитата(Kovrov @ Dec 28 2011, 16:16) *
ну и как после всего этого?
полные 12 бит удалось получить без джиттера?
какие доп условия? время конверсии итд?
Просто все никак не решаюсь ацп на хмеге протестить - все пугают- пугают :-)

джиттер небольшой остался, конечно, но в приемлемых пределах - так что бит 10 получилось, было достаточно для решения задачи
тактовая частота ацп - 230 кГц
забыл добавить еще было скользящее среднее по 16 выборкам
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.