Как прочитать int из AVR USART ?

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
CheerfulCalf
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Чт мар 22, 2012 13:25:31
Откуда: Odense, Danmark

Как прочитать int из AVR USART ?

Сообщение CheerfulCalf »

В чём проблема?

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

static unsigned char d2led[]={0x3F,0x6,0x5b,0x4F,0x66,0x6D,0x7D,0x7,0x7f,0x6F};

int main(void)
{
   //Проверяю терминал, всё нормально показывает
   USART_putstring("POEHALI! ");
   _delay_ms(100);

   //Для проверки дисплея показываю числа, всё отображается нормально.
   int i;
   for (i=0; i<10; i++)
   {
      upd7segment(i);
      _delay_ms(500);
   }
   while(1)
   {
   }
}

ISR(USART_RXC_vect) 
{ 
   char ReceivedByte; 
   ReceivedByte = UDR;
   uint8_t i = 0;
   i = (i<<8) + ReceivedByte;
   // надо показать полученное число (0...9) на дисплее. Ничего не показывает.
   upd7segment(i);
   // хотя назад в ком уходит правильное
   UDR = i;
}

inline void upd7segment(int16_t number)
{
	//if((number<0)||(number>9)) number=0;
	PORTB=d2led[number];		
}
Реклама
Аватара пользователя
igor-x
Мудрый кот
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Re: Как прочитать int из AVR USART ?

Сообщение igor-x »

переслать младший и старший байты отдельно, а после приема собрать в int
Реклама
CheerfulCalf
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Чт мар 22, 2012 13:25:31
Откуда: Odense, Danmark

Re: Как прочитать int из AVR USART ?

Сообщение CheerfulCalf »

igor-x писал(а):переслать младший и старший байты отдельно, а после приема собрать в int
Так у меня же 1 байт..
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Как прочитать int из AVR USART ?

Сообщение ploop »

Так вы посылаете байт или символ?
Реклама
Эиком - электронные компоненты и радиодетали
CheerfulCalf
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Чт мар 22, 2012 13:25:31
Откуда: Odense, Danmark

Re: Как прочитать int из AVR USART ?

Сообщение CheerfulCalf »

Ммм... вот так я делаю
Изображение
код такой. на экране всегда ноль, что бы не послал...

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

ISR(USART_RXC_vect) 
{ 
   char ReceivedByte; 
   ReceivedByte = UDR; // Fetch the received byte value into the variable "ByteReceived" 
   uint8_t i = 0;
   //i = (i<<8) + ReceivedByte;
   i=atoi(ReceivedByte);
   newMode = i;
   upd7segment(i);
   UDR = ReceivedByte;
}
Реклама
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Как прочитать int из AVR USART ?

Сообщение ploop »

Я не знаю, как работает эта фигня (да ещё с виртуальным терминалом), но предполагаю, что отсылает она символы. Так что отобразить надо принятый байт минус 32, тогда на символах 0-9 получите число.
Реклама
CheerfulCalf
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Чт мар 22, 2012 13:25:31
Откуда: Odense, Danmark

Re: Как прочитать int из AVR USART ?

Сообщение CheerfulCalf »

Так?
i=atoi(ReceivedByte-32);
он теперь показывает 0 (возможно) и 1, а остальное тоже как 0...
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Как прочитать int из AVR USART ?

Сообщение ploop »

Что такое atoi?
Просто i = ReceivedByte-32
CheerfulCalf
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Чт мар 22, 2012 13:25:31
Откуда: Odense, Danmark

Re: Как прочитать int из AVR USART ?

Сообщение CheerfulCalf »

с atoi в int перевожу.. а так опять не работает, даже 1 не показывает ((
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Как прочитать int из AVR USART ?

Сообщение ploop »

Можете дать описание этой функции?

Перепишите свою вот так и не парьтесь:

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

inline void upd7segment(unsigned char number)
{
   //if((number<0)||(number>9)) number=0;
   PORTB=d2led[number];      
}
CheerfulCalf
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Чт мар 22, 2012 13:25:31
Откуда: Odense, Danmark

Re: Как прочитать int из AVR USART ?

Сообщение CheerfulCalf »

так тоже не работает...

из википедии
Функция atoi (ASCII to integer, из ASCII в целое число) в языке программирования Си используется для приведения (конвертации) строки в числовой вид.

int atoi(const char *str)
Аргумент str означает строку, представленную в виде массива символов, содержащего символы знакового целого (тип int) числа. Строка должна быть нуль-терминированной, то есть оканчиваться символом «\0». Когда atoi() получает строку без числовых последовательностей, то в этом случае возвращает ноль (0). Если строка содержит корректную последовательность цифр, представляющих число 0, то также возвращается 0, при этом по возвращаемому числу невозможно определить содержит ли строка корректное число или нет.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Как прочитать int из AVR USART ?

Сообщение ploop »

А, смотрю, что-то знакомое.
Нет, вам надо работать именно с числами, строк тут нет. Тут тупо байты.
Аватара пользователя
igor-x
Мудрый кот
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Re: Как прочитать int из AVR USART ?

Сообщение igor-x »

CheerfulCalf писал(а):Так у меня же 1 байт..
так в теме обозначено int ? или под инт можно чтото другое быть? = 2 байта
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Как прочитать int из AVR USART ?

Сообщение ploop »

int ему нужен под upd7segment() как я понял.
CheerfulCalf
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Чт мар 22, 2012 13:25:31
Откуда: Odense, Danmark

Re: Как прочитать int из AVR USART ?

Сообщение CheerfulCalf »

ploop писал(а):int ему нужен под upd7segment() как я понял.
да
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Как прочитать int из AVR USART ?

Сообщение ploop »

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

ISR(USART_RXC_vect)
{
   char ReceivedByte;
   ReceivedByte = UDR;
   PORTB=d2led[ReceivedByte - 32];
   UDR = ReceivedByte;
}
И всё.
CheerfulCalf
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Чт мар 22, 2012 13:25:31
Откуда: Odense, Danmark

Re: Как прочитать int из AVR USART ?

Сообщение CheerfulCalf »

и так не работает...
если я дела так

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

ISR(USART_RXC_vect) 
{ 
   char ReceivedByte; 
   ReceivedByte = UDR; // Fetch the received byte value into the variable "ByteReceived" 
   uint8_t i = 0;
   i=ReceivedByte-32;
   UDR = ReceivedByte;
   PORTB=i;
}
и в терминале набираю от 0 до 9, то портБ принимает такие значения

0=0x00010000
1=0x00010001
2=0x00010010
3=0x00010011
4=0x00010100
5=0x00010101
6=0x00010011
7=0x00010111
8=0x00011000
9=0x00011001
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Как прочитать int из AVR USART ?

Сообщение ploop »

и в терминале набираю от 0 до 9, то портБ принимает такие значения
Обратите внимание на пятый бит - он всегда включен, т.е. 32 из числа не вычиталось. Мистика, или вы что-то не так делаете.
CheerfulCalf
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Чт мар 22, 2012 13:25:31
Откуда: Odense, Danmark

Re: Как прочитать int из AVR USART ?

Сообщение CheerfulCalf »

ploop писал(а):Мистика, или вы что-то не так делаете.
Даже не знаю...
сделал конечно бред полный

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

   i=ReceivedByte-32;
   i &= ~(0x10);
   newMode = i;
   upd7segment(i);
но зато теперь работает )
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Как прочитать int из AVR USART ?

Сообщение ploop »

А вот так?

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

ISR(USART_RXC_vect)
{
   unsigned char ReceivedByte;
   ReceivedByte = UDR;
   PORTB=d2led[ReceivedByte - 32];
   UDR = ReceivedByte;
}
ReceivedByte сделать unsigned char
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»