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 + библиотека

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

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

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

*

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

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


Комментарии
  • 21h: нене ) без меня )
  • Серегй: Не совсем грабить)) если грабить можно и без рации, есть более благие цели, вы просто ответьте на мой вопрос,...
  • 21h: магазин грабить собрались? ) не, тут я не помощник ;)
  • Серегй: А что бы мне поймать чужую волну, что мне для этого нужно сделать? Допустим я купил данную рацию себе, мне...
  • 21h: слушать никто не запрещает. нет закона, который запрещает слушать. те, кто говорит иначе нагло врут. а если...
  • Серегй: Я хотел узнать могу ли я просто прийти с данной рацией baofeng uv-5r, допустим на объект, ну или вообще...
  • 21h: У меня есть только эти 2. По другим ничего не знаю. В интернете можно скачать инструкцию к вашей модели рации,...
  • Серегй: Добрый день! Хотелось бы задать пару вопросов по поводу раций, у Вас есть куда можно обратиться ТАТ.
  • 21h: потому, что нейросетью проще. яркость светофора меняется в зависимости от времени суток от маленькой красной...
  • Михаил: А зачем нейросеть? Почему цвет светофора определить без нейросетей?