avatar_ete

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

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

ete

Neden epromu bir hafıza gibi kullanıyorsun analamadım.
Bu olay anlık yaşanacak bir olaydır. O bilgiye sistem çalışırken ihtiyacın var. O halde bir değişkenle iş halledilebilir.
Eproma gerek yok orada.
Bunuda mevcut programa işledim. Oradan bakarsın.

Ete

yusuf.ozyer

Sağ olun hocam verdiginiz bilgilere gore sensoru coaltacam tesekkur ederim onu yapmak icin aklima  hic bir sey gelmedi verdiginiz derslerin arasinda eepromu gorunce aklima geldi

enginkanat

Arkadaşlar kolay gelsin, I2C 2way iletişim kullanan 2 nesneyi bir işlemcide kullanabilirmiyiz? Forum konularından birisinde zamanında görmüştüm ancak bulamadım deneyimli bir hocamız kullanılır hatta aynı veri yolu üzerinde bağlı olurlar demişti. DS1307 ve 24C serisinden harici EEPROM kullanmak istiyorum  bu işlemi nasıl gerçekleştirebilirim?

ete

Kullanırsın elbette. aynı data ylunabağlı olan bu iki elemanın Cihaz numaraları farklıdır. Dolayısıyla kullanımda sadce cihaz numaralarını kullanarak her ikisi ilede haberleşebilirsin. Tabiiki adres farklılıkları olabilir. DS1307 8 bitlik adres kullanır. Ama kullanacağın harici eprom 16 bitlik adres isteyebilir (kapasiteye bağlı olarak) bu nedenle komutuda ona göre yazman gerekiyor.

Ete

enginkanat

hocam bu programı oluşturmaya başladığımda bana bu adreslemeler ile ilgili yardımcı olursanız sevinirim. Büyük ihtimal pazar sabahı başlarım

enginkanat

#35
herkese iyi bir hafta sonu diliyorum,
çalıştığım iş yeri için 7 gün ve her gün için 24 farklı zil saati ile çalışan bir program yazmak istiyorum. günleri ve zilleri android üzerinden bluetooth ile devrede kullanacağım I2C haberleşme yapabilen 24C serisi bir E²PROM'a kaydetmeyi amaçlıyorum.
    Android cihazda oluşturulan veriler bluetooth aracılığı ile gönderilmeye başlandığında kesmeye gidecek buraya kadar her şey tamam ancak gelen verileri ben karışıklık olmadan E²PROM'a nasıl aktarabilirim 7x24 WORD bilgi gelecek yada saat dakika ayırır isem 7x48 BYTE gelecek. Algoritmayı oluşturamıyorum. işlemci olarak 16F628A kullanmayı planlıyorum.
   Bana algoritma olarak yardımcı olurmusunuz?








ete

I2C haberleşmesini çok iyi bilmediğini düşünüyorum. Bilsen adresleme için yardım istemezdin. Sana lazım olanı açıkladım zaten. Daha ne söyleyebilirimki. Biraz komut incele sonra kullanacağın elemanları incele onların Device adreslerini tespit et sonra anlarsın ne demek istediğimi.

Ete

enginkanat

hocam ben komutları inceledim ve iyi kötü anladım, program oluşmaya başladığında zaten paylaşacağım ve yine bir sürü hata yapmış olacağım.
benim oluşturamadığım mantık 336 adet byte tipi veriyi nasıl göndereyim ve nasıl alayım şeklinde
mesela ;

gonder:
eeprom_adres=eeprom_adres+1
HSEROUT [eeprom_adres, VERI]

..
şeklinde gönderip

HSERIN[eeprom_adres,GELEN_VERI}
I2CWRITE DPIN,CPIN,%10100000,eeprom_adres,[GELEN_VERI]

gibi almaya kalksam olurmu?

yada VERI VAR BYTE[336] şeklinde dizin oluşturabilirmiyim, gerçi  işlemci RAM'inin bunu karşılamadığını biliyorum buda olmaz



ete

Bluetooth ile yolladığın bilgiyi direk eproma yazamayacağına göre arada bir pic kullanacaksın demektir.
Pic ile android bluetooth ile haberleşir. Burada önemli olan haberleşme formatıdır. Gelen bilgi epromda sıralı yerleştirilecekse işin zor değil. Ama çok iyi bir protokol oluşturman gerekir. Özellikle ne zaman Eproma yazacağını program bilmelidir. Her bilgi geldiğinde gidip yazmaya kalkışır ise sorun çıkar. Bu nedenle bilgininbaşını ve sonunu belirlemekte yarar var bence.
Örnek veriyorum.
Hserout (yada hserin) [başlangıç adresi, bitiş adresi , sonra adres sayısı kadar byte]
Ancak belkide buna gerek olmadan bluetooth 50 şer yada yüzer tane byte bilgisini peş peşe yollayabilir.
Bu verileri alırken şöyle bir kolaylık var,
HSERIN [STR VERI\50\255] bu komut seri portdan gelen 50 adet datayı  VERI isimli dizi değişkenine yerleştirir. Gelen dizi de 255 karekteri ile son bulmalıdır. Bu \255 isteğe bağlıdır gerekirse kullanılmayabilir. Zira zaten 50 adet ver alacağını söylemişsin ama 50 değilde 38 adet veri gelecek ise o zaman alma işi 255'i görünce sonlandırılabilir bu açıdan da faydası var.
Bu gelen verileri Eproma yazarken de şöyle bir kolaylık var;

I2CWRITE PORTC.4,PORTC.3,$a0,0,[STR VERI\50] şeklinde tek komut ile seri portdan gelmiş 50 adet veriyi yazdırabilirsin.
Burada adres artırımı işlemci tarafından otomatik yapılır.

Kolaylıklardan yararlanmak gerekir.

Ete


erdtur

Merhaba,
Pic'e program yüklerken, eeproma da istediğimiz değeri nasıl yükleyebiliriz?

erdtur

ete

DATA @Adres,veriveri,veri,veri
Örnek,
DATA @0,$10,$10,$10  (sıfır nolu adresten iitibaren 0-1-2 nolu adreslere $10 verisi yazılmış oldu.)

Bir başka şekilde yapmak da mümkün;
EEPROM 5,[10,20,30] şeklinde kullanılır ise 5 nolu adrese 10, 6 nolu adrese 20 ve 7 nolu adrese 30   bilgisi yüklenmiş olur.

Ete

erdtur


barbarosbaki

#42
Merhaba ETE hocam
co2 ölçmek için MH-Z16 sensör kullanıyorum
pic basic ile okutamıyorum .

serin ve serout komutları ile 8 mhz kristalli devrede  9600 baud iletişim kurmam gerekiyor .
Alt program  şu şekilde :

co2:
        AL0=0
        AL1=0
        AL2=0
        AL3=0
        AL4=0
        AL5=0
        AL6=0
        AL7=0
        AL8=0
                                   
        SEROUT2   PORTA.0,84,[$FF,$1,$86,$0,$0,$0,$0,$0,$79]  ' datasheet de belirtilen seri okuma komutu
        serin     PORTA.1,84,2000,SENSORC,[$FF],AL0,AL1,al2,al3,AL4,al5,al6,al7,al8
        CO22=(AL2*256)+al3
        RETURN
SENSORC:
         LCDOUT $FE,$C0,"OLCEMEDI"  '1234567890123456   
         GOTO BASLA


Ölçüm alamadım .
Nerede yanlış yapıyor olabilirim ?  Yardımcı olabilir misiniz ? 


ete

Serout2 ile komut gönderip Serin ile bilgi almaya çalışmışsın üstelik serin2 parametresi kullanarak. Yanlışın burada.
Serin komutunu Serin2 ile değiştir öyle dene.

Ete

barbarosbaki

Teşekkürler hocam .
serin2 komutuyla yazdım
Düzenli veri alamıyorum . Acaba Tek tek  LOOKUP ile göndermem mi gerekiyor. 
ekli dosya ile sensörün datasheet ini gönderdim .
Selamlar


co2:
        CO22=0
        AL0=0
        AL1=0
        AL2=0
        AL3=0
        AL4=0
        AL5=0
        AL6=0
        AL7=0
        AL8=0
       
       
                                   
       SEROUT2   PORTA.0\PORTA.1,84,[$FF,$1,$86,$0,$0,$0,$0,$0,$79]
           
       serin2    PORTA.1\PORTA.0,84,3000,SENSORC,[AL0,AL1,al2,al3,AL4,al5,al6,al7,al8]
        CO22=(AL2*256)+al3             
        RETURN
SENSORC:
         LCDOUT $FE,$C0,"OLCEMEDI"  '1234567890123456   
         GOTO BASLA   
        END 

Powered by EzPortal