Прохожий
Регистрация: 19.02.2017
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
получение данных с датчика по АЦП. мк Atxmega128A1U
Здравствуйте, уважаемые посетители форума!
Перед мной стоит задача. Есть 8 датчиков (ёмкостные), эти датчики заряжается с электронным пучком. Мне надо из датчика быстро опросить данные с каждого выстрела электронного пучка и выводить их на компьютер. Я использую мк Atxmega128A1U. Как я понял эти данные (которые лежат в датчике) при опросе преобразуются через АЦП и сохраняются в памяти мк, и по USART передаются данные на ПК.
Я настроил АЦП, USART, tc для инициализаций, у меня получился ниже приведенный код. Просьба помочь найти ошибку в коде. Дальше нужно запрограммировать по алгоритму работы
#ifndef CONF_BOARD_H
#define CONF_BOARD_H
//------------------PINS--------------------------
//------Nastroika porty ADC-------
#define ADCU1 IOPORT_CREATE_PIN(PORTA,4)
#define ADCU2 IOPORT_CREATE_PIN(PORTA,5)
#define ADCU3 IOPORT_CREATE_PIN(PORTA,6)
#define ADCU4 IOPORT_CREATE_PIN(PORTA,7)
#define ADCU5 IOPORT_CREATE_PIN(PORTB,0)
#define ADCU6 IOPORT_CREATE_PIN(PORTB,1)
#define ADCU7 IOPORT_CREATE_PIN(PORTB,2)
#define ADCU8 IOPORT_CREATE_PIN(PORTB,3)
//-------Nastroika porty USART---
#define RXD0 IOPORT_CREATE_PIN(PORTD,2) // IN RxD для дист. управления
#define TXD0 IOPORT_CREATE_PIN(PORTD,3) // OUT TxD для дист. управления
//------------ GENERAL PURPOSE TIMER -------------
#define TIMER_GP TCE0
#define TIMER_GP_PERIOD 500
#define TIMER_GP_RESOLUTION 500000 // 1 mS
//----------------ADCA options------------------
#define ADC_U1_IN ADCCH_POS_PIN4 // 1 канал измерение входного напряжения
#define ADC_U2_IN ADCCH_POS_PIN5 // 2
#define ADC_U3_IN ADCCH_POS_PIN6 // 3
#define ADC_U4_IN ADCCH_POS_PIN7 // 4
#define ADCA_SIGN ADC_SIGN_OFF
#define ADCA_RES ADC_RES_12
#define ADCA_REF ADC_REF_AREFA
#define ADCA_CLOCKRATE 100000UL
#define ADCA_TRIG ADC_TRIG_FREERUN_SWEEP
#define ADCA_TRIG_NUMCHAN 4 // количество используемых каналов АЦП A
#define ADCA_TRIG_BASECHAN
//----------------ADCB options---------------------------
#define ADC_U5_IN ADCCH_POS_PIN0 //канал измерение входного напряжения
#define ADC_U6_IN ADCCH_POS_PIN1
#define ADC_U7_IN ADCCH_POS_PIN2
#define ADC_U8_IN ADCCH_POS_PIN3
#define ADCB_SIGN ADC_SIGN_OFF
#define ADCB_RES ADC_RES_12
#define ADCB_REF ADC_REF_AREFA
#define ADCB_CLOCKRATE 100000UL
#define ADCB_TRIG ADC_TRIG_FREERUN_SWEEP
#define ADCB_TRIG_NUMCHAN 4 //количество используемых каналов АЦП B
#define ADCB_TRIG_BASECHAN 0
//---------------USART PC options--------------
#define USART_PC &USARTD0
static usart_rs232_options_t USART_PC_OPTIONS = {
.baudrate = 19200,
.charlength = USART_CHSIZE_8BIT_gc,
.paritytype = USART_PMODE_DISABLED_gc,
.stopbits = false
}
//------------------------------------
extern void init(void){
sysclk_init();
pmic_init();
ioport_configure_pin(ADCU1, IOPORT_DIR_INPUT);
ioport_configure_pin(ADCU2, IOPORT_DIR_INPUT);
ioport_configure_pin(ADCU3, IOPORT_DIR_INPUT);
ioport_configure_pin(ADCU4, IOPORT_DIR_INPUT);
ioport_configure_pin(ADCU5, IOPORT_DIR_INPUT);
ioport_configure_pin(ADCU6, IOPORT_DIR_INPUT);
ioport_configure_pin(ADCU7, IOPORT_DIR_INPUT);
ioport_configure_pin(ADCU8, IOPORT_DIR_INPUT);
ioport_configure_pin(RXD0, IOPORT_DIR_INPUT);
ioport_configure_pin(TXD0, IOPORT_DIR_OUTPUT | IOPORT_INIT_HIGH);
//---------------ADCA INIT---------------------
extern struct adc_config ADCA_CONF;
extern struct adc_channel_config ADCACH_U1_CONF;
extern struct adc_channel_config ADCACH_U2_CONF;
extern struct adc_channel_config ADCACH_U3_CONF;
extern struct adc_channel_config ADCACH_U4_CONF;
memset(&ADCA_CONF, 0, sizeof(struct adc_config));
memset(&ADCACH_U1_CONF, 0, sizeof(struct adc_channel_config));
memset(&ADCACH_U2_CONF, 0, sizeof(struct adc_channel_config));
memset(&ADCACH_U3_CONF, 0, sizeof(struct adc_channel_config));
memset(&ADCACH_U4_CONF, 0, sizeof(struct adc_channel_config));
adc_set_conversion_parameters(&ADCA_CONF, ADCA_SIGN, ADCA_RES, ADCA_REF);
adc_set_clock_rate(&ADCA_CONF, ADCA_CLOCKRATE);
adc_set_conversion_trigger(&ADCA_CONF, ADCA_TRIG, ADCA_TRIG_NUMCHAN, ADCA_TRIG_BASECHAN);
adc_write_configuration(&ADCA, &ADCA_CONF);
adcch_set_input(&ADCACH_U1_CONF, ADC_U1_IN, ADCCH_NEG_NONE, 1);
adcch_set_interrupt_mode(&ADCACH_U1_CONF, ADCCH_MODE_COMPLETE);
adcch_enable_interrupt(&ADCACH_U1_CONF);
adcch_write_configuration(&ADCA, 0, &ADCACH_U1_CONF); //CH1
adcch_set_input(&ADCACH_U2_CONF, ADC_U2_IN, ADCCH_NEG_NONE, 1);
adcch_set_interrupt_mode(&ADCACH_U2_CONF, ADCCH_MODE_COMPLETE);
adcch_enable_interrupt(&ADCACH_U2_CONF);
adcch_write_configuration(&ADCA, 0, &ADCACH_U2_CONF); //CH2
adcch_set_input(&ADCACH_U3_CONF, ADC_U3_IN, ADCCH_NEG_NONE, 1);
adcch_set_interrupt_mode(&ADCACH_U3_CONF, ADCCH_MODE_COMPLETE);
adcch_enable_interrupt(&ADCACH_U3_CONF);
adcch_write_configuration(&ADCA, 0, &ADCACH_U3_CONF); //CH3
adcch_set_input(&ADCACH_U4_CONF, ADC_U4_IN, ADCCH_NEG_NONE, 1);
adcch_set_interrupt_mode(&ADCACH_U4_CONF, ADCCH_MODE_COMPLETE);
adcch_enable_interrupt(&ADCACH_U4_CONF);
adcch_write_configuration(&ADCA, 0, &ADCACH_U4_CONF); //CH4
adc_enable(&ADCA);
//--------------------------------------------------------
//---------------------ADCB INIT-------------------------
extern struct adc_config ADCB_CONF;
extern struct adc_channel_config ADCBCH_U5_CONF;
extern struct adc_channel_config ADCBCH_U6_CONF;
extern struct adc_channel_config ADCBCH_U7_CONF;
extern struct adc_channel_config ADCBCH_U8_CONF;
memset(&ADCB_CONF, 0, sizeof(struct adc_config));
memset(&ADCBCH_U5_CONF, 0, sizeof(struct adc_channel_config));
memset(&ADCBCH_U6_CONF, 0, sizeof(struct adc_channel_config));
memset(&ADCBCH_U7_CONF, 0, sizeof(struct adc_channel_config));
memset(&ADCBCH_U8_CONF, 0, sizeof(struct adc_channel_config));
adc_set_conversion_parameters(&ADCB_CONF, ADCB_SIGN, ADCB_RES, ADCB_REF);
adc_set_clock_rate(&ADCB_CONF, ADCB_CLOCKRATE);
adc_set_conversion_trigger(&ADCB_CONF, ADCB_TRIG, ADCB_TRIG_NUMCHAN, ADCB_TRIG_BASECHAN);
adc_write_configuration(&ADCB, &ADCB_CONF);
adcch_set_input(&ADCBCH_U5_CONF, ADC_U5_IN, ADCCH_NEG_NONE, 1);
adcch_set_interrupt_mode(&ADCBCH_U5_CONF, ADCCH_MODE_COMPLETE);
adcch_enable_interrupt(&ADCBCH_U5_CONF);
adcch_write_configuration(&ADCB, 0, &ADCBCH_U5_CONF); //CH5
adcch_set_input(&ADCBCH_U6_CONF, ADC_U6_IN, ADCCH_NEG_NONE, 1);
adcch_set_interrupt_mode(&ADCBCH_U6_CONF, ADCCH_MODE_COMPLETE);
adcch_enable_interrupt(&ADCBCH_U6_CONF);
adcch_write_configuration(&ADCB, 1, &ADCBCH_U6_CONF); //CH6
adcch_set_input(&ADCBCH_U7_CONF, ADC_U7_IN, ADCCH_NEG_NONE, 1);
adcch_set_interrupt_mode(&ADCBCH_U7_CONF, ADCCH_MODE_COMPLETE);
adcch_enable_interrupt(&ADCBCH_U7_CONF);
adcch_write_configuration(&ADCB, 1, &ADCBCH_U7_CONF); //CH7
adcch_set_input(&ADCBCH_U8_CONF, ADC_U8_IN, ADCCH_NEG_NONE, 1);
adcch_set_interrupt_mode(&ADCBCH_U8_CONF, ADCCH_MODE_COMPLETE);
adcch_enable_interrupt(&ADCBCH_U8_CONF);
adcch_write_configuration(&ADCB, 1, &ADCBCH_U8_CONF); //CH8
adc_enable(&ADCB);
//---------------------------------------------
}
//--------- GENERAL PURPOSE TIMER INIT ----------
tc_enable(&TIMER_GP);
tc_set_wgm(&TIMER_GP, TC_WG_NORMAL);
tc_write_period(&TIMER_GP, TIMER_GP_PERIOD);
tc_set_resolution(&TIMER_GP, TIMER_GP_RESOLUTION);
tc_set_overflow_interrupt_level(&TIMER_GP, TC_OVFINTLVL_MED_gc);
//-----------------------------------------------
//--------------- USART PC INIT -----------------
usart_init_rs232(USART_PC, &USART_PC_OPTIONS);
usart_set_rx_interrupt_level(USART_PC, USART_RXCINTLVL_LO_gc);
usart_set_tx_interrupt_level(USART_PC, USART_TXCINTLVL_LO_gc);
//-----------------------------------------------
#endif /* CONF_BOARD_H */
#ifndef CONF_BOARD_H_INCLUDED
#define CONF_BOARD_H_INCLUDED
#endif /* COONF_BARD_H */
Последний раз редактировалось adik05; 21.02.2017 в 13:58.
|