INT 21h

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

ЖКИ (LCD) через USB с UART адаптером

№ 3120 В разделах: Программирование Электроника от July 17th, 2011,

Когда-то давно я замутил себе вот такую вот штуку.

Настроил lcd4linux, показывал погоду, все дела… А теперь я увлекаюсь электроникой гораздо больше, чем раньше и делаю штуки еще прикольнее. Но как-то так случилось, что китайский шнурок с PL2303, через который я смотрел UART с отлаживаемых МК сгорел. Конечно же, я полез в инет найти чем быстро можно заменить его и сделал вот такой вот UART адаптер на mega8, дерзко отодрав кварц от горелого китайского переходника. Сделал и заработало. А потом до меня дошло, что у меня уже есть аналогичное устройство! Теже принципы работы с компом (CDC), но в обратную сторону – вывод информации с компа. А почему бы не сделать на МК вход с UART и трансляцию на ЖКИ и комп через USB? Да легко!


Сначала прилепим кнопку по схеме ниже

А потом добавляем в код старого проекта несколько функций, дополнительное условие и еще чуть чуть кода

//устанавливаем скорость UART
//устанавливается 1 раз при прошивке. потом ее изменить нельзя! 
//все ваши отлаживаемые устройства должны делать вывод информации именно на этой скорости
#define BAUD 9600 
#include <util/setbaud.h>

//говорим где висит кнопка
#define BUTTON_SEL              5
#define BUTTON_DDR              DDRC
#define BUTTON_PIN              PINC

//пара нужных штук, чтобы хардварный UART заработал
void UART_Init(void)
{
    UBRR0L = UBRRL_VALUE;
    UBRR0H = 0;
    UCSR0B = (1 << RXEN0);
}
//тут мы принимаем байтик
uint8_t USART_vReceiveByte()
{
        while((UCSR0A&(1<<RXC0)) == 0);
        return UDR0;
}

int main(void)
{
...
UART_Init();
...
//немножко говнокодим
while(1) {              
        if (((BUTTON_PIN & (1 << BUTTON_SEL)) == 0)) {
                _delay_ms(500);
                switch(use_uart) {
                        case 0:
                                use_uart=1;
                                break;
                        case 1:
                                use_uart=0;
                                break;
                        }
        }
        usbuartPoll();
        if (use_uart==0) {
                while(usbuartRx(&data)) {
                        if(data == '\r') {
                                cursor &= ~(LCD_LINE_WIDTH-1);
                                lcdCommand(LCD_SET_CURSOR(cursor));
                        }
                        else if(data == '\n') {
                                cursor += LCD_LINE_WIDTH;
                                lcdCommand(LCD_SET_CURSOR(cursor));
                        }
                        else {
                                if(data >= 0x80)
                                        data = pgm_read_byte(encoding+data-0x80); 
                                lcdWriteData(data);
                                cursor++;
                        }
                }
        } else { 
                udata = USART_vReceiveByte();
                if(udata == '\r') {
                        cursor &= ~(LCD_LINE_WIDTH-1);
                        lcdCommand(LCD_SET_CURSOR(cursor));
                }
                else if(udata == '\n') {
                        usbuartTx(udata);
                        usbuartTx('\r');
                        cursor += LCD_LINE_WIDTH;
                        lcdCommand(LCD_SET_CURSOR(cursor));
                } else {
                        if(udata >= 0x80) 
                                udata = pgm_read_byte(encoding+udata-0x80);
                        usbuartTx(udata);
                        lcdWriteData(udata);
                        cursor++;
                }
        }
}
...
}

И вуаля! теперь по нажатию кнопки ваш ЖКИ, выводящий всякую хрень превращается в клевый отладочный инструмент с выводом на компьютер и на ЖКИ, если компа под рукой нет (хотя 5 вольт для питания таки надо :) ). Скачать проект и обновленную прошивку можно тут.

Вот так все это выглядит

А вот так выглядит работающая консолька c UART

ЗЫ Кстати, это отличная штука для работы с I2C устройствами. Можно собрать специальный адаптер для программирования\изучения некоторых устройств на компьютере, а потом подключения их к МК. Например, так можно запрограммировать часики DS1307 или поработать с термометром LM75AD. Но об этом подумаю в следующий раз.

Ссылки:
Эта статья на freehabr.ru
ЖКИ через USB
UART адаптер на mega8
Использование UART для отладки микроконтроллера Atmega + библиотека

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

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

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

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: Стекла для электроник – техночас.ру