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

Не работает экран 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, и не только к ним. Конечно, самовозбуждение возникает далеко не всегда, но если возникает - тут уж возможны труднообъяснимые 'чудеса', которые перестают быть таковыми, если вооружиться осциллографом :)

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...