Elektronik Devreler Projeler Elektronik ve biraz daha fazlası İletişim - Araçlar - Dikkat - Topluluk
Elektronik / Mikrodenetleyici Projeleri/

I2C Eeprom kullanarak 128X64 GLCD’ye Resim Basma

Sponsorlu Bağlantılar

Merhaba Arkadaşlar.

Bu aralar Uğraştığım I2C eepromlarlar Resim Basma uygulamamı toparlayıp sizlere sunmak istiyorum.

Aslında I2C eepromlar (24C16, 24C32, 24C64, 24C128) bu işte biraz yavaş kalıyorlar. Gerçekte görüntünün tamamının ekrana basılması tahminimce 300-400 ms Sürüyor. Resim Basılmasını göz görebiliyor. (Yani Birden Ekranda Belirmiyor).

Kullandığım İşlemci PIC18F452, 20Mhz de çalıştırıyorum. İşlemci Frekansını Yükseltmem bi sonuç Vermedi. 32 Ve 40 Mhz de denedim böyle olunca eepromdan okunan Resim Dataları bozulmaya başlıyor. Kısacası Sapıtıyor :D

Eğer PC yazılım dillerinden birini bilseydim Resimleri Bin dosyası olarak kaydedip Direk Pickit2 İle eeproma yükleyebilirdim. Fakat Böyle bir imkanım olmadığı İçin FxDev ‘in de Tavsiyesi ile Bu işi De Pice yaptırdım. :D

Toplamda 28 Tane Resim gösterdim GLCD de Resimleri 3 adet 24C64 ve 1 adette 24C32 ye yazdım. Eeprom Sayısı arttırılarak veya Daha yüksek Hafızalı eepromlar kullanılarak Dahada Fazla resim gösterilebilir. Fakat Eepromları Resim datalarıyla doldurmak için Resimleri 18F452 nin program hafızasına yüklemek gerekiyor. 18F452 ‘nin içine 28 Tane Resim sığdırabildim. Zaten işlemcinin Hafızasının doluluk oranı %99,16 :D Ağzına kadar dolu..

Daha çok Resim istiyorsanız İlk Önce Eepromları programlamak için Daha yüksek Hafızalı Bir pic seçilebilir. Okumak için ise 16F877 bile yeter.

Ben ilk Başta 18F452 ye Eeproma yükleme yazılımını yükleyip, eepromları programlıyordum. Yükleme işlemi bitince 18452 ye okuma yazılımını yükleyip, eepromdan dataları okuyup GLCD ye postalıyordum :D

Yükleme işlemi epeyce sürüyor. Kronometreyle ölçtüğümde yaklaşık 10dk da tüm resimleri yazmış oldu.

Devre şeması aşağıdaki gibidir

pic18f452-glcd-bitmap-128x64

Resime bakarsanız 3 adet 24C64 ve 1 adette 24C32 kullanmışım. Eepromaların A0, A1, A2 Bacaklarını kullanarak Farklı farklı adresledim. Bu sayede tekbir Hattan tüm eepromalara veri yükleyip okuyabildim. Yine Resimlere Bakarsanız Eepromlara ait Yazma ve okuma adreslerini görebilirsiniz.

Yazma işlemi bu şekilde

glcd-data-adres-00-ic2

Buda yazma işleminin bitmiş hali

fastlcd-yazma-islemi-bitti-pic18f452-eeprom

Bunları Gerçekte çekmek isterdim ama fotoğraf makinamın makro özelliği berbat. Yazılar iç içe giriyor.

Resimleri Düzenlemek İçin FastLCD Programını kullandım. Bu program ile resimleri düzenleyip Bitmap olarak kaydediyorum. Sonra Pixelv1.2 programı ile Bu resim dosyalarını .inc dosyası haline getiriyorum. Yazılımda ise bu .inc dosyalarını programa dahil edip yazma sırsı geldiğinde sırasıyla dataları okuyup eeproma yazıyorum.

Eepromları programlamak için hazırladığım yazılım;


Device 18F452

Config_Start
   OSC = HS ; HS osc
   OSCS = OFF ; Disabled
   PWRT = On ; Enabled
   BOR = OFF ; Disabled
   WDT = OFF ; Disabled
   STVR = OFF ; Disabled
   LVP = OFF ; Disabled
   Debug = OFF ; Disabled
Config_End

Xtal 20

TRISA=%00000000
TRISB=%00000000
TRISC=%00000000
TRISD=%00000000
TRISE=%00000000

PORTA=0:PORTB=0
PORTC=0:PORTD=0
    PORTE=0

PORTB.5=1                          'GLCD RESET=1
All_Digital= TRUE                  'ADC PORTLARININ TAMAMI DİJİTAL GİRİŞ VEYA ÇIKIŞ
LCD_DTPort = PORTD                 'GLCD DATA PORTLARI PORTD'YE BAĞLI
LCD_RSPin = PORTB.0                'GLCD RS PİNİ PORTB.0 BAĞLI
LCD_ENPin = PORTB.2                'GLCD ENABLE PİNİ PORTB.2 BAĞLI
LCD_RWPin = PORTB.1                'GLCD RW PİNİ PORTB.1 BAĞLI
LCD_CS1Pin = PORTB.4               'GLCD CS1 PİNİ PORTB.4 BAĞLI
LCD_CS2Pin = PORTB.3               'GLCD CS2 PİNİ PORTB.3 BAĞLI
LCD_Type =  Samsung                'GLCD TİPİ GRAFİK KS0108 128*64B WİNSTAR
Declare Internal_Font = On
Declare Font_Addr = 0
Declare GLCD_STROBE_DELAY = 5
Declare Optimiser_Level 3
;GLCD_EXTERNAL_PRINT = PPRINT

    Declare SCL_Pin	= PORTC.3
    Declare SDA_Pin	= PORTC.4
    Declare Slow_Bus On 
    
    Symbol WRITE_LED=PORTB.7

Dim ADDR     As Word
Dim ADRS     As Word
Dim YPOS     As Byte
Dim XPOS     As Byte
Dim CHAR     As Byte
Dim KONT     As Byte
Dim RESIM      As Byte
Cls
Print At 1,1,"LUTFEN BEKLEYiNiZ"
Print At 2,1,"KAYDEDiliYOR..." 
DelayMS 100
BASLA:WRITE_LED=1
KONT=$A0:RESIM=1
For ADDR = 0 To 1023
  CHAR = CRead RESIM1+ADDR
  ADRS=ADDR:GoSub I2C_YAZ
Next
RESIM=2
For ADDR=0 To 1023
  CHAR = CRead RESIM2+ADDR
  ADRS=1024+ADDR:GoSub I2C_YAZ
Next
RESIM=3
For ADDR = 0 To 1023
  CHAR = CRead RESIM3+ADDR
  ADRS=2048+ADDR:GoSub I2C_YAZ
Next
RESIM=4
For ADDR = 0 To 1023
  CHAR = CRead RESIM4+ADDR
  ADRS=3072+ADDR:GoSub I2C_YAZ
Next
RESIM=5
For ADDR = 0 To 1023
  CHAR = CRead RESIM5+ADDR
  ADRS=4096+ADDR:GoSub I2C_YAZ
Next
RESIM=6
For ADDR = 0 To 1023
  CHAR = CRead RESIM6+ADDR
  ADRS=5120+ADDR:GoSub I2C_YAZ
Next
RESIM=7
For ADDR = 0 To 1023
  CHAR = CRead RESIM7+ADDR
  ADRS=6144+ADDR:GoSub I2C_YAZ
Next
RESIM=8
For ADDR = 0 To 1023
  CHAR = CRead RESIM8+ADDR
  ADRS=7168+ADDR:GoSub I2C_YAZ
Next
KONT=$A2:RESIM=9
For ADDR = 0 To 1023
  CHAR = CRead RESIM9+ADDR
  ADRS=0+ADDR:GoSub I2C_YAZ
Next
RESIM=10
For ADDR = 0 To 1023
  CHAR = CRead RESIM10+ADDR
  ADRS=1024+ADDR:GoSub I2C_YAZ
Next
RESIM=11
For ADDR = 0 To 1023
  CHAR = CRead RESIM11+ADDR
  ADRS=2048+ADDR:GoSub I2C_YAZ
Next
RESIM=12
For ADDR = 0 To 1023
  CHAR = CRead RESIM12+ADDR
  ADRS=3072+ADDR:GoSub I2C_YAZ
Next
RESIM=13
For ADDR = 0 To 1023
  CHAR = CRead RESIM13+ADDR
  ADRS=4096+ADDR:GoSub I2C_YAZ
Next
RESIM=14
For ADDR = 0 To 1023
  CHAR = CRead RESIM14+ADDR
  ADRS=5120+ADDR:GoSub I2C_YAZ
Next
RESIM=15
For ADDR = 0 To 1023
  CHAR = CRead RESIM15+ADDR
  ADRS=6144+ADDR:GoSub I2C_YAZ
Next
RESIM=16
For ADDR = 0 To 1023
  CHAR = CRead RESIM16+ADDR
  ADRS=7168+ADDR:GoSub I2C_YAZ
Next
KONT=$A4:RESIM=17
For ADDR = 0 To 1023
  CHAR = CRead RESIM17+ADDR
  ADRS=0+ADDR:GoSub I2C_YAZ
Next
RESIM=18
For ADDR = 0 To 1023
  CHAR = CRead RESIM18+ADDR
  ADRS=1024+ADDR:GoSub I2C_YAZ
Next
RESIM=19
For ADDR = 0 To 1023
  CHAR = CRead RESIM19+ADDR
  ADRS=2048+ADDR:GoSub I2C_YAZ
Next
RESIM=20
For ADDR = 0 To 1023
  CHAR = CRead RESIM20+ADDR
  ADRS=3072+ADDR:GoSub I2C_YAZ
Next
RESIM=21
For ADDR = 0 To 1023
  CHAR = CRead RESIM21+ADDR
  ADRS=4096+ADDR:GoSub I2C_YAZ
Next
RESIM=22
For ADDR = 0 To 1023
  CHAR = CRead RESIM22+ADDR
  ADRS=5120+ADDR:GoSub I2C_YAZ
Next
RESIM=23
For ADDR = 0 To 1023
  CHAR = CRead RESIM23+ADDR
  ADRS=6144+ADDR:GoSub I2C_YAZ
Next
RESIM=24
For ADDR = 0 To 1023
  CHAR = CRead RESIM24+ADDR
  ADRS=7168+ADDR:GoSub I2C_YAZ
Next
KONT=$A6:RESIM=25
For ADDR = 0 To 1023
  CHAR = CRead RESIM25+ADDR
  ADRS=0+ADDR:GoSub I2C_YAZ
Next
RESIM=26
For ADDR = 0 To 1023
  CHAR = CRead RESIM26+ADDR
  ADRS=1024+ADDR:GoSub I2C_YAZ
Next
RESIM=27
For ADDR = 0 To 1023
  CHAR = CRead RESIM27+ADDR
  ADRS=2048+ADDR:GoSub I2C_YAZ
Next
RESIM=28
For ADDR = 0 To 1023
  CHAR = CRead RESIM28+ADDR
  ADRS=3072+ADDR:GoSub I2C_YAZ
Next
Cls
Print At 3,4,"YAZMA iSLEMi"
Print At 4,3,"TAMAMLANMISTIR.."
WRITE_LED=0
Stop

I2C_YAZ:
Print At 3,1,"DATA $",Hex2 CHAR
Print At 4,1,"ADRES = ",Dec4 ADRS
Print At 5,1,Dec RESIM,". RESIM YAZILIYOR"
Print At 6,1,"DEVICE ADRES = $",Hex2 KONT
BusOut KONT,ADRS,[CHAR]:DelayMS 10
Return

Include "RESIM1.inc"
Include "RESIM2.inc"
Include "RESIM3.inc"
Include "RESIM4.inc"
Include "RESIM5.inc"
Include "RESIM6.inc"
Include "RESIM7.inc"
Include "RESIM8.inc"
Include "RESIM9.inc"
Include "RESIM10.inc"
Include "RESIM11.inc"
Include "RESIM12.inc"
Include "RESIM13.inc"
Include "RESIM14.inc"
Include "RESIM15.inc"
Include "RESIM16.inc"
Include "RESIM17.inc"
Include "RESIM18.inc"
Include "RESIM19.inc"
Include "RESIM20.inc"
Include "RESIM21.inc"
Include "RESIM22.inc"
Include "RESIM23.inc"
Include "RESIM24.inc"
Include "RESIM25.inc"
Include "RESIM26.inc"
Include "RESIM27.inc"
Include "RESIM28.inc"
Include "FONT.inc"
End

Eepromaları okuma işlemi ise benzer bir şekilde oluyor. Her bir eeprom için her bir resmin bir başlangıç adresi vardır. Bir resim 1023 byten tan oluştuğu için okumalar Başlangıc adresi + resim data adresi şeklinde oluyor.

Eeprom okuma programı ise budur.


'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : FERHAT YOL                                        *
'*  Notice  : Copyright (c) 2011 KULUÇKA KONTROL CİHAZI         *
'*          : All Rights Reserved                               *
'*  Date    : 20.11.2011                                        *
'*  Version : 1.0                                               *
'*  Notes   : 4 adet eeprom kullanılmıştır.(3x26C64,1x24C32)    *
'*          : Toplamda 28adet resim ekranda gösteriliyor. Eeprom* 
'           : Sayısı arttırılarak Resim sayısı arttırılabilir.  *
'           : Resimler 4 farklı efektle ekranda gösterilir      *
'****************************************************************
Device 18F452

Config_Start
   OSC = HS ; HS osc
   OSCS = OFF ; Disabled
   PWRT = On ; Enabled
   BOR = OFF ; Disabled
   WDT = OFF ; Disabled
   STVR = OFF ; Disabled
   LVP = OFF ; Disabled
   Debug = OFF ; Disabled
Config_End

Xtal 20

TRISA=%00000000
TRISB=%00000000
TRISC=%00000000
TRISD=%00000000
TRISE=%00000000

PORTA=0:PORTB=0
PORTC=0:PORTD=0
    PORTE=0

PORTB.5=1                          'GLCD RESET=1
All_Digital= TRUE                  'ADC PORTLARININ TAMAMI DİJİTAL GİRİŞ VEYA ÇIKIŞ
LCD_DTPort = PORTD                 'GLCD DATA PORTLARI PORTD'YE BAĞLI
LCD_RSPin = PORTB.0                'GLCD RS PİNİ PORTB.0 BAĞLI
LCD_ENPin = PORTB.2                'GLCD ENABLE PİNİ PORTB.2 BAĞLI
LCD_RWPin = PORTB.1                'GLCD RW PİNİ PORTB.1 BAĞLI
LCD_CS1Pin = PORTB.4               'GLCD CS1 PİNİ PORTB.4 BAĞLI
LCD_CS2Pin = PORTB.3               'GLCD CS2 PİNİ PORTB.3 BAĞLI
LCD_Type =  Samsung                'GLCD TİPİ GRAFİK KS0108 128*64B WİNSTAR
Declare Internal_Font = On
Declare Font_Addr = 0
Declare GLCD_STROBE_DELAY = 5                                                                     
;GLCD_EXTERNAL_PRINT = PPRINT

    Declare SCL_Pin	= PORTC.3
    Declare SDA_Pin	= PORTC.4
    Declare Slow_Bus On 
    Declare Optimiser_Level 2  
    Symbol READ_LED=PORTB.6

Dim ADDR     As Word
Dim ADRS     As Word
Dim YPOS     As Byte
Dim XPOS     As Byte
Dim CHAR     As Byte
Dim KONT     As Byte
Dim X        As Byte

DelayMS 200
Cls
READ_LED=1   ;Okuma yapılıyor.
BASLA:

KONT=$A1     ;1. Eeprom seçildi(24C64)
  For X=0 To 7
    Select Case X
       Case 0
         ADRS=0:GoSub YATAY_D       ;1.Resmin Başlangıc adresi $0000h
       Case 1
         ADRS=1024:GoSub YATAY_T    ;2.Resmin Başlangıc adresi $0400h
       Case 2
         ADRS=2048:GoSub DIKEY_T    ;3.Resmin Başlangıc adresi $0800h
       Case 3
         ADRS=3072:GoSub DIKEY_D    ;4.Resmin Başlangıc adresi $0C00h
       Case 4
         ADRS=4096:GoSub YATAY_T    ;5.Resmin Başlangıc adresi $1000h
       Case 5
         ADRS=5120:GoSub YATAY_D    ;6.Resmin Başlangıc adresi $1400h
       Case 6
         ADRS=6144:GoSub DIKEY_D    ;7.Resmin Başlangıc adresi $1800h
       Case 7
         ADRS=7168:GoSub DIKEY_T    ;8.Resmin Başlangıc adresi $1C00h
    EndSelect
  DelayMS 1800    ;Resım arası bekleme süresi 
  Next
KONT=$A3          ;ikinci eprom seçildi(24C64)
  For X=0 To 7
    Select Case X
       Case 0
         ADRS=0:GoSub DIKEY_D        ;1.Resmin Başlangıc adresi $0000h
       Case 1
         ADRS=1024:GoSub YATAY_T     ;2.Resmin Başlangıc adresi $0400h
       Case 2
         ADRS=2048:GoSub DIKEY_T     ;3.Resmin Başlangıc adresi $0800h
       Case 3
         ADRS=3072:GoSub YATAY_D     ;4.Resmin Başlangıc adresi $0C00h
       Case 4
         ADRS=4096:GoSub YATAY_T     ;5.Resmin Başlangıc adresi $1000h
       Case 5
         ADRS=5120:GoSub DIKEY_D     ;6.Resmin Başlangıc adresi $1400h
       Case 6
         ADRS=6144:GoSub YATAY_D     ;7.Resmin Başlangıc adresi $1800h
       Case 7
         ADRS=7168:GoSub DIKEY_T     ;8.Resmin Başlangıc adresi $1C00h
    EndSelect
  DelayMS 1800    ;Resım arası bekleme süresi
  Next
KONT=$A5          ;3. Eeprom seçildi(24C64)
  For X=0 To 7
    Select Case X
       Case 0
         ADRS=0:GoSub DIKEY_D        ;1.Resmin Başlangıc adresi $0000h
       Case 1
         ADRS=1024:GoSub YATAY_D     ;2.Resmin Başlangıc adresi $0400h
       Case 2
         ADRS=2048:GoSub DIKEY_D     ;3.Resmin Başlangıc adresi $0800h
       Case 3
         ADRS=3072:GoSub YATAY_T     ;4.Resmin Başlangıc adresi $0C00h
       Case 4
         ADRS=4096:GoSub DIKEY_D     ;5.Resmin Başlangıc adresi $1000h
       Case 5
         ADRS=5120:GoSub DIKEY_T     ;6.Resmin Başlangıc adresi $1400h
       Case 6
         ADRS=6144:GoSub YATAY_D     ;7.Resmin Başlangıc adresi $1800h 
       Case 7
         ADRS=7168:GoSub DIKEY_T     ;8.Resmin Başlangıc adresi $1C00h
    EndSelect
  DelayMS 1800    ;Resım arası bekleme süresi
  Next
KONT=$A7          ;4.Eeprom seçildi(24C32)
  For X=0 To 3
    Select Case X
       Case 0
         ADRS=0:GoSub YATAY_T        ;1.Resmin Başlangıc adresi $0000h
       Case 1
         ADRS=1024:GoSub YATAY_D     ;2.Resmin Başlangıc adresi $0400h
       Case 2
         ADRS=2048:GoSub DIKEY_T     ;3.Resmin Başlangıc adresi $0800h
       Case 3
         ADRS=3072:GoSub YATAY_T     ;4.Resmin Başlangıc adresi $0C00h
    EndSelect
  DelayMS 1800    ;Resım arası bekleme süresi
  Next

GoTo BASLA

YATAY_D: ; Yukarıdan aşağıya doğru döşe
       For YPOS = 0 To 7
         For XPOS = 0 To 127
             ADDR = (Ypos*128)+XPOS
             ADDR = ADRS + ADDR
             GoSub I2C_OKU
             LCDWrite YPOS,XPOS,[CHAR]
         Next
       Next
Return

YATAY_T: ; Aşağıdan yukarıya doğru döşe
       For YPOS = 7 To 0 Step - 1
         For XPOS = 0 To 127
             ADDR = (Ypos*128)+XPOS
             ADDR = ADRS + ADDR
             GoSub I2C_OKU
             LCDWrite YPOS,XPOS,[CHAR]
         Next
       Next
Return

DIKEY_D:  ; Soldan Sağa doğru döşe
       For XPOS = 0 To 127
         For YPOS = 0 To 7
           ADDR = (Ypos*128)+XPOS
           ADDR = ADRS + ADDR
           GoSub I2C_OKU
           LCDWrite YPOS,XPOS,[CHAR]
         Next
       Next 
Return

DIKEY_T: ;Sağdan sola doğru Döşe
       For XPOS = 127 To 0 Step - 1 
         For YPOS = 0 To 7
           ADDR = (Ypos*128)+XPOS
           ADDR = ADRS + ADDR
           GoSub I2C_OKU
           LCDWrite YPOS,XPOS,[CHAR]
         Next
       Next 
Return

I2C_OKU:
   CHAR = BusIn KONT,ADDR  ;Eeprom oku
Return

End

Aslında menü uygulamaları için eeprom un yavaş çalışması sorun olabilir ama ben burada bu sorundan faydalandım biraz. Resimleri birkaç efektlerle basıyorum. (Sağdan sola, Soldan sağa, Yukarıdan aşağı gibi). Resim geçişleri bu şekilde oluyor.

Uygulamaya ait test videosu;

Video pekde iyi değil malesef. Artık idare edin :D

Devreyi denediği kit ise Expkits in EX8B2 (http://www.expkits.com/?s=ex8b2.htm) Deney setidir. Bu deney seti üzerinde deniyorum.

Seri birkaç tane eeprom olduğu için eeprom devresini board üzerine kurup deney seti ile header kablosu üzerinden bağlantıyı yaptım.

Artık Bu tip eepromlarla işim bitti Daha yüksek hızlı eepromlar alıp birkaç deneme daha yapacağım :)

Uygulama dosyaları: i2c-eeprom-kullanarak-128×64-glcdye-resim-basma.rar

  • Fatih

    Görüntünün yavaş yüklenmesi sorunu frame-buffer yöntemi ile çözülebiliyor.Ancak PIC içinde programsal multithread yerleştirilmesi gerekli…

  • Ferhat YOL

    Hocam anlayacağım şekilde anlatabilrmisiniz. Demek istediğiniz şey okunana datayı önceden ram’e yerleştirip ram üzerindenmi ekrana basmak?

  • Fatih

    Öncelikle 16f877 RAM’i bu iş için pek elverişli değil.
    Ama 18f serisi yeter gibi duruyor. Sorun işlemci hızı değil RAM miktarı.
    Önce çoklu iş parçacığı (multithread) yöntemi programa entegre edilmil olmalı. Yani bilgisayarlardaki işlem yönetimi sistemi PIC’e uygulanacak.Bunun için farklı makaleler var internette.( PIC Multithreading). Frame-Buffer :
    [ C Dili ] 128×64 bytelık bir dizi oluşturulur.PIC saniyede eş aralıklı 30 kez bu dizinin değerlerini ekrana basar.
    Arada boş kalan sürelerde de PIC, EEPROM dan veriyi okur ve diziyi günceller.Hem okuma konusunda yavaşlama olmaz.Hemde PIC ekran için gereğinden fazla zaman ayırmaz.Yalnız bu anlattıklarım CCS C için geçerli…Basic dilinde nasıl olur bilmiyorum.Ayrıca anlattığım sistem günümüz pc işletim sistemlerinde aynen kullanılıyor.

  • Ferhat YOL

    Hocam şöyle bir durum var fakat. Sadece resim göstermek için hazırlanan bir sistem olsa dediğiniz gibi olabilir. Ama ben bunu bir sisteme gömeceğim. Menü var kısacası. Her menüde bu resimler gösteriliyor. resimler(menüler) arası geçiş butonlarla oluyor. Menüde Resim geçişleri picin program hafızasındayken bu işlem çok hızlı bir şekilde gerçekleşiyor. Resim Ekranda direk beliriyor. Videodaki gibi bir gecikme olmuyor.
    Menüde 7-8 seçenek var ve her seferinde ekrana yeni bir resim basılıyor. Sizin dediğiniz gibi olsa Her seferinde dataları ram’e yükleyip oradan LCD ye basılabilir. Ama zaten eepromdan datalar rame yüklenene kadar bir gecikme yaşanacak. E birde ramden glcd ye basılacak. Bu sefer 2. bir iş olmuş oluyor. Ha eğer menüye girdiğimde tüm resimleri ram’e yükleyebilseydim dediğiniz gibi olurdu. Fakat o kadar rami hiçbir MCU da göremedim olmazda zaten. Onun yerine Paralel bir eeprom alınıp hız sorunu çözülür. Fakat kullandığım mcu da paralel eeproma ayırabileceğim fazla bir I/O yok malesef. Yukarıda Bahsettiğim menülü sistemin birde alt menüleri var tabi. Oradada birçok resim göstermek gerekiyor.Şimdilik daha hızlı ramlerle denemeyi düşünüyorum. 23A256,24C512,25A512 gibi eepromlardan satın aldım sayılır. Gelince Denemelerime devam edeceğim.

    Hocam Sizin saniyede 30 kez dizi değişkeninin değerini ekrana basma işini anlamadım. Resim hareket etmiyor. Dolayısıyla resim dataları sabit. GLCD ye gönderilen datalar (Görüntü) kendi kendine silinmediğine göre neden ard arda glcd deki görüntü yenileniyor. 1 kez basılıp bırakılsa yetmez mi?

    Aslında siz birazda sanırım Rtosdan Bahsediyorsunuz. Tamda aslında Rtos uygulanabilecek bir sistem. Fakat Ne C bilgim var nede teori dışında rtos hakkında bilgim var.

  • Ferhat YOL

    23A256,24C512,25A512 Bu elemanlara eeprom diyecektim. Yanlış anlamayın.

  • Fatih

    İşte dediğim gibi o hızlı çalışan sistemlerde de multithread yöntemi kullanıyor.Ekran yönetimi de framebuffer benzeri kod sistemleri sağlar.Ayrıca eeprom yerine çok daha hızlı ve veri saklamak için daha uygundur.
    Ayrıca evet bahsettiğim RTOS… Dizi olayı da sadece C de var…Bu yüzden C tercihimdir…

  • Fatih

    Ayrıca eeprom yerine “flash” çok daha hızlı ve veri saklamak için daha uygundur.

  • Ferhat YOL

    Hocam C de Rtos ve MutiThread veya mMltiTasking gibi çoklu işlemler sıklıkla kullanılmaya başladı. Ben bu tür bi iş paylaşımını protonada rahatlıkla uyarlayabileceğimi düşünüyorum. Siz yeterki bana aklınızda bu tür GLCD ye resim basmak için nasıl bir sistem yada iş bölümü paylaşımı düşünüyorsunuz. Bana onu söyleyin. İş paylaşımı yapılabilir. Gelen datayı ramde bir bufferede yerleştirebilirim. Fakat iş bölümünü nasıl yapacağım ? Her bir iş parçacığı için gereken süreyi nasıl hesaplayacağım? İş sırasını nasıl belirleyeceğim? Bu tür soruların cevabını arıyorum.
    Gerçekten C hakkında bir bilgim yok ama Yabancı forumlarda protonun kendi sitesinde Rtos hakkında kitap yapılacak düzeyde bilgiler anlatılmış. Doğal olarak hepsi ing. Bana bu tür konularda yardımcı olursanız bu işi rahatlıkla başarabileceğimi düşünüyorum.

    Hocam birde flash hafızalardan bahsetmişsiniz. Bu konu hakkında ayrıntılı bilgi verebilirmisiniz. Ben eeprom yerine ufak hafızalı bir Sd kart düşünmüştüm.

  • Fatih

    E-posta adresini verirsen bu konuyu daha detaylı anlatabilirim.Buradan biraz zor oluyor.

  • Ferhat YOL

    Tabi hocam Buyrun
    ferhatyol-23@hotmail.com

  • gokhan

    buna benzer bir uygulama GLCD yerine ledlerle ekran olusturularak yapılabilir mi ??

  • Ferhat YOL

    Zor birşey değil. 128X64 bir ekran yaptıktan sonra resmi ekrana basmak kolay olur.

  • KAYA

    hocam bununla ilgili daha başka neler yapabilirsiniz

  • Ferhat YOL

    Ne gibi mesela?

  • Emre Koşar

    hocam bu yaptıgınız lcdyi ünide proje olarak aldım hayırlı olsun takılırsam umarım size ulaşabilirim :)

  • Pascal

    Hello,

    I don’t know if you can help me with that but a i have queation about the number of bytes when writing to the i2c 24c…

    Every picture is saved from 0 to 1023 , how do you come on the number 1023 is there a rule for that?

    Best regards Pascal.