Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: muhittin_kaplan - 13 Kasım 2016, 16:36:41

Başlık: SSD1306-Stm32f103c8t6 oled
Gönderen: muhittin_kaplan - 13 Kasım 2016, 16:36:41
sistemi SPI dan herhangi bir bilgiyi çıkartacak şekilde düzenledim. SPI da problem  yok. (logic analyzer ile kontrol edip protokol kontrolü yapıyorum). elimde bulunan OLED aşağıdakinden 4wire SPI mış. üzerinde VCC-GND-D0-D1-RES-DC-CS pinleri mevcut
D0-Data-MOSI
D1-clk-SCLK
DC-DataCommand-Kütüphanede belli nereler olduğu
CS-ChipSelect-Kütüphanede belli nereler olduğu
RES-Ne olduğunu Bulamadım Muhtemel reset

Oled e start veremedim ?

@baran123 ün konusundan yararlandım
https://www.picproje.org/index.php/topic,58660.30.html

(http://i.hizliresim.com/6m44Rv.jpg)
Başlık: Ynt: SSD1306-Stm32f103c8t6 oled
Gönderen: HeCToR - 13 Kasım 2016, 16:49:13
@muhittin_kaplan hocam güzel kaynak http://pic18fxx.blogspot.com.tr/2014/12/library-for-128x64-graphical-display.html
Başlık: Ynt: SSD1306-Stm32f103c8t6 oled
Gönderen: muhittin_kaplan - 13 Kasım 2016, 16:55:54
Gördüm Hocam
(nicleri yakaladım oradan, Baran123 ve sizin ;) )
Başlık: Ynt: SSD1306-Stm32f103c8t6 oled
Gönderen: M_B - 13 Kasım 2016, 17:17:21
@muhittin_kaplan  hocam;
Ekran arkasında
4SPI
3SPI secenkleri var.
Hocam nedir bu 4SPI , 3SPI arasında ne fark var. Acaba sizinki dogrumu secili.
Başlık: Ynt: SSD1306-Stm32f103c8t6 oled
Gönderen: muhittin_kaplan - 13 Kasım 2016, 17:20:21
dirençlere bakınca doğru seçili gibi görünüyor. 4-3 de direnç var
https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf

da 3wire ve 4wire olarak belirtmiş
Başlık: Ynt: SSD1306-Stm32f103c8t6 oled
Gönderen: skara1214 - 13 Kasım 2016, 19:47:44
Alıntı yapılan: M_B - 13 Kasım 2016, 17:17:21
@muhittin_kaplan  hocam;
4SPI , 3SPI arasında ne fark var.
Birisi chip select bacaklidir diğeri degildir
Başlık: Ynt: SSD1306-Stm32f103c8t6 oled
Gönderen: M_B - 13 Kasım 2016, 19:50:28
Alıntı yapılan: skara1214 - 13 Kasım 2016, 19:47:44
Birisi chip select bacaklidir diğeri degildir
Tesekkurler Hocam;
egitim serinizi takip ediyorum i2c ye gectiginizde elimde olan yukardaki ekranın 4 pinli modeli var (i2c ) onu surecem.
picle ekranımı calıstırmıstım (i2c )
Başlık: Ynt: SSD1306-Stm32f103c8t6 oled
Gönderen: baran123 - 13 Kasım 2016, 19:55:01
4 wire dediği MOSI, MISO, SCLK, CS
3 wire ise MOSI, SCLK, CS dir
IIC ise I^2C :)
D/C burada ekstra bu pin veri/komut olayını belirliyor logic duruma göre.
Ben test ettim çalışıyor. Fakat sizin ekranın arka tarafındaki konfigurasyonu anlayamadım.

Ekleme : Şimdi datashetten baktımda
The 4-wire serial interface consists of serial clock: SCLK, serial data: SDIN, D/C#, CS#
The 3-wire serial interface consists of serial clock SCLK, serial data SDIN and CS#
imiş yani DC de dahil olarak burada 4-Wire SPI seçilmeli.
Başlık: Ynt: SSD1306-Stm32f103c8t6 oled
Gönderen: muhittin_kaplan - 13 Kasım 2016, 20:53:46
stm32f103c8t6 ile yaptığım denemelerde

void Init_OLED(void)
{
   Oled_Command(0xAE);
   Oled_Command(0x81);
   Oled_Command(0xCF);
   Oled_Command(0xA4);
   Oled_Command(0xA6);
   Oled_Command(0x20);
   Oled_Command(0x02);
   Oled_Command(0x00);
   Oled_Command(0x10);
   Oled_Command(0xB0);
   Oled_Command(0x40);
   Oled_Command(0xA1);
   Oled_Command(0xA8);
   Oled_Command(0x3F);
   Oled_Command(0xC8);
   Oled_Command(0xD3);
   Oled_Command(0x00);
   Oled_Command(0xDA);
   Oled_Command(0x12);
   Oled_Command(0xD5);
   Oled_Command(0x80);
   Oled_Command(0xD9);
   Oled_Command(0xF1);
   Oled_Command(0xDB);
   Oled_Command(0x40);
   Oled_Command(0x8D);
   Oled_Command(0x14);
   Oled_Command(0xAF);

   Oled_FillScreen(0x00);
}


olan oled init verilerini gönderdiğini görüyorum.

(http://i.hizliresim.com/d8zWQr.png)

ama bu veriler oled de herhangi birşey yapmıyor. Yeni bir Oled mi sipariş geçsem ;)
Başlık: Ynt: SSD1306-Stm32f103c8t6 oled
Gönderen: skara1214 - 13 Kasım 2016, 21:11:14
Muhittin abi ekranı tam bilmiyorum ama clock normalde high konumlumu ayarlı? Belki ekran normalde low yukselende tetiklemeli spi şekline ayarlıdır?
Başlık: Ynt: SSD1306-Stm32f103c8t6 oled
Gönderen: RaMu - 13 Kasım 2016, 21:14:52
Hocam elinizde pic mcu varsa
önce onunla kütüphane sizin elinizdeki ekranı çalıştırabiliyor mu
test etseniz daha kolay olmaz mı.

Birde hocam oled  init ten önce yarım saniye bekleme ile deneyebilirsiniz.
Başlık: Ynt: SSD1306-Stm32f103c8t6 oled
Gönderen: RaMu - 13 Kasım 2016, 21:22:01
Clock Low dan High a geçerken data biti gönderilmeli,
herhalde önce MSB gönderiliyordu.

..Eskiden mesaj kendiliğinden birleşiyordu şimdi birleşmedi..
Başlık: Ynt: SSD1306-Stm32f103c8t6 oled
Gönderen: muhittin_kaplan - 13 Kasım 2016, 21:37:02
Alıntı yapılan: skara1214 - 13 Kasım 2016, 21:11:14
Muhittin abi ekranı tam bilmiyorum ama clock normalde high konumlumu ayarlı? Belki ekran normalde low yukselende tetiklemeli spi şekline ayarlıdır?


    SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;
    SPI_InitStruct.SPI_CPOL = SPI_CPOL_High;


ile denedim, bu high low aktif durumunu.
Başlık: Ynt: SSD1306-Stm32f103c8t6 oled
Gönderen: baran123 - 13 Kasım 2016, 21:39:16
STM32F4 için şu ayarlar çalışıyor.

SPI_InitStructure.SPI_Direction         = SPI_Direction_Tx;
    SPI_InitStructure.SPI_Mode              = SPI_Mode_Master;
    SPI_InitStructure.SPI_DataSize          = SPI_DataSize_8b;
    SPI_InitStructure.SPI_CPOL              = SPI_CPOL_High;
    SPI_InitStructure.SPI_CPHA              = SPI_CPHA_1Edge;
    SPI_InitStructure.SPI_NSS               = SPI_NSS_Soft;
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
    SPI_InitStructure.SPI_FirstBit          = SPI_FirstBit_MSB;
    SPI_InitStructure.SPI_CRCPolynomial     = 7;
    SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_RXNE, DISABLE);
    SPI_Init(SPI1, &SPI_InitStructure);
    SPI_Cmd(SPI1, ENABLE);
Başlık: Ynt: SSD1306-Stm32f103c8t6 oled
Gönderen: baran123 - 13 Kasım 2016, 21:42:53
Şimdi baktımda SSD1306 için
SPI mode daki iken CLK yükselen kenar diyor.
Enteresan ?
Başlık: Ynt: SSD1306-Stm32f103c8t6 oled
Gönderen: JOKERAS - 13 Kasım 2016, 21:48:50
   
void OledStart (void) {

    OledRes = 1;
    OledDc = 0;
    OledVdd = 0;
 
    DelayMs(1);

    OledCommand(0xAE); // Display off komutu

    OledRes = 0;
    DelayMs(1);
    OledRe = 1;

    OLED_Command(0x8D);
    OLED_Command(0x14);
    OLED_Command(0xD9);
    OLED_Command(0xF1);

    OledVbat = 0;
   

    DelayMs(100);

    OLED_Command(0xA1);
    OLED_Command(0xC8);
    OLED_Command(0xDA);
    OLED_Command(0x20);

    OLED_Command(0xAF); // Display on komutu

    OLED_ClearDisplay();

}


Muhittin usta,bir tarihte uğraşmıştım,Oled Start için şöyle bir yöntem deneyin.
Komut seti SSD1306 için uymaya bilir.
Ama prosedür bu şekildedir sanırım.Bir deneyin.

Başlık: Ynt: SSD1306-Stm32f103c8t6 oled
Gönderen: muhittin_kaplan - 14 Kasım 2016, 02:04:08
Hocam Bahsettiğiniz gibi init ler farklıymış
Allahtan @FxDev  de kullanmış bu oled den, onunda yardımıyla hallettik.

(https://scontent-fra3-1.xx.fbcdn.net/v/t1.0-9/15036269_10154970336452439_188573269887704396_n.jpg?oh=a03a54db2ffc49ba318e412c927fdc24&oe=58D510DE)