Перейти к содержанию
    

Atxmega калибровка АЦП

как откалибровать АЦП ? всё ли я так делаю ?

что загрузить в регистры Z ? все пишут о каких то сигнатурах, но где и как их найти никто не знает.

outi NVM_CMD,0x02
LPM
mov   r16, r0
STS ADCA_CAL,R16

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте так.

    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

Изменено пользователем bob1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте так.

Спасибо. Разобрался. Некоторые вещи пришлось подогнать, теперь вот так:

   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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что с калибровкой, что без нее, никакой разницы нет. ерунда какая- то... зря только время потратил. Так и не понятно, как эта калибровка работает. Кто нить заметил зависимость регистра результата АЦП от значения в регистре калибровки ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что с калибровкой, что без нее, никакой разницы нет. ерунда какая- то... зря только время потратил. Так и не понятно, как эта калибровка работает. Кто нить заметил зависимость регистра результата АЦП от значения в регистре калибровки ?

 

А что не так с АЦП?

Шумит?

Результат невменяемый?

Какая ревизия xmeg-и?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что не так с АЦП?

Шумит?

Результат невменяемый?

Какая ревизия xmeg-и?

ревизия H

просто от этого калибровочного значения ни тепло ни холодно, точнее АЦП не стал. подаю на вход четкий ноль - АЦП показывает от -1 до 1 (т.е. от 0xFF до 0x01) (знаковый, ИОН внутр 1В) и никакой разницы, что с калибровочным значение, что без него.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ревизия H

просто от этого калибровочного значения ни тепло ни холодно, точнее АЦП не стал. подаю на вход четкий ноль - АЦП показывает от -1 до 1 (т.е. от 0xFF до 0x01) (знаковый, ИОН внутр 1В) и никакой разницы, что с калибровочным значение, что без него.

 

Мой пример:

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?

Изменено пользователем IgorKossak
[codebox]

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Плохо если Atmel в ревизии H АЦП ещё не доделал...

А какая xmeg-а, A/D/B?

Atxmega128 A1, Olimex ' овская плата AVR-HX128A1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ревизия H

просто от этого калибровочного значения ни тепло ни холодно, точнее АЦП не стал. подаю на вход четкий ноль - АЦП показывает от -1 до 1 (т.е. от 0xFF до 0x01) (знаковый, ИОН внутр 1В) и никакой разницы, что с калибровочным значение, что без него.

 

внешний опорник не пробывали?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Удалось победить хмеговский ацп при следующих условиях:

-все неиспользованные входа ацп подключены на землю

-опора внешняя, 2,5В ( внутреннюю 1В не использовать)

-дифференциальный знаковый режим

-смещение нуля измеряется на заземленном входе

Иначе результат измерений напоминал генератор случайных чисел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Удалось победить хмеговский ацп при следующих условиях:

-все неиспользованные входа ацп подключены на землю

 

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

 

нет, а что это что-то меняет ?

 

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

я тогда сам натыкался: дрейфует и шумит он не по детски.

 

Удалось победить хмеговский ацп при следующих условиях:

ну и как после всего этого?

полные 12 бит удалось получить без джиттера?

какие доп условия? время конверсии итд?

Просто все никак не решаюсь ацп на хмеге протестить - все пугают- пугают :-)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну и как после всего этого?

полные 12 бит удалось получить без джиттера?

какие доп условия? время конверсии итд?

Просто все никак не решаюсь ацп на хмеге протестить - все пугают- пугают :-)

джиттер небольшой остался, конечно, но в приемлемых пределах - так что бит 10 получилось, было достаточно для решения задачи

тактовая частота ацп - 230 кГц

забыл добавить еще было скользящее среднее по 16 выборкам

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...