Страница 1 из 3

USART AT Mega 8.

Добавлено: Чт авг 31, 2006 19:24:23
Дмитрий О
Смотрим статью Mamonth'a:

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

while (1)
{ 
UDR = 'a';
}; 
Все замечательно, но как передать целое слово? Например INIT?
Потом. Допустим приняли слово. Проанализировали, и надо тоже слово отправить. Как? Скоро быренько слеплю модельку для этого дела, уже МАХ232 купил, т што буду екскрементировать :)

Добавлено: Вт сен 05, 2006 17:19:46
avr123.nm.ru
Есть подробное упражнение 5 по работе в USART -
с примерами для начинающих
forum.roboclub.ru/IPBoard/index.php?showtopic=264

Re: статья про USART

Добавлено: Вт сен 05, 2006 17:34:03
avr123.nm.ru
Дмитрий О писал(а):Скоро быренько слеплю модельку для этого дела, уже МАХ232 купил, т што буду екскрементировать :)
Еще быстрей это делается в VMLAB или PROTEUS - примры идут в составе этих программ. только разбирайся да учись.

Добавлено: Чт сен 07, 2006 06:48:49
Mamonth
Хм... Резонно. Хороший вопрос. Сегодня проштудирую и дам ответ. Хотя сдается мне что надо смотреть в сторону символьных массивов. Но не уверен так что до вечера. :)

Добавлено: Чт сен 07, 2006 06:50:21
Mamonth
Стоп, вспомнил, есть такая штука printf (там даже есть форматированый вывод). Но! Надо подключать библиотеку, а размер программы увеличивается при этом "ни по детски" ;)
UPD: и на прием scanf

Добавлено: Чт сен 07, 2006 09:31:39
xelos
а ссылку на статью можно?

Добавлено: Чт сен 07, 2006 14:04:09
Mamonth

Добавлено: Чт сен 07, 2006 15:39:57
Дмитрий О
Отлично. Нашел то что надо. Резонный вопрос: где взять нормальный CVAVR? В нете поискал, скачал, в одном архиве ограничения на уарт и на размер файла, в другом пароль нужен. Разумеется, пароля нигде не нашел :(

Добавлено: Чт сен 07, 2006 18:40:45
Дмитрий О
Ну дык в нем и есть ограничения! Запрещает Rx Interrupt

Добавлено: Вт сен 12, 2006 17:20:09
Дмитрий О
Схемку накинул :) И вот какая гадость нарисовалась: когда у меня у модема БП сгорел, я попробовал 12В от самого компа на него подать. Больше модем не работал... Потом выяснил, что в модеме накрылась та МАХ232. Я думаю: ли сей девайс через 7805 от компа питать, она не полетит?

Добавлено: Ср сен 13, 2006 03:24:05
Mamonth
Твой модем накрылся из-за наличия отсутствия гальванической развязки. :) СОМ-порт не имеет никакой (вообще) гальванической развязки с остальными компонентами компьютера, в частности материнской платой, а потому, могут быть проблемы.
Я сей девайс питал от отдельного блока питания и никаких проблем не было.

Добавлено: Ср сен 13, 2006 15:22:05
Дмитрий О
Меня интересует, можно ли питать девай с ножки RTS т. е. не произойдет ли замыкание через МАХ232? Микруху жалко :)))

Добавлено: Чт сен 14, 2006 03:30:51
Mamonth
1. Мощности не хватит при постоянной работе, только на коротенькие моменты и то если поставишь кондер.
2. Работать будет в зависимости от фазы луны, вида контроллера материнской платы и длины проводов.
3. Про замыкание - вполне возможно...
4. Кроме того, на КОМ-ПОРТЕ амплитуда +/- 12 В ( а кое-где +/- 20), а после макса 0...+5 и инверсия в добавок.

Добавлено: Пт сен 15, 2006 07:52:12
Сэр Мурр
Дмитрий О писал(а):Меня интересует, можно ли питать девай с ножки RTS т. е. не произойдет ли замыкание через МАХ232? Микруху жалко :)))
На старых мат. платах такое возможно при токе потребления менее 10 ма. и уровнях сигнала +-12в. На современных могут быть уровни 0-+5в ,и номер не пройдёт.

Добавлено: Пт сен 15, 2006 12:33:14
Дмитрий О
Да какой там 5В... Я по ошибке к TX компа подключил светодиод... Палец обжокъ, светодиод спалил :)))

Добавлено: Пн сен 18, 2006 03:53:20
Mamonth
Сэр Мурр писал(а):На современных могут быть уровни 0-+5в ,и номер не пройдёт.
Какой 0-+5?!?!? Там -12/+12, это стандарт!

Добавлено: Пн сен 18, 2006 07:51:54
Дмитрий О
Ой, еще вот такой вопрос. Есть код:

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

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
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;
      };
   };
}
Я в Си не силен, и поэтому осмелюсь спосить, а куда нужно впихнуть код обработки прерывания?

Добавлено: Ср сен 20, 2006 10:18:54
Mamonth
Дмитрий О писал(а):Ой, еще вот такой вопрос. Есть код:

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

      rx_buffer_overflow=1;
      };
   };
Вот здесь....
}
Я в Си не силен, и поэтому осмелюсь спосить, а куда нужно впихнуть код обработки прерывания?
Ес-но подразумеваем что тебе нужна обработка именно этого прерывания ;)

Добавлено: Ср сен 20, 2006 12:35:58
Дмитрий О
Спасибо!

Добавлено: Ср сен 20, 2006 14:42:09
Spider
Ребят. Можно я вмешаюсь как типа Мудрый старец?
Если пишем под WinAVR

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

#include <stdio>

    static int uart_putchar(char c, FILE *stream);

    static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL,
                                             _FDEV_SETUP_WRITE);

    static int
    uart_putchar(char c, FILE *stream)
    {

      if (c == '\n')
        uart_putchar('\r', stream);
      loop_until_bit_is_set(UCSRA, UDRE);
      UDR = c;
      return 0;
    }

    int
    main(void)
    {
      init_uart();
      stdout = &mystdout;
      printf("Hello, world!\n");

      return 0;
    }
Но опять же не забываем про размер кода. Но иногда очень помогает.