Показано с 1 по 10 из 164

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Видеокарта для Arduino (arduinoVideioCard).

    Проекты с использованием дополнительных ЖКИ дисплеев меня как то не устраивали, потому что при их использовании требуется дополнительное место установки , лепка рамки и много других трудностей. К тому же у меня в автомобиле уже есть Монитор . Так что осталось состыковать Arduino с моим монитором. Вариант использования микросхемы MAX7456 нашел сразу , а вот протестировать получилось спустя несколько месяцев.



    Для чего это нужно?
    Для того что бы в случай умирания компа я мог управлять любыми системами автомобиля.
    Например:
    Панель приборов
    Климат контроль
    Управление навесным оборудованием, противотуманки, люк, стеклоподьемники и др.
    Окочательным решением в пользу использования ArduinoVideioCard стало USB FM Radio(Arduino Radio), в случаи слета операционки или других неполадок я останусь без Радио. Для этого мной также было проделана определенная работа с arduino TouchScreen , так как перспектива использования доп кнопок меня тоже напрягала.

    Перехожу к конкретике.
    Микросхема OSD MAX7456 умеет накладывать хранящиеся в ней символы на любое изображение. Так же умеет формировать свою синхру и работать без видео источника. Выход микросхемы подключается к свободному видео входу на мониторе AV1
    Нажмите на изображение для увеличения. 

Название:	final_misson_96x90_black.jpg 
Просмотров:	2235 
Размер:	34.4 Кб 
ID:	8301

    Так как я не собираюсь использовать ни каких видео источников , я настроил в скетче автоматическую синхронизацию, то есть у меня будет работать как с видео сигналом идущего с камеры так и без него.

    схема ArduinoVideoCard
    Нажмите на изображение для увеличения. 

Название:	max7456.png 
Просмотров:	7504 
Размер:	2.2 Кб 
ID:	8300




    Scetch для Arduino nano

    PHP код:
    #define VSYNC 2 // INT0
    #define DATAOUT 11//MOSI
    #define DATAIN  12//MISO
    #define SPICLOCK  13//sck
    #define MAX7456SELECT 10//ss


    #define DMM_reg   0x04
    #define DMAH_reg  0x05
    #define DMAL_reg  0x06
    #define DMDI_reg  0x07
    #define VM0_reg   0x00
    #define VM1_reg   0x01

    #define VIDEO_BUFFER_DISABLE 0x01
    #define MAX7456_RESET 0x02
    #define VERTICAL_SYNC_NEXT_VSYNC 0x04
    #define OSD_ENABLE 0x08
    #define SYNC_MODE_AUTO 0x00
    #define SYNC_MODE_INTERNAL 0x30
    #define SYNC_MODE_EXTERNAL 0x20
    #define VIDEO_MODE_PAL 0x40
    #define VIDEO_MODE_NTSC 0x00

    #define BLINK_DUTY_CYCLE_50_50 0x00
    #define BLINK_DUTY_CYCLE_33_66 0x01
    #define BLINK_DUTY_CYCLE_25_75 0x02
    #define BLINK_DUTY_CYCLE_75_25 0x03

    #define BLINK_TIME_0 0x00
    #define BLINK_TIME_1 0x04
    #define BLINK_TIME_2 0x08
    #define BLINK_TIME_3 0x0C

    #define BACKGROUND_BRIGHTNESS_0 0x00
    #define BACKGROUND_BRIGHTNESS_7 0x10
    #define BACKGROUND_BRIGHTNESS_14 0x20
    #define BACKGROUND_BRIGHTNESS_21 0x30
    #define BACKGROUND_BRIGHTNESS_28 0x40
    #define BACKGROUND_BRIGHTNESS_35 0x50
    #define BACKGROUND_BRIGHTNESS_42 0x60
    #define BACKGROUND_BRIGHTNESS_49 0x70

    #define BACKGROUND_MODE_GRAY 0x40

    #define CLEAR_display 0x04
    #define CLEAR_display_vert 0x06
    #define END_string 0xff
    #define ENABLE_display 0x08
    #define ENABLE_display_vert 0x0c
    #define MAX7456_reset 0x02
    #define DISABLE_display 0x00


    #define WHITE_level_80 0x03
    #define WHITE_level_90 0x02
    #define WHITE_level_100 0x01
    #define WHITE_level_120 0x00

    #define MAX_screen_size 390
    #define MAX_screen_rows 16

     
    byte spi_junkeeprom_junk;
     
    int x;
    //////////////////////////////////////////////////////////////
    void setup()
    {
      
    Serial.begin(115200);
      
    Serial.flush();

      
    pinMode(MAX7456SELECT,OUTPUT);
      
    digitalWrite(MAX7456SELECT,HIGH); 

      
    pinMode(DATAOUTOUTPUT);
      
    pinMode(DATAININPUT);
      
    pinMode(SPICLOCK,OUTPUT);
      
    pinMode(VSYNCINPUT);

      
    SPCR = (1<<SPE)|(1<<MSTR);
      
    spi_junk=SPSR;
      
    spi_junk=SPDR;
      
    delay(250);

      
    digitalWrite(MAX7456SELECT,LOW);
      
    spi_transfer(VM0_reg);
      
    spi_transfer(MAX7456_reset);
      
    digitalWrite(MAX7456SELECT,HIGH);
      
    delay(500);

      
    digitalWrite(MAX7456SELECT,LOW);
      for (
    0MAX_screen_rowsx++)
      {
        
    spi_transfer(0x10);
        
    spi_transfer(WHITE_level_90);
      }

      
    spi_transfer(VM0_reg);
        
    spi_transfer(VERTICAL_SYNC_NEXT_VSYNC|OSD_ENABLE|VIDEO_MODE_PAL);

      
    spi_transfer(VM1_reg);
      
    spi_transfer(BLINK_TIME_3);

      
    digitalWrite(MAX7456SELECT,HIGH);
      
    delay(100);
    }
     
    /////////////////////////////////////////////////////////////
    void loop()
    {
      
    OSD_write_to_screen("http://compcar.ru"210,1);
      
    OSD_write_to_screen("http://compcar.ru"220,0);
      
    OSD_write_to_screen("Привет!!!"1161,1); 
      
    OSD_write_to_screen("ПРИВЕТ!!!"1171,0);
      
    OSD_write_to_screen("http://compcar.ru"13130,1);
      
    OSD_write_to_screen("http://compcar.ru"13140,0);

      
    delay(5000);
    }
    //////////////////////////////////////////////////////////////
    byte spi_transfer(volatile byte data)
    {
      
    SPDR data;            
      while (!(
    SPSR & (1<<SPIF)))  
      {
      };
      return 
    SPDR;        
    }
    // ============================================================   
    void OSD_write_to_screen(const char s[], byte xbyte ybyte blinkbyte invert){
      
    unsigned int linepos;
      
    byte local_count;
      
    byte settingschar_address_hichar_address_lo;
      
    byte screen_char;

      
    local_count 0;

      
    char_address_hi 0;
      
    char_address_lo 0;

      
    linepos y*30+x;

      
    char_address_hi linepos >> 8;
      
    char_address_lo linepos;

      
    settings B00000001;

      if (
    blink) {
        
    settings |= (<< 4);    
      }

      if (
    invert){
        
    settings |= (<< 3);    
      }


      
    digitalWrite(MAX7456SELECT,LOW);

      
    spi_transfer(DMM_reg); 
      
    spi_transfer(settings);

      
    spi_transfer(DMAH_reg); 
      
    spi_transfer(char_address_hi);

      
    spi_transfer(DMAL_reg); 
      
    spi_transfer(char_address_lo);

      while(
    s[local_count]!='\0'
      {
        
    screen_char s[local_count];
          if(
    screen_char != 208 && screen_char != 209)
          {
            
    spi_transfer(DMDI_reg);
            
    spi_transfer(screen_char);
          }
        
    local_count++;
      }

      
    spi_transfer(DMDI_reg);
      
    spi_transfer(END_string);

      
    spi_transfer(DMM_reg); 
      
    spi_transfer(B00000000);

      
    digitalWrite(MAX7456SELECT,HIGH);

    Последний раз редактировалось Chip; 10.09.2018 в 10:51.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •