avatar_ete

PIC Basic Ders-09 (Eeprom ve Sensör kullanımı)

Başlatan ete, 28 Ağustos 2011, 16:17:03

ete

Bu dersimizde Pic ile birlikte dısarıdan baglı hafıza ünitelerinin kullanılmalarını inceleyecegiz. Ayrıca pic ile birlikte kullanabilecegimiz bazı sensörler 'in haberlesme sistemlerini inceleyecegiz.


Önce Eeprom Kullanımına bir göz atalım. Normal olarak sıklıkla kullandıgımız pic modellerinde flash tipi eeprom bulunmaktadır. Ancak bazen kendi hafızlarının yetmedigi durumlarda pic ile birlikte dısarıdan baglı hafıza üniteleri kullanılır.


Önce pic' in kendi eeprom' u ile nasıl haberlesiyoruz biraz inceleyelim sonra harici eeprom konusuna girecegiz.

Oceanicy

Hocam bir sorum olacak.
eeproma read write komutlarını gayet güzel çalıştırdım fakat yaptıgım devrede 0 dan 999 a kadar SAYI değişkenin içerisindeki rakamları kaydetmem lazım fakat 255 den sonra sıfırlıyor.galiba eprom hafızasından dolayı bu sorunu nasıl aşarım?

Mucit23

Ben söyliyeyim
iki byte halinde kaydetmelisin.

Sayı adında 16 bitlik değişkenimiz olsun.

Kaydetmek için ;
write $0,sayı.lowbyte
write $1,sayı.highbyte

bu şekilde sayı değişkenini düşük ve yüksek 8 bit olmak üzere iki parça halinde kaydedersin.

okumak içinde aşağıdaki komutları kullanmalısın.
read $0,sayı.lowbyte
read $1,sayı.highbyte
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

Mucit cevabı vermiş ben bir iki şey ekleyeyim.
Eeprom hafızası her bir adresi 8bitlik 1 byte kayıt eder. Değişkenin 16 bit ise ve bunu bir eprom hafızasına kayıt edersen yalnızca bir parçası olan 8 bitlik kısmını kayıt eder. Değişkenin 2 x 8 bitlik yani 2 adet byte dan oluştuğuna göre 2 adres kullanarak değişkenin 2 parçasınıda kayıt etmen gerekiyor. Bunuda Mucit in açıkladığı biçimde yapabilirsin.
Ete

Oceanicy

#4
çok saol işe yaradı mucit.
okuma kısmını yapmıştım yazma kısmını sayende hallettim teşekkürler :)

açıklamanız için teşekkür ederim ete hocam:)

Oceanicy

arkadaşlar bir sorum daha olacak.
epromun hafızasında sayı değişkeninin içindeki sayı ilk başda displayda gözükmüyor.displayda sıfır gözüküyor.
sayı=0 portb=0 gibi sıfırlamalarıda kaldırdım ama ilk açılışda displayda 0 gözüküyor sayıyı artırmak için butona bastıgımda hafızadaki rakamı 1 arttırarak displayda gözüküyor.

Mucit23

Epromdan okuma yapmadığın sürece oluşturduğun değişkenin içeriği sıfırdır.
Program açılışında yapman gereken Displayleri açmadan önce veya ilk verini göndermeden önce eepromdan sayı değerini okuyup ilgili değişkene yerleştirmektir. Bunu yaparsan dediğin problemle karşılaşmazsın.

Ama yinede demek istediğin bumu tam olarak anlayamadım. Programı verseydin daha iyi olurdu..
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Oceanicy

#7
'------------- GİRİŞ ÇIKIŞLAR --------------------
PORTA=0 : TRISA=%00000111
PORTB=0 : TRISB=%00000000

'-------------SİGORTALAR--------------------------
@ DEVICE PIC16F628A
@ DEVICE PIC16F628A, WDT_ON
@ DEVICE PIC16F628A, PWRT_OFF
@ DEVICE PIC16F628A, BOD_ON
@ DEVICE PIC16F628A, PROTECT_OFF
@ DEVICE pic16F628A, MCLR_OFF
@ DEVICE PIC16F628A, LVP_OFF
@ DEVICE PIC16F628A, CPD_OFF
@ DEVICE PIC16F628A, INTRC_OSC_NOCLKOUT

'------------- TANIMLAMALAR-------------
DEFINE BUTTON_PAUSE 500
CMCON=7

'-------------DEĞİŞKENLER----------------------------
GECIKME VAR WORD
SAYI VAR WORD
BIRLER VAR  WORD                
BUTONSET VAr PORTA.0
BUTONIL  VAR PORTA.1
BUTONGE  VAR PORTA.2
BUZZER VAR   PORTA.7

IZIN1 VAR PORTA.3
IZIN2 VAR PORTA.6
IZIN3 VAR PORTB.4

'-----------SIFIRLA--------------------------------
GECIKME=0
BUZZER=1
PAUSE 500


'-----------ANA PROGRAM-----------------------------
BASLA:
READ 0,SAYI.Lowbyte      
READ 1,SAYI.Highbyte      
PAUSE 150
IZIN1=1
IZIN2=1
IZIN3=1
BUZZER=0
button  BUTONSET,1,255,250,GECIKME,1,ILK
IF BUTONIL=1 THEN GOSUB ILERISAY
IF BUTONGE=1 THEN GOSUB GERISAY
GOTO BASLA


kodlar bu şekilde okumada yaptırıyorum fakat gene display açılışta sıfır olarak gözüküyor.

isis simülasyonunda stop yapıp tekrar start yaptıgımda 0 değil Sayı değişkenin içerisindeki sayının görünmesini istiyorum.

ete

Programda SAYI değişkeni önceden hafızaya kayıt edilmiyor. Programın hiçbir yerinde kayıt satırı göremedim.
Bu durumda okuyacağın SAYI değeri 65535 olacaktır.
İlk çalıştırmada okunan sayı değerinin 65535 olması ihtimaline karşı sayı için birde default değer tanımlamalısın.
Diyelimki sayı default değeri 100 dür. Bu durumda program şöyle olmalı;
Read 0,SAYI.Byte0
Read 1.SAYI.Byte1
IF SAYI=65535 then SAYI=100

İlk açılışta sistem değişkenleri otomatik sıfırlar. Bu arada sende simulasyonda izleme penceresinde onu sııfr olarak görebilirsin.
Ancak okuma komutundan sonra değeri 65535 olarak görmen gerekir. Tabiiki önceden bir kayıt yapmadı isen.

Ete


Oceanicy

#9
hocam yukardaki kodlar progamın başlangıç kısmı sadece belirtmemişim onu kusura bakmayın. kayıtta sorunum yok en son sayı değişkenin içinde hangi rakamı bıraktıysam onu sayı arttırma butonuna bastıgımda 1 fazlası olacak şekilde görüyorum displayde. ama ilk çalıştırmada sıfır görünüyor ben program ilk çalıştıgında sayı degişkeninin içinde hangi sayı varsa displayda onuun görünmesini istiyorum arttırma butonuna basmadan direk.

ete

O zaman, Okuma komutlarının altına aşağıdaki şekilde biğr satır ilave ediver bakalım ne olacak.
READ 0,SAYI.Lowbyte     
READ 1,SAYI.Highbyte
LCDOUT $fe,$80,"SAYI=",dec SAYI,"       "

Ete

Oceanicy


ete

O zaman 7 segmente nasıl yazdırıyorsan LCD yerine 7 segment'e yazdır. Hepsi bu.

Ete

Oceanicy

valla hocam kafamda sürekli o olay dönüyodu ama bi türlü bulamıyodum yazdığınızı okuyunca dank etti :D yazarak çalışmam lazım galiba benim :)

Hallettim hocam çok saolsun.

zeynal

Merhaba Erol bey.Yine sizin bilginize ihtiyacım var.Yazdığım bu programda 23 adet 74hc595 entegrelerine bilgi göndermem lazım.Fakat hafıza yetmedi.İşlemcinin hafızasını daha verimli nasıl kullana bilirim ve ya programı çok mu düz mantık yazdım?Teşekkürler

Powered by EzPortal