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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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, время: 13:24.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot