if() отказывается сравнивать значения

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
SergeBS
Вымогатель припоя
Сообщения: 683
Зарегистрирован: Пт апр 11, 2008 11:24:53
Откуда: Владимир

Re: if() отказывается сравнивать значения

Сообщение SergeBS »

oleg110592 писал(а):вроде не врет
Вложение Terminals.png больше недоступно
Вот мое:
первые 6 - тупо с клавиатуры с "рус" вкл. Последние 3 - коды 250,251,252 - классический набор по АЛЬТ+3 цифры (на цифровой справа). Символы - те, коды - левые!
На код 232 печатает "ш".
Вложения
terminal1.png
(29.42 КБ) 300 скачиваний
Человек - это звучит гордо, а обезьяна - объективно...
Реклама
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: if() отказывается сравнивать значения

Сообщение oleg110592 »

Если фонт установить кириллический - на #232 будет показывать "и"
программа виндовая - кодировка 1251, сравните таблицы:
http://pascal.toom.su/1251
http://pascal.toom.su/866
зы: попробуйте альт+0232
Реклама
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: if() отказывается сравнивать значения

Сообщение КАШАК »

Вопрос немного не по теме: как организовать обмен пакетами по UART? А то посимвольно все понятно, а пакеты не хотят идти. Например двух- и трехзначные числа. Пробовал загонять все это дело в массив, но все равно не заработало. Как это правильно сделать?
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
SergeBS
Вымогатель припоя
Сообщения: 683
Зарегистрирован: Пт апр 11, 2008 11:24:53
Откуда: Владимир

Re: if() отказывается сравнивать значения

Сообщение SergeBS »

Уф. Вроде понял. НА Альт+128 и Альт+0128 и т.п. - признак 0 - подключаются разные кодовые таблицы, а в результате - я не ту таблицу смотрел - сам дурак :(. СПС!
Человек - это звучит гордо, а обезьяна - объективно...
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: if() отказывается сравнивать значения

Сообщение oleg110592 »

например обмен с весами по 485:
посылаю: s01 ( 01 адрес )
ответ: $01,U,N 86.457,T 00.000,H ( 86.457 это вес в килограммах )

альт код: http://ru.wikipedia.org/wiki/Alt-%D0%BA%D0%BE%D0%B4
Реклама
Аватара пользователя
SergeBS
Вымогатель припоя
Сообщения: 683
Зарегистрирован: Пт апр 11, 2008 11:24:53
Откуда: Владимир

Re: if() отказывается сравнивать значения

Сообщение SergeBS »

КАШАК писал(а):А то посимвольно все понятно, а пакеты не хотят идти.
Не понял. Массив и массив. Все равно ведь - загнал в буфер и жди пока передаст. Пока не передаст. Буфера же FIFO нет.
Человек - это звучит гордо, а обезьяна - объективно...
Реклама
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: if() отказывается сравнивать значения

Сообщение КАШАК »

Мне надо, чтобы МК получал данные по UART и отправлял по USB. В USB уходит переменная типа unsigned char. Так вот, нужен какой-то буфер, чтобы принимать данные. Например пришло в МК число 140, и в USB ушло 140. А без буфера он отказывается принимать двухзначные и трехзначные числа, либо я что-то не так делаю :dont_know:
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
SergeBS
Вымогатель припоя
Сообщения: 683
Зарегистрирован: Пт апр 11, 2008 11:24:53
Откуда: Владимир

Re: if() отказывается сравнивать значения

Сообщение SergeBS »

Видел проектик USB-термометр. С DS18B20 прием и передача по USB. Может есть смысл там посмотреть? ATtiny45 - напрямую в USB без моста. Тут в примочках к ПК.
http://radiokot.ru/circuit/digital/pcmod/16/USB термометр
И видел на ATtiny2313 аналогичное.
Человек - это звучит гордо, а обезьяна - объективно...
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: if() отказывается сравнивать значения

Сообщение КАШАК »

Да обмен данными и так без проблем идет, в т.ч. и с DSками :) Проблема именно в приеме через UART, там ведь все посимвольно... Есть исходники переходника USB->UART на Tiny2313, только там драйвера нужны, а хотелось бы HID.
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
SergeBS
Вымогатель припоя
Сообщения: 683
Зарегистрирован: Пт апр 11, 2008 11:24:53
Откуда: Владимир

Re: if() отказывается сравнивать значения

Сообщение SergeBS »

http://radio-hobby.org/modules/news/art ... toryid=905
"USB HID термометр на ATmega8
Этот термометр выполнен на основе микроконтроллера ATmega8 и датчика температуры DS18B20"
Исходники и библиотека
Человек - это звучит гордо, а обезьяна - объективно...
Аватара пользователя
SergeBS
Вымогатель припоя
Сообщения: 683
Зарегистрирован: Пт апр 11, 2008 11:24:53
Откуда: Владимир

Re: if() отказывается сравнивать значения

Сообщение SergeBS »

AVR-HID: (2008.03.26:1)
http://1010.co.uk/avrhid.html
Английский
http://www.mirmk.net/content/category/6/39/29/
Проект V-USB Описание проекта фирмы "Objective development" под названием AVR-USB, предназначенный для программной реализации USB канала.
По-русски.
Человек - это звучит гордо, а обезьяна - объективно...
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: if() отказывается сравнивать значения

Сообщение КАШАК »

Сам USB работает, определяется как HID, данные шлет в обе стороны. Мне нужен именно UART, Вот прислал я в него число, ну скажем 180, он его принял и переписал в переменную unsigned char. Нужна именно реализация приема. Если написать вот так:

Код: Выделить всё

ISR(USART_RXC_vect){
	      usartRxBuf = UDR;       
}
то идет прием только цифр от 0 до 9 и символов. Если я посылаю 15, то получаю только 5, аналогично с другими числами.
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
SergeBS
Вымогатель припоя
Сообщения: 683
Зарегистрирован: Пт апр 11, 2008 11:24:53
Откуда: Владимир

Re: if() отказывается сравнивать значения

Сообщение SergeBS »

Не понимаю. Прием - какая-то куцая последовательность. Не помню откуда, но я из какого-то аппнота выдрал - ATMEGA8:

Код: Выделить всё

// USART Receiver interrupt service routine
ISR(USART_RXC_vect)
{
	char status,data;
	status=UCSRA;
	data=UDR;
	if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
	{
		rx_buffer[rx_wr_index]=data;
		if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
		if (++rx_counter == RX_BUFFER_SIZE)
		{
			rx_counter=0;
			rx_buffer_overflow=1;
		}
	}
}

// Get a character from the USART Receiver buffer
char getusart(void)
{
	char data;
	while (rx_counter==0);
	data=rx_buffer[rx_rd_index];
	if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
	cli();
	--rx_counter;
	sei();
	return data;
}
И все прекрасно работало. 2 года назад было - шаговик крутил из Делфи руля битиками порта какого-то. По СОМ посылал код команды (типа в какой порт писать) и число - что писать. Итого 2 байта.
А у тебя явно число 15 разбивается на 2 байта символов (1 и 5), а один из них теряется.
Вообще - спать пора! Мне относительно пофиг - я на больничном, но хочется все же придавить подушку. До завтра (может быть...).
Человек - это звучит гордо, а обезьяна - объективно...
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: if() отказывается сравнивать значения

Сообщение oleg110592 »

Код: Выделить всё

#define USART0_InBufSize 20
static unsigned char USART0_InBuf[USART0_InBufSize];
static volatile unsigned char USART0_InBufInPos = 0;
static volatile unsigned char USART0_InBufOutPos = 0;

ISR(USART_RXC_vect) // USART, Rx Complete
{
	USART0_InBuf[USART0_InBufInPos++] = UDR;
	if (USART0_InBufInPos >= USART0_InBufSize) USART0_InBufInPos = 0;
}
Проверяете USART0_InBufInPos, если = 3
в буфере 3 символа
USART0_InBufInPos сделать = 0
лучше перед посылкой числа отправить преамбулу, например у меня так:
*W001N180
*W преамбула, 001 адрес, после N число
посылку завершаю 0x0D - символ перевода строки
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: if() отказывается сравнивать значения

Сообщение КАШАК »

Сейчас все попробую :)
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: if() отказывается сравнивать значения

Сообщение КАШАК »

Это все хорошо, с буфером символы не теряются, но и получаю я их по одному. Т.е. 123 приходит на комп как 1 2 3. А должно как 123. Ну ладно, это можно на компе в кучу сложить, НО в МК может прийти число и из 1, 2 или 3 цифр (0..255). Как в этом случае понять, что передача числа завершена и передать его в ПК, а то если все время ждать пока придет 3 символа, ничего не получится. :dont_know:
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: if() отказывается сравнивать значения

Сообщение oleg110592 »

Посылайте вместо "1" "001", лучше по приходу 0x0D (в конце посылки) установить программный флаг.
В основной программе периодически проверяйте этот флаг.
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: if() отказывается сравнивать значения

Сообщение КАШАК »

Да все дело в том, что туда могут отправить все, что угодно, в т.ч. и буквы. Поэтому нужна какая-то универсальность...
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: if() отказывается сравнивать значения

Сообщение oleg110592 »

тогда изучайте MODBUS http://ru.wikipedia.org/wiki/Modbus
пригодится
Аватара пользователя
SergeBS
Вымогатель припоя
Сообщения: 683
Зарегистрирован: Пт апр 11, 2008 11:24:53
Откуда: Владимир

Re: if() отказывается сравнивать значения

Сообщение SergeBS »

Разберись, что посылаешь и принимаешь. Я посылал и принимал байт, и хоть описано было unsigned char, но нигде присвоения символов не было. А у тебя видимо в UART запихиваются не байты, а символы. Короче ищи, где происходит замена байта на его символьное представление. Или опиши напрямую переменные как именно байты и компилятор покажет, где преобразование типов.
Человек - это звучит гордо, а обезьяна - объективно...
Ответить

Вернуться в «Разные вопросы по МК»