Страница 12 из 17 ПерваяПервая ... 267891011121314151617 ПоследняяПоследняя
Показано с 111 по 120 из 164
  1. #111
    Пользователь
    Регистрация
    01.11.2016
    Возраст
    43
    Сообщений
    28
    Вес репутации
    99

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

    Я хотел бы уточнить свой вопрос: как происходит в коде формирование пакета для MAX7456?

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

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

    Я собирал и у меня все работало
    Скорее всего при копировании первую строчку не докопировал, ага так и есть открыл скетч там все в порядке.
    исправился, добавил потеряную строчку
    Все остальные здесь копипастили, можете по дате размещения проверить
    На момент публикации в рунете не было ни одной статьи
    Последний раз редактировалось Chip; 01.11.2016 в 19:11.

  3. #113
    Пользователь
    Регистрация
    01.11.2016
    Возраст
    43
    Сообщений
    28
    Вес репутации
    99

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

    Проблема в том, что я пытаюсь написать свой код под Ардуино. И не могу понять, как там формируются команды для передачи в SPI для MAX7456. Сейчас перевожу даташит на MAX7456.
    У меня задача в том, чтобы не символы выводить, а графическое изображение, изображение я разбил на символы, но надо не только вывести их на экран, а еще и смещать все вместе по команде с ардуино. Никаких переменных, только статическая картинка. Типа гироскопа автомобиля.
    Последний раз редактировалось onemamba; 01.11.2016 в 20:54.

  4. #114
    Пользователь
    Регистрация
    01.11.2016
    Возраст
    43
    Сообщений
    28
    Вес репутации
    99

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

    Цитата Сообщение от Chip Посмотреть сообщение
    // ================================================== ==========
    void OSD_write_to_screen(const char s[], byte x, byte y, byte blink, byte invert){
    unsigned int linepos;
    byte local_count;
    byte settings, char_address_hi, char_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 |= (1 << 4);
    }

    if (invert){
    settings |= (1 << 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);
    }[/PHP]
    Здравствуйте, прошу прокомментировать данный кусочек кода.Не совсем понимаю, как работает.
    В первой части вы создаете адреса:
    (
    void OSD_write_to_screen(const char s[], byte x, byte y, byte blink, byte invert)
    ),

    а во второй отправляете их на MAX:
    (
    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)
    ) ?
    Последний раз редактировалось onemamba; 02.11.2016 в 14:05.

  5. #115
    Пользователь
    Регистрация
    01.11.2016
    Возраст
    43
    Сообщений
    28
    Вес репутации
    99

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

    // ================================================== ==========
    void OSD_write_to_screen(const char s[], byte x, byte y, byte blink, byte invert){ //создание функции OSD_write_to_screen
    // с параметрами(числовая константа "s", байт "x", байт "y",байт "blink", байт "invert")

    unsigned int linepos; //создание "linepos" без знаковой переменной
    byte local_count; //создание байта "local_count"
    byte settings, char_address_hi, char_address_lo; //создание байт "settings, char_address_hi, char_address_lo"
    byte screen_char; //создание байта "screen_char"

    local_count = 0; // Присвоение байту "local_count" значения "0"

    char_address_hi = 0; // Присвоение байту "char_address_hi" значения "0"
    char_address_lo = 0; // Присвоение байту "char_address_hi" значения "0"

    linepos = y*30+x; // Присвоение байту "linepos" значения выражения "y*30+x" Где берутся значения для "x" и "y"

    char_address_hi = linepos >> 8; // Присваивается байту "char_address_hi" значения 2х байтовой переменной "linepos".
    // Вот это ">>" означает, что значение не может быть более 8 бит?
    char_address_lo = linepos; //Присваивается байту "char_address_lo" значения 2х байтовой переменной "linepos"
    // Я понимаю, что ждя MAX надо переслать два байта информации (старший байт и младший байт), видимо они и именуются тут
    // "char_address_hi, char_address_lo". Подозреваю, что двухбайтный "linepos" содержит этот адрес из двух байт, но синтаксиса не понимаю.
    settings = B00000001; // Присвоение байту "setting" значения в восьмеричной "B00000001" это 1 в десятичной

    if (blink) { // если "значение параметра "blink"" - условие? условие чего, наличия параметра?
    settings |= (1 << 4); //выполнить байт "setting" не равен выражению "(1 << 4)"
    }

    if (invert){ // если "значение параметра "invert"" - условие? условие чего, наличия параметра?
    settings |= (1 << 3); //выполнить байт "setting" не равен выражению "(1 << 3)"
    }


    Попытался пошагово прокомментировать, чтобы понять для себя. поправьте, где ошибся пожалуйста.

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

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

    Я так давно с ним разбирался, уже все забыл
    По синтактаксису
    Вот это ">>" это побитовый сдвиг вправо на восемь бит
    char_address_hi - это старший байт адреса
    char_address_lo - это младший байт адреса
    settings |= (1 << 4); установить бит 4
    settings |= (1 << 3); установить бит 3
    Последний раз редактировалось Chip; 02.11.2016 в 15:25.

  7. #117
    Пользователь
    Регистрация
    01.11.2016
    Возраст
    43
    Сообщений
    28
    Вес репутации
    99

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

    Цитата Сообщение от Chip Посмотреть сообщение
    Я так давно с ним разбирался, уже все забыл
    По синтактаксису
    Вот это ">>" это побитовый сдвиг вправо на восемь бит
    char_address_hi - это старший байт адреса
    char_address_lo - это младший байт адреса
    settings |= (1 << 4); установить бит 4
    settings |= (1 << 3); установить бит 3

    Цитата Сообщение от Chip Посмотреть сообщение
    Вот это ">>" это побитовый сдвиг вправо на восемь бит
    - спасибо огромное, у меня завис поиск, пока пытался ему пояснить, что я хочу узнать, для чего эти знаки! Это многое объясняет, значит из двух байтовой переменной linepos вытесняется пошагово 8 бит младшего адреса, а его место занимает адрес старшего адреса, который уже укладывается в однобайтовую переменную char_address_hi.
    Соответственно во втором выражении ничего не сдвигается и при присвоении linepos к char_address_lo, а т.к. char_address_lo - однобайтовая, то старший байт просто теряется и остается один байт - младший! УРА!!!
    settings |= (1 << 4); установить бит 4 - этого пока не понял... зачем это делать, пойду поищу в интернете еще.
    Последний раз редактировалось onemamba; 02.11.2016 в 16:06.

  8. #118
    Пользователь
    Регистрация
    01.11.2016
    Возраст
    43
    Сообщений
    28
    Вес репутации
    99

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

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

    digitalWrite(MAX7456SELECT,LOW); // переводим MAX в режим приема данных

    spi_transfer(DMM_reg); // команда отправляющая через интерфейс SPI в MAX7456 данные (DMM_reg это 0x04)
    // в начале были задекларированы. почему 0х04? DMM - режим работы памяти. 04H - записываемый регистр из даташита?
    spi_transfer(settings);

    spi_transfer(DMAH_reg); // команда отправляющая через интерфейс SPI в MAX7456 данные (старший байт) или подготовка MAX
    // к приему старшего байта адреса?
    spi_transfer(char_address_hi); // команда отправляющая через интерфейс SPI в MAX7456 данные где взять символ (старший байт)

    spi_transfer(DMAL_reg); // команда отправляющая через интерфейс SPI в MAX7456 данные (младший байт) или подготовка MAX
    // к приему младшего байта адреса?
    spi_transfer(char_address_lo); // команда отправляющая через интерфейс SPI в MAX7456 данные где взять символ (младший байт)

    while(s[local_count]!='\0') // Запуск цикла с числовой константой "s" пока выражение (s[local_count]!='\0') - истина,
    //будет выполнятся. синтаксис не понятен : s[local_count] - числовая константа байта "local_count"?
    {
    screen_char = s[local_count]; //
    if(screen_char != 208 && screen_char != 209) // если байт "screen_char" не равен 208 и не равен 209 то...
    //промежуток между 208 и 209 является условием... не понятно
    {
    spi_transfer(DMDI_reg); // отправить в MAX "DMDI_reg 0x07" вход данных памяти дисплея
    spi_transfer(screen_char); // и отправить туда же байт "screen_char"
    }
    local_count++; // байт "local_count" +1
    }

    spi_transfer(DMDI_reg); // отправить в MAX "DMDI_reg 0x07" - вход данных памяти дисплея
    spi_transfer(END_string); // отправить в MAX "END_string 0xff" - конец строки, это команда SPI ?

    spi_transfer(DMM_reg); // отправить в MAX "DMDI_reg 0x07" - вход данных памяти дисплея
    spi_transfer(B00000000); // отправить в MAX "B00000000" нуль... для сего его отправлять?

    digitalWrite(MAX7456SELECT,HIGH); // конец приема данных.

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

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

    spi_transfer(END_string); // отправить в MAX "END_string 0xff" - конец строки, это команда SPI ?
    нет, это команда для MAX7456

  10. #120
    Пользователь
    Регистрация
    01.11.2016
    Возраст
    43
    Сообщений
    28
    Вес репутации
    99

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

    Вот это больше всего не понятно, прокомментируйте, если не сложно:
    linepos = y*30+x; // Присвоение байту "linepos" значения выражения "y*30+x" Где берутся значения для "x" и "y"

Страница 12 из 17 ПерваяПервая ... 267891011121314151617 ПоследняяПоследняя

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

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

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

Ваши права

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