Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

получение данных с датчика по АЦП. мк Atxmega128A1U

Непрочитано 19.02.2017, 12:40  
adik05
Прохожий
 
Регистрация: 19.02.2017
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
adik05 на пути к лучшему
Сообщение получение данных с датчика по АЦП. мк 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.
adik05 вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
Видео уроки dosikus Микроконтроллеры, АЦП, память и т.д 61 23.01.2012 21:06
Помогите с ЦАП AD7708/AD7718 или их аналогами ST_Senya Микроконтроллеры, АЦП, память и т.д 9 30.11.2009 19:03
Проблема с прерыванием от АЦП, Atmega8 R-a-v-e-n Микроконтроллеры, АЦП, память и т.д 11 24.06.2009 14:12
PIC16F877A pawelk Микроконтроллеры, АЦП, память и т.д 17 28.05.2005 23:54


Часовой пояс GMT +4, время: 06:06.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.