INT 21h

Домашняя страница самого страшного прерывания

Использование UART для отладки микроконтроллера AVR Atmega + библиотека (обновлено 24.07.2011)

№ 3035 В разделах: Программирование Электроника от June 27th, 2011,

UART – Универсальный асинхронный приёмопередатчик. Прочитать о нем можно многое. Если не вдаваться в детали, хватит изучения странички в Wikipedia и на Easy Electronics.

Допустим, что вы уже прочитали все и хотите начать писать программу. А как проще всего отправить данные в UART? Конечно же воспользоваться готовой функцией из библиотеки stdio. Но для начала функции отправки надо прикинуться шлангом потоком. Делается это так:

В заголовочном файле говорим, что UART_console это поток с функцией-отправителем UART_Transmit и UART_Receive получателем.

static FILE UART_console = FDEV_SETUP_STREAM(UART_Transmit, UART_Receive, _FDEV_SETUP_RW);

Осталось только правильно написать функции отправки и приема:

void UART_Transmit(char c, FILE * stream)
{
    cli();
    if (c == '\n')
        UART_Transmit('\r', stream);
    loop_until_bit_is_set(UCSRA, UDRE);
    UDR = c;
    sei();
}

char UART_Receive(FILE * stream)
{

    loop_until_bit_is_set(UCSRA, RXC);
    if (UCSRA & _BV(FE))
        return _FDEV_EOF;
    if (UCSRA & _BV(DOR))
        return _FDEV_ERR;

    return UDR;

}

Ну а дальше все просто. Надо проинициализировать непосредственно UART, чтобы ножка микроконтроллера начала передавать сигнал.

void UART_Init(void)
{
    UBRRL = UBRRL_VALUE;
    UBRRH = 0;
    UCSRB = (1 << TXEN) | (1 << RXEN);
    UCSRC = (1 << URSEL) | (1 << USBS) | (3 << UCSZ0);
    stdout = &UART_console;
    stdin = &UART_console;
}

Не забудьте прочитать даташит к вашему микроконтроллеру. Данный код тестировался только на Atmega16, но должен работать и на других МК тоже.

Пример использования:
printf("error! TW_STATUS %#x. sending stop...\n", twst);

Такой подход займет очень много памяти. Если сделать строки статичными, то будет гораздо веселее. Для этого нужно подключить библиотеку pgmspace.h и использовать макрос PSTR.

Вот пример:
#include <avr/pgmspace.h>
#include <stdio .h>
#include "uart.h"

void main(void) {
UART_Init();
...
printf_P(PSTR("SYS: State is %d\n"), current_state);
...
}

\n это перенос на новую строку. Если не поставить, то следующий вывод строки начнется там же, где кончился последний.

Собственно библиотека: uart.c uart.h. Настроена на работу со скоростью 9600 бод, 8 бит данных, 1 стоповый бит, четности нет, контроля потока нет. Рекомендую использовать для работы PuTTY.

Нет комментариев »

Оставьте ваш комментарий »

Форма отправки комментария

CAPTCHA
*

Разрешенные HTML-теги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

RSS RSS Feed только для этого поста |


Комментарии
  • Игорь: Все настроил, еще раз просмотрел видео и методом научного тыка все настроил и сохранил, все работает и обе...
  • 21h: Здравствуйте, Игорь! Я не знаю :) Думаю аналогично согласно инструкции к вашей радиостанции.
  • Игорь: Добрый день, просмотрел Ваше видео все доступно и ясно для 8 ми канальных радеек, но мне нада настроить 69...
  • Гоги: Есть инструкция к Моторолкам – она подходит к серии Motorola TLKR T4… Т8. В конце сетка частот и...
  • 21h: торчок давно уже не обновлял, как только закрыл сайт где он работал. да, это морда для opentracker. без...
  • Buter: Какова дальнейшая жизнь торчка? Он кстати веб-интерфейсом для OpenTracker выступает? Без OpenTracker работать...
  • 21h: понятия не имею. гуглите инструкцию к вашей радейке и сверяйтесь с ней.
  • Денис: хочу их подружить с uv5r
  • Денис: t-388 walkie talkie на эти шпаргалочек нет,или как приминить ваши к их настройке?
  • John: Стекла для электроник – техночас.ру