AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
19.12.2013, 14:55
|
#1
|
Временная регистрация
Регистрация: 20.06.2009
Сообщений: 51
Сказал спасибо: 44
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Помогите плиз Atmega88
Здравствуйте, уважаемые форумчане!
Помогите плиз чем-нибудь. Вообщем тема такая: есть проц Atmega88, он должен постоянно опрашивать два входа АЦП и тут-же выдавать код из двух этих слов на UART. На проц приходят команды - 9 команд, каждая команда состоит из двух слов UART, проц должен их сравнить и если они одинаковые сделать "соответствующие выводы". Начальный код я сделал кодвизардом CVAVR - весь код приводить не буду, напишу только бесконечный цикл в котором происходит опрос входов АЦП и выдача слов на UART. Вообщем вопрос такой как к этому присобачить все остальное??? Помогите плиз чем могите, просто мне все это уже надо позавчера.
Код:
|
while (1)
{
unsigned char adc_data0, adc_data1;
read_adc(0x00);
adc_data0=adc_data;
read_adc(0x01);
adc_data1=adc_data;
putchar(adc_data0);
putchar(adc_data1);
delay_ms(1);
} |
Последний раз редактировалось insiderbik; 19.12.2013 в 17:13.
|
|
|
|
19.12.2013, 15:45
|
#2
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Помогите плиз Atmega88
Предлагаете написать программу за вас? Тогда пишите в форум "Предложения по работе".
|
|
|
|
19.12.2013, 16:04
|
#3
|
Временная регистрация
Регистрация: 20.06.2009
Сообщений: 51
Сказал спасибо: 44
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Помогите плиз Atmega88
Сообщение от _Артём_
|
Предлагаете написать программу за вас? Тогда пишите в форум "Предложения по работе".
|
не надо - не пишите! подкиньте пару идей - напишу сам
|
|
|
|
19.12.2013, 16:37
|
#4
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Помогите плиз Atmega88
Сообщение от insiderbik
|
подкиньте пару идей - напишу сам
|
А что именно непонятно? Приём по UART ? Сравнение принятых данных? Таймаут на приём?
|
|
|
|
19.12.2013, 16:40
|
#5
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Помогите плиз Atmega88
Сообщение от insiderbik
|
подкиньте пару идей - напишу сам
|
Оформите код в первом посту как положено - тэг code .
__________________
Осторожно , злой кот
|
|
|
|
19.12.2013, 17:21
|
#6
|
Временная регистрация
Регистрация: 20.06.2009
Сообщений: 51
Сказал спасибо: 44
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Помогите плиз Atmega88
Сообщение от _Артём_
|
А что именно непонятно? Приём по UART ? Сравнение принятых данных? Таймаут на приём?
|
Сейчас молотит прога с данными с АЦП и тут тебе прерывание по приему слова по UART, оно его записывает в буфер и далее продолжает молотить, а когда обрабатывать слова то? мне буфер на два байта делать?
|
|
|
|
19.12.2013, 17:48
|
#7
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Помогите плиз Atmega88
Сообщение от insiderbik
|
Сейчас молотит прога с данными с АЦП и тут тебе прерывание по приему слова по UART
|
Ну возникнет прерывание и что в этом плохого?
Сообщение от insiderbik
|
оно его записывает в буфер
|
Правильно, пусть записывает...
Сообщение от insiderbik
|
а когда обрабатывать слова то
|
Напимер, в основной программе обрабатывать.
Сообщение от insiderbik
|
мне буфер на два байта делать?
|
Сделайте буфер на столько байт, сколько не жалко памяти - 4-8-16-...512 байт.
Можно и без буфера, но так проще...
|
|
|
|
19.12.2013, 18:01
|
#8
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Помогите плиз Atmega88
Типа так:
Код:
|
#define RX_BUF_SIZE 32
volatile uint8_t UartBuf[RX_BUF_SIZE], Next, First;
ISR(USARTE0_RXC_vect)
{
UartBuf[Next]=USARTE0.DATA;
if (++Next==RX_BUF_SIZE)
Next=0;
}
void CmdWait()
{
if (Next!=First) {
uint8_t byte_from_uart=UartBuf[First++];
if (First›=RX_BUF_SIZE)
First=0;
// приём команды.....
}
}
int main()
{
init_uart();
init_adc();
EnableInterrupts();
while (1) {
CmdWait();// функция обработки принятых данных от UART
adc_process();// обработка данных от АЦП
// другие функции
}
} |
|
|
|
Сказали "Спасибо" _Артём_
|
|
|
19.12.2013, 18:29
|
#9
|
Временная регистрация
Регистрация: 20.06.2009
Сообщений: 51
Сказал спасибо: 44
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Помогите плиз Atmega88
Сообщение от _Артём_
|
Типа так:
Код:
|
#define RX_BUF_SIZE 32
volatile uint8_t UartBuf[RX_BUF_SIZE], Next, First;
ISR(USARTE0_RXC_vect)
{
UartBuf[Next]=USARTE0.DATA;
if (++Next==RX_BUF_SIZE)
Next=0;
}
void CmdWait()
{
if (Next!=First) {
uint8_t byte_from_uart=UartBuf[First++];
if (First›=RX_BUF_SIZE)
First=0;
// приём команды.....
}
}
int main()
{
init_uart();
init_adc();
EnableInterrupts();
while (1) {
CmdWait();// функция обработки принятых данных от UART
adc_process();// обработка данных от АЦП
// другие функции
}
} |
|
артем спасибо огромное - завтра обязательно попробую
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:58.
|
|