имеется следующая проблема с AT90PWM3B:
не удается включить встроенные диф. усилители AMP1 и AMP0, точнее результаты АЦП не меняются
в зависимости от того включен усилитель или нет и от изменения коэффициента усиления данного усилителя
( проверялось на нескольких чипах)
использовался IAR 5.30, и отладчик JTAGICE mkII
#define Enable_amp1() (AMP1CSR |= (1<<AMP1EN))
#define Disable_amp1_input_shunt() (AMP1CSR &= ~(1<<AMP1IS))
#define Set_amp1_gain20() (AMP1CSR |= (1<<AMP1G1), AMP1CSR &= ~(1<<AMP1G0) )
#define Amp1_internal_clock() (AMP1CSR &= ~( (1<<AMP1TS1) | (1<<AMP1TS0) ) )
#define I_FL1 9 // PС5 : AMP1+ PIN22, (AMP1- PIN21 -> GND)
#define Get_i_FL1() (U8) (get_adc_result(I_FL1))
#define Start_conv() (ADCSRA |= (1<<ADSC) )
#define Start_conv_channel(channel) (Select_adc_channel(channel), Start_conv() )
#define Wait_end_of_conversion() while (ADCSRA & (1<<ADSC))
#define Adc_get_8_bits_result() ((U8)(ADCH))
#define Clear_adc_mux() (ADMUX &= ~((1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0)) )
#define Select_adc_channel(channel) (Clear_adc_mux(), ADMUX |= (channel) )
//включение аналоговых входов
DIDR0 = 0x4C;
DIDR1 = 0X1F;
// инициализация AMP1
Enable_amp1();
Disable_amp1_input_shunt();
Set_amp1_gain20();
Amp1_internal_clock();
// получение данных от АЦП (8бит)
U8 get_adc_result(U8 channel){
Start_conv_channel(channel);
Wait_end_of_conversion();
return (Adc_get_8_bits_result());
}
// измерение тока с использованием дифф. усилителя - 9 канал АЦП
g_i_FL = Get_i_1();
судя по состоянию регистров ADMUX,ADCSRA, ADCSRB, AMP1CSR все должно быть в порядке ,
тем не менее усилитель не работает, то есть данные в регистре ADC ничем не отличаются от режима работы без усилителя,
сам АЦП при этом работает нормально и данные вполне достоверны для неусиленного сигнала.
то ли где то ошибка в коде, конфигурации контроллера, то ли причина в самом чипе, то ли что-то не понял :07:
Если кто-то имел дело с PWM3b- прошу откликнуться