Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Ответить

USART AT Mega 8.

Чт авг 31, 2006 19:24:23

Смотрим статью Mamonth'a:
Код:
while (1)
{
UDR = 'a';
};

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

Вт сен 05, 2006 17:19:46

Есть подробное упражнение 5 по работе в USART -
с примерами для начинающих
forum.roboclub.ru/IPBoard/index.php?showtopic=264

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

Вт сен 05, 2006 17:34:03

Дмитрий О писал(а):Скоро быренько слеплю модельку для этого дела, уже МАХ232 купил, т што буду екскрементировать :)


Еще быстрей это делается в VMLAB или PROTEUS - примры идут в составе этих программ. только разбирайся да учись.

Чт сен 07, 2006 06:48:49

Хм... Резонно. Хороший вопрос. Сегодня проштудирую и дам ответ. Хотя сдается мне что надо смотреть в сторону символьных массивов. Но не уверен так что до вечера. :)

Чт сен 07, 2006 06:50:21

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

Чт сен 07, 2006 09:31:39

а ссылку на статью можно?

Чт сен 07, 2006 14:04:09

link

Чт сен 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

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

Ср сен 13, 2006 15:22:05

Меня интересует, можно ли питать девай с ножки RTS т. е. не произойдет ли замыкание через МАХ232? Микруху жалко :)))

Чт сен 14, 2006 03:30:51

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

Сэр Мурр писал(а):На современных могут быть уровни 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

Дмитрий О писал(а):Ой, еще вот такой вопрос. Есть код:
Код:
      rx_buffer_overflow=1;
      };
   };
Вот здесь....
}

Я в Си не силен, и поэтому осмелюсь спосить, а куда нужно впихнуть код обработки прерывания?

Ес-но подразумеваем что тебе нужна обработка именно этого прерывания ;)

Ср сен 20, 2006 12:35:58

Спасибо!

Ср сен 20, 2006 14:42:09

Ребят. Можно я вмешаюсь как типа Мудрый старец?
Если пишем под 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;
    }


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