Перейти к содержанию

Не работает экран OLED 128X64 I2C на SSD1306, что не так?

Купил такой дисплей

(file.php?id=315824)

тут: http://ali.onl/16Oi

Хочу подключить его к ATmega48PA, нашёл пример работы на этом же сайте https://www.radiokot.ru/articles/77/
Там пример методом ногодрыга, что меня вполне устраивает, впрочем физически он подключен у меня на макетке на выход
аппаратной шины I2C так что я могу использовать оба варианта.

Выкладываю проект (https://radiokot.ru/forum/download/file.php?id=315825), сделан Atmel Studio 7 + схема Proteus 8.7

Для начала, почему он не хочет работать даже в Протеусе?

Подходящая ли протеуская модель?

Правильно ли подключены выводы в модели экрана, особенно к шине?

Схема из Протеуса (на осциллографе самое начало передачи на экран ):

file.php?id=315840

 

Листинг кода из примера:

 

#define F_CPU 8000000UL

#include    <avr/io.h>
#include    <avr/pgmspace.h>
#include    <util/delay.h>

#define        CL_HI        DDRA&=~(1<<0)    //PORTA.0 = SCL = SCK
#define        CL_LOW        DDRA|=(1<<0)    //PORTA.0
#define        DA_HI        DDRA&=~(1<<1)    //PORTA.1 = SDA
#define        DA_LOW        DDRA|=(1<<1)    //PORTA.1

#define        LED_ON        PORTD|=(1<<6)    //для отладки
#define        LED_OFF        PORTD&=~(1<<6)    //для отладки

#define        NAME        0b01111000        //АДРЕС УСТРОЙСТВА НА ШИНЕ
#define        DATS        0b01000000        //ПЕРЕДАЧА НЕСКОЛЬКИХ БАЙТ ДАННЫХ
#define        DAT            0b11000000        //ПЕРЕДАЧА ОДНОГО БАЙТа ДАННЫХ
#define        COM            0b10000000        //ПЕРЕДАЧА ОДНОГО БАЙТа КОМАНДЫ

//МАССИВ ДЛЯ ИНИЦИАЛИЗАЦИИ
//A0 - начало в правом углу; A1 - начало в левом углу
//C0 - начало снизу экрана; C8 - начало сверху экрана
//12 - прямая линия, 02, 22 - линия через строчку
//7F - яркость (максимум 0xFF)
unsigned char PROGMEM init[18]=
{
    0xA8,0x3F,0xD3,0x00,0x40,0xA1,0xC8,0xDA,0x12,
    0x81,0x7F,0xA4,0xA6,0xD5,0x80,0x8D,0x14,0xAF,
};

//НАДПИСЬ RADIOKOT.RU и РИСУНОК КОТА
unsigned char PROGMEM screen_1[1024]=
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE0, 0xE0, 0x60, 0x60, 0x60, 0xE0, 0xC0, 0x00,
0x00, 0x00, 0x00, 0xC0, 0xE0, 0xE0, 0xC0, 0x00,
0x00, 0x00, 0x00, 0xE0, 0xE0, 0x60, 0x60, 0x60,
0x60, 0xC0, 0x80, 0x00, 0x00, 0xE0, 0xE0, 0x00,
0x00, 0x80, 0xC0, 0xE0, 0x60, 0x60, 0x60, 0xE0,
0xC0, 0x80, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00,
0x80, 0xE0, 0x60, 0x00, 0x00, 0x80, 0xC0, 0xE0,
0x60, 0x60, 0x60, 0xE0, 0xC0, 0x80, 0x00, 0x60,
0x60, 0x60, 0xE0, 0xE0, 0x60, 0x60, 0x60, 0x00,
0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x60, 0x60,
0x60, 0xE0, 0xC0, 0x00, 0x00, 0xE0, 0xE0, 0x00,
0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7F, 0x7F, 0x06, 0x06, 0x1E, 0x7B, 0x73, 0x40,
0x00, 0x78, 0x7F, 0x1F, 0x18, 0x18, 0x1F, 0x7E,
0x70, 0x00, 0x00, 0x7F, 0x7F, 0x60, 0x60, 0x60,
0x70, 0x3F, 0x1F, 0x00, 0x00, 0x7F, 0x7F, 0x00,
0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x70,
0x3F, 0x1F, 0x00, 0x00, 0x7F, 0x7F, 0x06, 0x07,
0x1F, 0x78, 0x60, 0x40, 0x00, 0x1F, 0x3F, 0x70,
0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, 0x00,
0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00,
0x60, 0x60, 0x00, 0x00, 0x7F, 0x7F, 0x06, 0x06,
0x0E, 0x3F, 0x71, 0x40, 0x00, 0x1F, 0x3F, 0x70,
0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0,
0xC0, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
0xE0, 0xF0, 0xE0, 0xE0, 0xF0, 0x70, 0x70, 0xB0,
0xF0, 0xB0, 0xE0, 0x20, 0xE0, 0x60, 0xE0, 0xE0,
0xE0, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0xC0, 0xC0, 0xF0, 0xF0, 0xF8, 0xF8,
0xFC, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0x7F, 0xFF,
0xBF, 0xBF, 0xDF, 0xFF, 0xEF, 0xF7, 0xFB, 0xFF,
0xFB, 0xFD, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
0xFD, 0xF7, 0xAF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFC,
0xFC, 0xF8, 0xF8, 0xF0, 0xE0, 0xE0, 0xC0, 0xC0,
0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0xFC, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
0xBF, 0xFF, 0xCF, 0xF7, 0xFB, 0xFE, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
0x7F, 0x9F, 0xCF, 0xF2, 0xFF, 0xE7, 0xDF, 0x97,
0x37, 0x77, 0xFF, 0xF7, 0xEF, 0xEF, 0xEF, 0xFF,
0xF7, 0xF7, 0xF7, 0xF7, 0xFB, 0xFB, 0xFB, 0xFB,
0xFB, 0xFB, 0xFB, 0xFB, 0xFA, 0xF8, 0xF4, 0xF4,
0xFC, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0x78, 0x38,
0x98, 0x38, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xE0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x7F, 0xDF, 0xFB, 0xFC, 0xFE, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xDF, 0xFF,
0xF7, 0xFF, 0xFF, 0xFD, 0xFE, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x7F,
0xDC, 0x5A, 0x54, 0x7F, 0x5F, 0x5F, 0x5F, 0x7F,
0x5F, 0x3F, 0xFF, 0xB3, 0xF9, 0xF3, 0xFF, 0xFF,
0xDF, 0xFF, 0xFF, 0xF3, 0xF9, 0xB3, 0x7F, 0x3F,
0x7F, 0x5F, 0x7F, 0x5F, 0x5F, 0x7C, 0x54, 0x91,
0x90, 0xA0, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xEF,
0xF7, 0xFD, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF,
0xFF, 0xFD, 0xFD, 0xF7, 0xFE, 0xDF, 0xBE, 0xFF,
0x7E, 0x7F, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF,
0x7E, 0x7F, 0xBE, 0x1F, 0x6E, 0x43, 0xC1, 0x80,
0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0x0F, 0x1F, 0x3F, 0x3F,
0x3F, 0x7F, 0x3F, 0x7F, 0x7F, 0x7F, 0x3F, 0x7F,
0x7F, 0x7F, 0x7F, 0x3F, 0x7F, 0x3F, 0x1F, 0x1F,
0x0F, 0x0F, 0x17, 0x1B, 0x1E, 0x1F, 0x0F, 0x0F,
0x0F, 0x1F, 0x0F, 0x0F, 0x0F, 0x0F, 0x1F, 0x0F,
0x0F, 0x0F, 0x1F, 0x0F, 0x0F, 0x0F, 0x1F, 0x0F,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
0x1F, 0x1F, 0x1F, 0x1E, 0x1E, 0x1E, 0x14, 0x30,
0x20, 0x20, 0x30, 0x1A, 0x0E, 0x0E, 0x0E, 0x0F,
0x1F, 0x17, 0x13, 0x18, 0x18, 0x08, 0x09, 0x0F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};

//ЦИФРЫ
unsigned char PROGMEM DIGIT[5][24]=
{
    {
        0x00, 0x00, 0x00, 0x30, 0x30, 0xF8, 0xF8, 0x00,     //1
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
        0x18, 0x1F, 0x1F, 0x18, 0x18, 0x00, 0x00, 0x00,
    },

    {
        0x00, 0x00, 0x30, 0x18, 0x18, 0x18, 0x98, 0xF8,     //2
        0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1C,
        0x1E, 0x1B, 0x19, 0x18, 0x18, 0x00, 0x00, 0x00,     
    },

    {
        0x00, 0x00, 0x30, 0x98, 0x98, 0x98, 0x98, 0xF8,     //3
        0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x19,
        0x19, 0x19, 0x19, 0x1F, 0x0F, 0x00, 0x00, 0x00,     
    },

    {
        0x00, 0x00, 0x00, 0xC0, 0xF0, 0x38, 0xF8, 0xF8,     //4
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07,
        0x06, 0x06, 0x1F, 0x1F, 0x06, 0x00, 0x00, 0x00,     
    },

    {
        0x00, 0x00, 0xF8, 0xF8, 0x98, 0x98, 0x98, 0x98,     //5
        0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x19,
        0x19, 0x19, 0x19, 0x1F, 0x0F, 0x00, 0x00, 0x00,     
    },
};

//СТАРТ
void START (void)
{
    DA_HI;
    CL_HI;
    DA_LOW;
    CL_LOW;
}

//СТОП
void STOP (void)
{
    DA_LOW;
    CL_HI;
    DA_HI;
}

//ПЕРЕДАЧА БАЙТА и АСК
void SEND (unsigned char data)
{
    unsigned char k;

    for(k=8;k>0;k--)
    {
        if(data&(1<<(k-1)))
        {
            CL_LOW;
            DA_HI;
            CL_HI;
            CL_LOW;
        }
        else
        {
            CL_LOW;
            DA_LOW;
            CL_HI;
            CL_LOW;
        }
    }

    //ACK
    DA_HI;
    CL_HI;
    if(!(PINA&(1<<1)))
    CL_LOW;
}

//ИНИЦИАЛИЗАЦИЯ ДИСПЛЕЯ
void OLED_INIT (void)
{
    unsigned char k;

    START();
    SEND(NAME);

    for(k=0;k<18;k++)
    {
        SEND(COM);
        SEND(pgm_read_byte(init+k));
    }

    STOP();
}

//ОЧИСТКА ЭКРАНА ДИСПЛЕЯ
void CLR_SCR (void)
{
    unsigned char k, kk;

    START();
    SEND(NAME);

    //выбираем Horizontal Addressing Mode (заполнение экрана по типу того как читаем книгу)
    SEND(COM);
    SEND(0x20);
    SEND(COM);
    SEND(0x00);

    //заполняем строку слева направо
    SEND(DATS);
    for(kk=0;kk<8;kk++)
    {
        for(k=0;k<128;k++) SEND(0x00);    //LSB вверху, MSB снизу
    }

    STOP();
}

int main (void)
{
    unsigned int k;
    unsigned char kk;
    
    CLKPR=0x80;
    CLKPR=0x00;    //предделитель отключён, рабочая частота 8 MHz

    PORTA=0x00;    //РА0 будет SCK, РА1 будет SDA
    DDRA =0x00;

    PORTD=0b00100000;    //настройки СИДА для отладки, так можно обнулять
    DDRD =0b01000000;    //настройки СИДА для отладки, так можно обнулять

    PORTB=0x00;        //на всякий случай
    DDRB =0x00;        //на всякий случай

    ACSR=0x80;        //отключение компаратора для уменьшения потребления тока

    _delay_ms(500);    //пауза перед инициализацией - у меня очень нестабильное включение питания

    OLED_INIT();    //инициализация дисплея
    CLR_SCR();        //очистка экрана дисплея

    while(1)
    {
        //рисуем кота
        START();
        SEND(NAME);        //посыл адреса+0

        SEND(DATS);
        for(k=0;k<1024;k++) SEND(pgm_read_byte(screen_1+k));    

        STOP();
        _delay_ms(2000);

        //последовательно выводим цифры от 1-го до 5-ти
        while(1)        
        {
            for(kk=0;kk<5;kk++)
            {
                START();
                SEND(NAME);    
                
                SEND(COM);
                SEND(0x21);        //Set Column Address (21h)
                SEND(COM);
                SEND(115);        //будем выводить между 115...
                SEND(COM);
                SEND(126);        //...и 126 колонками

                SEND(COM);
                SEND(0x22);        //Set Page Address (22h)
                SEND(COM);
                SEND(6);        //Будем крутиться между 6-ой...
                SEND(COM);
                SEND(7);        //...и 7-ой страницами (строчками)

                SEND(DATS);
                for(k=0;k<12;k++) SEND(pgm_read_byte(DIGIT[kk]+k));        //рисуем верхнюю часть цифры
                for(k=12;k<24;k++) SEND(pgm_read_byte(DIGIT[kk]+k));    //рисуем нижнюю часть цифры
                
                STOP();
                _delay_ms(1000);
            }
        }    
    }

return 0;
}

 

Изменено пользователем Donker

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Заработало с адресом 0b01111000 но глючно см. скрин ( file.php?id=315922)
Выкладываю подправленный проект с которого сделан скрин ( https://radiokot.ru/forum/download/file.php?id=315919 )

Каждый раз полоски в другом месте, один раз кот нарисовался нормально, почему так?

Цифры не выводятся вообще, почему?

Снижение частоты ,например, до 8мГц и 4мГц глюки не убирает.

Откуда на линии стробирования SCL берётся такая неравномерность битов
(промежутки плавно сокращаются в каждом байте, см. осциллограф на скрине)
это нормально ?

В железе ничего не работает, хотя если туда прошить другой проект, начинает нормально работать такой экран:
http://ali.onl/16RD (в режиме аппаратного I2C)

В на плате OLED экрана стоит стабилизатор на 3,3v и линии SCL SDA подтянуты к 3,3v резисторами по 10к.

Контроллер ATmega48PA питается от 5v, но должно же работать ?

 

Изменено пользователем Donker

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Donker сказал:

В на плате OLED экрана стоит стабилизатор на 3,3v и линии SCL SDA подтянуты к 3,3v резисторами по 10к.

Контроллер ATmega48PA питается от 5v, но должно же работать ?

 

версий две:

1. на схеме показаны i2c на PC4/5, а в исходниках

#define        CL_HI        DDRA&=~(1<<0)    //PORTA.0 = SCL = SCK
#define        DA_HI        DDRA&=~(1<<1)    //PORTA.1 = SDA

2. первый экран (oled) мог успешно сгореть по sda/scl, т.к. у ssd1306 максималка на этих пинах 3в3 - для развязки 3в3 и 5в (и подобных комбинаций) ставят т.н. левелшифтеры, на дискретах или чипах..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В Протеусе упрощение, подтягивающие резисторы уже стоят на плате экрана и питаются от

бортового стабилизатора экрана на +3,3v,  а экран и ATmega48PA работают в режиме "открытого

коллектора" и только притягивают линии к земле, главное что б ATmega48PA хватило +3,3v для

высокого уровня.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавил задержки, глюки без изменений.
Выкладываю новую версию проекта с задержками ( https://radiokot.ru/forum/download/file.php?id=315936 )
Вроде тайминги I2C не где не нарушены, подозрительное место - ответ экрана, девятый строб в датаграмме
в конце посылки каждого байта. (надо скачивать проект и смотреть в Протеусе)

Листинг кода этого проекта:

#ifndef MAIN_H_


#define MAIN_H_

#define F_CPU 20000000UL

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>

 

//----------------------------------------------------------------
#include    <avr/pgmspace.h>

#define        CL_HI        DDRC&=~(1<<5)    //PORTC.5 = SCL = SCK
#define        CL_LOW        DDRC|=(1<<5)    //PORTC.5
#define        DA_HI        DDRC&=~(1<<4)    //PORTC.4 = SDA
#define        DA_LOW        DDRC|=(1<<4)    //PORTC.4


#define        NAME        0b01111000        //АДРЕС УСТРОЙСТВА НА ШИНЕ
#define        DATS        0b01000000        //ПЕРЕДАЧА НЕСКОЛЬКИХ БАЙТ ДАННЫХ
#define        DAT            0b11000000        //ПЕРЕДАЧА ОДНОГО БАЙТа ДАННЫХ
#define        COM            0b10000000        //ПЕРЕДАЧА ОДНОГО БАЙТа КОМАНДЫ

//МАССИВ ДЛЯ ИНИЦИАЛИЗАЦИИ
//A0 - начало в правом углу; A1 - начало в левом углу
//C0 - начало снизу экрана; C8 - начало сверху экрана
//12 - прямая линия, 02, 22 - линия через строчку
//7F - яркость (максимум 0xFF)


const unsigned char PROGMEM init[18]=
{
    0xA8,0x3F,0xD3,0x00,0x40,0xA1,0xC8,0xDA,0x12,
    0x81,0x7F,0xA4,0xA6,0xD5,0x80,0x8D,0x14,0xAF,
};

//НАДПИСЬ RADIOKOT.RU и РИСУНОК КОТА
const unsigned char PROGMEM screen_1[1024]=
{
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0xE0, 0xE0, 0x60, 0x60, 0x60, 0xE0, 0xC0, 0x00,
    0x00, 0x00, 0x00, 0xC0, 0xE0, 0xE0, 0xC0, 0x00,
    0x00, 0x00, 0x00, 0xE0, 0xE0, 0x60, 0x60, 0x60,
    0x60, 0xC0, 0x80, 0x00, 0x00, 0xE0, 0xE0, 0x00,
    0x00, 0x80, 0xC0, 0xE0, 0x60, 0x60, 0x60, 0xE0,
    0xC0, 0x80, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00,
    0x80, 0xE0, 0x60, 0x00, 0x00, 0x80, 0xC0, 0xE0,
    0x60, 0x60, 0x60, 0xE0, 0xC0, 0x80, 0x00, 0x60,
    0x60, 0x60, 0xE0, 0xE0, 0x60, 0x60, 0x60, 0x00,
    0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x60, 0x60,
    0x60, 0xE0, 0xC0, 0x00, 0x00, 0xE0, 0xE0, 0x00,
    0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x7F, 0x7F, 0x06, 0x06, 0x1E, 0x7B, 0x73, 0x40,
    0x00, 0x78, 0x7F, 0x1F, 0x18, 0x18, 0x1F, 0x7E,
    0x70, 0x00, 0x00, 0x7F, 0x7F, 0x60, 0x60, 0x60,
    0x70, 0x3F, 0x1F, 0x00, 0x00, 0x7F, 0x7F, 0x00,
    0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x70,
    0x3F, 0x1F, 0x00, 0x00, 0x7F, 0x7F, 0x06, 0x07,
    0x1F, 0x78, 0x60, 0x40, 0x00, 0x1F, 0x3F, 0x70,
    0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, 0x00,
    0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00,
    0x60, 0x60, 0x00, 0x00, 0x7F, 0x7F, 0x06, 0x06,
    0x0E, 0x3F, 0x71, 0x40, 0x00, 0x1F, 0x3F, 0x70,
    0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0,
    0xC0, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
    0xE0, 0xF0, 0xE0, 0xE0, 0xF0, 0x70, 0x70, 0xB0,
    0xF0, 0xB0, 0xE0, 0x20, 0xE0, 0x60, 0xE0, 0xE0,
    0xE0, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
    0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x80, 0xC0, 0xC0, 0xF0, 0xF0, 0xF8, 0xF8,
    0xFC, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0x7F, 0xFF,
    0xBF, 0xBF, 0xDF, 0xFF, 0xEF, 0xF7, 0xFB, 0xFF,
    0xFB, 0xFD, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
    0xFD, 0xF7, 0xAF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFC,
    0xFC, 0xF8, 0xF8, 0xF0, 0xE0, 0xE0, 0xC0, 0xC0,
    0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0xFC, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
    0xBF, 0xFF, 0xCF, 0xF7, 0xFB, 0xFE, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
    0x7F, 0x9F, 0xCF, 0xF2, 0xFF, 0xE7, 0xDF, 0x97,
    0x37, 0x77, 0xFF, 0xF7, 0xEF, 0xEF, 0xEF, 0xFF,
    0xF7, 0xF7, 0xF7, 0xF7, 0xFB, 0xFB, 0xFB, 0xFB,
    0xFB, 0xFB, 0xFB, 0xFB, 0xFA, 0xF8, 0xF4, 0xF4,
    0xFC, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0x78, 0x38,
    0x98, 0x38, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0xE0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0x7F, 0xDF, 0xFB, 0xFC, 0xFE, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xDF, 0xFF,
    0xF7, 0xFF, 0xFF, 0xFD, 0xFE, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x7F,
    0xDC, 0x5A, 0x54, 0x7F, 0x5F, 0x5F, 0x5F, 0x7F,
    0x5F, 0x3F, 0xFF, 0xB3, 0xF9, 0xF3, 0xFF, 0xFF,
    0xDF, 0xFF, 0xFF, 0xF3, 0xF9, 0xB3, 0x7F, 0x3F,
    0x7F, 0x5F, 0x7F, 0x5F, 0x5F, 0x7C, 0x54, 0x91,
    0x90, 0xA0, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xEF,
    0xF7, 0xFD, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF,
    0xFF, 0xFD, 0xFD, 0xF7, 0xFE, 0xDF, 0xBE, 0xFF,
    0x7E, 0x7F, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF,
    0x7E, 0x7F, 0xBE, 0x1F, 0x6E, 0x43, 0xC1, 0x80,
    0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x07, 0x0F, 0x1F, 0x3F, 0x3F,
    0x3F, 0x7F, 0x3F, 0x7F, 0x7F, 0x7F, 0x3F, 0x7F,
    0x7F, 0x7F, 0x7F, 0x3F, 0x7F, 0x3F, 0x1F, 0x1F,
    0x0F, 0x0F, 0x17, 0x1B, 0x1E, 0x1F, 0x0F, 0x0F,
    0x0F, 0x1F, 0x0F, 0x0F, 0x0F, 0x0F, 0x1F, 0x0F,
    0x0F, 0x0F, 0x1F, 0x0F, 0x0F, 0x0F, 0x1F, 0x0F,
    0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
    0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
    0x1F, 0x1F, 0x1F, 0x1E, 0x1E, 0x1E, 0x14, 0x30,
    0x20, 0x20, 0x30, 0x1A, 0x0E, 0x0E, 0x0E, 0x0F,
    0x1F, 0x17, 0x13, 0x18, 0x18, 0x08, 0x09, 0x0F,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};

//ЦИФРЫ
const unsigned char PROGMEM DIGIT[5][24]=
{
    {
        0x00, 0x00, 0x00, 0x30, 0x30, 0xF8, 0xF8, 0x00,     //1
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
        0x18, 0x1F, 0x1F, 0x18, 0x18, 0x00, 0x00, 0x00,
    },

    {
        0x00, 0x00, 0x30, 0x18, 0x18, 0x18, 0x98, 0xF8,     //2
        0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1C,
        0x1E, 0x1B, 0x19, 0x18, 0x18, 0x00, 0x00, 0x00,
    },

    {
        0x00, 0x00, 0x30, 0x98, 0x98, 0x98, 0x98, 0xF8,     //3
        0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x19,
        0x19, 0x19, 0x19, 0x1F, 0x0F, 0x00, 0x00, 0x00,
    },

    {
        0x00, 0x00, 0x00, 0xC0, 0xF0, 0x38, 0xF8, 0xF8,     //4
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07,
        0x06, 0x06, 0x1F, 0x1F, 0x06, 0x00, 0x00, 0x00,
    },

    {
        0x00, 0x00, 0xF8, 0xF8, 0x98, 0x98, 0x98, 0x98,     //5
        0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x19,
        0x19, 0x19, 0x19, 0x1F, 0x0F, 0x00, 0x00, 0x00,
    },
};


//----------------------------------------------------------------

#endif /* MAIN_H_ */

//=================================================================


#include "main.h"
//=================================================================


void START (void) //СТАРТ
{
    DA_HI;
    CL_HI;
    DA_LOW;
    _delay_us(1); //подобрать
    CL_LOW;
}
void STOP (void) //СТОП
{
    DA_LOW;
    CL_HI;
    _delay_us(1); //подобрать
    DA_HI;
}
void SEND (unsigned char data) //ПЕРЕДАЧА БАЙТА и АСК
{
    unsigned char k;

    for(k=8;k>0;k--)
    {
        if(data&(1<<(k-1)))
        {
            CL_LOW;
            DA_HI;
            _delay_us(1); //подобрать
            CL_HI;
            _delay_us(1); //подобрать
            CL_LOW;
        }
        else
        {
            CL_LOW;
            DA_LOW;
            _delay_us(1); //подобрать
            CL_HI;
            _delay_us(1); //подобрать
            CL_LOW;
        }
    }
    _delay_us(1); //подобрать
    //ACK
    DA_HI;
    _delay_us(1); //подобрать
    CL_HI;
    _delay_us(1); //подобрать
    if(!(PINC&(1<<4)))
    CL_LOW;
    _delay_us(3); //подобрать
}
void OLED_INIT (void)  //ИНИЦИАЛИЗАЦИЯ ДИСПЛЕЯ
{
    unsigned char k;

    START();
    SEND(NAME);

    for(k=0;k<18;k++)
    {
        SEND(COM);
        SEND(pgm_read_byte(init+k));
    }

    STOP();
}
void CLR_SCR (void) //ОЧИСТКА ЭКРАНА ДИСПЛЕЯ
{
    unsigned char k, kk;

    START();
    SEND(NAME);

    //выбираем Horizontal Addressing Mode (заполнение экрана по типу того как читаем книгу)
    SEND(COM);
    SEND(0x20);
    SEND(COM);
    SEND(0x00);

    //заполняем строку слева направо
    SEND(DATS);
    for(kk=0;kk<8;kk++)
    {
        for(k=0;k<128;k++) SEND(0x00);    //LSB вверху, MSB снизу
    }

    STOP();
}

void migalka (void)
{
    
    for (unsigned int i =0; i<3; i++)
    {    
    PORTB |= (1<<i);
    _delay_ms(500);
    PORTB &= ~(1<<i);        
    }

}

int main(void)
{
        
DDRB = 0b00000111;
PORTB = 0b00000000;

migalka(); //однократно мигаем тремя светодиодами по очереди
    
 while(1)
 {

 unsigned int k;
 unsigned char kk;


 //     CLKPR=0x80;
 //     CLKPR=0x00;    //предделитель отключён, рабочая частота 8 MHz

 PORTC=0x00;    //РC5 будет SCK, РC4 будет SDA
 DDRC =0x00;

 //     PORTD=0b00100000;    //настройки СИДА для отладки, так можно обнулять
 //     DDRD =0b01000000;    //настройки СИДА для отладки, так можно обнулять
 //
 //     PORTB=0x00;        //на всякий случай
 //     DDRB =0x00;        //на всякий случай
 //
 //     ACSR=0x80;        //отключение компаратора для уменьшения потребления тока

 _delay_ms(500);    //пауза перед инициализацией - у меня очень нестабильное включение питания

 OLED_INIT();    //инициализация дисплея
 CLR_SCR();        //очистка экрана дисплея


         //рисуем кота
         START();
         SEND(NAME);        //посыл адреса+0

         SEND(DATS);
         for(k=0;k<1024;k++) SEND(pgm_read_byte(screen_1+k));

         STOP();

 


         _delay_ms(2000);

  while(1)
  {
  //-------------------------------------------------------------------------
  PORTB |= (1<<0); // Мигает светодиодом на PB0 перед каждой цифрой
  _delay_ms(500);
  PORTB &= ~(1<<0);
  _delay_ms(500);
  //--------------------------------------------------------------------------
      for(kk=0;kk<5;kk++)
      {
          START();
          SEND(NAME);
          
          SEND(COM);
          SEND(0x21);        //Set Column Address (21h)
          SEND(COM);
          SEND(115);        //будем выводить между 115...
          SEND(COM);
          SEND(126);        //...и 126 колонками

          SEND(COM);
          SEND(0x22);        //Set Page Address (22h)
          SEND(COM);
          SEND(6);        //Будем крутиться между 6-ой...
          SEND(COM);
          SEND(7);        //...и 7-ой страницами (строчками)

          SEND(DATS);
          for(k=0;k<12;k++) SEND(pgm_read_byte(DIGIT[kk]+k));        //рисуем верхнюю часть цифры
          for(k=12;k<24;k++) SEND(pgm_read_byte(DIGIT[kk]+k));    //рисуем нижнюю часть цифры
          
          STOP();
          _delay_ms(1000);
      }
  }

 //--------------------------------------------------------------                            
 }    
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Используйте в протеусе i2c дебагер. 

И начните разбираться с собственных картинок. 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Оказывается проект ATmega48P + SSD1306 (3).zip работает на реальном железе:


attachment.php?attachmentid=133350&d=153

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

Видимо, глюк Протеуса, такое уже было с другим экраном http://kazus.ru/forums/showthread.php?p ... ost1218538

 

Изменено пользователем Donker

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Оказывается проект ATmega48P + SSD1306 (3).zip работает на реальном железе:




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

Видимо, глюк Протеуса, такое уже было с другим экраном http://kazus.ru/forums/showthread.php?p ... ost1218538

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

Видимо, глюк Протеуса, такое уже было с другим экраном http://kazus.ru/forums/showthread.php?p ... ost1218538

===============================================================================================

Начал писать вариант проекта с использованием уже аппаратной шины I2C (TWI), и столкнулся с проблемой:

https://radiokot.ru/forum/download/file.php?id=316085

монитор вдруг утерял способность нормально прижимать линию SDA к земле!

Почему так происходит, ногодрыгом ведь работало нормально?

Выкладываю весь проект:
https://radiokot.ru/forum/download/file.php?id=316086

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
11 hours ago, Donker said:

Новая версия проекта c аппаратным I2C:

https://radiokot.ru/forum/download/file.php?id=316127

В Протеусе глючит так же как и версия с ногодрыгом.

В железе работает, но вывод цифр зависает в среднем после 10 циклов, скорее всего не получает сигнал ACK.

У кого какие идеи?

Кстати, дисплей заметно мерцает, на фото выше видно тёмную полосу, она движется заметно глазу с циклом около 30 гц.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На плате экрана стоит линейный стабилизатор на +3,3v серии XC6206
в корпусе SOT-23, по датащиту на входе и выходе у него должны стоять керамические конденсаторы не менее 1мкФ, на самом деле, на входе не было никакого конденсатора, я отпаял от сломанной материнки два конденсатора 0608 по 4,7мкФ неизвестного типа, сначала припаял один на вход, ничего не изменилось, потом второй на выход, исчезло вышеописанное мерцание, и вот уже 60 минут проект с аппаратным I2C
работает без зависания.

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

В Протеусе резисторы менял от 1к до 10к ничего не изменилось.

Вопрос: что такое надо сделать в Протеусе что бы в данной схеме увидеть
размах сигнала I2C в осциллографе 3,3 вольта?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
22 hours ago, Donker said:

... потом второй на выход, исчезло вышеописанное мерцание, и вот уже 60 минут проект с аппаратным I2C
работает без зависания

Ага, эти стабилизаторы склонны к самовозбуждению без небольшого керамического конденсатора на выходе. То же относится к 7805, и не только к ним. Конечно, самовозбуждение возникает далеко не всегда, но если возникает - тут уж возможны труднообъяснимые 'чудеса', которые перестают быть таковыми, если вооружиться осциллографом :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация