USB монитор за пару минут.

Тема в разделе "Глядите, что я сделал", создана пользователем kobzar32, 12 янв 2013.

  1. kobzar32

    kobzar32 Нерд

    [​IMG]
    С помощью специальной программы создаем дополнительный монитор размером 640 на 480...в свойствах ставим РАСШИРИТЬ РАБОЧИЙ СТОЛ НА ЭТОТ МОНИТОР...верхний левый уго этого монитора и будет наш графический экран 128 на 64...програмка интуитивна понятна (инверсия...уменьшение...яркость....контраст)....дерзайте)))))
    Подключаем дисплей 128 на 64 к ардуино вот по такой схеме.
    [​IMG]
    Загружаем вот такой скечт)))
    #define LCD_RESET_VAL 0x20
    #define LCD_CS2_VAL 0x10
    #define LCD_CS1_VAL 0x08
    #define LCD_E_VAL 0x20
    #define LCD_RS_VAL 0x08

    static uint8_t g_cs;


    void lcd_write(byte val, byte dt)
    {
    uint8_t valpc;
    valpc = (dt) ? LCD_RS_VAL : 0;

    PORTC = valpc;
    PORTB = LCD_RESET_VAL | g_cs | (val >> 6);
    PORTD = (val << 2);
    PORTC |= LCD_E_VAL;
    delayMicroseconds(1);
    PORTC = valpc;
    }


    void lcd_init()
    {
    g_cs = (LCD_CS1_VAL | LCD_CS2_VAL);
    delay(500);

    lcd_write(0x3e, 0);
    delay(500);

    lcd_write(0x3f, 0);
    delay(100);
    lcd_write(0xc0, 0);
    delay(10);
    lcd_write(0xb8, 0);
    delay(10);
    lcd_write(0x40, 0);
    delay(10);
    }


    void serial_init(long baud)
    {
    uint16_t baud_setting;

    UCSR0A = 0;
    baud_setting = (F_CPU / 8 / baud - 1) / 2;
    UBRR0H = baud_setting >> 8;
    UBRR0L = baud_setting;

    UCSR0B = 1 << RXEN0;
    }

    volatile uint8_t serial_data_ready()
    {
    return ((UCSR0A & (1 << RXC0)) >> RXC0);
    }

    volatile uint8_t serial_data_read()
    {
    return (UDR0);
    }


    void setup()
    {
    DDRB = 0x3f;
    DDRC = 0x3f;
    DDRD = 0xfc;

    lcd_init();

    g_cs = 0;


    serial_init(500000);

    g_cs = (LCD_CS1_VAL | LCD_CS2_VAL);
    for (uint8_t i = 0; i < 64; i++) {
    lcd_write(i, 1);
    delayMicroseconds(5);
    }
    }

    void loop()
    {
    static uint8_t x = 0;
    static uint8_t y = 0;
    static uint8_t ph = 0;
    static uint8_t pxdt[10];
    uint8_t dt;

    while (!serial_data_ready()) {
    ;
    }

    {
    dt = serial_data_read();

    switch (ph++) {
    case 0:
    if (dt & 0x80) {
    ph = 0; // invalid address, reset state
    } else {
    y = dt >> 4;
    g_cs = LCD_CS1_VAL + (dt & 0x08);
    lcd_write(0xb8 | y, 0);
    x = (dt & 0x07) << 3;
    }
    break;
    case 1:
    delayMicroseconds(5);
    lcd_write(0x40 | x, 0);
    pxdt[ph] = dt;
    break;
    case 2: case 3: case 4: case 5: case 6: case 7:
    lcd_write(pxdt[ph - 1], 1);
    pxdt[ph] = dt;
    break;
    case 8:
    lcd_write(pxdt[ph - 1], 1);
    delayMicroseconds(5);
    lcd_write(dt, 1);
    ph = 0;
    break;
    default:
    ph = 0;
    break;
    }
    }
    }
    После удачной загрузки на экране будет вот так
    [​IMG]
    Дальше инсталлируем программу
    USB_monito.zip
    После установки программы наажимаем свойства экрана должен появится дополнительный третий монитор размеро 640 на 480...ставим галочку РАСШИРИТЬ РАБОЧИЙ СТОЛ.
    [​IMG]
    затем необходимо запустить программу USB_monitor и сделать такие настройки
    [​IMG]
    На моем компе дополнительный монитор получился слева...соответственно графический экран слева вверху)))))
     

    Вложения:

    • USB_monito.zip
      Размер файла:
      439,7 КБ
      Просмотров:
      555
    Megakoteyka, hibiki, Dmitriy Kunin и 4 другим нравится это.
  2. Dmitriy Kunin

    Dmitriy Kunin Гик

    Круто! Буду пробовать, ибо надо!
    Если оно ещё под линукс единственным монитором заведётся, ну это я уже мечтать начал...
     
  3. Unixon

    Unixon Оракул Модератор

    Да, вдогонку еще вопросы по поводу программы...
    Кто ее автор и где ее сайт? Исходники доступны? А под GNU/Linux? :)
    Протокол какой-то стандартный или ad-hoc ?
     
  4. Unixon

    Unixon Оракул Модератор

    На Arduino Leonardo наверное можно вообще полноценный HID дисплей собрать... :rolleyes:
     
  5. kobzar32

    kobzar32 Нерд

    Автор мне не известен)
     
  6. igrok_by

    igrok_by Нерд

    Вот сайт китайского разработчика http://q61.org/en/ там даже и на цветном делать пытались.
    Придет моя Арбуина 2560, попробую на Симёновский дисплей загнать.
     
  7. RUBA

    RUBA Нуб

    Извините, а для чего это надо ?
     
  8. igrok_by

    igrok_by Нерд

    Ну чего прикольно иметь ещё один моник.
     
  9. RUBA

    RUBA Нуб

    Еслиб показал что на мониторе компе и на экранах, былоб намного понятно
     
  10. sZOOn

    sZOOn Нерд

    Очень интересная разработка! А если не расширять а дублировать монитор? :)
     
  11. igrok_by

    igrok_by Нерд

    Финт в том что у тебя на компе создается ещё один монитор. Когда я ставил софтину он у меня получился справа вверху. Затягиваешь туда окно проги какой ни будь и все.
     
  12. igrok_by

    igrok_by Нерд

    Подскажите есть разница в подключении этого дисплея к Атмеге8 и Меге 2560???
    Или в общем как пролить 2560, и куда подключить дисплей.
     
    Последнее редактирование: 21 мар 2014