LCD parazit etkilenme anlamsız karakterler



LCD'ler çevredeki parazit kaynaklarından ençok etkilenen malzemeler. Parazit etkilerini ortadan kaldırmak için varsa lcd'nin metal kasasını gnd hattına bağlayabilirsiniz.

Aslında metal kasa 1-8 notalarından birbirine bağlı ancak devre gnd hattı ile bir bağlantısı yok. LCD gnd hattı ile bağlantı kurmak için J1 jumperını kısadevre etmek gerekiyor. 

Ayrıca, lcd devresinde c1 c2 olarak belirtilen noktalarda üretimde olması gereken 100nf mevcut değil. c1 yerine smd 100nf, c2 yerine 10nf bağlanabilir. Parazit etkilerini bu önlemler azaltacaktır.

Elinizdeki LCD farklı jumper numaralarına veya farklı metal kasa bağlantı noktalarına sahip olabilir.

Ben kesin çözüm olarak LCD ile işlemci arasında I2C iletişimi yaptım, I2C parazitlere karşı oldukça dayanıklı. LCD I2C iletişiminde PCF8574A veya PCF8574AT kullanılabilir.

Eğer donanımsal açıdan Lcd'nin parazitten etkilenme sorununu çözemediyseniz yazılımsal olarak çözülebilir. Lcd ram'i parazitlerden etkilenebilir. Print 0X01 ile lcd rami ve ekranı silinebilir. Diğer yöntem ise proton basic için bpf değişkeninin kullanımıdır:

Problem Lcd'nin kod koşmaya başladığında bir defa yapılandırılması ve bir daha yapılandırılmaması nedeniyle parazit durumunda lcd devre dışı kalıyor. Kullandığınız idenin yapılandırma kod parçasını kod içinde bir döngüde veya ihtiyaç olduğuında kullanmak Lcddeki anlamsız karakter veya hiç yazı olmaması sorunun çözecektir. Alttaki linkten proton basic için önerilen lcd yapılandırılmasını inceleyebilirsiniz, lcd yapılandıran BPF değişkeni ile yapılmış bir çalışmadır:

https://www.picproje.org/index.php/topic,16619.msg109227.html#msg109227

'Proton Basic
Dim BPF as Byte SYSTEM ' or   Dim BPF As Byte

main:
'your code.....
'..............

Clear BPF.1
Cls : DelayMS 30

goto main

 Eğer Pic Basic Pro idesinde bu sorunu çözmek isterseniz altaki kod işinize yarayacaktır:


 
FLAGS=0  'flags burada sistem değişkenidir tanımlanması gerekmiyor
LCDOUT $FE,1






Picproje.org 

Proton+'da SLEEP ve Enerjisi Kesilen LCD'ye Çözüm! kopyası:

Merhaba Arkadaşlar;

Bir süredir uğrayamıyordum ama bu mesajı yazmayı kendime, dahası sevgili borduma borç bildim. Çünkü aşağıda çözümüyle birlikte bahsedeceğim sorundan muzdarip başkaları da olabilir ve ben kastım onlar kasmasın dedim...

Konu şu:

Pil ile çalışan ve elde taşınan ticari bir projem var. Bu projede 2x16 karakter LCD'de yer alıyor ve bir tür test ölçüm cihazı. Pilden tasarruf edebilmek için cihazda mevcut butonlara en son basıldıktan yaklaşık 1 dk sonra TMR0 interrupt ile PIC'i uyku moduna sokuyorum. PIC üzerinden kontrol edilen bir PNP transistör ile LCD'nin, LCD arka ekran ışığının ve diğer analog kısmın beslemesini kontrol ediyorum. Haliyle PIC uyku moduna girdiğinde tüm bu kısımlar akım çekmesin diye PNP transistörü PIC'i uyutmadan hemen önce kesime sokup bunları enerjisiz bırakıyorum. PIC'i uyandırmak için RB0 change interrupt'u kullanıyorum.

Buraya kadar sorun yok. Her şey tıkır tıkır çalışıyor. PIC uyanıyor. Uyanır uyanmaz, PNP transistörü benim emrim üzerine tekrar tetikleyip, diğer kısımları da tekrar enerjilendiriyor. Ama LCD'miz maalesef dünyadan bi haber ve bakir vaziyette olduğu için (enerjisini kesip verdik boru değil ya bakir işte! :D ) saçma sapan şeyler çıkartıyor ekrana... Kendince haklı tabii ki... İnitialization (yapılandırma) işleminden bi haber. Assemly kullananlar bilir asm ile kod yazarken LCD'ye karakter göndermeden önce bir takım komutlarla LCD yapılandırılır ve sonra asıl print işlemi başlar. Proton bu işi PIC'e ilk enerji verildiğinde bizim verdiğimiz deklarasyonlar doğrultusunda yapıyor ama yapılandırılmanın yenilenmesi için PIC'i resetlemek gerekiyordu. (yani eskiden öyleydi benim için :) )

Çözüme geçmeden önce çözüme yönelik kodu vereyim:

'****************************************************************
'*  Name    : SLEEP&LCD.BAS                                     *
'*  Author  : @alayli                                           *
'*  Notice  : Copyright (c) 2007 XXX Elektronik                 *
'*          : All Rights Reserved                               *
'*  Date    : 25.07.2007                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
ZURNANIN_ZIRT_DEDIGI_1: 'Bu satırın ne anlama geldiği mesajda var...
Device 16F628
XTAL 4
Config XT_OSC , WDT_OFF , PWRTE_ON , BODEN_OFF , LVP_OFF , CP_ALL ,MCLRE_OFF
ZURNANIN_ZIRT_DEDIGI_2: 'Bu satırın ne anlama geldiği mesajda var...
Declare SHOW_SYSTEM_VARIABLES = 1 'SİZİN TANIMLAMADIĞINIZ AMA PROTON+'IN KENDİNE ATADIĞI DEĞİŞKENLERİ
                                 'PROTEUS'DARMENİZİ SAĞLAYAN DEKLARE
LCD_DTPIN = PORTB.4
LCD_RSPIN = PORTB.1
LCD_ENPIN = PORTB.2
LCD_INTERFACE = 4
LCD_LINES = 2
LCD_TYPE = 0
ZURNA_BURADA_ZIRT_DIYEBILIYOR:
PORTB_PULLUPS = 1
ALL_DIGITAL = 1
TRISA = %11111100    
TRISB = %00000001
Dim BPF         As Byte ' ZURNA'NIN ZIRT DEMESİ İÇİN GEREKLİ...
                                ' AÇIKLAMASI MESAJDA VAR.
Dim KESME_SAYAC As Byte
Dim SANIYE      As Byte            
Dim X           As Byte
Symbol BUZZ         = PORTA.0 'BUZZER ÇIKIŞI
Symbol ANALOG_POWER = PORTA.1 'ANALOG KISMIN BESLEMESİ İÇİN KONTROL PİNİ
                             '(pnp TİPİ TRANSİSTÖR SÜRDÜĞÜ FARZEDİLİP 0 (SIFIR) AKTİF)
Symbol ON_OFF       = PORTB.0 'DİJİTAL AÇMA KAPAMA BUTONU
DelayMS 50
ANALOG_POWER = 0 '(PNP TRANSİSTÖRÜN BASE UCU ŞASEYE ÇEKİLDİ VESTEME (lcd beslemesi ve backlight'i dahil) ENERJİ GİTTİ
BASLA:
Clear BPF.1  'ZURNA ASIL BURADA ZIRTYOR... SİHİRLİ SATIR! AÇIKLAMASI MESAJDA VAR.
GoSub EKRAN_TEMIZLE 'YUKARDAKİ KOMUTTAN SONRA ÇOĞUNLUKLA GEREKLİ... AÇIKLAMASI MESAJDA VAR.
GoSub TURKCE 'RKÇE ÖZEL KARAKTER TANIMLAMALARI ALT PROGRAMINI ÇAĞIR
            'BUNU ALT PROGRAM HALİNDE BURADA ÇAĞIRMAZSAN;
            'ENERJİSİ KESİLİP RESETLENEN LCD'NİN TÜRKÇE KARAKTERLERDEN HABERİ OLMAZ VE ZIÇAR...
GoSub REKLAMLAR
SANIYE = 59   '1 DK GERİ SAYIM İÇİN SANİYE DEĞİŞKENİ KURULDU
KESME_SAYAC = 0 'TIMER-0 İNTERRUPT İÇİN KESME SAYACI SIFIRLANDI
On Interrupt GoTo KESME
OPTION_REG=%00000111 '65 ms'DE BİR TMR0 İNTERRUPT YAPILANDIRMASI
INTCON=%10100000  'TMR0 KESMESİ AKTİF EDİLDİ
GoSub EKRAN_TEMIZLE
MAIN:
Print At 1,1,"OTO KAPANMA ",4,6,4,"N"
Print At 2,1,"KALAN ZAMAN:",DEC2 SANIYE,"sn"
If ON_OFF = 0 Then UYU 'UYKU MODUNA GEÇİŞİ İSTER BUTONA BASARAK YAP
If SANIYE = 0 Then UYU 'İSTERSEN DE ZAMANIMINI KULLANZELLİKLELDEN ÇALIŞANHAZLAR İÇİN İDEAL)
GoTo MAIN
 
UYU:
  INTCON   = 0 'TMR0 KESMESİNİ VE DİĞER TÜM KESMELERİ İPTAL ET
  INTCON.4 = 1 'RB0 DONANIM KESMESİNİ AKTİF ET
  INTCON.1 = 0 'RB0 DONANIM KESME BAYRAĞINI SIFIRLA
  GoSub EKRAN_TEMIZLE
  High BUZZ
  Print At 1,2,"D",2,3,2,"K G",2,6," MODU"
  Print At 2,4,"G",2,"LE G",2,"LE!"
  DelayMS 3000
  Low BUZZ
  GoSub EKRAN_TEMIZLE
  PORTB = %00000001 'LCD'YE GİDEN TÜM DATA PİNLERİNİN DURUMU SIFIR YAPILDI Kİ AKIM ÇEKMESİN HIYAR!
  ANALOG_POWER=1 'PIC HARİÇ TÜM SİSTEMİN ENERJİSİ TRANSİSTÖR ÜZERİNDEN KAPANDI...
  Sleep 'İŞLEMCİMİZ MIŞIL MIŞIL UYUYOR MİKROAMPER YETİYOR ŞU AN ONA...
  ANALOG_POWER=0 'BU SATIRA GELİNEBİLDİĞİNERE ON_OFF TUŞUNA BASILIP PIC RB0 CHANGE İNTERRUPT
                 'İLE UYANDIRILMIŞTIR VE DİĞER KISIMIN DA ENERJİSİ TEKRAR SAĞLANIR...
  DelayMS 100    'DİĞER KISMIN BESLEMESİ BİRAZ STABİLLEŞSİN...
  GoTo   BASLA  '(ZURNANIN_ZIRT_DEDIGI1 ETİKETİNE GONDERMEK İSTEDIM AMA NAFİLE...)
 
'===============================================================================  
Disable        
KESME:
      Inc KESME_SAYAC 'kesme sayacı 1 sn = 15(sayac) x 256 (Tmr0) x 256 (bölme)
        If KESME_SAYAC = 15 Then '15 adet kesme olunca 1 sn. süre geçiyor.(983040 us)
          KESME_SAYAC=0 'sayaç sıfırlanıyor
          Dec SANIYE 'saniye degeri bir azaltılıyor
          If SANIYE > 59 Then SANIYE = 59
        EndIf      
INTCON.2=0 'TMR0 Kesme bayragı sıfırlanıyor
Resume        
Enable              
'------------------------------------------------------------------
EKRAN_TEMIZLE:
Cls : DelayMS 30
Return
       
BIBIP:
For X = 0 To 1
High BUZZ : DelayMS 100: Low BUZZ : DelayMS 50
Next
Return        
       
REKLAMLAR:
GoSub EKRAN_TEMIZLE
Print At 1,3,"@alayli' dan"
Print At 2,1,"SLEEP@LCD KIYA",1,"I"
GoSub BIBIP
DelayMS 3000
Return        
TURKCE:
Print $FE,$40,10,14,17,17,17,17,14,$0        
Print $FE,$48,14, 14, 17, 16, 23, 17, 15, 0    'Ğ dataları
Print $FE,$50,$11,$0,$11,$11,$11,$11,$e,$0    'Ü dataları
Print $FE,$58,$0E,$10,$10,$0E,$01,$05,$1E,$04 'Ş dataları
Print $FE,$60,$04,$0E,$04,$04,$04,$04,$0e,$00 'İ dataları
Print $FE,$68,4,4,4,4,21,14,4,0               'lamba dataları
Print $FE,$70,$0E,$11,$10,$10,$10,$15,$0E,$4  'Ç dataları
Print $FE,$78,4,14,21,$4,$4,$4,$4,$0          'ı datal
Return
End


Bu sorunu çözmek için ilk aklıma gelen şey; kodda görebileceğiniz "ZURNANIN_ZIRT_DEDIGI_2:" etiketini oluşturmak ve uyku modundan PB0 change kesmesi ile çıkan PIC'i goto ile bu etikete dallandırmaktı. LCD deklarasyonları bu etiketin altında olduğuna göre LCD yapılanması da yenilenir diye düşündüm. Ama olmadı... Proton+ bunu yemedi... Daha da ileri gidip yüzsüzlük edip "ZURNANIN_ZIRT_DEDIGI_1:" şeklinde bir etiket oluşturdum. Uyanığım ya herşeyin başına yani PIC'in ilk enerjilendiği konuma dallandıracam programı... Proton+ bunu da yemedi. O ancak "ZURNA_BURADA_ZIRT_DIYEBILIYOR:" a kadar geri dönmeme izin veriyor. Aşağıda Proton+'ın oluşturduğu  assembly kodlarda durum görünüyor.

;----------------------------------------------------------
; Code Produced by the PROTON+ Compiler. Version 3.2.5.5
; Copyright Rosetta Technologies/Crownhill Associates
; Written by Les Johnson. February 2007
;----------------------------------------------------------
NOLIST
#include "D:\_PROTON\SLEEP&LCD.PBP"
LIST
KESME_SAYAC = 47
SANIYE = 48
_X = 49
#Define __LCD_DTPORT PORTB
#Define __LCD_RSPORT PORTB
#Define __LCD_ENPORT PORTB
#Define BUZZ PORTA,0
#Define ANALOG_POWER PORTA,1
#Define ON_OFF PORTB,0
F2_SOF equ $ ; SLEEP&LCD.PRP
F2_EOF equ $ ; SLEEP&LCD.PRP
F1_SOF equ $ ; SLEEP&LCD.BAS
ZURNANIN_ZIRT_DEDIGI_1
F1_000014 equ $ ; in [SLEEP&LCD.BAS] Config XT_OSC , WDT_OFF , PWRTE_ON , BODEN_OFF , LVP_OFF , CP_ALL ,MCLRE_OFF
ZURNANIN_ZIRT_DEDIGI_2
ZURNA_BURADA_ZIRT_DIYEBILIYOR
F1_000025 equ $ ; in [SLEEP&LCD.BAS] PORTB_PULLUPS = 1
Bsf STATUS,5
ram_bank = 1
Bcf OPTION_REG,7
F1_000026 equ $ ; in [SLEEP&LCD.BAS] ALL_DIGITAL = 1
Movlw 7
Bcf STATUS,5
ram_bank = 0
Movwf CMCON
.......
...........



*Uyandıktan sonra PIC'i hardware olarak resetlemek bu durumda bir çözümdü ama maalesef projede 16F628 kullanmıştım ve MCLR dahil tüm PIN'ler doluydu. MCLR pinini ve bunu resetleyecek bir başka pini heba etmek zaten normal şartlarda da -RACON-'a tersti. :D

*Uyku moduna geçişten sonra  LCD'nin sadece arka ekran aydınlatmasının enerjisini kesip, 2 nolu VDD pinini PIC gibi sürekli beslemede tutmak çözüm olabilirdi. Ama benim kullandığım LCD bu durumda bile 1-2 mA akım çekiyordu. Bu değer; şebekeden çalışan ve stand-by'a geçirilen bir cihazda 2W'lık avrupa birliği sınır değerini karşılasa da pille çalışan bir cihaz için çok çok fazlaydı. Uyku modunda LCD beslemesini tümden kesmem gerekiyordu.

*İlk başlarda,

LCD_DTPIN = PORTB.4
LCD_RSPIN = PORTB.1
LCD_ENPIN = PORTB.2
LCD_INTERFACE = 4
LCD_LINES = 2
LCD_TYPE = 0



kısmında Proton+'ın derlediği kodları, "BASLA:" etiketinden sonra "LCD_initialization:" etiketli bir alt programla yeniden oluşturup, PIC uyandıktan sonra bunu çağırıp LCD'yi tekrar yapılandırayım dedim ama Proton+'ın derlediği kodlarla benim yazdıklarımın yıldızını barıştıramadım. Edemedim LCD deklarasyonlarını iptal edip LCD'yi tümden asm kontrolüne aldım. Sorun çözülmüştü ama bu sefer de Proton ile kod yazmanın anlamı kalmamıştı... Bu işi Proton+'ın bünyesinde çözmenin bir yolu olmalıydı... Zaten öteden beri Proton+'da herhangi bir sebeple resetlenen LCD'yi yeniden yapılandıramamanın sıkıntısını yaşardım. (Cls komutu LCD resetlemekle aynı şey değil malum. O sadece ekranı temizler... ve ardından initialization gerektirmez... Reset yiyen LCD'yi mutlaka yeniden yapılandırmak gerekir.) Ama özellikle gürültünün (elektriksel gürültü kast ettiğim) çok fazla olduğu sanayi bölgelerinde kullanılan, Proton+ ile yazılmış projelerimde, LCD'nin sapıttığına defalarca şahit oldum ve şu ana kadar bunu hep hardware ile çözmeye çalıştım. Oysa PIC'in reset yemediği bir çok durumda bu namussuz LCD'ler reset yer ve "İnitialization" isterdi hep... :evil:

EVREKA! EVREKA!  :D
Proton+ içinde LCD'yi yeniden yapılandırmanın yolu sadece iki satır koddan geçiyor. Bunu bulmak için Proteus'da sistem değişkenlerini (Proton'un kendine makroları için oluşturduğu değişkenler) görebilmek için gerekli deklarasyonu yazıp adım adım simulasyonda her bir sistem değişkenini bir dedektif gibi takip ettim. Bu yaklaşık 48 saatime maloldu ama değdi... Farkettim ki "BPF" isimli SİSTEM değişkeninin 1 nolu biti her cls ve print komutundan sonra set veya reset ediliyor. Bu değişkeni kendim de mıncıklıyabilmek için önce kodun içine direkt;

clear BPF



gibi bir satır yazmayı denedim ama Proton+ yemedi. Tanımlı böyle bir değişken yok diye hata verdi. Ben de bu değişkeni Dim ile tanımladım. (Açıkçası proton+'dan "bu benim kullandığım bir değişken ismi ve rezerve, git kendine başka isim bul!" şeklinde bir hata mesajı bekliyordum ama bendeki orijinal kayıtlı ve son sürüm sorun çıkarmadı... :D ) Artık PBF değişkenini mıncıklayabiliyordum. Bu PBF değişkeninin değişik bitleri ve bütünüyle bir hayli haşır-neşir oldum. Sonra anladım ki değişkenin bütününü veya 1. biti hariç diğerlerini mıncıklamak bir takım istenmeyen yan etkiler doğurabiliyor. (Mesela kullanıcı tanımlı değişkenlerin desimal ve/veya hex ve/veya bin vb. değerlerini ekrana yazdırırken veya Print komutu içinde aritmetik işlem yaptırırken diğer bitlerin lojik durumu da değişebiliyor. Bunları kurcalarsanız ekrana yazdırılan değerlerde sapmalar olabiliyor.)

Bu değişkenin 1. bitini (dikkat 0. bit değil, sağdan sola 2. bit) resetledikten sonra baktım ki sapıtan (yada deneme amaçlı tarafımdan resetlenip, PIC çalışırken enerjisi kesilip tekrar verilmek suretiyle sapıttırılan) LCD, takip eden ilk Cls komutundan sonra, titreyip kendine geliyor. Tek eksikle: Türkçe karakterler veya özel oluşturulan semboller! Bunun da kolayı vardı. Normal şartlarda programımın Main'inden önce bir yerlerde bir kez yazdığım bu tanımlamaları bir alt program haline getirip tekrardan çağırmak çözüm için yetti. Özetle:

Programınızın değişken tanımlamalarına

Dim BPF         As Byte

satırını da ekleyeceksiniz. Ama bu değişkeni hiçbir şekilde başka amaçlı kullanıp içeriğine müdahale etmeyeceksiniz. Sadece bizi ilgilendiren bitine müdahale için lazım o kadar. Eski ve/veya crackli proton+ sürümleri bu sistem değişkenini sizin tanımlamanıza itiraz edebilir ve "kendine başka değişken ismi bul" diyebilir. O zaman;

Dim BPF as Byte SYSTEM

' i bir deneyin. Büyük ihtimalle sorun çıkartmayacaktır.

Sonra LCD'nin yeniden yapılandırılmasını istediğiniz yerde

Clear BPF.1
Cls : DelayMS 30

yazacaksınız... Cls'yi kullanmak veya zaten Cls kullandığınız kısımların hemen önüne "Clear BPF.1"'i eklemek ve vırt-zırt kullanıp b...kunu çıkartmamak menfaatinizedir.

Son olarak hatırlatmak istediğim bir kaç husus var:

*BPF değişkeninin tümünü "Clear BPF" şeklinde veya diğer bitlerini "Clear Bpf.X" şeklinde mıncıklamayın. Nitekim Proton+ bu değişkeni başka işlerde de kullanıyor ve diğer bitlerin mıncıklanması başka sorunlar çıkarıyor. Ama "BPF.1" de sorun yok. Ben uzun uzun mıncıklayıp değişik LCD'li projelerimde (PIC18fXXX'li, PIC16F87X'li lerde dahil) test ettim başka herhangi bir probleme yol açmıyor...

*Eğer LCD'nin beslemesini benim projemde olduğu gibi bilinçli kesiyorsanız; PIC'i uyutmadan hemen önce LCD data portlarına bağlı 4 veya 8 pini (DB4----DB7 veya DB0----DB7 ye bağlı pinleri) LCD RS ve LCD EN uçlarına bağlı pinleri sıfırlamayı unutmayın. Aksi taktirde lojik 1 de kalan pin veya pinler üzerinden namussuz LCD akım çekmeye devam ediyor. Hatta ekran aydınlatması için tek beyaz led kullanan LCD'lerde ekran arka ışığının hafifçe parıldadığı bile seçilebiliyor. Burada vereceğim Proteus dosyasında yok ama, normalde ben LCD'ye giden her bir data,RS,EN ucuna seri birer direnç atarım. Şebeke gürültülerine büyük faydası olur. Sizin de özgün projenizde bu akım sınırlama dirençleri varsa dahi bu dediğimi yapın. Nitekim bu dirençler üzerinden LCD akım çekmeye devam edecektir ve  pil ile çalışan projelerde bu akım küçümsenmemelidir. Hatta pil ile çalışan projelerde cihazın açık kalmasına müsaade ettiğiniz süre boyunca çektiği akımı azaltıp pilden daha da tasarruf etmek için; arka ekran ışığı beslemesinin önüne duruma göre 47R ile 150R arası seri bir direnç atın. Bu direnç bir çok LCD'nin kendi PCB'sinde SMD olarak vardır ve şebekeden çalışan cihazlarda arka ekran aydınlatmasını direkt 5V'a bağlamak sıkıntı çıkartmaz. Ama pilli projelerde de ihtiyaç kadar aydınlık verecek bir direnç ile sınırlamak büyük fayda sağlar. Çoğunlukla negatif çalışan BLUE LCD'lerde parlak beyaz tek bir led lullanılır ve seri bağlı 8-10 led kullanan yeşil ekranlılardan çok daha az akım çeker bu mavi negatif ekranlar. Mavilerdeki beyaz led direkt 5V'a bağlandığında 20-25 mA civarı akım çekerken, yeşillerde bu akım 150 mA'leri bulabiliyor. Pille çalışan bir sistem için sırf arka ekran aydınlatması için bu akım israf değil midir sizce de?.. Sınırlayın!

*Az sonra aşağıda linkini vereceğim proje kodlarını ve Proteus dizayn dosyasını bilgisayarına indirip çalıştıran ve iki günüme malolan sihirli satırları koddan çıkarıp, tekrar derledikten sonra, SADECE PROTEUS'DA KODUN HALA ÇALIŞTIĞINI GÖRÜP, "İki gün boşuna uğraşmışsın, bu satırlar olmadan da çalışıyor bu kod!" diyen sazanları ŞEFKATLE BAĞRIMA BASAR, protobordda (gerçek hayatta) denemelerini salık veririm. Nitekim proteus, PIC'in ve LCD'nin beslemesini simulasyon sürdüğü müddetçe kesmez. Dizayn dosyasında her ne kadar LCD'nin VDD ucu transistörden enerji alıyormuş gibi çizilse ve devre gerçek hayatta da böyle (hatta LCD'nin simulatörde görünmeyen 15 nolu ekran aydınlatmasının + besleme pini)  yapılandırılacak olsa da, simulasyonda PIC uyku moduna girdiğinde LCD'nin enerjisi kesilmez ve doğal olarak resetlenmez. Resetlenmeyen LCD'de yeniden yapılandırma gerektirmeyeceği için, o satırlar olmadan derlenen kod simulasyonda çalışır ama gerçek hayatta yan yatar.

İşte hepsi bu kadar. Ve işte içersinde;
* TMR0 interrupt ile uyku moduna geçip otomatik kapanma,
* Buton marifetiyle  uyku moduna geçip otomatik kapanma,
* RB0 change kesmesi ile uyanıp, analog kısmı enerjilenen

örnek kodun tüm dosyaları...

http://dc151.4shared.com/download/121660686/5be2fda8/SLEEP_LCD.rar?tsid=20090730-022458-89378891



Saygılar...

Edit: Çalışmayan kırık link düzeltildi...

Yorumlar

Popüler Yayınlar:

grup priz ara kablo yapımı

elektrikli fırın devre bağlantı şeması

dc motor yönü değiştirme devresi

gsm sinyal seviyesi asu dbm nedir

chrome ile programsız video nasıl indirilir

elektronik malzeme komponent karşılık online site