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

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

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

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

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

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

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 15.01.2015, 17:16  
WindoЗavr
Заблокирован
 
Регистрация: 26.12.2013
Сообщений: 379
Сказал спасибо: 66
Сказали Спасибо 61 раз(а) в 23 сообщении(ях)
WindoЗavr на пути к лучшему
По умолчанию Форматирование данных и передача даных UART

устройство считывает 6 аналоговых сигналов и каждый в виде числа 0-1024 отсылает в ПК
в итоге получается посылка типа _12_245_456_753_425_1005
проблема в том, что числа имеют разное количество знаков и на компьютере будет сложнее разделить их

исходник
Код:
#include ‹mega8.h›
#include ‹delay.h›
#include ‹stdio.h› 

interrupt [ADC_INT] void adc_isr(void){

 printf("%d",ADCW); //    печатаем в УАРТ значение
 delay_ms(1); 
  
 }
             
void init(void){
                
 ADCSRA=0b10011111;
 ADMUX=0;
 MCUCR=0x0A;
 GICR=0xC0;
 UCSRA=0x00;
 UCSRB=0x18;
 UCSRC=0x86;
 UBRRH=0x00;
 UBRRL=0x0C;
 #asm ("sei");   
}

void main(void)
{
  init();          
  while(1){
 
 ADMUX=0;
 ADCSRA=0b11011111;   
 printf("%e_",ADCW);
 delay_ms(1);     

 ADMUX=1;
 ADCSRA=0b11011111; 
 printf("%e_",ADCW);
 delay_ms(1); 
 
 ADMUX=2;
 ADCSRA=0b11011111;    
  printf("%e_",ADCW);
 delay_ms(1);  
 
 ADMUX=3;
 ADCSRA=0b11011111;    
  printf("%e_",ADCW);
 delay_ms(1);  

 ADMUX=4;
 ADCSRA=0b11011111;    
  printf("%e_",ADCW);
 delay_ms(1) ; 

 
 
 ADMUX=5;
 ADCSRA=0b11011111;    
 printf("%e_",ADCW);
 delay_ms(1);    

    putchar(0x0D);              //  на новую строку УАРТА

            
    }
 }
как для этого сделать ответную часть программы на компьютере?
C. C++
устройство я спаял, в терминал данные приходят
Реклама:
WindoЗavr вне форума  
Непрочитано 15.01.2015, 17:21  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: форматирование данных и передача даных UART

Сообщение от WindoЗavr Посмотреть сообщение
проблема в том
Проблема высосана из пальца ...
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 15.01.2015, 17:31  
Yurkin2014
Заблокирован
 
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
Yurkin2014 на пути к лучшему
По умолчанию Re: форматирование данных и передача даных UART

Сообщение от WindoЗavr Посмотреть сообщение
числа имеют разное количество знаков
Посылайте числа так
Цитата:
printf("%5d",ADCW);
и будет одинаковое количество знаков, по 5 знаков в каждой посылке
Цитата:
" 12 245 456 753 425 1005"
Затем в компьютере полученную строку разбиваете на группы по 5 символов и преобразуете обратно в целое число.

Можно просто посылать по 2 байта ADCW на каждое измерение без преобразования в символы. Строка будет короче. Ведь посылаете данные от одного процессора другому, им проще понимать байты, а не символы.
Тогда вместо 30 байт символов будет послана такая строка данных 12 байт
Цитата:
0x00 0x0C 0x00 0xF5 0x01 0xC8 0x02 0xF1 0x01 0xA9 0x03 0xED

Последний раз редактировалось Yurkin2014; 15.01.2015 в 17:46.
Yurkin2014 вне форума  
Непрочитано 15.01.2015, 17:45  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: форматирование данных и передача даных UART

Ребят, он читает десятибитный ADCH + ADCR и шлёт его в комп.
Какое к зелёной бабушке выравнивание?
omercury вне форума  
Непрочитано 15.01.2015, 17:47  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: форматирование данных и передача даных UART

Сообщение от dosikus Посмотреть сообщение
Проблема высосана из пальца ...


Пошляк!!!

omercury вне форума  
Непрочитано 15.01.2015, 18:07  
WindoЗavr
Заблокирован
 
Регистрация: 26.12.2013
Сообщений: 379
Сказал спасибо: 66
Сказали Спасибо 61 раз(а) в 23 сообщении(ях)
WindoЗavr на пути к лучшему
По умолчанию Re: форматирование данных и передача даных UART



а как на компе с ком порта получить данные и восстановить первоначальные значения?
WindoЗavr вне форума  
Непрочитано 15.01.2015, 19:07  
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: форматирование данных и передача даных UART

Сообщение от WindoЗavr Посмотреть сообщение


а как на компе с ком порта получить данные и восстановить первоначальные значения?
Распарсить как-нибудь.
Как-то так:
Код:
static char AdcBuffer[5];
static unsigned char AdcDigitIndex;
unsigned short LastAdc;

void ResetParsing()
{
	AdcDigitIndex=0;
	AdcBuffer[0]=AdcBuffer[1]=AdcBuffer[2]=AdcBuffer[3]=AdcBuffer[4]=0;
}

void ParseOutput(unsigned char new_byte)
{
	if (isdigit(new_byte)) {
		if (AdcDigitIndex‹5)
			AdcBuffer[AdcDigitIndex++]=new_byte;
		else
			ResetParsing();
	}
	else {
		if (new_byte=='_') {
			if (AdcDigitIndex) {
				LastAdc=read_int(AdcBuffer);// какая-либо функция для преобразования их текста в число
			}
		}
		ResetParsing();
	}
}
P.S. Может лучше в бинарном виде передавать и сразу все каналы в одном пакете?
P.S. 2. Номер канала не помешало бы добавить.

Последний раз редактировалось _Артём_; 15.01.2015 в 19:32.
_Артём_ вне форума  
Непрочитано 15.01.2015, 19:37  
WindoЗavr
Заблокирован
 
Регистрация: 26.12.2013
Сообщений: 379
Сказал спасибо: 66
Сказали Спасибо 61 раз(а) в 23 сообщении(ях)
WindoЗavr на пути к лучшему
По умолчанию Re: форматирование данных и передача даных UART

Сообщение от _Артём_ Посмотреть сообщение
P.S. Может лучше в бинарном виде передавать и сразу все каналы в одном пакете?
P.S. 2. Номер канала не помешало бы добавить.
а зачем номер, они всё равно в одном порядке передаются
на счёт двоички я думал, но не понял как преобразовать в неё
WindoЗavr вне форума  
Непрочитано 15.01.2015, 19:53  
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: форматирование данных и передача даных UART

Сообщение от WindoЗavr Посмотреть сообщение
а зачем номер, они всё равно в одном порядке передаются
Ну а кто из них какой как узнать? Они же по кругу крутятся. Или это не важно?


Сообщение от WindoЗavr Посмотреть сообщение
на счёт двоички я думал, но не понял как преобразовать в неё
В смысле на МК не понятно как?
Код:
void SendAdc(unsigned short adc_sample)
{
    while (UCSRA&(1‹‹UDRE)==0) ;
    UDR=adc_sample&0xFF;
    while (UCSRA&(1‹‹UDRE)==0) ;
    UDR=adc_sample››8;
}
_Артём_ вне форума  
Непрочитано 15.01.2015, 20:14  
WindoЗavr
Заблокирован
 
Регистрация: 26.12.2013
Сообщений: 379
Сказал спасибо: 66
Сказали Спасибо 61 раз(а) в 23 сообщении(ях)
WindoЗavr на пути к лучшему
По умолчанию Re: Форматирование данных и передача даных UART

я борланд с++ установил, пытаюсь разобраться
а куда ваш код с парсингом вставлять?
там разные кнопки надо создавать, или окошки?

мне пока нужно чтоб то, что выдаёт контроллер, показывалось в каком нибудь окошке, дальше я уже разберусь
я в интернете поискал, нигде толком ничего не написано
WindoЗavr вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Беспроводная передача данных 1кб/с , 3км. Как и чем? Zemlyanov Микроконтроллеры, АЦП, память и т.д 5 29.01.2015 10:02
Тормоза при передаче данных через UART в Bluetooth модуль rus_12345 Микроконтроллеры, АЦП, память и т.д 8 05.01.2015 19:39
Передача данных через UART в AVR микроконтроллерах. harry7777 AVR 54 09.11.2013 20:40
Передача данных в UART из текстового файла bombardier_rotax Proteus 6 24.02.2010 20:50
PIC16F877A pawelk Микроконтроллеры, АЦП, память и т.д 17 28.05.2005 23:54


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


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