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

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

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

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

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

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

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

Закрытая тема
Опции темы
Непрочитано 19.12.2013, 14:55   #1
insiderbik
Временная регистрация
 
Регистрация: 20.06.2009
Сообщений: 51
Сказал спасибо: 44
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
insiderbik на пути к лучшему
По умолчанию Помогите плиз 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.
insiderbik вне форума  
Непрочитано 19.12.2013, 15:45   #2
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: Помогите плиз Atmega88

Предлагаете написать программу за вас? Тогда пишите в форум "Предложения по работе".
_Артём_ вне форума  
Непрочитано 19.12.2013, 16:04   #3
insiderbik
Временная регистрация
 
Регистрация: 20.06.2009
Сообщений: 51
Сказал спасибо: 44
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
insiderbik на пути к лучшему
По умолчанию Re: Помогите плиз Atmega88

Сообщение от _Артём_ Посмотреть сообщение
Предлагаете написать программу за вас? Тогда пишите в форум "Предложения по работе".
не надо - не пишите! подкиньте пару идей - напишу сам
insiderbik вне форума  
Непрочитано 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
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Помогите плиз Atmega88

Сообщение от insiderbik Посмотреть сообщение
подкиньте пару идей - напишу сам
Оформите код в первом посту как положено - тэг code .
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 19.12.2013, 17:21   #6
insiderbik
Временная регистрация
 
Регистрация: 20.06.2009
Сообщений: 51
Сказал спасибо: 44
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
insiderbik на пути к лучшему
По умолчанию Re: Помогите плиз Atmega88

Сообщение от _Артём_ Посмотреть сообщение
А что именно непонятно? Приём по UART ? Сравнение принятых данных? Таймаут на приём?
Сейчас молотит прога с данными с АЦП и тут тебе прерывание по приему слова по UART, оно его записывает в буфер и далее продолжает молотить, а когда обрабатывать слова то? мне буфер на два байта делать?
insiderbik вне форума  
Непрочитано 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();// обработка данных от АЦП
		// другие функции
	}
}
_Артём_ вне форума  
Сказали "Спасибо" _Артём_
insiderbik (19.12.2013)
Непрочитано 19.12.2013, 18:29   #9
insiderbik
Временная регистрация
 
Регистрация: 20.06.2009
Сообщений: 51
Сказал спасибо: 44
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
insiderbik на пути к лучшему
По умолчанию 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();// обработка данных от АЦП
		// другие функции
	}
}
артем спасибо огромное - завтра обязательно попробую
insiderbik вне форума  
Закрытая тема

Закладки


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите, пожалуйста, с PICом и дисплеем VaL_KX Proteus 4 15.11.2010 22:33
Помогите определить распиновку индикатора, ПЛИЗ!!! serg616 Микроконтроллеры, АЦП, память и т.д 7 28.07.2009 12:10
Журнал Радиомир за 2001 год. Помогите найти плиз! mail200606 Информация по радиокомпонентам 4 07.07.2009 23:56
[Решено] Помогите плиз найти схему с простейшей бегущей строки Gavroch Источники питания и свет 2 04.03.2005 20:17
Народ, помогите, плиз! 2й USART в PIC mxsimus Микроконтроллеры, АЦП, память и т.д 3 24.12.2004 02:26


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


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