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

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

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

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

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

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

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

 
Опции темы

Форматирование данных и передача даных UART

Непрочитано 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
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
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.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: форматирование данных и передача даных UART

Ребят, он читает десятибитный ADCH + ADCR и шлёт его в комп.
Какое к зелёной бабушке выравнивание?
omercury вне форума  
Непрочитано 15.01.2015, 17:47  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
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.RUN
 
Регистрация: 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.RUN
 
Регистрация: 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, время: 17:49.


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