INT 21h

Hi, I am Vladimir Smagin, SysAdmin and Kaptain. Telegram Email / GIT / RSS / GPG

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

№ 3120 В разделах: Electronics Programming от 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 + библиотека

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

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Облачная платформа
Яндекс.Метрика

Fortune cookie: Sure, and of course I would vote for a woman for president! Quite naturally, we wouldn't have to pay her so much.