mx88v462 Импорт библиотеки.

Тема в разделе "Arduino & Shields", создана пользователем Alexey Zhigalo, 19 ноя 2015.

  1. Здравствуйте!

    Имею в наличии 7-ми дюймовый экран от портативного DVD плеера.
    [​IMG]

    На фото ресивер на процессоре (чипе) mx88v462.

    В поисках в интеренете для Arduino готовых библиотек не нашел.

    Но натолкнулся на страничку, http://radiokot.ru/forum/viewtopic.php?p=2068630#p2068630

    Но проблема, там используется не Arduino IDE, а что то другое, возможно Avr Studio и т.д.

    В этом архиве http://radiokot.ru/forum/download/file.php?id=188019 пример.

    Но проблема в том что в Arduino IDE нет множество библиотек.

    В итоге я кое-как понаходил библиотеки и импортировал их.

    Но все равно куча ошибок.
    Архив: http://arduino.ru/sites/default/files/u13609/osd.jpg

    ---------------------------------------------------------------------------

    ВМЕСТО .JPG ДОЛЖНО БЫТЬ .RAR так как не дает загрузить.

    ---------------------------------------------------------------------------

    И все равно куча ошибок...

    Код (C++):

    In file included from Persistant.h:7:0,
                     from system.h:7,
                     from I2C.c:1:
    Clock.h:7: error: unknown type name 'class'
    class Clock {
    ^
    Clock.h:7: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
    class Clock {
                 ^
    In file included from Persistant.h:8:0,
                     from system.h:7,
                     from I2C.c:1:
    CalibratedServo.h:8: error: unknown type name 'class'
    class CalibratedServo : public Servo {
    ^
    CalibratedServo.h:8: error: expected '=', ',', ';', 'asm' or '__attribute__' before ':' token
    class CalibratedServo : public Servo {
                           ^
    In file included from Persistant.h:9:0,
                     from system.h:7,
                     from I2C.c:1:
    Programme.h:8: error: unknown type name 'class'
    class Programme {
    ^
    Programme.h:8: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
    class Programme {
                     ^
    In file included from system.h:7:0,
                     from I2C.c:1:
    Persistant.h:22: error: unknown type name 'class'
    class PersistantSettings {
    ^
    Persistant.h:22: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
    class PersistantSettings {
                              ^
    In file included from I2C.c:1:0:
    system.h:15: error: unknown type name 'class'
    class System {
    ^
    system.h:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
    class System {
                  ^
    I2C.c: In function 'SDA_SET':
    I2C.c:23: error: 'I2C_DDR' undeclared (first use in this function)
             cbi(I2C_DDR, SDA_PIN);
                 ^
    I2C.c:23:13: note: each undeclared identifier is reported only once for each function it appears in
    I2C.c:23: error: 'SDA_PIN' undeclared (first use in this function)
             cbi(I2C_DDR, SDA_PIN);
                          ^
    I2C.c:24: error: 'I2C_PORT' undeclared (first use in this function)
             cbi(I2C_PORT, SDA_PIN);
                 ^
    I2C.c:32: error: 'I2C_DELAY' undeclared (first use in this function)
       _delay_us(I2C_DELAY);
                 ^
    I2C.c: In function 'SCL_SET':
    I2C.c:38: error: 'I2C_DDR' undeclared (first use in this function)
             cbi(I2C_DDR, SCL_PIN);
                 ^
    I2C.c:38: error: 'SCL_PIN' undeclared (first use in this function)
             cbi(I2C_DDR, SCL_PIN);
                          ^
    I2C.c:39: error: 'I2C_PORT' undeclared (first use in this function)
             cbi(I2C_PORT, SCL_PIN);
                 ^
    I2C.c:47: error: 'I2C_DELAY' undeclared (first use in this function)
       _delay_us(I2C_DELAY);
                 ^
    I2C.c: In function 'StartCondition':
    I2C.c:15: error: 'I2C_PORTIN' undeclared (first use in this function)
    #define SCL_High      getbit(I2C_PORTIN,SCL_PIN)!=0
                                  ^
    I2C.c:60:13: note: in expansion of macro 'SCL_High'
             if((SCL_High)&&(SDA_Low))  
                 ^
    I2C.c:15: error: 'SCL_PIN' undeclared (first use in this function)
    #define SCL_High      getbit(I2C_PORTIN,SCL_PIN)!=0
                                             ^
    I2C.c:60:13: note: in expansion of macro 'SCL_High'
             if((SCL_High)&&(SDA_Low))  
                 ^
    I2C.c:14: error: 'SDA_PIN' undeclared (first use in this function)
    #define SDA_Low       getbit(I2C_PORTIN,SDA_PIN)==0
                                             ^
    I2C.c:60:25: note: in expansion of macro 'SDA_Low'
             if((SCL_High)&&(SDA_Low))  
                             ^
    I2C.c: In function 'Send_Byte':
    I2C.c:13: error: 'I2C_PORTIN' undeclared (first use in this function)
    #define SDA_High      getbit(I2C_PORTIN,SDA_PIN)!=0
                                  ^
    I2C.c:99:8: note: in expansion of macro 'SDA_High'
         if(SDA_High) cAcknowledge = 1; // No Acknowledge  
            ^
    I2C.c:13: error: 'SDA_PIN' undeclared (first use in this function)
    #define SDA_High      getbit(I2C_PORTIN,SDA_PIN)!=0
                                             ^
    I2C.c:99:8: note: in expansion of macro 'SDA_High'
         if(SDA_High) cAcknowledge = 1; // No Acknowledge  
            ^
    I2C.c: In function 'Read_Byte':
    I2C.c:16: error: 'I2C_PORTIN' undeclared (first use in this function)
    #define SCL_Low       getbit(I2C_PORTIN,SCL_PIN)==0
                                  ^
    I2C.c:119:15: note: in expansion of macro 'SCL_Low'
             while(SCL_Low)  
                   ^
    I2C.c:16: error: 'SCL_PIN' undeclared (first use in this function)
    #define SCL_Low       getbit(I2C_PORTIN,SCL_PIN)==0
                                             ^
    I2C.c:119:15: note: in expansion of macro 'SCL_Low'
             while(SCL_Low)  
                   ^
    I2C.c:13: error: 'SDA_PIN' undeclared (first use in this function)
    #define SDA_High      getbit(I2C_PORTIN,SDA_PIN)!=0
                                             ^
    I2C.c:126:12: note: in expansion of macro 'SDA_High'
             if(SDA_High) cRetval++;  
                ^
    unknown type name 'class'
    ПОЖАЛУЙСТА, ПОМОГИТЕ, очень надо поднять данный дисплей. БУДУ ОЧЕНЬ БЛАГОДАРЕН, СПАСИБО.
     
  2. Alex19

    Alex19 Гуру

    Данный код, точно работает?
    Вы понимаете, что код написан для atmega16 с частотой 8Mhz?

    Может потребуется разбираться в разнице между ардуино (atmega328p и т.д., не знаю, что у Вас) и atmega16.

    UPD. Надеюсь ответы положительные, в прищепке проект, ошибок нет, но проверить не могу, нет данного экрана.

    Удачи.
     

    Вложения:

    Последнее редактирование: 19 ноя 2015
    Alexey Zhigalo нравится это.
  3. Да, есть даже видео.



    Да, у меня Arduino nano Atmega328 16Mhz.

    Да, ошибок нет, но пришлось "uCHAR_FLASH" заменить на "char".
    Сегодня тоже возможности проверить не могу..
    Завтра отпишусь, как будет работать.
    Большое Вам спасибо)
     
  4. Подключил дисплей, залил код, правда отредактировал "System.h"
    Код (C++):
    #ifndef SYSTEM_H_
    #define SYSTEM_H_

    #define uCHAR_FLASH    uint8_t __attribute__ ((progmem))
    #define READ_FLASH(x)  pgm_read_byte(&x)

    #define setbit(PORT,PIN,DATA) if(DATA){(PORT)|=_BV(PIN);}else{(PORT)&=~_BV(PIN);}
    #define getbit(x,y)((x&(1<<y)) ? 1:0)
    #define sbi(PORT,PIN) (PORT)|=_BV(PIN)
    #define cbi(PORT,PIN) (PORT)&=~_BV(PIN)
    #define  outb(addr, data)   addr = (data)
    #define  inb(addr)   (addr)
         
    #define F_CPU 16000000UL      //8000000UL    

    #define I2C_DELAY      5            

    #define SDA_PIN     4                //1
    #define SCL_PIN     5                //0
    #define I2C_PORTIN  PINC      //PINB
    #define I2C_PORT    PORTC   //PORTB
    #define I2C_DDR     DDRC      //DDRB

    #endif
    В "PAL_16_9.cpp" поменял "uCHAR_FLASH" на "unsigned char".

    Дисплей отреагировал.

    Если инициализировать только дисплей ( MX88V46X_Initial();) то на дисплее только вот это:
    IMG_20151120_135323.jpg
    одни полосы мерцают.

    А если OSD_Initial(); и OSD_ShowText(temp, 0, 0, 6); то:

    IMG_20151120_135253.jpg
    Тоже полосы, но другие)

    В чем проблема, не знаю...
     
  5. Alex19

    Alex19 Гуру

    Там uint8_t (unsigned char) array[] PROGMEM, то есть данные будут хранится во флэш памяти. Далее программа, будет искать данные во флеш памяти, к примеру.

    Код (C++):
    I2C_WriteByte(MXIC_ID,GAMMA_PORT,READ_FLASH(MXIC_GAMMA_TAB[i]));
    Где READ_FLASH
    Код (C++):
    #define READ_FLASH(x)  pgm_read_byte(&x)
    Обратите внимание на данный код, на Вашей ардуине (atmega328) другой пин мапинг для I2C. Можно посмотреть тут - https://www.arduino.cc/en/Hacking/PinMapping, порт С, 4 и 5 пин соответственно.
    Код (C++):
    #define SDA_PIN     1      
    #define SCL_PIN     0
    #define I2C_PORTIN  PINB
    #define I2C_PORT    PORTB
    #define I2C_DDR     DDRB
    Так же изучите, инициализацию и передачу данных по i2C для atmega328, не увидел где вообще инициализация i2C. Может что-то упустил, только приехал с поездки.

    UPD.
    Немного запутался. Поэтому зачеркнул текст вверху.
    Сама библиотека, какая-то любопытная, видимо написана для контролеров без апаратной поддержки I2C. Поэтому код выше можно не менять, просто подключитесь на те же пины. Пин мапинг можно посмотреть тут - https://www.arduino.cc/en/Hacking/PinMapping.
    UPD.

    У каждого свой подход, мне нравится идти по пунктам.
    1. Подключение (может на фото, просто подсветка). Если у Вас, такая же плата как и на этом форуме - http://radiokot.ru/forum/viewtopic.php?p=2068630#p2068630, уточнить подключение, логические уровни для I2C (у ардуины 5V, может там требуется 3,3V или 1,8V).
    2. Проверьте адрес I2C, в коде 0x28. К примеру с помощью I2cScanner - http://playground.arduino.cc/Main/I2cScanner. Если не выдаст адрес или беда с подключением или проблемы с платой.
    3. Проверять код, по шагам.

    UPD. Меня заинтриговало использование данного устройства на ЧПУ, или это просто прикол, если нет, не могли бы Вы пояснить смысл данного устройства.
    .
     
    Последнее редактирование: 20 ноя 2015
  6. Изначально было "uCHAR_FLASH", не хотело компилироваться.

    В System.h есть еще ети строки, что смутило меня:
    Код (C++):
    #define uCHAR_FLASH    uint8_t __attribute__ ((progmem))
    #define READ_FLASH(x)  pgm_read_byte(&x)
    Надеюсь сделал правильно.

    да, на страничке:
    http://radiokot.ru/forum/viewtopic.php?f=61&t=105858
    В System.h решил заменить на 4,5 пин, так сказать по стандартам)

    Абсолютно согласен с Вами.
    При подключении просто питания экран просто белый.
    Тут же экран при инициализации начал выдавать какой то шум и после этого мерцающие полосы. на фото плохо видно, они дергаются.
    Плата похожая но не совсем такая, чип (микросхема) такая же.
    На счет питания, все питание осталось от родного DVD, GND объединил.

    На плате GND +5v +3.3v RST SCL SDA GND
    [​IMG]
     
    Последнее редактирование: 23 ноя 2015
  7. На счет уровней не знаю. От основной платы не измерял.

    Хотя на страничке:
    http://radiokot.ru/forum/viewtopic.php?f=61&t=105858

    На счет адреса не знаю, проверю, хотя думаю если бы не совпадал бы адрес, то шумов возможно и не было бы, могу ошибаться.
    Идея не моя, думаю для корректировки и настройки, так как на ЧПУ все автоматически и вмешательства не требуется, может для каких то других целей
    У меня же совсем другие планы на этот дисплей.
     
  8. Alex19

    Alex19 Гуру

    Я надеялся, что у Вас такая же плата и Вы подключаетесь так же как они, начнем по порядку. Но раз другая, пробежался по даташиту (увы он не полный).
    1. Чип mx88v462 подключается и работает в 2 вариантах. 1 это I2C, второе 3-wire (предположу, что это SPI 3-проводной) в зависимости от подключения BUSTYPE, на землю I2C, на питание 3-wire. У Вас I2C, судя по фото.
    2. Уровни питания.
    Это очень плохо, в даташите написано следующие.
    О чем это говорит питание самой панели 3,3-5V, входы\выходы работают на 3,3V, самого чипа 2,5V. Если на плате нет конвертера уровней с 5V на 3,3V, то подключение к ардуино на Atmega328 (у нее 5V) на прямую может убить этот чип.

    А судя по следующему
    Там его нет, будем надеяться, что чип выжил.

    Обычно когда существуют разность логических уровней, подключают через Logic Level Converter
    [​IMG]
    Или делают его сами. Увы как его сделать не подскажу, плохо разбираюсь в электронике.

    3. Дальше нужно разобраться с скоростью передачи данных.
    Как я понял из форума
    Значит I2C работает на 100кГц.

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

    Дальше, просто написание кода. Можно пользоваться даже библиотеками ардуино, это не важно.

    Шумы это шумы, они ни говорят об адресе.

    Навряд ли, сам работаю на ЧПУ с линейкой там делать нечего. Да и по другому такие вещи делаются.

    UPD. Прочел в спешке, работа отрывает.
    Сам работаю с ардуинами на базе AVR под Arduino IDE 1.0.x, а те что на ARM под 1.6.x. Поэтому у меня ошибки не было, можно заменить на следующее
    Код (C++):
    unsigned char MXIC_TCON_REG[] PROGMEM = {
    READ_FLASH - это просто чтение из флеши (PROGMEM).

    С программными реализациями I2C еще не приходилось работать, работал и с ардуиновскими библиотеками и на ARV-ких. Но как я уже говорил, ее можно поменять, если делать по уму (Ардуина имеет аппаратную реализацию), но для начального теста пойдет.

    В дальнейшем если будет использоваться аппаратная реализация, не надо будет перевешивать, если софт ни на что не влияет.

    Вот только не понятно какой там уровень, надеюсь 5V, если 3,3V уже писал могли спалить чип или подпалить его.
     
    Последнее редактирование: 23 ноя 2015
  9. Померил на основной плате, GND - SDA +4.85v GND - SCL 4.85v
    Предполагаю что уровни 5 - ти вольтовы.
    Просканировал i2c адрес.
    Вывело:
    Код (C++):
    Scanning...
    I2C device found at address 0x14  ! done
    Адрес 0x14.
    Плата еще живая, подключил к основной плате.
    IMG_20151123_120704.jpg
    Да, согласен. Адрес 0x14.
    Да, спасибо, заменил.
    Да, согласен, для удобства сделал.
    Судя по измерениям 5v. Пока что все работает.
    Ни разу не работал с ЧПУ, так что сказать на счет того проекта ничего сказать не могу....
     
  10. Alex19

    Alex19 Гуру

    Можно Вас поздравить, основные пункты пройдены, Вы почти в дамках.

    1. Меняем адрес в коде.
    Находим файл OSD.h в нем строку
    Код (C++):
    #define MX88V46X_ID          0x28
    на
    Код (C++):
    #define MX88V46X_ID          0x14
    Компилируем проверяем.

    Если не заработает, надо внимательно разобраться в их библиотеке I2C.cpp и I2C.h.
    Или заменить ее, тут уже вопрос во времени, все решаемо.
     
  11. Поменял в OSD.h на адрес 0x14. Ничего не поменялось.. Те же полосы...

    В файле "PAL_16_9.cpp" есть так же строка "#define MX88V46X_ID 0x28 " поменял потом адрес на 0x14.

    В итоге белый экран...
     
  12. Alex19

    Alex19 Гуру

    Адрес точно 0x14?

    Подключено на A4 и A5, больше ни чего не подключено, так?

    Если так, то пару вариантов.

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

    Второй использовать библиотеки от ардуины к примеру стандартную или I2CDev. К примеру я пользуюсь своей, на базе официальной от AVR - http://forum.amperka.ru/threads/Библиотека-twi-i2c-ds1307-at24c256-mpu9150-raw-pcf8574-pcf8575.5973/. Но это дело вкуса и требований.

    Как это сделать, это обычное устройство I2C, другими словами принцип идентичен, не зависимо от библиотеки. Мы отправляем данные по адрессу, указывая конкретный регистр и записываем данные или читаем. Если пример рабочий, то можно просто переписать I2C.cpp и I2C.h и добавить инициализацию I2C.

    Для этого надо иметь хотя бы базовые знания о I2C.
    Что именно у Вас вызывает затруднения?

    Я могу подсказать, если Вам что-то не понятно, но написать за Вас увы не могу, да и монитора такого нет.

    UPD. Ближе к вечеру или завтра (зависимо от загрузки), отпишу как начать, видимо у Вас пока нет опыта работы с данной шиной.

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

    Хотя вот эти строки радуют.
    Получается, у них была выставлен адрес устройства на запись, оригинально.

    Еще, что я увы не понял, так это стр. 75, регистр 0xF0 и 0xF1, предположительно данный регистр позволяет записывать данные на другие устройства, в частности на
    TV decoder.

    С 0x00 все понятно, с записью тоже, а вот с чтением не понял, зачем последняя строка. А еще есть забавные регистры F2-F6. Именно они отвечают за OSD.

    Это так, пробежался по даташиту, чтобы иметь примерное представление. Код в прищепке.
    Скомпилируйте и посмотрите, так же проверьте 2 вариант раскомментируйте эти

    Код (C++):
    void MX88V46X_Initial(void)  
    {  
        MX88V46X_TCON_Initial();    
        MX88V46X_GAMMA_Enable();  
        _delay_ms(100);
        MX88V46X_SOURCE_Select();
        MX88V46X_MODE_Select();
        MX88V46X_SCALING_Select();

    //    I2C_WriteByte(MXIC_ID,CVD1_ADDRESS_PORT,0x0F);       //FOR PAL MODE
    //    I2C_WriteByte(MXIC_ID,CVD1_DATA_PORT,0x2C);          //
    }
    Тогда у Вас будет настройка под эти стандарты
    01 = PAL(B, D, G, H, I, N, CN), SECAM.

    По умолчанию, под эти
    00 = NTSC, PAL(M)

    Еще 1 нюанс, мне не понятный. Писали что вставляли делай, после Hello, попробуйте и Вы. Если со всеми доработками работать не будет, поясню как по шагам разбираться в коде.
     

    Вложения:

    Последнее редактирование: 24 ноя 2015
  13. На Arduino подключил - SDA - SDA - SCL -SCL GND - GND.
    Больше кроме ресивера и Arduino ничего нет.
    Адрес выдал 0x14.
    Как я понял надо отправлять данные по адресу 0x14. Возможно.
    Но вот какие данные, к сожалению не понял...
    Пока что у меня нету опыта по I2C. Ни разу с этим не работал.
    Многого не понимаю, хотя интересно.
    Правильно я понял, адрес на чтение 0x14. На запись 0x28 ?
    Для вывода информации на дисплей, требуется ли использовать ресивер на чтение ?

    И не совсем понял какие регистры нужны хотя бы для инициализации ресивера.
     
  14. Alex19

    Alex19 Гуру

    Для начала попробуйте последний код в прищепке. А так же замечания по нему.

    Это я понял, мы все учимся, я сейчас с видео потоками на Raspberry, но это первый опыт работы с видео. Начните с азов, чтобы мы были на 1 волне, почитайте это - http://chipenable.ru/index.php/prog...ispolzovaniya-twi-modulya-osnovy-i2c-ch1.html. Может так же будет полезно это видео (только начало, до регистров) -

    .

    Если эти документы будут сложными, поищите описание i2c или twi, нужно понимать базовые вещи.

    Нет адрес 0x14, он 7 бит, к адресу добавляется бит чтения/записи, если запись 0, если чтение 1. Получается для чтения мы отправляем 0x29, для записи 0x28. Это описано в описании I2C.

    Придется постигать даташит, я лишь мельком пробежался, на это потребуется время. Я могу подсказать Вам, перенести код и т.д., в остальном придется учится.
     
  15. Залил последний архив в Arduino, не помогло...

    Установил AVR Studio, скомпилировал оригинальный код в .hex, залил в Atmega16.
    На экране вообще никакой реакции..
    Возможно проблема с кодом.

    P.S Прошу прощения, раньше не мог ответить, сессия...
     
  16. Alex19

    Alex19 Гуру

    Как я понял, Вы залили оригинальный код, который не работает. Там есть такая строка
    Код (C++):
    #define F_CPU
    Убедитесь, что частота указана верно, если нет исправьте и повторите.

    Давайте попробуем сделать все по пунктам.

    И так, у нас есть адрес, он откликается, значит питание и соединение верно. Осталось проверить 1 нюанс теперь попробует вот такой код на ардуине.
    Код (C++):

    #include <Wire.h>

    #define MX88V46X_ID          0x14

    void setup()
    {
      Wire.begin();
      Serial.begin(115200);
    }

    void loop()
    {
      Wire.beginTransmission(MX88V46X_ID);
      Wire.write(0);        
      Wire.endTransmission();
      Wire.requestFrom(MX88V46X_ID, 1);
      while(Wire.available())
      {
        byte fByte = Wire.read();
        Serial.print("0x");
        Serial.println(fByte, HEX);
      }
      delay(1000);
    }
     
    Мы просто попытаемся прочесть данные из 0 регистра, по умолчанию значение в 0 регистре 0x60.

    Если код сработает и вернет значение в мониторе, попробуйте включить подтяжку I2C для Atmega328, в сам верху setup добавить данные строки в последнем коде который сбрасывал.
    Код (C++):
    PORTC |= 1<<4;
    PORTC |= 1<<5;
    Извинятся тут не за что, у каждого своя жизнь.
    Сам иногда на день, неделю пропадаю.
     
  17. Залил, подключил,
    В 0 регистре вывело 0x60
    В 1 регистре вывело 0x4
    В 2 регистре вывело 0x5

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

    Alex19 Гуру

    Во первых это значения по умолчанию к тому же, в описании с 0x03 по 0x0D именно нули. Так что все нормально.

    В библиотеке Wire.h, по умолчанию включена подтяжка. А вот в коде который выслал там ее нет, поэтому и предложил проверить, вдруг поможет. Можете добавить и в тот код, который залили на Atmega16, только там порты другие PC1 (SDA) и PC0 (SCL), будем надеется, что проблема в ней.

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

    И тогда самое не приятное придется разбираться со всеми регистрами, увы их не мало. Начать можно с тех, что используются, последовательно идти по программе находить регистры которые используются, читать их в pdf и определять правильность их выбора. Будет хорошо, если Вы сможете узнать о них от автора данного кода, это позволит сэкономить Ваше время.

    UPD. Было бы веселей, если бы оригинальный код на Atmega16 работал, а мой нет. А так, единственная проблема, из-за которой код будет не рабочим и которая приходит мне в голову это подтягивающие резисторы
     
    Последнее редактирование: 9 дек 2015
  19. Удалось мне поднять данный дисплей, но на Atmega163.
    Скомпилировал в AVR Studio проект, тот что на видео был,
    http://radiokot.ru/forum/download/file.php?id=194341&sid=3f90007961fdc1808e89e2ac90497a5e
    библиотеки видимо чем то отличаются, по крайней мере для вывода текста надо:
    В место ->
    Код (C++):
    OSD_ShowText((unsigned char*)"Hello!", 6, 0, 0);
    Надо
    Код (C++):
    MXIC_OSD_ShowText((unsigned char*)"Hello World!",12);
    Добавилось "MXIC".

    Вероятно библиотеки чем то отличаются.

    Теперь пытаюсь переделать библиотеки под Arduino...

    Как я понял для Arduino пишется на с++
    А для Avr Studio на чистом с
    Может ошибаюсь.

    Как я понял надо разделить на заголовочный файл *.h и на *.cpp
    В *.h только названия функций, методов и т.д
    А в *.cpp весь код функций, методов..

    Но с файлами osd.c и osd.h проблемы...
    Ошибки..

    Работающий код для Avr Studio:
    http://forum.amperka.ru/attachments/mx88v462-zip.3711/?temp_hash=81097a593e55457ada5a9ea3f3bda38b

    И то что я пытался переделать для Arduino:
    http://forum.amperka.ru/attachments...2/?temp_hash=81097a593e55457ada5a9ea3f3bda38b

    Вероятно на Arduino работать должно...

    Правда были проблемы на Atmega163.
    Инициализация происходила очень долго.
    Видимо из за того что на плате кварц стоит другой, 4000M
    Но это не беда...

    И изображение не на весь дисплей, у автора, тот что на видео, такая же проблема..
    Но это хоть что то...

    И в итоге фото.
    IMG_20151210_171121.jpg

    IMG_20151210_170506.jpg
     

    Вложения:

    • MX88V462.zip
      Размер файла:
      49,8 КБ
      Просмотров:
      468
    • MX88V462_ARD.zip
      Размер файла:
      8,3 КБ
      Просмотров:
      420
  20. Alex19

    Alex19 Гуру

    Рад, что у Вас получилось.

    Можно на Си и C++, как удобнее.

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

    Маленькие замечания в файл system.h добавляем в начало
    Код (C++):
    #ifndef SYSTEM_H_
    #define SYSTEM_H_
    И в конец
    Код (C++):
    #endif
    В функции AVR_Initial, проверяем соответствие нашим портам, как и #define KEY_DEC, KEY_SET, KEY_INC.

    В .ino
    Код (C++):
    #include "system.c"
    #include "i2c.c"
    #include "pal_16_9.c"
    #include "osd.c"
    меняем на *.h, ссылки должны идти на заголовочный файл.

    Main меняем на setup и loop, в setup все что идет до while в loop все что внутри while. Иначе он будет работать как AVR без библиотек ардуино или придется подключать самому.

    По всем .cpp
    Во всех *.cpp должна быть ссылка на одноименный заголовочный файл. Самым первым include.

    Проблема с файлами OSD в том, что в заголовочном файле не все функции, то же относится к файлу Pal

    С той библиотекой, что у Вас не уверен, там софт I2C, а это значит, что I2C зависит от скорости работы, delay и т.д.

    Дайте мне время, я перенесу, если сегодня не успею в субботу, завтра в командировку.

    UPD. Не смогу, только перенести порты, не знаю на каких пинах, что и зачем.