Например TDA7294

Форум РадиоКот • Просмотр темы - Как прочитать int из AVR USART ?
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср июл 30, 2025 23:38:51

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 28 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 13:08:14 
Нашел транзистор. Понюхал.

Зарегистрирован: Чт мар 22, 2012 13:25:31
Сообщений: 183
Откуда: Odense, Danmark
Рейтинг сообщения: 0
В чём проблема?

Код:
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];      
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 13:24:20 
Мудрый кот
Аватар пользователя

Карма: 3
Рейтинг сообщений: 60
Зарегистрирован: Пн ноя 29, 2010 15:58:43
Сообщений: 1816
Рейтинг сообщения: 0
переслать младший и старший байты отдельно, а после приема собрать в int


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 13:31:54 
Нашел транзистор. Понюхал.

Зарегистрирован: Чт мар 22, 2012 13:25:31
Сообщений: 183
Откуда: Odense, Danmark
Рейтинг сообщения: 0
igor-x писал(а):
переслать младший и старший байты отдельно, а после приема собрать в int

Так у меня же 1 байт..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 13:35:49 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Так вы посылаете байт или символ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 13:40:18 
Нашел транзистор. Понюхал.

Зарегистрирован: Чт мар 22, 2012 13:25:31
Сообщений: 183
Откуда: Odense, Danmark
Рейтинг сообщения: 0
Ммм... вот так я делаю
Изображение
код такой. на экране всегда ноль, что бы не послал...
Код:
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;
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 13:43:45 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Я не знаю, как работает эта фигня (да ещё с виртуальным терминалом), но предполагаю, что отсылает она символы. Так что отобразить надо принятый байт минус 32, тогда на символах 0-9 получите число.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 13:49:00 
Нашел транзистор. Понюхал.

Зарегистрирован: Чт мар 22, 2012 13:25:31
Сообщений: 183
Откуда: Odense, Danmark
Рейтинг сообщения: 0
Так?
i=atoi(ReceivedByte-32);
он теперь показывает 0 (возможно) и 1, а остальное тоже как 0...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 13:50:27 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Что такое atoi?
Просто i = ReceivedByte-32


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 13:52:49 
Нашел транзистор. Понюхал.

Зарегистрирован: Чт мар 22, 2012 13:25:31
Сообщений: 183
Откуда: Odense, Danmark
Рейтинг сообщения: 0
с atoi в int перевожу.. а так опять не работает, даже 1 не показывает ((


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 13:53:54 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Можете дать описание этой функции?

Перепишите свою вот так и не парьтесь:
Код:
inline void upd7segment(unsigned char number)
{
   //if((number<0)||(number>9)) number=0;
   PORTB=d2led[number];     
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 14:01:07 
Нашел транзистор. Понюхал.

Зарегистрирован: Чт мар 22, 2012 13:25:31
Сообщений: 183
Откуда: Odense, Danmark
Рейтинг сообщения: 0
так тоже не работает...

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 14:03:15 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
А, смотрю, что-то знакомое.
Нет, вам надо работать именно с числами, строк тут нет. Тут тупо байты.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 14:16:05 
Мудрый кот
Аватар пользователя

Карма: 3
Рейтинг сообщений: 60
Зарегистрирован: Пн ноя 29, 2010 15:58:43
Сообщений: 1816
Рейтинг сообщения: 0
CheerfulCalf писал(а):
Так у меня же 1 байт..


так в теме обозначено int ? или под инт можно чтото другое быть? = 2 байта


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 14:20:21 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
int ему нужен под upd7segment() как я понял.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 14:21:55 
Нашел транзистор. Понюхал.

Зарегистрирован: Чт мар 22, 2012 13:25:31
Сообщений: 183
Откуда: Odense, Danmark
Рейтинг сообщения: 0
ploop писал(а):
int ему нужен под upd7segment() как я понял.

да


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 14:31:38 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Код:
ISR(USART_RXC_vect)
{
   char ReceivedByte;
   ReceivedByte = UDR;
   PORTB=d2led[ReceivedByte - 32];
   UDR = ReceivedByte;
}


И всё.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 14:41:36 
Нашел транзистор. Понюхал.

Зарегистрирован: Чт мар 22, 2012 13:25:31
Сообщений: 183
Откуда: Odense, Danmark
Рейтинг сообщения: 0
и так не работает...
если я дела так
Код:
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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 14:46:34 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
и в терминале набираю от 0 до 9, то портБ принимает такие значения

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 14:53:39 
Нашел транзистор. Понюхал.

Зарегистрирован: Чт мар 22, 2012 13:25:31
Сообщений: 183
Откуда: Odense, Danmark
Рейтинг сообщения: 0
ploop писал(а):
Мистика, или вы что-то не так делаете.
Даже не знаю...
сделал конечно бред полный
Код:
   i=ReceivedByte-32;
   i &= ~(0x10);
   newMode = i;
   upd7segment(i);

но зато теперь работает )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как прочитать int из AVR USART ?
СообщениеДобавлено: Чт июн 07, 2012 14:55:51 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
А вот так?

Код:
ISR(USART_RXC_vect)
{
   unsigned char ReceivedByte;
   ReceivedByte = UDR;
   PORTB=d2led[ReceivedByte - 32];
   UDR = ReceivedByte;
}


ReceivedByte сделать unsigned char


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 28 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y