24C128 EPROM YAZMA SORUNU

Başlatan picagor, 03 Nisan 2011, 00:52:36

Ruzgarbey

Alıntı yapılan: picagor - 10 Nisan 2011, 00:45:10
ETE Hocam önceki mesajdaki 1. sorunu gidermek üzereyim sanırım ama şurada takılı kaldım:

       E_YAZ: 
         for ADRS=1 TO 15
                DTA=gelendata(ADRS)           ' bu satırda takılı kaldım
                I2CWRITE DPIN,CPIN,KONT,ADRS,[DTA]
               Pause 5       
         NEXT ADRS 


gelendata1, gelendata2,.... gelendata15 e kadar byte tipinde değişkenim mevcut

3. satırdaki doğru yazım formatı nasıldır? 

DTA=gelendata[ADRS]            ?

DTA=gelendata&"ADRS"         ?

DTA="gelendata";(ADRS)       ?
merhaba. burada kullandığınız gelendata isimsli değişken bir dizi değişkendir.
byte olarak tanımlayın.
gelendata var byte[20] 
şeklinde tanımlama yaparsanız, DTA=gelendata(ADRS)   şeklinde kullanabilirsiniz.
diğer sorularınıza gelirsek,
PBP usarttan tek bir seferde string alamazsınız illaki değişken tanımlamanız gerekiyor.
C de :
unsigned byte mesaj[150];
gets(mesaj);

şeklinde kullanarak istenilen sayıda string veriyi alabiliyoruz. PBP ise durum biraz farklı. programcının nasıl çalışmasını istemesine bağlı oluyor.
yani ister birer birer değişken tanımlayıp alın. isterseniz bir dizi değişken tanımlayıp gelen datayı dizi değişkene indexleyip alın. bu size kalmış :)
150 display sürmek kaskat bir şekilde sorun olacağını sanmıyorum. bu iş için display ve usart haricinde başka bir işlem olmayacaksa 16f628 yeterli. ama elimde 16f877 var diyorsan bu işlemcinin zaten kendisinde 256 bytelik eprom bulunuyor.sana 150 bytelik bir bellek gerekiyorsa harici eeprom yerine picin dahili epromunu kullanmanı tavsiye ederim. kullanması gayet basittir. örnek :
write adres,veri  '  yazma komutu
read adres,degisken  ' okuma komutu.

saat baya geç olmuş.inşallah yarın sorularına cevap vermeye devam ederim.saygılarımla..
Hayatta En Hakiki Mürşid İlimdir. M.K. ATATÜRK

picagor

#16
Merhabalar rüzgarbey arkadaşım. Devreyi biraz daha geliştirdim 225 display için yapıyorum ve sona yaklaştım. 50 display için sorunsuz çalıştırdım. usart kesmesinden verileri alıyorum , eproma yazma okutmada hiç bi sorun yok fakat tek sorunum var:

VB den tek seferde gelen 225 byte lık string dizisini PBP de atayacağım "  gelendata byte[225] " dizisi sorun çıkarıyor. Maximum 96 byte lık dizi tanımlamama izin veriyor. Hi tech C den anlamam. Bu aşamaya kadar gelmişken dil değiştirmek büyük sorun olur benim için. Nasıl bir yol bulmalıyız? Datayı HSERIN komutuyla seri porttan çektirip eproma yazıyorum..

Ruzgarbey

tekrar merhaba arkadaşım. kullanmış olduğun picin değişken hafızası yetmediği için sorun çıkartıyor olabilir bundan emin değilim. aslında bir dizi değişkene veyahutta harici bir eeproma ihtiyacın yok 225 byte veri için.ben senin yerinde olsam 16877 nin dahili epromunu kullanırım ama illaki harici kullanacağım diyorsan şu  şekilde bir yol izlemelisin.
gelendata var byte
epromadres var word
kontrol var bit

clear
basla:


goto basla

kesme:
heserin[gelendata]
if gelendata=1 then kontrol=1   'preamble verisi alınıyor

if kontrol=1 then
I2CWRITE DPIN,CPIN,KONT,epromadres,[gelendata]
epromadres=epromadres+1
endif

if gelendata=1 then epromadres=0 ' preamble olduğu için adres değerini tekrar sıfırlıyoruz.

if gelendata=2 then  'bitirme verisi alınıyor ve değişkenler sıfırlanıyor.
epromadres=0
kontrol=0
endif

yukarıdaki kodda pc den önce 1 verisi gönderiliyor. 1 verisini alan pic kontrol değişkenini set ediyor ve 1 verisinden sonra gelen verileri eeproma yazıyor. veri gönderim işlemi bittiği zaman pc den 2 değeri gönderilerek pice gönderilecek datanın bittiğini ve set edilen değişkenleri kapatmasını söylüyoruz.  burada 1 verisi yerine kendine göre bir veride kullanabilirsin. önemli olan preamble verisi kullanarak picin kontrol değişkenini set etmesi.
umarım işine yarar. saygılarımla..
Hayatta En Hakiki Mürşid İlimdir. M.K. ATATÜRK

picagor

#18
PROJEMİN EN SON HALİ:

http://www.youtube.com/watch?v=dhwEW2VJMEU

Rüzgarbey ve ETE hocalarım değerli cevaplarınız için çok teşekkürler. AR-GE işi böyle oluyo demekki.. Panom 1 modül için bitti. Her modülde 5 display, toplam 45 modül yani 225 display olacak. Şimdi 44 tane daha modül yapacağım. Denemeyi 10mm lik ortak katot displayde yaptım 1 modül 300 mA akım çekti. 38 mm displayde 74595ler ile 7 segment ler arasına koyacağım direnç değerini nasıl seçmeliyim?

Her segment için 100 ohm 1/4 wattlık bi değermi kullansam yoksa 5 displayin katotlarını birleştirip, şaseyle ortak katot arasına 100 ohm 5 watt gibi tek bi dirençmi koysam.?  Buna göre direnç siparişi vereceğim..

45 tane 5V gerilimle çalışan ve her biri en az 500-600 mA (38mm display için) çeken devreyi beslemek için ne önerirsiniz? Led tabelacıların kullandığı switch mode lar işimi görürmü acaba?


picagor

#19
Projenin bitmiş :



Teşekkürler ETE , Rüzgarbey..