№ 3120 В разделах: Electronics
Programming
от July 17th, 2011,
В подшивках: Arduino, Displays
Когда-то давно я замутил себе вот такую вот штуку.
Настроил 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 + библиотека
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.
Leave a Reply